blume 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cli/index.js +2755 -2564
  2. package/dist/cli/index.js.map +33 -31
  3. package/dist/types/core/package-json.d.ts +12 -0
  4. package/dist/types/migrate/shared.d.ts +153 -0
  5. package/docs/advanced/migrate.mdx +1 -0
  6. package/docs/configuration/ai.mdx +1 -1
  7. package/docs/configuration/theming.mdx +1 -1
  8. package/docs/content/i18n.mdx +1 -1
  9. package/docs/content/sources.mdx +1 -1
  10. package/package.json +1 -1
  11. package/src/ai/mcp/discovery.ts +3 -1
  12. package/src/ai/mcp/server.ts +3 -1
  13. package/src/astro/component-slots.ts +10 -2
  14. package/src/astro/static-assets.ts +10 -3
  15. package/src/astro/templates.ts +53 -21
  16. package/src/cli/coalesce.ts +43 -0
  17. package/src/cli/commands/dev.ts +31 -17
  18. package/src/cli/dev-lock.ts +4 -2
  19. package/src/components/content/ColorItem.astro +6 -3
  20. package/src/components/content/Prompt.astro +7 -3
  21. package/src/components/content/Tabs.astro +13 -2
  22. package/src/components/content/mermaid-element.ts +20 -2
  23. package/src/components/islands/ask-ai.tsx +4 -8
  24. package/src/components/islands/base-path.ts +30 -0
  25. package/src/components/islands/hooks.ts +12 -8
  26. package/src/components/layout/PageActions.astro +17 -11
  27. package/src/components/layout/Search.astro +4 -1
  28. package/src/components/layout/search/types.ts +16 -5
  29. package/src/components/openapi/ParametersTable.astro +1 -1
  30. package/src/components/openapi/SchemaProperty.astro +1 -1
  31. package/src/components/openapi/SchemaTable.astro +3 -3
  32. package/src/components/openapi/helpers.ts +17 -8
  33. package/src/components/openapi/snippets.ts +17 -4
  34. package/src/core/config.ts +15 -6
  35. package/src/core/graph.ts +6 -1
  36. package/src/core/navigation.ts +5 -1
  37. package/src/core/sources/filesystem.ts +19 -1
  38. package/src/core/sources/mdx-remote.ts +20 -4
  39. package/src/core/sources/mintlify.ts +14 -28
  40. package/src/core/sources/normalize.ts +28 -6
  41. package/src/core/sources/watch.ts +44 -0
  42. package/src/markdown/code-title.ts +6 -3
  43. package/src/markdown/package-install.ts +3 -1
  44. package/src/migrate/fumadocs/content.ts +3 -5
  45. package/src/migrate/fumadocs/index.ts +24 -9
  46. package/src/migrate/mintlify/config.ts +2 -6
  47. package/src/migrate/mintlify/index.ts +119 -32
  48. package/src/migrate/mintlify/snippets.ts +17 -8
  49. package/src/migrate/nextra/index.ts +16 -1
  50. package/src/migrate/shared.ts +77 -4
  51. package/src/migrate/starlight/content.ts +3 -6
  52. package/src/og/card.ts +16 -4
  53. package/src/openapi/render-mdx.ts +10 -1
  54. package/src/search/sync/orama-cloud.ts +2 -0
  55. package/src/search/sync/typesense.ts +4 -0
  56. package/src/theme/icons.ts +13 -4
  57. package/src/theme/palette.ts +38 -17
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/cli/index.ts", "../src/core/version.ts", "../src/core/package-root.ts", "../src/cli/commands/add.ts", "../src/registry/registry.ts", "../src/registry/rewrite-imports.ts", "../src/cli/log.ts", "../src/core/diagnostics.ts", "../src/cli/commands/build.ts", "../src/core/frontmatter.ts", "../src/core/sources/read.ts", "../src/ai/llms.ts", "../src/core/gitignore.ts", "../src/search/providers.ts", "../src/core/server-features.ts", "../src/deploy/redirects.ts", "../src/deploy/robots.ts", "../src/deploy/xml.ts", "../src/deploy/sitemap.ts", "../src/search/build.ts", "../src/core/ui-packs/ar.ts", "../src/core/ui-packs/bg.ts", "../src/core/ui-packs/bn.ts", "../src/core/ui-packs/ca.ts", "../src/core/ui-packs/cs.ts", "../src/core/ui-packs/da.ts", "../src/core/ui-packs/de.ts", "../src/core/ui-packs/el.ts", "../src/core/ui-packs/es.ts", "../src/core/ui-packs/fa.ts", "../src/core/ui-packs/fi.ts", "../src/core/ui-packs/fr.ts", "../src/core/ui-packs/he.ts", "../src/core/ui-packs/hi.ts", "../src/core/ui-packs/hr.ts", "../src/core/ui-packs/hu.ts", "../src/core/ui-packs/id.ts", "../src/core/ui-packs/it.ts", "../src/core/ui-packs/ja.ts", "../src/core/ui-packs/ko.ts", "../src/core/ui-packs/nl.ts", "../src/core/ui-packs/no.ts", "../src/core/ui-packs/pl.ts", "../src/core/ui-packs/pt-br.ts", "../src/core/ui-packs/pt.ts", "../src/core/ui-packs/ro.ts", "../src/core/ui-packs/ru.ts", "../src/core/ui-packs/sk.ts", "../src/core/ui-packs/sr.ts", "../src/core/ui-packs/sv.ts", "../src/core/ui-packs/th.ts", "../src/core/ui-packs/tr.ts", "../src/core/ui-packs/uk.ts", "../src/core/ui-packs/vi.ts", "../src/core/ui-packs/zh-tw.ts", "../src/core/ui-packs/zh.ts", "../src/core/ui-packs/index.ts", "../src/core/i18n.ts", "../src/core/manifest.ts", "../src/search/documents.ts", "../src/search/sync/algolia.ts", "../src/search/sync/orama-cloud.ts", "../src/search/sync/typesense.ts", "../src/search/sync/index.ts", "../src/cli/dev-lock.ts", "../src/core/project.ts", "../src/astro/generate.ts", "../src/ai/ask-data.ts", "../src/ai/ask.ts", "../src/ai/markdown.ts", "../src/ai/mcp/data.ts", "../src/ai/mcp/tools.ts", "../src/ai/mcp/discovery.ts", "../src/core/builtin-tags.ts", "../src/core/component-diagnostics.ts", "../src/core/component-overrides.ts", "../src/core/i18n-ui.ts", "../src/theme/icons.ts", "../src/core/nav-diagnostics.ts", "../src/core/tsconfig-aliases.ts", "../src/deploy/rss.ts", "../src/openapi/references.ts", "../src/openapi/scalar.ts", "../src/astro/templates.ts", "../src/core/assets.ts", "../src/theme/fonts.ts", "../src/theme/palette.ts", "../src/core/sources/cache.ts", "../src/openapi/model.ts", "../src/openapi/parse.ts", "../src/openapi/render-mdx.ts", "../src/openapi/source.ts", "../src/theme/entry.ts", "../src/theme/twoslash.ts", "../src/astro/component-slots.ts", "../src/astro/examples.ts", "../src/astro/islands.ts", "../src/astro/pages.ts", "../src/core/config.ts", "../src/core/bridge.ts", "../src/migrate/mintlify/assets.ts", "../src/migrate/mintlify/config.ts", "../src/migrate/mintlify/i18n.ts", "../src/core/deployment-env.ts", "../src/core/load-module.ts", "../src/core/schema.ts", "../src/core/navigation.ts", "../src/core/graph.ts", "../src/core/last-modified.ts", "../src/core/meta.ts", "../src/core/sources/normalize.ts", "../src/core/sources/resolve.ts", "../src/core/sources/filesystem.ts", "../src/core/sources/github-releases.ts", "../src/core/sources/mdx-remote.ts", "../src/core/sources/mintlify.ts", "../src/migrate/shared.ts", "../src/core/package-json.ts", "../src/migrate/mintlify/content.ts", "../src/migrate/mintlify/frontmatter.ts", "../src/migrate/mintlify/icons.ts", "../src/migrate/mintlify/snippets.ts", "../src/migrate/mintlify/transform.ts", "../src/core/sources/notion.ts", "../src/core/sources/assets.ts", "../src/core/sources/sanity.ts", "../src/core/sources/portable-text.ts", "../src/core/project-graph.ts", "../src/cli/env.ts", "../src/cli/internal-error.ts", "../src/cli/required-secrets.ts", "../src/cli/prepare.ts", "../src/cli/commands/check.ts", "../src/cli/commands/dev.ts", "../src/astro/static-assets.ts", "../src/astro/integration.ts", "../src/cli/args.ts", "../src/cli/commands/doctor.ts", "../src/cli/commands/eject.ts", "../src/registry/eject.ts", "../src/cli/commands/init.ts", "../src/cli/commands/migrate.ts", "../src/migrate/fumadocs/index.ts", "../src/migrate/fumadocs/config.ts", "../src/migrate/fumadocs/content.ts", "../src/migrate/fumadocs/frontmatter.ts", "../src/migrate/fumadocs/groups.ts", "../src/migrate/fumadocs/meta.ts", "../src/migrate/mintlify/index.ts", "../src/migrate/nextra/index.ts", "../src/migrate/nextra/content.ts", "../src/migrate/nextra/frontmatter.ts", "../src/migrate/nextra/meta.ts", "../src/migrate/starlight/index.ts", "../src/migrate/starlight/config.ts", "../src/migrate/starlight/content.ts", "../src/migrate/starlight/frontmatter.ts", "../src/migrate/starlight/i18n.ts", "../src/migrate/migrate.ts", "../src/cli/commands/preview.ts", "../src/cli/commands/sync.ts", "../src/cli/commands/validate.ts", "../src/core/links.ts"],
3
+ "sources": ["../src/cli/index.ts", "../src/core/version.ts", "../src/core/package-root.ts", "../src/cli/commands/add.ts", "../src/registry/registry.ts", "../src/registry/rewrite-imports.ts", "../src/cli/log.ts", "../src/core/diagnostics.ts", "../src/cli/commands/build.ts", "../src/core/frontmatter.ts", "../src/core/sources/read.ts", "../src/ai/llms.ts", "../src/core/gitignore.ts", "../src/search/providers.ts", "../src/core/server-features.ts", "../src/deploy/redirects.ts", "../src/deploy/robots.ts", "../src/deploy/xml.ts", "../src/deploy/sitemap.ts", "../src/search/build.ts", "../src/core/ui-packs/ar.ts", "../src/core/ui-packs/bg.ts", "../src/core/ui-packs/bn.ts", "../src/core/ui-packs/ca.ts", "../src/core/ui-packs/cs.ts", "../src/core/ui-packs/da.ts", "../src/core/ui-packs/de.ts", "../src/core/ui-packs/el.ts", "../src/core/ui-packs/es.ts", "../src/core/ui-packs/fa.ts", "../src/core/ui-packs/fi.ts", "../src/core/ui-packs/fr.ts", "../src/core/ui-packs/he.ts", "../src/core/ui-packs/hi.ts", "../src/core/ui-packs/hr.ts", "../src/core/ui-packs/hu.ts", "../src/core/ui-packs/id.ts", "../src/core/ui-packs/it.ts", "../src/core/ui-packs/ja.ts", "../src/core/ui-packs/ko.ts", "../src/core/ui-packs/nl.ts", "../src/core/ui-packs/no.ts", "../src/core/ui-packs/pl.ts", "../src/core/ui-packs/pt-br.ts", "../src/core/ui-packs/pt.ts", "../src/core/ui-packs/ro.ts", "../src/core/ui-packs/ru.ts", "../src/core/ui-packs/sk.ts", "../src/core/ui-packs/sr.ts", "../src/core/ui-packs/sv.ts", "../src/core/ui-packs/th.ts", "../src/core/ui-packs/tr.ts", "../src/core/ui-packs/uk.ts", "../src/core/ui-packs/vi.ts", "../src/core/ui-packs/zh-tw.ts", "../src/core/ui-packs/zh.ts", "../src/core/ui-packs/index.ts", "../src/core/i18n.ts", "../src/core/manifest.ts", "../src/search/documents.ts", "../src/search/sync/algolia.ts", "../src/search/sync/orama-cloud.ts", "../src/search/sync/typesense.ts", "../src/search/sync/index.ts", "../src/cli/dev-lock.ts", "../src/core/project.ts", "../src/astro/generate.ts", "../src/ai/ask-data.ts", "../src/ai/ask.ts", "../src/ai/markdown.ts", "../src/ai/mcp/data.ts", "../src/ai/mcp/tools.ts", "../src/ai/mcp/discovery.ts", "../src/core/builtin-tags.ts", "../src/core/component-diagnostics.ts", "../src/core/component-overrides.ts", "../src/core/i18n-ui.ts", "../src/theme/icons.ts", "../src/core/nav-diagnostics.ts", "../src/core/tsconfig-aliases.ts", "../src/deploy/rss.ts", "../src/openapi/references.ts", "../src/openapi/scalar.ts", "../src/astro/templates.ts", "../src/core/assets.ts", "../src/theme/fonts.ts", "../src/theme/palette.ts", "../src/core/sources/cache.ts", "../src/openapi/model.ts", "../src/openapi/parse.ts", "../src/openapi/render-mdx.ts", "../src/openapi/source.ts", "../src/theme/entry.ts", "../src/theme/twoslash.ts", "../src/astro/component-slots.ts", "../src/astro/examples.ts", "../src/astro/islands.ts", "../src/astro/pages.ts", "../src/core/config.ts", "../src/core/bridge.ts", "../src/migrate/mintlify/assets.ts", "../src/migrate/mintlify/config.ts", "../src/migrate/shared.ts", "../src/core/package-json.ts", "../src/core/schema.ts", "../src/migrate/mintlify/i18n.ts", "../src/core/deployment-env.ts", "../src/core/load-module.ts", "../src/core/navigation.ts", "../src/core/graph.ts", "../src/core/last-modified.ts", "../src/core/meta.ts", "../src/core/sources/normalize.ts", "../src/core/sources/resolve.ts", "../src/core/sources/filesystem.ts", "../src/core/sources/watch.ts", "../src/core/sources/github-releases.ts", "../src/core/sources/mdx-remote.ts", "../src/core/sources/mintlify.ts", "../src/migrate/mintlify/content.ts", "../src/migrate/mintlify/frontmatter.ts", "../src/migrate/mintlify/icons.ts", "../src/migrate/mintlify/snippets.ts", "../src/migrate/mintlify/transform.ts", "../src/core/sources/notion.ts", "../src/core/sources/assets.ts", "../src/core/sources/sanity.ts", "../src/core/sources/portable-text.ts", "../src/core/project-graph.ts", "../src/cli/env.ts", "../src/cli/internal-error.ts", "../src/cli/required-secrets.ts", "../src/cli/prepare.ts", "../src/cli/commands/check.ts", "../src/cli/commands/dev.ts", "../src/astro/static-assets.ts", "../src/astro/integration.ts", "../src/cli/args.ts", "../src/cli/coalesce.ts", "../src/cli/commands/doctor.ts", "../src/cli/commands/eject.ts", "../src/registry/eject.ts", "../src/cli/commands/init.ts", "../src/cli/commands/migrate.ts", "../src/migrate/fumadocs/index.ts", "../src/migrate/fumadocs/config.ts", "../src/migrate/fumadocs/content.ts", "../src/migrate/fumadocs/frontmatter.ts", "../src/migrate/fumadocs/groups.ts", "../src/migrate/fumadocs/meta.ts", "../src/migrate/mintlify/index.ts", "../src/migrate/nextra/index.ts", "../src/migrate/nextra/content.ts", "../src/migrate/nextra/frontmatter.ts", "../src/migrate/nextra/meta.ts", "../src/migrate/starlight/index.ts", "../src/migrate/starlight/config.ts", "../src/migrate/starlight/content.ts", "../src/migrate/starlight/frontmatter.ts", "../src/migrate/starlight/i18n.ts", "../src/migrate/migrate.ts", "../src/cli/commands/preview.ts", "../src/cli/commands/sync.ts", "../src/cli/commands/validate.ts", "../src/core/links.ts"],
4
4
  "sourcesContent": [
5
5
  "import { defineCommand, runMain } from \"citty\";\n\nimport { getBlumeVersion } from \"../core/version.ts\";\nimport { addCommand } from \"./commands/add.ts\";\nimport { buildCommand } from \"./commands/build.ts\";\nimport { checkCommand } from \"./commands/check.ts\";\nimport { devCommand } from \"./commands/dev.ts\";\nimport { doctorCommand } from \"./commands/doctor.ts\";\nimport { ejectCommand } from \"./commands/eject.ts\";\nimport { initCommand } from \"./commands/init.ts\";\nimport { migrateCommand } from \"./commands/migrate.ts\";\nimport { previewCommand } from \"./commands/preview.ts\";\nimport { syncCommand } from \"./commands/sync.ts\";\nimport { validateCommand } from \"./commands/validate.ts\";\nimport { loadEnvFiles } from \"./env.ts\";\nimport { reportInternalError } from \"./internal-error.ts\";\n\nconst main = defineCommand({\n meta: {\n description: \"Markdown-first documentation powered by Astro and Vite.\",\n name: \"blume\",\n version: getBlumeVersion(),\n },\n subCommands: {\n add: addCommand,\n build: buildCommand,\n check: checkCommand,\n dev: devCommand,\n doctor: doctorCommand,\n eject: ejectCommand,\n init: initCommand,\n migrate: migrateCommand,\n preview: previewCommand,\n sync: syncCommand,\n validate: validateCommand,\n },\n});\n\n// Load `.env`/`.env.local` before any command runs so remote content sources\n// can read their tokens (e.g. `GITHUB_TOKEN`) during the content scan.\nloadEnvFiles(process.cwd());\n\n// Backstop for unexpected async failures that escape a command's own handling\n// (e.g. a rejected timer/watcher in `blume dev`), so even those report through\n// the stable internal-error contract rather than a bare stack trace.\nprocess.on(\"uncaughtException\", (error) => {\n reportInternalError(error);\n process.exit(1);\n});\nprocess.on(\"unhandledRejection\", (error) => {\n reportInternalError(error);\n process.exit(1);\n});\n\nrunMain(main);\n",
6
6
  "import { readFileSync } from \"node:fs\";\n\nimport { join } from \"pathe\";\n\nimport { packageRoot } from \"./package-root.ts\";\n\nlet cached: string | undefined;\n\n/**\n * The installed Blume package version, read lazily from its `package.json`.\n *\n * Computed on demand (not at module load) so importing the `blume` barrel has no\n * filesystem side effect, and anchored at the package root so it resolves the\n * same whether running from source or the bundled CLI.\n */\nexport const getBlumeVersion = (): string => {\n if (cached === undefined) {\n const pkgPath = join(packageRoot(), \"package.json\");\n cached = (JSON.parse(readFileSync(pkgPath, \"utf-8\")) as { version: string })\n .version;\n }\n return cached;\n};\n",
@@ -63,10 +63,10 @@
63
63
  "import { localizeRoute, resolveFallbackLocale } from \"./i18n.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\nimport type {\n BlumeManifest,\n ContentGraph,\n PageRecord,\n ProjectContext,\n RouteAlternate,\n RouteManifestEntry,\n} from \"./types.ts\";\nimport { getBlumeVersion } from \"./version.ts\";\n\n/** The current manifest schema version. */\nexport const MANIFEST_VERSION = 1;\n\n/**\n * Whether a page may be indexed on its own merits — not author-excluded and not\n * hidden (unless hidden pages are opted in). This is independent of whether the\n * site search provider is enabled, so features like the MCP server can index\n * docs even when on-page search is off.\n */\nexport const contentIndexable = (\n page: PageRecord,\n config: ResolvedConfig\n): boolean =>\n !page.meta.search.exclude &&\n (!page.meta.sidebar.hidden || config.search.indexing.includeHiddenPages);\n\n/** Build the runtime manifest that bridges core and the generated Astro app. */\nexport const buildManifest = (options: {\n context: ProjectContext;\n config: ResolvedConfig;\n graph: ContentGraph;\n}): BlumeManifest => {\n const { context, config, graph } = options;\n const searchEnabled = config.search.provider !== \"none\";\n const { i18n } = config;\n\n // Real translations per logical page, for `hreflang` and the switcher. Built\n // only under i18n; a single-locale page has no alternates.\n const alternatesByKey = new Map<string, RouteAlternate[]>();\n if (i18n) {\n for (const page of graph.pages) {\n const list = alternatesByKey.get(page.translationKey) ?? [];\n list.push({ locale: page.locale, path: page.route });\n alternatesByKey.set(page.translationKey, list);\n }\n }\n\n const routes: RouteManifestEntry[] = graph.pages.map((page) => ({\n alternates: alternatesByKey.get(page.translationKey) ?? [],\n collection: page.collection ?? \"docs\",\n contentType: page.contentType,\n draft: page.meta.draft,\n editUrl: page.editUrl,\n entryId: page.entryId ?? page.source.ref,\n hidden: page.meta.sidebar.hidden,\n id: page.id,\n indexable: searchEnabled && contentIndexable(page, config),\n lastModified: page.lastModified,\n locale: page.locale,\n path: page.route,\n source: page.source,\n sourcePath: page.sourcePath,\n title: page.title,\n }));\n\n // Fallback materialization: render the fallback locale's content at the\n // localized URL for any translation a non-default locale is missing, so static\n // output is fully prerendered (render-fallback, no client redirect). Fallback\n // routes are not indexed and carry no `hreflang` of their own.\n if (i18n) {\n const fallback = resolveFallbackLocale(i18n);\n if (fallback) {\n const fallbackPages = new Map(\n graph.pages\n .filter((page) => page.locale === fallback)\n .map((page) => [page.translationKey, page] as const)\n );\n for (const { code } of i18n.locales) {\n if (code === fallback) {\n continue;\n }\n const present = new Set(\n graph.pages\n .filter((page) => page.locale === code)\n .map((page) => page.translationKey)\n );\n for (const [key, source] of fallbackPages) {\n if (present.has(key)) {\n continue;\n }\n routes.push({\n alternates: alternatesByKey.get(key) ?? [],\n collection: source.collection ?? \"docs\",\n contentType: source.contentType,\n draft: source.meta.draft,\n editUrl: source.editUrl,\n entryId: source.entryId ?? source.source.ref,\n fallback: true,\n hidden: source.meta.sidebar.hidden,\n id: source.id,\n indexable: false,\n lastModified: source.lastModified,\n locale: code,\n path: localizeRoute(key, code, i18n),\n source: source.source,\n sourcePath: source.sourcePath,\n title: source.title,\n });\n }\n }\n }\n }\n\n routes.sort((a, b) => a.path.localeCompare(b.path));\n\n return {\n blumeVersion: getBlumeVersion(),\n contentRoot: context.contentRoot,\n output: config.deployment.output,\n projectRoot: context.root,\n routes,\n version: MANIFEST_VERSION,\n };\n};\n",
64
64
  "import matter from \"../core/frontmatter.ts\";\nimport { contentIndexable } from \"../core/manifest.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { readEntryText } from \"../core/sources/read.ts\";\nimport type { NavNode } from \"../core/types.ts\";\n\n/** A document indexed by the client-side search providers (Orama, FlexSearch). */\nexport interface SearchDocument {\n route: string;\n title: string;\n description: string;\n content: string;\n /** Ancestor section labels for the result breadcrumb, e.g. `[\"Guides\"]`. */\n breadcrumb: string[];\n /** Top-level section label, used by the search filter pills. */\n section: string;\n /** Locale code, so the dialog can filter results to the active language. */\n locale: string;\n /** Frontmatter `search.tags`, surfaced for hosted-provider faceting. */\n tags?: string[];\n}\n\n/**\n * A record uploaded to a hosted search backend (Algolia, Orama Cloud,\n * Typesense, Mixedbread). `_id` is the stable per-page key; each sync adapts it\n * to the backend's own id field (`objectID`, `id`, …).\n */\nexport interface SearchRecord {\n _id: string;\n url: string;\n title: string;\n description: string;\n content: string;\n /** Locale code, carried as a facet for per-language filtering. */\n locale: string;\n /** Single faceting tag (the first frontmatter tag, when present). */\n tag?: string;\n}\n\nconst CODE_FENCE = /```[\\s\\S]*?```/gu;\nconst INLINE_CODE = /`(?<code>[^`]+)`/gu;\nconst HTML_OR_JSX = /<[^>]+>/gu;\nconst IMAGE = /!\\[[^\\]]*\\]\\([^)]*\\)/gu;\nconst LINK = /\\[(?<text>[^\\]]*)\\]\\([^)]*\\)/gu;\nconst HEADING_MARK = /^#{1,6}\\s+/gmu;\nconst MARKDOWN_PUNCT = /[*_~>]+/gu;\nconst WHITESPACE = /\\s+/gu;\n\n/** Reduce Markdown/MDX to plain, searchable text. */\nconst toPlainText = (markdown: string): string => {\n const withoutBlocks = markdown\n .replaceAll(CODE_FENCE, \" \")\n .replaceAll(IMAGE, \" \")\n .replaceAll(LINK, \"$<text>\");\n\n // Strip HTML/JSX from the prose, but keep the contents of inline code — an\n // angle-bracket span like `<T>` inside `Array<T>` is a type parameter, not a\n // tag, and stripping it would drop those tokens from the search index. Split\n // on inline-code spans and only run the HTML strip on the text between them.\n const pieces: string[] = [];\n let cursor = 0;\n for (const match of withoutBlocks.matchAll(INLINE_CODE)) {\n const start = match.index ?? 0;\n pieces.push(\n withoutBlocks.slice(cursor, start).replaceAll(HTML_OR_JSX, \" \")\n );\n pieces.push(match.groups?.code ?? \"\");\n cursor = start + match[0].length;\n }\n pieces.push(withoutBlocks.slice(cursor).replaceAll(HTML_OR_JSX, \" \"));\n\n return pieces\n .join(\"\")\n .replaceAll(HEADING_MARK, \"\")\n .replaceAll(MARKDOWN_PUNCT, \" \")\n .replaceAll(WHITESPACE, \" \")\n .trim();\n};\n\ninterface Crumbs {\n breadcrumb: string[];\n section: string;\n}\n\n/**\n * Map each page route to its ancestor section labels by walking the nav sidebar\n * once. The nearest ancestor group — the sidebar section a page appears under —\n * becomes its `section`, the dimension the search filter pills group by, so the\n * pills mirror the visible sidebar (and honor folder-meta renames).\n */\nconst buildCrumbIndex = (sidebar: NavNode[]): Map<string, Crumbs> => {\n const index = new Map<string, Crumbs>();\n const walk = (nodes: NavNode[], trail: string[]): void => {\n for (const node of nodes) {\n if (node.kind === \"group\") {\n walk(node.children, [...trail, node.label]);\n } else if (node.route) {\n index.set(node.route, {\n breadcrumb: trail,\n section: trail.at(-1) ?? \"\",\n });\n }\n }\n };\n walk(sidebar, []);\n return index;\n};\n\n/**\n * Build search documents from the content graph. Only indexable pages are\n * included (per the route manifest), and content comes from the source files,\n * so the index is identical in dev and build.\n *\n * Pass `includeWhenDisabled` to index pages on their content merits even when\n * the search provider is `none` — used by the MCP server, which is a separate\n * feature from on-page search.\n */\nexport const buildSearchDocuments = async (\n project: BlumeProject,\n options?: { includeWhenDisabled?: boolean }\n): Promise<SearchDocument[]> => {\n const pageById = new Map(project.graph.pages.map((page) => [page.id, page]));\n\n // Build the crumb index from every locale's sidebar (their nodes carry\n // locale-prefixed routes), so localized pages get the right section/breadcrumb.\n // Falls back to the single default-locale nav when i18n is off.\n const byLocale = Object.values(project.graph.navigationByLocale ?? {});\n const sidebars =\n byLocale.length > 0\n ? byLocale.map((nav) => nav.sidebar)\n : [project.graph.navigation?.sidebar ?? []];\n const crumbs = new Map<string, Crumbs>();\n for (const sidebar of sidebars) {\n for (const [route, crumb] of buildCrumbIndex(sidebar)) {\n crumbs.set(route, crumb);\n }\n }\n\n const indexable = project.manifest.routes.filter((route) => {\n if (!options?.includeWhenDisabled) {\n return route.indexable;\n }\n const page = pageById.get(route.id);\n return page ? contentIndexable(page, project.config) : false;\n });\n\n return await Promise.all(\n indexable.map(async (route) => {\n const page = pageById.get(route.id);\n const raw = page ? await readEntryText(project, page) : \"\";\n const body = raw ? toPlainText(matter(raw).content) : \"\";\n const tags = page?.meta?.search?.tags;\n const crumb = crumbs.get(route.path);\n return {\n breadcrumb: crumb?.breadcrumb ?? [],\n content: body,\n description: page?.description ?? \"\",\n locale: route.locale,\n route: route.path,\n section: crumb?.section || \"Docs\",\n tags: tags && tags.length > 0 ? tags : undefined,\n title: route.title,\n };\n })\n );\n};\n\n/**\n * Map per-page search documents to the flat record shape hosted backends\n * ingest. One record per page, keyed by route; the first tag becomes the\n * faceting `tag`.\n */\nexport const toSearchRecords = (documents: SearchDocument[]): SearchRecord[] =>\n documents.map((doc) => ({\n _id: doc.route,\n content: doc.content,\n description: doc.description,\n locale: doc.locale,\n tag: doc.tags?.[0],\n title: doc.title,\n url: doc.route,\n }));\n",
65
65
  "import type { SearchRecord } from \"../documents.ts\";\n\nexport interface AlgoliaSyncConfig {\n appId: string;\n indexName: string;\n}\n\n/**\n * Upload the search records to Algolia. Uses the admin key from\n * `ALGOLIA_ADMIN_API_KEY` (never the config, which holds only the public,\n * search-only key). Throws on a missing key/config so the caller can warn.\n *\n * Uses `replaceAllObjects`, which atomically replaces the index contents, so\n * pages deleted or renamed since the last sync don't linger as stale search\n * hits that 404 when clicked.\n */\nexport const syncAlgolia = async (\n records: SearchRecord[],\n config: AlgoliaSyncConfig | undefined\n): Promise<void> => {\n if (!config) {\n throw new Error(\"search.algolia config is missing.\");\n }\n const adminKey = process.env.ALGOLIA_ADMIN_API_KEY;\n if (!adminKey) {\n throw new Error(\"ALGOLIA_ADMIN_API_KEY is not set.\");\n }\n const { algoliasearch } = await import(\"algoliasearch\");\n const client = algoliasearch(config.appId, adminKey);\n await client.replaceAllObjects({\n indexName: config.indexName,\n objects: records.map((record) => ({ ...record, objectID: record._id })),\n });\n};\n",
66
- "import type { SearchRecord } from \"../documents.ts\";\n\nexport interface OramaCloudSyncConfig {\n indexId?: string;\n}\n\n/**\n * Push the search records to an Orama Cloud index via `CloudManager`, using the\n * private key from `ORAMA_PRIVATE_API_KEY`. Snapshots the full record set, then\n * deploys. Throws on a missing key/index so the caller can warn.\n */\nexport const syncOramaCloud = async (\n records: SearchRecord[],\n config: OramaCloudSyncConfig | undefined\n): Promise<void> => {\n if (!config) {\n throw new Error(\"search.oramaCloud config is missing.\");\n }\n if (!config.indexId) {\n throw new Error(\"search.oramaCloud.indexId is required to sync.\");\n }\n const privateKey = process.env.ORAMA_PRIVATE_API_KEY;\n if (!privateKey) {\n throw new Error(\"ORAMA_PRIVATE_API_KEY is not set.\");\n }\n const { CloudManager } = await import(\"@oramacloud/client\");\n const manager = new CloudManager({ api_key: privateKey });\n const index = manager.index(config.indexId);\n await index.snapshot(\n records.map((record) => ({\n content: record.content,\n description: record.description,\n id: record._id,\n tag: record.tag,\n title: record.title,\n url: record.url,\n }))\n );\n await index.deploy();\n};\n",
67
- "import type { SearchRecord } from \"../documents.ts\";\n\nexport interface TypesenseSyncConfig {\n collection: string;\n host: string;\n port?: number;\n protocol?: string;\n}\n\n/**\n * Import the search records into a Typesense collection. Uses the admin key\n * from `TYPESENSE_ADMIN_API_KEY`. Throws on a missing key/config so the caller\n * can warn.\n *\n * The collection is dropped and recreated on each sync so that pages deleted or\n * renamed since the last sync don't linger as stale search hits that 404 when\n * clicked (an upsert alone never removes them).\n */\nexport const syncTypesense = async (\n records: SearchRecord[],\n config: TypesenseSyncConfig | undefined\n): Promise<void> => {\n if (!config) {\n throw new Error(\"search.typesense config is missing.\");\n }\n const adminKey = process.env.TYPESENSE_ADMIN_API_KEY;\n if (!adminKey) {\n throw new Error(\"TYPESENSE_ADMIN_API_KEY is not set.\");\n }\n const { Client } = await import(\"typesense\");\n const client = new Client({\n apiKey: adminKey,\n nodes: [\n {\n host: config.host,\n port: config.port ?? 443,\n protocol: config.protocol ?? \"https\",\n },\n ],\n });\n\n const collection = client.collections(config.collection);\n const exists = await collection\n .retrieve()\n .then(() => true)\n .catch(() => false);\n if (exists) {\n await collection.delete();\n }\n await client.collections().create({\n fields: [\n { name: \"title\", type: \"string\" },\n { name: \"description\", optional: true, type: \"string\" },\n { name: \"content\", type: \"string\" },\n { name: \"url\", type: \"string\" },\n { facet: true, name: \"tag\", optional: true, type: \"string\" },\n ],\n name: config.collection,\n });\n\n const documents = records.map((record) => ({\n content: record.content,\n description: record.description,\n id: record._id,\n tag: record.tag,\n title: record.title,\n url: record.url,\n }));\n await client\n .collections(config.collection)\n .documents()\n .import(documents, { action: \"upsert\" });\n};\n",
66
+ "import type { SearchRecord } from \"../documents.ts\";\n\nexport interface OramaCloudSyncConfig {\n indexId?: string;\n}\n\n/**\n * Push the search records to an Orama Cloud index via `CloudManager`, using the\n * private key from `ORAMA_PRIVATE_API_KEY`. Snapshots the full record set, then\n * deploys. Throws on a missing key/index so the caller can warn.\n */\nexport const syncOramaCloud = async (\n records: SearchRecord[],\n config: OramaCloudSyncConfig | undefined\n): Promise<void> => {\n if (!config) {\n throw new Error(\"search.oramaCloud config is missing.\");\n }\n if (!config.indexId) {\n throw new Error(\"search.oramaCloud.indexId is required to sync.\");\n }\n const privateKey = process.env.ORAMA_PRIVATE_API_KEY;\n if (!privateKey) {\n throw new Error(\"ORAMA_PRIVATE_API_KEY is not set.\");\n }\n const { CloudManager } = await import(\"@oramacloud/client\");\n const manager = new CloudManager({ api_key: privateKey });\n const index = manager.index(config.indexId);\n await index.snapshot(\n records.map((record) => ({\n content: record.content,\n description: record.description,\n id: record._id,\n // Carried so an i18n site can filter hosted results per language.\n locale: record.locale,\n tag: record.tag,\n title: record.title,\n url: record.url,\n }))\n );\n await index.deploy();\n};\n",
67
+ "import type { SearchRecord } from \"../documents.ts\";\n\nexport interface TypesenseSyncConfig {\n collection: string;\n host: string;\n port?: number;\n protocol?: string;\n}\n\n/**\n * Import the search records into a Typesense collection. Uses the admin key\n * from `TYPESENSE_ADMIN_API_KEY`. Throws on a missing key/config so the caller\n * can warn.\n *\n * The collection is dropped and recreated on each sync so that pages deleted or\n * renamed since the last sync don't linger as stale search hits that 404 when\n * clicked (an upsert alone never removes them).\n */\nexport const syncTypesense = async (\n records: SearchRecord[],\n config: TypesenseSyncConfig | undefined\n): Promise<void> => {\n if (!config) {\n throw new Error(\"search.typesense config is missing.\");\n }\n const adminKey = process.env.TYPESENSE_ADMIN_API_KEY;\n if (!adminKey) {\n throw new Error(\"TYPESENSE_ADMIN_API_KEY is not set.\");\n }\n const { Client } = await import(\"typesense\");\n const client = new Client({\n apiKey: adminKey,\n nodes: [\n {\n host: config.host,\n port: config.port ?? 443,\n protocol: config.protocol ?? \"https\",\n },\n ],\n });\n\n const collection = client.collections(config.collection);\n const exists = await collection\n .retrieve()\n .then(() => true)\n .catch(() => false);\n if (exists) {\n await collection.delete();\n }\n await client.collections().create({\n fields: [\n { name: \"title\", type: \"string\" },\n { name: \"description\", optional: true, type: \"string\" },\n { name: \"content\", type: \"string\" },\n { name: \"url\", type: \"string\" },\n { facet: true, name: \"tag\", optional: true, type: \"string\" },\n // Carried as a facet so an i18n site can filter hosted results per\n // language (the SearchRecord contract).\n { facet: true, name: \"locale\", optional: true, type: \"string\" },\n ],\n name: config.collection,\n });\n\n const documents = records.map((record) => ({\n content: record.content,\n description: record.description,\n id: record._id,\n locale: record.locale,\n tag: record.tag,\n title: record.title,\n url: record.url,\n }));\n await client\n .collections(config.collection)\n .documents()\n .import(documents, { action: \"upsert\" });\n};\n",
68
68
  "import type { BlumeProject } from \"../../core/project-graph.ts\";\nimport { buildSearchDocuments, toSearchRecords } from \"../documents.ts\";\nimport { searchProviderMeta } from \"../providers.ts\";\nimport { syncAlgolia } from \"./algolia.ts\";\nimport { syncOramaCloud } from \"./orama-cloud.ts\";\nimport { syncTypesense } from \"./typesense.ts\";\n\n/** Minimal logger surface the build command provides. */\nexport interface SyncReporter {\n start: (message: string) => void;\n success: (message: string) => void;\n warn: (message: string) => void;\n}\n\n/**\n * After a build, upload the per-page records to the configured hosted provider.\n * Reads secret admin keys from the environment; if a key (or config) is\n * missing the sync is skipped with a warning rather than failing the build —\n * CI may sync in a separate step. Providers without an in-process sync\n * (Mixedbread, which uses the `mxbai` CLI) are no-ops here.\n */\nexport const syncSearchProvider = async (\n project: BlumeProject,\n reporter: SyncReporter\n): Promise<void> => {\n const { search } = project.config;\n if (!searchProviderMeta(search.provider).syncs) {\n return;\n }\n\n const records = toSearchRecords(await buildSearchDocuments(project));\n reporter.start(`Syncing ${records.length} record(s) to ${search.provider}`);\n\n try {\n // The `syncs` guard above admits only these three hosted providers, so an\n // if-chain stays exhaustive without a dead `default` branch.\n if (search.provider === \"algolia\") {\n await syncAlgolia(records, search.algolia);\n } else if (search.provider === \"orama-cloud\") {\n await syncOramaCloud(records, search.oramaCloud);\n } else if (search.provider === \"typesense\") {\n await syncTypesense(records, search.typesense);\n }\n reporter.success(\n `Synced ${records.length} record(s) to ${search.provider}`\n );\n } catch (error) {\n reporter.warn(`Search sync skipped: ${(error as Error).message}`);\n }\n};\n",
69
- "import {\n existsSync,\n mkdirSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\n\nimport { join } from \"pathe\";\n\nimport { resolveRuntimeDir } from \"../core/project.ts\";\nimport { logger } from \"./log.ts\";\n\n/**\n * A best-effort PID lock in the shared `.blume/` runtime dir. `blume dev`\n * regenerates and serves `.blume` continuously, so a concurrent `build`,\n * `eject`, or `sync --force` that regenerates or deletes it out from under the\n * running Vite server corrupts the dev session. The lock lets those commands\n * detect a live dev server and refuse.\n */\n\nconst lockPath = (outDir: string): string => join(outDir, \"dev.lock\");\n\n/**\n * Whether another live `blume dev` holds the lock on `outDir`. A lock left by a\n * process that has since exited (stale) is treated as absent.\n */\nexport const isDevLocked = (outDir: string): boolean => {\n const path = lockPath(outDir);\n if (!existsSync(path)) {\n return false;\n }\n const pid = Number.parseInt(readFileSync(path, \"utf-8\").trim(), 10);\n if (!(Number.isInteger(pid) && pid > 0)) {\n return false;\n }\n try {\n // Signal 0 probes liveness without actually signaling the process.\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Write the current process's dev lock into `outDir` and return a release\n * function. The release only removes the file if it's still ours, so a newer\n * dev server's lock is never clobbered.\n */\nexport const acquireDevLock = (outDir: string): (() => void) => {\n const path = lockPath(outDir);\n mkdirSync(outDir, { recursive: true });\n writeFileSync(path, String(process.pid));\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n try {\n if (\n existsSync(path) &&\n readFileSync(path, \"utf-8\").trim() === String(process.pid)\n ) {\n rmSync(path, { force: true });\n }\n } catch {\n // Best-effort cleanup; a stale lock is handled by the liveness check.\n }\n };\n};\n\n/**\n * Exit with an error when a live `blume dev` owns the runtime dir under `root`.\n * `action` names the operation being refused (e.g. \"building\"). `runtimeDir`\n * relocates the checked dir: an isolated verify (`.blume-verify`) targets a dir\n * dev never locks, so it proceeds; a default or `--runtime-dir .blume` run still\n * refuses.\n */\nexport const refuseIfDevRunning = (\n root: string,\n action: string,\n runtimeDir?: string\n): void => {\n if (isDevLocked(resolveRuntimeDir(root, runtimeDir))) {\n logger.error(\n `A \\`blume dev\\` server is running against .blume; ${action} would corrupt it. Stop the dev server, or re-run with --isolated to build/verify against .blume-verify without touching it.`\n );\n process.exit(1);\n }\n};\n",
69
+ "import {\n existsSync,\n mkdirSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\n\nimport { join } from \"pathe\";\n\nimport { resolveRuntimeDir } from \"../core/project.ts\";\nimport { logger } from \"./log.ts\";\n\n/**\n * A best-effort PID lock in the shared `.blume/` runtime dir. `blume dev`\n * regenerates and serves `.blume` continuously, so a concurrent `build`,\n * `eject`, or `sync --force` that regenerates or deletes it out from under the\n * running Vite server corrupts the dev session. The lock lets those commands\n * detect a live dev server and refuse.\n */\n\nconst lockPath = (outDir: string): string => join(outDir, \"dev.lock\");\n\n/**\n * Whether another live `blume dev` holds the lock on `outDir`. A lock left by a\n * process that has since exited (stale) is treated as absent.\n */\nexport const isDevLocked = (outDir: string): boolean => {\n const path = lockPath(outDir);\n if (!existsSync(path)) {\n return false;\n }\n const pid = Number.parseInt(readFileSync(path, \"utf-8\").trim(), 10);\n if (!(Number.isInteger(pid) && pid > 0)) {\n return false;\n }\n try {\n // Signal 0 probes liveness without actually signaling the process.\n process.kill(pid, 0);\n return true;\n } catch (error) {\n // EPERM means the process exists but belongs to another user — still\n // live, so the lock must hold (only ESRCH proves it's gone).\n return (error as NodeJS.ErrnoException).code === \"EPERM\";\n }\n};\n\n/**\n * Write the current process's dev lock into `outDir` and return a release\n * function. The release only removes the file if it's still ours, so a newer\n * dev server's lock is never clobbered.\n */\nexport const acquireDevLock = (outDir: string): (() => void) => {\n const path = lockPath(outDir);\n mkdirSync(outDir, { recursive: true });\n writeFileSync(path, String(process.pid));\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n try {\n if (\n existsSync(path) &&\n readFileSync(path, \"utf-8\").trim() === String(process.pid)\n ) {\n rmSync(path, { force: true });\n }\n } catch {\n // Best-effort cleanup; a stale lock is handled by the liveness check.\n }\n };\n};\n\n/**\n * Exit with an error when a live `blume dev` owns the runtime dir under `root`.\n * `action` names the operation being refused (e.g. \"building\"). `runtimeDir`\n * relocates the checked dir: an isolated verify (`.blume-verify`) targets a dir\n * dev never locks, so it proceeds; a default or `--runtime-dir .blume` run still\n * refuses.\n */\nexport const refuseIfDevRunning = (\n root: string,\n action: string,\n runtimeDir?: string\n): void => {\n if (isDevLocked(resolveRuntimeDir(root, runtimeDir))) {\n logger.error(\n `A \\`blume dev\\` server is running against .blume; ${action} would corrupt it. Stop the dev server, or re-run with --isolated to build/verify against .blume-verify without touching it.`\n );\n process.exit(1);\n }\n};\n",
70
70
  "import { existsSync } from \"node:fs\";\n\nimport { isAbsolute, join, resolve } from \"pathe\";\n\nimport type { ResolvedConfig } from \"./schema.ts\";\nimport type { ProjectContext } from \"./types.ts\";\n\nconst CONFIG_FILENAMES = [\n \"blume.config.ts\",\n \"blume.config.mjs\",\n \"blume.config.js\",\n];\n\nconst THEME_FILENAMES = [\"theme.css\"];\nconst COMPONENTS_FILENAMES = [\"components.tsx\", \"components.ts\"];\n\nconst firstExisting = (root: string, names: string[]): string | null => {\n for (const name of names) {\n const candidate = join(root, name);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return null;\n};\n\n/** Locate the Blume config file for a project root, if any. */\nexport const findConfigFile = (root: string): string | null =>\n firstExisting(root, CONFIG_FILENAMES);\n\n/**\n * Resolve the generated runtime directory for a project. Defaults to\n * `<root>/.blume`; an override (e.g. `.blume-verify` for an isolated build that\n * runs alongside a live `blume dev`) may be relative to the root or absolute.\n */\nexport const resolveRuntimeDir = (\n root: string,\n runtimeDir = \".blume\"\n): string =>\n isAbsolute(runtimeDir) ? runtimeDir : join(resolve(root), runtimeDir);\n\n/**\n * Resolve every path Blume needs from a project root and its resolved config.\n * Paths are absolute and normalized. `options.runtimeDir` relocates the whole\n * generated runtime (and its build output) so a verify build/check can run\n * without touching a live dev server's `.blume/` or the real `dist/`.\n */\nexport const resolveProjectContext = (\n root: string,\n config: ResolvedConfig,\n options?: { runtimeDir?: string }\n): ProjectContext => {\n const absoluteRoot = resolve(root);\n const contentRoot = isAbsolute(config.content.root)\n ? config.content.root\n : join(absoluteRoot, config.content.root);\n\n const pagesPath = join(absoluteRoot, config.content.pages);\n const pagesRoot = existsSync(pagesPath) ? pagesPath : null;\n\n const outDir = resolveRuntimeDir(absoluteRoot, options?.runtimeDir);\n // A relocated runtime keeps its build output self-contained under itself, so a\n // verify build never empties the user's real `<root>/dist`.\n const distDir = options?.runtimeDir\n ? join(outDir, \"dist\")\n : join(absoluteRoot, \"dist\");\n\n return {\n componentsFile: firstExisting(absoluteRoot, COMPONENTS_FILENAMES),\n configFile: findConfigFile(absoluteRoot),\n contentRoot,\n distDir,\n outDir,\n pagesRoot,\n root: absoluteRoot,\n themeFile: firstExisting(absoluteRoot, THEME_FILENAMES),\n };\n};\n",
71
71
  "import { existsSync, readFileSync, realpathSync } from \"node:fs\";\nimport {\n lstat,\n mkdir,\n readFile,\n rename,\n rm,\n symlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { basename, dirname, join, normalize, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { buildAskData } from \"../ai/ask-data.ts\";\nimport { resolveAskBackend } from \"../ai/ask.ts\";\nimport { buildRawMarkdown } from \"../ai/markdown.ts\";\nimport { buildMcpData } from \"../ai/mcp/data.ts\";\nimport { buildMcpDiscovery, buildMcpServerCard } from \"../ai/mcp/discovery.ts\";\nimport { validateUsedComponents } from \"../core/component-diagnostics.ts\";\nimport { analyzeComponentOverrides } from \"../core/component-overrides.ts\";\nimport type {\n BlumeBanner,\n BlumeData,\n BlumeFavicon,\n BlumeLogo,\n} from \"../core/data.ts\";\nimport { EN_UI, resolveUIStrings } from \"../core/i18n-ui.ts\";\nimport { resolveFallbackLocale } from \"../core/i18n.ts\";\nimport { validateNavTargets } from \"../core/nav-diagnostics.ts\";\nimport { packageRoot } from \"../core/package-root.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport { resolveTsconfigAliases } from \"../core/tsconfig-aliases.ts\";\nimport type { Navigation } from \"../core/types.ts\";\nimport { buildRssFeeds, renderRssFeed } from \"../deploy/rss.ts\";\nimport { hasScalarReferences, referenceTabs } from \"../openapi/references.ts\";\nimport { buildReferenceFiles } from \"../openapi/scalar.ts\";\nimport { isOpenApiSource } from \"../openapi/source.ts\";\nimport { registry } from \"../registry/registry.ts\";\nimport { buildSearchDocuments } from \"../search/documents.ts\";\nimport { searchProviderMeta, servesStaticIndex } from \"../search/providers.ts\";\nimport { tailwindEntryTemplate } from \"../theme/entry.ts\";\nimport { buildFontsCss, configuredCssVars } from \"../theme/fonts.ts\";\nimport { buildThemeCss } from \"../theme/palette.ts\";\nimport { twoslashCss } from \"../theme/twoslash.ts\";\nimport { planComponentSlots } from \"./component-slots.ts\";\nimport type { ComponentSlotPlan } from \"./component-slots.ts\";\nimport { discoverExamples } from \"./examples.ts\";\nimport { discoverIslands } from \"./islands.ts\";\nimport { customOgRoutes, discoverPages, routeIsTaken } from \"./pages.ts\";\nimport {\n askEndpointTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n exampleSlug,\n islandMapTemplate,\n islandWrapperTemplate,\n mcpEndpointTemplate,\n mcpPageFile,\n mixedbreadSearchEndpointTemplate,\n notFoundPageTemplate,\n ogEndpointTemplate,\n rawMarkdownEndpointTemplate,\n rssEndpointTemplate,\n staticJsonEndpointTemplate,\n runtimeDependencies,\n runtimePackageTemplate,\n runtimeTsconfigTemplate,\n searchClientTemplate,\n searchEndpointTemplate,\n stagedContentDir,\n} from \"./templates.ts\";\n\n/** Absolute path to the Blume package `src` directory. */\nconst BLUME_SRC = join(packageRoot(), \"src\");\n\n/** Whether a module specifier resolves from a directory via node resolution. */\nconst canResolveFrom = (fromDir: string, spec: string): boolean => {\n try {\n createRequire(pathToFileURL(join(fromDir, \"_.js\")).href).resolve(spec);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Realpath of the `astro` package node resolves from a directory, or null when\n * none resolves. Comparing this for `.blume/` against Blume's own deps tells\n * whether the runtime would bind to the *same* astro Blume uses or a different\n * one shadowing it (the hoisted-conflict failure mode).\n */\nconst resolvedAstroPath = (fromDir: string): string | null => {\n try {\n const pkg = createRequire(\n pathToFileURL(join(fromDir, \"_.js\")).href\n ).resolve(\"astro/package.json\");\n return realpathSync(pkg);\n } catch {\n return null;\n }\n};\n\n/**\n * Locate the directory that holds Blume's installed dependencies (Astro and its\n * integrations).\n *\n * With a clean hoisted install this is moot — the deps sit in a `node_modules`\n * the generated `.blume/` already walks up into, and {@link ensureDepsLink}\n * short-circuits before we need it. But under isolated linkers (Bun's\n * `isolated` mode, pnpm) Blume's deps are NOT hoisted into the project; they\n * live beside the Blume package in a virtual store, invisible to the upward\n * walk from `.blume/`. Two layouts are possible, so probe for `astro`:\n * - `<blume>/node_modules` — deps nested under the package (workspace source)\n * - `dirname(<blume>)` — deps as siblings in the store (isolated/pnpm)\n *\n * `packageRoot()` resolves to Blume's real on-disk path (Node follows the\n * install symlink), so its parent is the store's package directory where the\n * isolated linker places the siblings. The previous fixed\n * `packageRoot()/node_modules` assumption missed the sibling layout entirely,\n * which is why isolated-linker projects had to redeclare Blume's deps by hand.\n */\nexport const blumeDepsDir = (pkgDir: string = packageRoot()): string | null => {\n const candidates = [join(pkgDir, \"node_modules\"), dirname(pkgDir)];\n return candidates.find((dir) => existsSync(join(dir, \"astro\"))) ?? null;\n};\n\n/**\n * Point `link` at Blume's dependency directory via a `node_modules` junction,\n * replacing a stale junction we own and leaving a real directory untouched.\n *\n * `lstat`, not `existsSync`, so a broken junction (target since moved) is still\n * detected — `existsSync` follows the link and reports a dangling one as absent.\n */\nconst linkDepsJunction = async (\n link: string,\n depsDir: string\n): Promise<void> => {\n const existing = await lstat(link).catch(() => null);\n if (existing) {\n if (!existing.isSymbolicLink()) {\n return;\n }\n await rm(link, { force: true });\n }\n await mkdir(dirname(link), { recursive: true });\n await symlink(depsDir, link, \"junction\");\n};\n\n/** Read the `version` field of a `package.json`, or null when unreadable. */\nconst readPkgVersion = (pkgJsonPath: string | null): string | null => {\n if (!pkgJsonPath) {\n return null;\n }\n try {\n return JSON.parse(readFileSync(pkgJsonPath, \"utf-8\")).version ?? null;\n } catch {\n return null;\n }\n};\n\n/**\n * Build the diagnostic for a split-layout Astro conflict that a symlink can't\n * repair: a different Astro is hoisted to the project root, shadowing Blume's,\n * and `@astrojs/mdx` binds to the wrong copy. `blumeAstroPkg`/`shadowAstroPkg`\n * are the resolved `astro/package.json` paths for Blume's set and the one the\n * runtime actually resolves.\n */\nconst astroConflictWarning = (\n blumeAstroPkg: string | null,\n shadowAstroPkg: string | null\n): string => {\n const blume = readPkgVersion(blumeAstroPkg);\n const shadow = readPkgVersion(shadowAstroPkg);\n const versions =\n blume && shadow\n ? `astro@${shadow} shadowing Blume's astro@${blume}`\n : \"a second copy of Astro shadowing Blume's\";\n const pin = blume ?? \"<Blume's astro version>\";\n return `Astro version conflict: another dependency hoisted ${versions} to the project root, so @astrojs/mdx binds to the wrong copy and the build fails on a missing export (e.g. \"chunkToString\"). A single symlink can't reconcile a split install — pin Blume's Astro by adding a package.json \"overrides\" (npm/bun/pnpm) or \"resolutions\" (yarn) entry { \"astro\": \"${pin}\" }, then reinstall. Run \\`npm ls astro\\` to find the dependency pulling the older copy.`;\n};\n\n/**\n * Make the generated runtime resolve Astro and its integrations against Blume's\n * own dependency set. Two failure modes this repairs:\n *\n * - Astro is *unreachable* from `.blume/` (workspaces under isolated linkers,\n * pnpm) — the deps live in a store the upward walk can't see.\n * - Astro *resolves to the wrong copy* — a hoisted sibling pinned an older\n * major (e.g. `astro@6` for a type-only import) that shadows Blume's\n * `astro@7`, so `@astrojs/mdx@7` binds to it and crashes the build on a\n * missing export. Resolving merely *an* astro isn't enough; it must be the\n * same one Blume uses.\n *\n * In both cases we symlink Blume's dependency directory in as\n * `.blume/node_modules` so the generated config's bare specifiers (`astro`,\n * `@astrojs/mdx`, …) bind to the matching set. We only do this when those deps\n * are a *co-located, consistent* set (astro beside the `@astrojs/mdx` that binds\n * to it). A split layout — an integration hoisted away from a conflicting astro\n * — can't be made consistent by a single symlink and needs a root `overrides`/\n * `resolutions` pin instead. We can't fix that from `.blume/`, so we return a\n * diagnostic naming the conflict rather than silently shipping a runtime that\n * crashes downstream. Returns the warning, or null when nothing needs saying.\n */\nexport const ensureDepsLink = async (\n outDir: string,\n pkgDir: string = packageRoot()\n): Promise<string | null> => {\n const depsDir = blumeDepsDir(pkgDir);\n if (!depsDir) {\n return null;\n }\n // Already correct when `.blume/` resolves the very same astro Blume's deps\n // provide — the clean hoisted case, nothing to do.\n const blumeAstro = resolvedAstroPath(depsDir);\n const outDirAstro = resolvedAstroPath(outDir);\n if (blumeAstro && outDirAstro === blumeAstro) {\n return null;\n }\n // A co-located, consistent set (astro beside the @astrojs/mdx that binds to\n // it) can be linked in wholesale; this repairs the unreachable and the\n // repairable-conflict cases. Any existing link here is stale and gets\n // replaced.\n if (existsSync(join(depsDir, \"@astrojs\", \"mdx\"))) {\n await linkDepsJunction(join(outDir, \"node_modules\"), depsDir);\n return null;\n }\n // Split layout: Blume's astro is nested (a conflicting astro took the root\n // spot) but @astrojs/mdx hoisted away from it, binding to the shadow. Only a\n // root pin fixes this — surface it.\n return astroConflictWarning(blumeAstro, outDirAstro);\n};\n\n/**\n * Vite plugin that makes Blume's externalized runtime deps (zod, shiki, sharp,\n * `@takumi-rs/core`, …) resolvable when Astro executes the static prerender\n * bundle under an isolated linker (Bun's `isolated` mode, pnpm).\n *\n * Astro's static build emits a self-contained SSR bundle to\n * `<outDir>/.prerender/` and `import()`s it in-process to generate the HTML.\n * That bundle externalizes Blume's render-time deps, so Node resolves them at\n * prerender time by walking up from `.prerender/chunks/*.mjs`. {@link\n * ensureDepsLink} only repairs resolution rooted at `.blume/`; `.prerender/`\n * lives under `dist/`, a separate tree an isolated linker never hoists Blume's\n * deps into — so the import dies with `Cannot find package 'zod'`. We drop the\n * same `node_modules` junction into the prerender root, mirroring\n * `.blume/node_modules`, so every externalized specifier — native bindings\n * included, which can't be bundled — resolves. Astro deletes `.prerender/` once\n * generation finishes (and the junction with it: `fs.rm` unlinks symlinks, it\n * never follows them), so nothing leaks into the published `dist/`.\n *\n * Keyed off the output dir's basename (`.prerender`) — the name Astro 7 gives\n * the prerender build for both static (`<outDir>/.prerender/`) and server\n * (`<build.server>/.prerender/`) output — so it fires for exactly that build.\n * Inert in dev, where there is no build and `writeBundle` never runs.\n */\nexport const prerenderDepsPlugin = (\n pkgDir: string = packageRoot()\n): {\n name: string;\n writeBundle: (options: { dir?: string }) => Promise<void>;\n} => ({\n name: \"blume:prerender-deps\",\n writeBundle: async (options) => {\n if (!options.dir || basename(options.dir) !== \".prerender\") {\n return;\n }\n const depsDir = blumeDepsDir(pkgDir);\n if (!depsDir) {\n return;\n }\n await linkDepsJunction(join(options.dir, \"node_modules\"), depsDir);\n },\n});\n\n/** Astro integration package each non-React island framework needs installed. */\nconst ISLAND_FRAMEWORK_DEPS: Record<string, string> = {\n svelte: \"@astrojs/svelte\",\n vue: \"@astrojs/vue\",\n};\n\n/**\n * Warn when a Vue/Svelte island is present but its Astro integration isn't\n * installed — Vite would otherwise fail opaquely on the generated config import.\n * React ships with Blume, so it never needs this.\n */\nconst islandFrameworkWarnings = (\n frameworks: Set<string>,\n root: string\n): string[] => {\n const warnings: string[] = [];\n for (const framework of frameworks) {\n const dep = ISLAND_FRAMEWORK_DEPS[framework];\n if (dep && !canResolveFrom(root, dep)) {\n warnings.push(\n `Islands use ${framework}, which needs \"${dep}\". Install it (e.g. \\`npm install ${dep} ${framework}\\`).`\n );\n }\n }\n return warnings;\n};\n\n/** Read a file's contents, or return an empty string if it is absent. */\nconst readOptional = async (path: string | null): Promise<string> => {\n if (!path) {\n return \"\";\n }\n try {\n return await readFile(path, \"utf-8\");\n } catch {\n return \"\";\n }\n};\n\n/** Heuristically detect whether the project uses React islands. */\nexport const detectNeedsReact = async (root: string): Promise<boolean> => {\n const matches = await glob([\"**/*.{tsx,jsx}\"], {\n cwd: root,\n ignore: [\"**/node_modules/**\", \"**/.blume/**\", \"**/dist/**\"],\n onlyFiles: true,\n });\n return matches.length > 0;\n};\n\nconst writeIfChanged = async (\n path: string,\n content: string\n): Promise<boolean> => {\n let existing: string | null = null;\n try {\n existing = await readFile(path, \"utf-8\");\n } catch {\n existing = null;\n }\n if (existing === content) {\n return false;\n }\n await mkdir(dirname(path), { recursive: true });\n // Write to a temp file then atomically rename into place, so a watching dev\n // server never observes a missing or half-written file mid-regeneration.\n const tmp = `${path}.${process.pid}.tmp`;\n await writeFile(tmp, content, \"utf-8\");\n try {\n await rename(tmp, path);\n } catch (error) {\n await rm(tmp, { force: true });\n throw error;\n }\n return true;\n};\n\n/**\n * Delete generated files under `srcDir` that this pass didn't (re)write. The\n * generator emits many files conditionally — an Ask AI endpoint, OG images, a\n * search index, RSS feeds, reference pages, the MCP server — so toggling a\n * feature off would otherwise leave a stale file behind, and a leftover\n * server-rendered endpoint breaks the static build. `writeIfChanged` only ever\n * adds or updates, so this closes the loop. Scoped to `.blume/src`, so it never\n * touches Astro's `dist/`, `.astro/` cache, or the symlinked `node_modules`\n * (all of which live outside `src`). `written` holds normalized absolute paths.\n */\nexport const pruneOrphans = async (\n srcDir: string,\n written: Set<string>\n): Promise<void> => {\n const existing = await glob(\"**/*\", {\n absolute: true,\n cwd: srcDir,\n onlyFiles: true,\n });\n await Promise.all(\n existing\n .map((path) => normalize(path))\n .filter((path) => !written.has(path))\n .map((path) => rm(path, { force: true }))\n );\n};\n\n/**\n * Collect staged (non-filesystem) page bodies keyed by their Astro entry id, so\n * i18n duplicates of one entry collapse to a single materialized file. Shared\n * with `eject`, which materializes the same bodies into the owned project.\n */\nexport const collectStaged = (project: BlumeProject): Map<string, string> => {\n const staged = new Map<string, string>();\n for (const page of project.graph.pages) {\n if (page.collection === \"staged\" && page.entryId && page.body) {\n staged.set(page.entryId, page.body.text);\n }\n }\n return staged;\n};\n\n/**\n * Materialize staged source bodies under `.blume/content` and prune orphans in\n * that tree (separate from `.blume/src`), so a removed remote entry is cleaned up.\n */\nconst writeStagedContent = async (\n out: string,\n staged: Map<string, string>\n): Promise<void> => {\n const contentDir = stagedContentDir(out);\n const written = new Set<string>();\n await Promise.all(\n [...staged].map(async ([entryId, text]) => {\n const path = join(contentDir, entryId);\n written.add(normalize(path));\n await writeIfChanged(path, text);\n })\n );\n if (existsSync(contentDir)) {\n await pruneOrphans(contentDir, written);\n }\n};\n\n/** The logo shape the runtime consumes: an inline SVG or image URL(s). */\n/**\n * Resolve the configured logo. A single SVG is read and inlined so a\n * `currentColor` logo follows the theme; other images keep their URL for an\n * `<img>`. The file is looked up under `public/` and the project root.\n */\nconst resolveLogo = (project: BlumeProject): BlumeLogo | null => {\n const { logo } = project.config;\n if (!logo) {\n return null;\n }\n const config = typeof logo === \"string\" ? { light: logo } : logo;\n const light = config.light ?? config.dark;\n const dark = config.dark ?? config.light;\n const alt = config.alt ?? \"\";\n const href = config.href ?? \"/\";\n\n if (light && light === dark && light.toLowerCase().endsWith(\".svg\")) {\n const rel = light.replace(/^\\//u, \"\");\n const file = [\n join(project.context.root, \"public\", rel),\n join(project.context.root, rel),\n ].find((path) => existsSync(path));\n if (file) {\n return { alt, href, svg: readFileSync(file, \"utf-8\") };\n }\n }\n return { alt, dark, href, light };\n};\n\n/**\n * Favicon filenames Blume auto-detects, in priority order. Mirrors the Next.js\n * convention: an `icon.*` or `favicon.*` file in `public/` or the project root\n * becomes the site favicon, no config required.\n */\nconst FAVICON_CANDIDATES = [\n \"icon.svg\",\n \"favicon.svg\",\n \"icon.png\",\n \"favicon.png\",\n \"favicon.ico\",\n \"icon.ico\",\n];\n\n/** `<link type>` MIME for the favicon extensions we recognize. */\nconst FAVICON_TYPES: Record<string, string> = {\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n svg: \"image/svg+xml\",\n};\n\n/** Infer the `<link type>` MIME from a filename, when we recognize the extension. */\nconst faviconType = (name: string): string | undefined => {\n const ext = name.split(\".\").pop()?.toLowerCase();\n return ext ? FAVICON_TYPES[ext] : undefined;\n};\n\n/** Read a file and encode it as a `data:` URI of the given MIME type. */\nconst inlineDataUri = (file: string, type: string): string =>\n `data:${type};base64,${readFileSync(file).toString(\"base64\")}`;\n\n/** The bundled Blume favicon, inlined as a data URI so it needs no public file. */\nconst defaultFavicon = (): BlumeFavicon => ({\n href: inlineDataUri(join(BLUME_SRC, \"assets\", \"icon.png\"), \"image/png\"),\n type: \"image/png\",\n});\n\n/**\n * Apple touch icon filenames Blume auto-detects, in priority order. Mirrors the\n * Next.js `apple-icon.*` convention (plus the `apple-touch-icon.png` most favicon\n * generators emit): a match in `public/` or the project root becomes the iOS\n * home-screen icon, no config required.\n */\nconst APPLE_ICON_CANDIDATES = [\n \"apple-icon.png\",\n \"apple-icon.jpg\",\n \"apple-icon.jpeg\",\n \"apple-touch-icon.png\",\n];\n\n/**\n * Resolve an icon file by convention. A candidate in `public/` is served as-is\n * and referenced by URL; one at the project root is inlined as a data URI (the\n * root isn't a served directory). Returns null when the project ships none.\n */\nconst resolveIconFile = (\n project: BlumeProject,\n candidates: string[]\n): BlumeFavicon | null => {\n const { root } = project.context;\n for (const name of candidates) {\n if (existsSync(join(root, \"public\", name))) {\n return { href: `/${name}`, type: faviconType(name) };\n }\n }\n for (const name of candidates) {\n const file = join(root, name);\n if (existsSync(file)) {\n const type = faviconType(name);\n return { href: inlineDataUri(file, type ?? \"image/x-icon\"), type };\n }\n }\n return null;\n};\n\n/**\n * Resolve the site favicon by convention, falling back to the bundled Blume mark\n * when the project ships no `icon.*`/`favicon.*` file.\n */\nconst resolveFavicon = (project: BlumeProject): BlumeFavicon =>\n resolveIconFile(project, FAVICON_CANDIDATES) ?? defaultFavicon();\n\n/**\n * Resolve the Apple touch icon by convention, or null when the project ships\n * none (unlike the favicon, there's no bundled default). Note: iOS ignores\n * `data:`-URI apple-touch-icons, so a `public/` file (served by URL) is the\n * reliable path; a root-level file is still inlined for symmetry with favicons.\n */\nconst resolveAppleIcon = (project: BlumeProject): BlumeFavicon | null =>\n resolveIconFile(project, APPLE_ICON_CANDIDATES);\n\n/** Normalize the banner config (string shorthand or object) for the runtime. */\nconst resolveBanner = (config: ResolvedConfig): BlumeBanner | null => {\n const { banner } = config;\n if (!banner) {\n return null;\n }\n if (typeof banner === \"string\") {\n return { content: banner, dismissible: false, key: banner };\n }\n return {\n content: banner.content,\n dismissible: banner.dismissible,\n key: banner.id ?? banner.content,\n link: banner.link,\n };\n};\n\n/** Serialize the content graph into the data module the runtime consumes. */\nexport const buildRuntimeData = (project: BlumeProject): string => {\n const { config, context, graph, manifest } = project;\n const { github } = config;\n const repoUrl = github\n ? `https://github.com/${github.owner}/${github.repo}`\n : null;\n const editBase = github ? `${repoUrl}/edit/${github.branch}` : null;\n\n const editUrlFor = (sourcePath?: string): string | null => {\n if (!(editBase && sourcePath)) {\n return null;\n }\n const rel = relative(context.root, sourcePath).split(\"\\\\\").join(\"/\");\n return `${editBase}/${github?.dir ? `${github.dir}/${rel}` : rel}`;\n };\n\n const { i18n } = config;\n\n // API reference routes surface as header tabs alongside the content-derived\n // ones (Blume-rendered references also own a tab-scoped sidebar of operations),\n // so the reference stays discoverable in every locale.\n const withReferenceTabs = (nav: Navigation): Navigation => ({\n ...nav,\n repoUrl: config.navigation.repo && repoUrl ? repoUrl : null,\n tabs: [...nav.tabs, ...referenceTabs(config)],\n });\n\n // Resolved UI dictionaries: one per locale under i18n, English baseline\n // otherwise. Threaded into chrome so the catch-all can pick the active locale.\n const uiByLocale = i18n\n ? Object.fromEntries(\n i18n.locales.map(({ code }) => [\n code,\n resolveUIStrings(code, {\n defaultLocale: i18n.defaultLocale,\n overrides: i18n.ui,\n }),\n ])\n )\n : {};\n const defaultUi = i18n\n ? resolveUIStrings(i18n.defaultLocale, {\n defaultLocale: i18n.defaultLocale,\n overrides: i18n.ui,\n })\n : EN_UI;\n\n const navigationByLocale = i18n\n ? Object.fromEntries(\n i18n.locales.map(({ code }) => [\n code,\n withReferenceTabs(\n graph.navigationByLocale[code] ?? {\n chromeVariants: [],\n selectors: [],\n sidebar: [],\n tabs: [],\n }\n ),\n ])\n )\n : {};\n\n const data: BlumeData = {\n config: {\n analytics: config.analytics ?? null,\n appleIcon: resolveAppleIcon(project),\n banner: resolveBanner(config),\n codeWrap: config.markdown.code.wrap,\n description: config.description,\n favicon: resolveFavicon(project),\n feedback: config.feedback,\n i18n: i18n\n ? {\n defaultLocale: i18n.defaultLocale,\n // The locale fallback content is rendered from, so the catch-all can\n // set the content direction to the language it's actually written in.\n fallbackLocale: resolveFallbackLocale(i18n),\n hideDefaultLocalePrefix: i18n.hideDefaultLocalePrefix,\n locales: i18n.locales.map(({ code, dir, label }) => ({\n code,\n dir,\n label,\n })),\n }\n : null,\n icons: config.icons,\n imageZoom: config.markdown.imageZoom,\n logo: resolveLogo(project),\n mcp: config.mcp.enabled\n ? { name: config.mcp.name ?? config.title, route: config.mcp.route }\n : null,\n // `og.enabled` is resolved to a definite boolean in `loadConfig`; coerce\n // the optional schema type so the serialized shape stays `boolean`.\n og: { enabled: config.seo.og.enabled ?? false },\n repoUrl,\n search: {\n enabled: config.search.provider !== \"none\",\n provider: config.search.provider,\n },\n site: config.deployment.site ?? null,\n structuredData: config.seo.structuredData,\n theme: config.theme,\n title: config.title,\n toc: config.toc,\n },\n feeds: buildRssFeeds(project).map((feed) => ({\n href: feed.path,\n title: feed.title,\n })),\n // CSS variables for Astro's <Font> component; matches the astro.config\n // `fonts:` entries derived from the same theme.fonts config.\n fontCssVars: configuredCssVars(config.theme.fonts),\n navigation: withReferenceTabs(graph.navigation),\n // Per-locale navigation; the catch-all selects the active locale's tree.\n navigationByLocale,\n routes: manifest.routes.map((route) => ({\n alternates: route.alternates,\n collection: route.collection,\n draft: route.draft,\n editUrl: route.editUrl ?? editUrlFor(route.sourcePath),\n entryId: route.entryId,\n fallback: route.fallback ?? false,\n hidden: route.hidden,\n id: route.id,\n indexable: route.indexable,\n lastModified: route.lastModified ?? null,\n locale: route.locale,\n path: route.path,\n title: route.title,\n })),\n // Default-locale chrome strings (English baseline when not under i18n).\n ui: defaultUi,\n // Per-locale chrome strings, selected by the catch-all under i18n.\n uiByLocale,\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n};\n\n/** The resolved plan for the hosted MCP server within a single generate pass. */\ninterface McpPlan {\n /** Directory holding the injected discovery endpoints (`.blume/src/blume-mcp`). */\n dir: string;\n /** `.well-known` discovery routes to inject as prerendered pages. */\n discoveryPages: { entrypoint: string; pattern: string }[];\n enabled: boolean;\n route: string;\n srcDir: string;\n warnings: string[];\n}\n\n/**\n * Decide whether (and how) to generate the MCP server. Skipped — with a\n * warning — when a content page already occupies its route, so the user's page\n * keeps working.\n */\nconst planMcp = (project: BlumeProject, srcDir: string): McpPlan => {\n const { config } = project;\n const { route } = config.mcp;\n const dir = join(srcDir, \"blume-mcp\");\n const base: McpPlan = {\n dir,\n discoveryPages: [],\n enabled: false,\n route,\n srcDir,\n warnings: [],\n };\n if (!config.mcp.enabled) {\n return base;\n }\n if (project.graph.pages.some((page) => page.route === route)) {\n return {\n ...base,\n warnings: [\n `MCP server route \"${route}\" is already used by a content page; the MCP server was not generated. Set a different \"mcp.route\" in blume.config.ts.`,\n ],\n };\n }\n return {\n ...base,\n discoveryPages: [\n {\n entrypoint: join(dir, \"discovery.ts\"),\n pattern: \"/.well-known/mcp.json\",\n },\n {\n entrypoint: join(dir, \"server-card.ts\"),\n pattern: \"/.well-known/mcp/server-card.json\",\n },\n ],\n enabled: true,\n };\n};\n\n/** Write the MCP data snapshot, server endpoint, and discovery documents. */\nconst writeMcpFiles = async (\n project: BlumeProject,\n plan: McpPlan,\n write: (path: string, content: string) => Promise<boolean>\n): Promise<void> => {\n if (!plan.enabled) {\n return;\n }\n const data = await buildMcpData(project);\n const discoveryInput = {\n name: data.name,\n route: plan.route,\n site: data.site,\n version: data.version,\n };\n await Promise.all([\n write(\n join(plan.srcDir, \"generated\", \"mcp-data.json\"),\n `${JSON.stringify(data)}\\n`\n ),\n write(\n join(plan.srcDir, \"pages\", mcpPageFile(plan.route)),\n mcpEndpointTemplate(plan.route)\n ),\n write(\n join(plan.dir, \"discovery.ts\"),\n staticJsonEndpointTemplate(buildMcpDiscovery(discoveryInput))\n ),\n write(\n join(plan.dir, \"server-card.ts\"),\n staticJsonEndpointTemplate(buildMcpServerCard(discoveryInput))\n ),\n ]);\n};\n\n/**\n * Write the Ask AI endpoint and, unless the backend runs its own retrieval\n * (Inkeep), the grounding snapshot the endpoint queries at request time. A no-op\n * when Ask AI is disabled.\n */\nconst writeAskFiles = async (\n project: BlumeProject,\n srcDir: string,\n write: (path: string, content: string) => Promise<boolean>\n): Promise<void> => {\n const { ask } = project.config.ai;\n if (!ask?.enabled) {\n return;\n }\n const grounded = ask.provider !== \"inkeep\";\n if (grounded) {\n await write(\n join(srcDir, \"generated\", \"ask-data.json\"),\n `${JSON.stringify(await buildAskData(project))}\\n`\n );\n }\n await write(\n join(srcDir, \"pages\", \"api\", \"ask.ts\"),\n askEndpointTemplate(resolveAskBackend(ask), grounded)\n );\n};\n\n/**\n * Write the default 404 page at Astro's reserved `src/pages/404.astro` path so\n * static builds emit `dist/404.html`. Skipped when the project already owns\n * `/404` (a custom `pages/404.astro` or a `404.md` content page), letting it be\n * fully overridden without a route collision; `pruneOrphans` then removes any\n * previously-generated copy.\n */\nconst writeNotFoundPage = async (\n write: (path: string, content: string) => Promise<boolean>,\n srcDir: string,\n pages: { pattern: string }[],\n contentPages: { route: string }[]\n): Promise<void> => {\n if (routeIsTaken(pages, contentPages, \"/404\")) {\n return;\n }\n await write(join(srcDir, \"pages\", \"404.astro\"), notFoundPageTemplate());\n};\n\nexport interface GenerateResult {\n /** Whether any structural file changed (config/page/content config). */\n structuralChange: boolean;\n /** Non-fatal warnings raised while generating (e.g. a missing API spec). */\n warnings: string[];\n}\n\n/**\n * Whether to generate the default `/changelog` index. Written when there are\n * `type: changelog` entries — or when a release-backed changelog source is\n * configured, so its route (and any nav tab pointing at it) still resolves to an\n * empty timeline on a build where the source could not be fetched (e.g. CI\n * without a token). Skipped when a user content page already owns `/changelog`.\n */\nconst shouldGenerateChangelog = (project: BlumeProject): boolean => {\n const hasChangelog = project.graph.pages.some(\n (page) =>\n page.contentType === \"changelog\" &&\n !(page.meta.draft || page.meta.sidebar.hidden)\n );\n const hasChangelogSource = (project.config.content.sources ?? []).some(\n (source) => source.type === \"github-releases\"\n );\n const changelogRouteTaken = project.graph.pages.some(\n (page) => page.route === \"/changelog\"\n );\n return (hasChangelog || hasChangelogSource) && !changelogRouteTaken;\n};\n\n/**\n * Statically analyze the user's `components.ts` (never executing it) and plan the\n * generated `components.ts` module plus any hydration wrappers. Returns the plan\n * and the analyzer's warnings; a project with no components file gets an empty\n * plan and no warnings.\n */\nconst buildComponentSlots = async (\n componentsFile: string | null\n): Promise<{\n plan: ComponentSlotPlan;\n /** MDX tags the overrides define (for the unknown-component check). */\n tags: string[];\n warnings: string[];\n}> => {\n const analysis = componentsFile\n ? analyzeComponentOverrides(\n await readFile(componentsFile, \"utf-8\"),\n componentsFile\n )\n : null;\n return {\n plan: planComponentSlots(componentsFile, analysis),\n tags: analysis\n ? [...analysis.mdx, ...analysis.islands].map((entry) => entry.key)\n : [],\n warnings: analysis ? analysis.warnings : [],\n };\n};\n\n/**\n * Write (or update) the generated `.blume/` Astro runtime for a project.\n * Only files whose content changed are rewritten so Vite HMR stays fast.\n */\nexport const generateRuntime = async (\n project: BlumeProject\n): Promise<GenerateResult> => {\n const { context, config } = project;\n const out = context.outDir;\n const srcDir = join(out, \"src\");\n const dataPath = join(srcDir, \"generated\", \"data.json\");\n const themePath = join(srcDir, \"generated\", \"app.css\");\n const searchClientPath = join(srcDir, \"generated\", \"search-client.ts\");\n const examplesPath = join(srcDir, \"generated\", \"examples.ts\");\n const openapiPath = join(srcDir, \"generated\", \"openapi.json\");\n\n // Record every file this pass writes so orphans (from a now-disabled feature)\n // can be pruned afterwards. `write` wraps the atomic writer and tracks paths.\n const written = new Set<string>();\n const write = (path: string, content: string): Promise<boolean> => {\n written.add(normalize(path));\n return writeIfChanged(path, content);\n };\n\n const depsLinkWarning = await ensureDepsLink(out);\n\n const askEnabled = config.ai.ask?.enabled ?? false;\n const exportPdf = config.export.pdf;\n const exportEpub = config.export.epub;\n const [pages, detectedReact, userTheme, islandDiscovery, exampleDiscovery] =\n await Promise.all([\n context.pagesRoot\n ? discoverPages(context.pagesRoot)\n : Promise.resolve([]),\n detectNeedsReact(context.root),\n readOptional(context.themeFile),\n discoverIslands(context.root),\n discoverExamples(context.root, config.examples),\n ]);\n // Statically analyze `components.ts` overrides (never executed): drives the\n // `islands` group, hydration on layout/mdx overrides, string-path resolution,\n // and the \"framework component with no client mode\" diagnostic.\n const {\n plan: slotPlan,\n tags: overrideTags,\n warnings: overrideWarnings,\n } = await buildComponentSlots(context.componentsFile);\n\n // Each island/example framework enables its Astro renderer. React also\n // switches on for any project `.tsx`/`.jsx` and for Ask AI; Vue/Svelte are\n // island/example-driven. `.astro` examples need no renderer. Component\n // overrides referencing a framework component enable its renderer too.\n const frameworks = new Set<string>([\n ...islandDiscovery.islands.map((island) => island.framework),\n ...exampleDiscovery.examples.map((example) => example.framework),\n ...slotPlan.frameworks,\n ]);\n const needsReact = detectedReact || askEnabled || frameworks.has(\"react\");\n const needsVue = frameworks.has(\"vue\");\n const needsSvelte = frameworks.has(\"svelte\");\n\n // Custom pages that should get a generated OG card (the home most of all).\n // Computed before the MCP `.well-known` routes are appended below — those are\n // private and filtered out anyway, but the intent is the user's pages.\n const ogRoutes = customOgRoutes(pages, config.title);\n\n // The hosted MCP server. The `.well-known` discovery docs are injected as\n // prerendered routes alongside user pages; the server endpoint itself is a\n // normal (server-rendered) page written by `writeMcpFiles`.\n const mcp = planMcp(project, srcDir);\n pages.push(...mcp.discoveryPages);\n\n // Staged (non-filesystem) sources materialize into `.blume/content`; keyed by\n // entryId so i18n duplicates of one entry write a single file.\n const staged = collectStaged(project);\n const hasStaged = staged.size > 0;\n // Only emit a project-scanning `docs` collection when a filesystem source\n // actually feeds it. Bridge mode has just the staged Mintlify source, so the\n // `docs` glob would otherwise scan (and watch) the whole project root for\n // nothing — see contentConfigTemplate.\n const hasFilesystemSource = project.sources.some((source) => !source.staged);\n\n const structural = await Promise.all([\n write(\n join(out, \"astro.config.mjs\"),\n astroConfigTemplate({\n aliases: resolveTsconfigAliases(context.root),\n config,\n contentRoutes: project.manifest.routes.map((route) => route.path),\n context,\n dataPath,\n examplesPath,\n needsReact,\n needsSvelte,\n needsVue,\n openapiPath,\n pages,\n searchClientPath,\n themePath,\n })\n ),\n write(\n join(out, \"package.json\"),\n runtimePackageTemplate(\n runtimeDependencies({ config, needsReact, needsSvelte, needsVue })\n )\n ),\n write(join(out, \"tsconfig.json\"), runtimeTsconfigTemplate()),\n write(join(srcDir, \"env.d.ts\"), envTemplate()),\n write(\n join(srcDir, \"content.config.ts\"),\n contentConfigTemplate({\n config,\n context,\n filesystem: hasFilesystemSource,\n staged: hasStaged,\n })\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].astro\"),\n catchAllPageTemplate({\n askEnabled,\n exportEpub,\n exportPdf,\n mathEnabled: config.markdown.math,\n needsReact,\n })\n ),\n write(join(srcDir, \"generated\", \"components.ts\"), slotPlan.module),\n write(\n join(srcDir, \"generated\", \"islands.ts\"),\n islandMapTemplate(islandDiscovery.islands)\n ),\n write(\n join(srcDir, \"generated\", \"examples.ts\"),\n exampleMapTemplate(exampleDiscovery.examples)\n ),\n write(\n themePath,\n tailwindEntryTemplate({\n configTokens: `${buildThemeCss(config.theme)}${buildFontsCss(config.theme.fonts)}`,\n sources: [\n `${BLUME_SRC}/**/*.{astro,ts,tsx}`,\n `${context.root}/**/*.{astro,mdx,ts,tsx}`,\n ],\n twoslashCss: twoslashCss(),\n userTheme,\n })\n ),\n ]);\n\n // Per-island hydration wrappers for the `islands/` convention. The map module\n // (written above, always) imports these; orphans from removed islands are\n // pruned at the end of the pass.\n await Promise.all(\n islandDiscovery.islands.map((island) =>\n write(\n join(srcDir, \"generated\", \"islands\", `${island.name}.astro`),\n islandWrapperTemplate(island)\n )\n )\n );\n\n // Per-override hydration wrappers for `defineComponents` islands and `client:*`\n // layout/mdx overrides. The generated `components.ts` (written above) imports\n // these; orphans from removed overrides are pruned at the end of the pass.\n await Promise.all(\n slotPlan.wrappers.map((wrapper) =>\n write(\n join(srcDir, \"generated\", \"component-slots\", `${wrapper.name}.astro`),\n wrapper.content\n )\n )\n );\n\n // Per-example live wrappers for the `examples/` convention, resolved by\n // `<Component path>` through the `examples.ts` map (written above, always).\n await Promise.all(\n exampleDiscovery.examples.map((example) =>\n write(\n join(\n srcDir,\n \"generated\",\n \"examples\",\n `${exampleSlug(example.path)}.astro`\n ),\n exampleWrapperTemplate(example)\n )\n )\n );\n\n await writeAskFiles(project, srcDir, write);\n\n await writeMcpFiles(project, mcp, write);\n\n if (config.seo.og.enabled) {\n await write(\n join(srcDir, \"pages\", \"og\", \"[...slug].png.ts\"),\n ogEndpointTemplate(ogRoutes)\n );\n }\n\n // Changelog index (`/changelog`), rendered through the Update timeline layout.\n if (shouldGenerateChangelog(project)) {\n await write(\n join(srcDir, \"pages\", \"changelog.astro\"),\n changelogIndexTemplate({\n askEnabled,\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\n })\n );\n }\n\n // The default 404 page (`/404`), unless the project already owns the route.\n await writeNotFoundPage(write, srcDir, pages, project.graph.pages);\n\n // The provider-specific client loader behind the `blume:search-client` alias\n // is always (re)generated so the alias resolves even when search is disabled.\n await write(searchClientPath, searchClientTemplate(config));\n\n // Client-loaded providers (orama, flexsearch) ship a static index + endpoint.\n if (servesStaticIndex(config.search.provider)) {\n const documents = await buildSearchDocuments(project);\n await write(\n join(srcDir, \"generated\", \"search.json\"),\n `${JSON.stringify(documents)}\\n`\n );\n await write(\n join(srcDir, \"pages\", \"blume-search.json.ts\"),\n searchEndpointTemplate()\n );\n }\n\n // Mixedbread proxies queries through a server endpoint that holds the key.\n if (config.search.provider === \"mixedbread\") {\n await write(\n join(srcDir, \"pages\", \"api\", \"search.ts\"),\n mixedbreadSearchEndpointTemplate(config.search.mixedbread?.storeId ?? \"\")\n );\n }\n\n const rawMarkdown = await buildRawMarkdown(project);\n await Promise.all([\n write(\n join(srcDir, \"generated\", \"raw-markdown.json\"),\n `${JSON.stringify(rawMarkdown)}\\n`\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].md.ts\"),\n rawMarkdownEndpointTemplate()\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].mdx.ts\"),\n rawMarkdownEndpointTemplate()\n ),\n ]);\n\n // Automatic RSS feeds for blog/changelog content types (a no-op when no such\n // pages exist or no deployment.site is configured).\n const feeds = buildRssFeeds(project);\n if (feeds.length > 0) {\n const feedXml = Object.fromEntries(\n feeds.map((feed) => [feed.type, renderRssFeed(feed)])\n );\n await Promise.all([\n write(\n join(srcDir, \"generated\", \"rss.json\"),\n `${JSON.stringify(feedXml)}\\n`\n ),\n write(\n join(srcDir, \"pages\", \"[section]\", \"rss.xml.ts\"),\n rssEndpointTemplate()\n ),\n ]);\n }\n\n // API/AsyncAPI reference pages (Scalar). One self-contained page per source,\n // mounted on its configured route and regenerated each run.\n const warnings: string[] = [\n ...(depsLinkWarning ? [depsLinkWarning] : []),\n ...mcp.warnings,\n ...islandDiscovery.warnings,\n ...exampleDiscovery.warnings,\n ...overrideWarnings,\n ];\n\n // Missing-navigation-target check, now that every servable route is known:\n // content routes, custom `.astro` pages, the generated changelog, and any\n // OpenAPI reference tabs.\n const navTargetRoutes = new Set<string>([\n ...project.graph.routes.keys(),\n ...pages.map((page) => page.pattern),\n ...referenceTabs(config).map((tab) => tab.path),\n ]);\n if (shouldGenerateChangelog(project)) {\n navTargetRoutes.add(\"/changelog\");\n }\n warnings.push(\n ...validateNavTargets(project.graph.navigation, navTargetRoutes).map(\n (diagnostic) =>\n diagnostic.suggestion\n ? `${diagnostic.message} ${diagnostic.suggestion}`\n : diagnostic.message\n )\n );\n\n // Unknown-component check: a `<Tag>` in MDX that isn't a built-in, an island,\n // or a `components.ts` override. Needs the project's own components, known here.\n const knownComponentTags = new Set<string>([\n ...islandDiscovery.islands.map((island) => island.name),\n ...overrideTags,\n ]);\n warnings.push(\n ...validateUsedComponents(\n project.graph.pages,\n knownComponentTags,\n new Set(registry.map((item) => item.name))\n ).map((diagnostic) =>\n diagnostic.suggestion\n ? `${diagnostic.message} ${diagnostic.suggestion}`\n : diagnostic.message\n )\n );\n\n // Provider SDKs are optional peers; warn (rather than fail opaquely in Vite)\n // when the configured provider's package isn't installed. A dep is available\n // if the project installed it (resolves from the root) OR Blume ships it\n // (resolves from the Blume package — the same set the `.blume` deps link\n // exposes to the build). Resolving from the project root alone falsely flagged\n // a shipped SDK like Orama (the default provider) as missing whenever it\n // wasn't hoisted into the project, e.g. under isolated linkers. We resolve\n // from each package's real location rather than through the `.blume` junction,\n // which can't be traversed reliably for store-symlinked deps.\n for (const dep of searchProviderMeta(config.search.provider).runtimeDeps) {\n if (\n !(canResolveFrom(context.root, dep) || canResolveFrom(packageRoot(), dep))\n ) {\n warnings.push(\n `Search provider \"${config.search.provider}\" needs \"${dep}\", which isn't installed. Run \\`npm install ${dep}\\` (or your package manager's equivalent).`\n );\n }\n }\n\n // React ships with Blume; Vue/Svelte islands need their Astro integration\n // installed by the project. Warn early rather than let Vite fail to resolve it.\n warnings.push(...islandFrameworkWarnings(frameworks, context.root));\n if (hasScalarReferences(config)) {\n const references = await buildReferenceFiles({\n config,\n contentRoutes: new Set(project.graph.pages.map((page) => page.route)),\n root: context.root,\n });\n warnings.push(...references.warnings);\n await Promise.all(\n references.files.map((file) =>\n write(join(srcDir, \"pages\", file.pagePath), file.content)\n )\n );\n }\n\n // Data and manifest are not \"structural\" for Astro; they hot-reload.\n await write(\n join(srcDir, \"generated\", \"data.json\"),\n buildRuntimeData(project)\n );\n // The parsed OpenAPI specs behind the `blume:openapi` alias. Always written\n // (even as `{}`) so the alias resolves whether or not a reference is enabled;\n // the source parsed the specs during the scan, so this is just serialization.\n const openApiSource = project.sources.find(isOpenApiSource);\n await write(\n openapiPath,\n `${JSON.stringify(openApiSource ? openApiSource.openApiData() : {})}\\n`\n );\n await write(\n join(out, \"blume.manifest.json\"),\n `${JSON.stringify(project.manifest, null, 2)}\\n`\n );\n\n // Write staged source bodies and prune orphans under `.blume/content` (its own\n // tree, outside `.blume/src`), so a removed remote entry doesn't linger.\n await writeStagedContent(out, staged);\n\n // Remove anything under `.blume/src` this pass didn't write — e.g. an Ask AI\n // endpoint left behind after the feature was switched off.\n await pruneOrphans(srcDir, written);\n\n return { structuralChange: structural.some(Boolean), warnings };\n};\n",
72
72
  "import type { BlumeProject } from \"../core/project-graph.ts\";\nimport { buildSearchDocuments } from \"../search/documents.ts\";\nimport type { AskData } from \"./ask-context.ts\";\n\n/**\n * Build the grounding snapshot the Ask AI endpoint serves. Like the MCP server,\n * Ask AI is independent of on-page search, so documents are indexed even when the\n * search provider is `none` (`includeWhenDisabled`). `locale` is kept (unlike the\n * MCP snapshot) so retrieval can be filtered to the current page's language.\n */\nexport const buildAskData = async (project: BlumeProject): Promise<AskData> => {\n const documents = await buildSearchDocuments(project, {\n includeWhenDisabled: true,\n });\n return {\n documents: documents.map((doc) => ({\n content: doc.content,\n description: doc.description,\n locale: doc.locale,\n route: doc.route,\n title: doc.title,\n })),\n site: project.config.deployment.site ?? null,\n };\n};\n",
@@ -74,56 +74,57 @@
74
74
  "import { readFile } from \"node:fs/promises\";\n\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { readEntryText } from \"../core/sources/read.ts\";\nimport type { RouteManifestEntry } from \"../core/types.ts\";\n\n/**\n * Map every route to its raw source Markdown. Powers the `<route>.md` and\n * `<route>.mdx` endpoints, which serve the original source so AI tools — and\n * readers — can fetch any page as plain Markdown.\n */\nexport const buildRawMarkdown = async (\n project: BlumeProject\n): Promise<Record<string, string>> => {\n const pageById = new Map(project.graph.pages.map((page) => [page.id, page]));\n\n const readRoute = async (route: RouteManifestEntry): Promise<string> => {\n const page = pageById.get(route.id);\n if (page) {\n return await readEntryText(project, page);\n }\n return route.sourcePath ? await readFile(route.sourcePath, \"utf-8\") : \"\";\n };\n\n const entries = await Promise.all(\n project.manifest.routes.map(\n async (route) => [route.path, await readRoute(route)] as const\n )\n );\n return Object.fromEntries(entries);\n};\n",
75
75
  "import type { BlumeProject } from \"../../core/project-graph.ts\";\nimport type { Navigation } from \"../../core/types.ts\";\nimport { buildSearchDocuments } from \"../../search/documents.ts\";\nimport type { OramaDoc } from \"../../search/orama-index.ts\";\nimport { buildRawMarkdown } from \"../markdown.ts\";\n\n/** A page entry surfaced by the `list_pages` MCP tool. */\nexport interface McpRoute {\n contentType: string;\n description?: string;\n indexable: boolean;\n lastModified: string | null;\n route: string;\n title: string;\n}\n\n/**\n * The self-contained snapshot the generated MCP endpoint serves. Bundles the\n * search documents, raw page Markdown, route list, and navigation so the server\n * works regardless of the configured search provider and needs no filesystem\n * access at request time. Serialized to `generated/mcp-data.json`.\n */\nexport interface McpData {\n documents: OramaDoc[];\n instructions?: string;\n name: string;\n navigation: Navigation;\n pages: Record<string, string>;\n routes: McpRoute[];\n site: string | null;\n version: string;\n}\n\n/** Build the MCP data snapshot from a resolved project. */\nexport const buildMcpData = async (project: BlumeProject): Promise<McpData> => {\n const { config, graph, manifest } = project;\n const [documents, pages] = await Promise.all([\n // The MCP server is independent of on-page search, so index docs even when\n // the search provider is `none`.\n buildSearchDocuments(project, { includeWhenDisabled: true }),\n buildRawMarkdown(project),\n ]);\n\n const descriptionById = new Map(\n graph.pages.map((page) => [page.id, page.description])\n );\n\n const routes: McpRoute[] = manifest.routes\n .filter((route) => !route.hidden)\n .map((route) => ({\n contentType: route.contentType,\n description: descriptionById.get(route.id),\n indexable: route.indexable,\n lastModified: route.lastModified ?? null,\n route: route.path,\n title: route.title,\n }));\n\n return {\n documents: documents.map((doc) => ({\n content: doc.content,\n description: doc.description,\n route: doc.route,\n title: doc.title,\n })),\n instructions: config.mcp.instructions,\n name: config.mcp.name ?? config.title,\n navigation: graph.navigation,\n pages,\n routes,\n site: config.deployment.site ?? null,\n version: manifest.blumeVersion,\n };\n};\n",
76
76
  "/**\n * Static metadata for the MCP tools Blume exposes. Shared by the server (which\n * pairs each entry with a Zod input schema and handler) and the `.well-known`\n * discovery documents, so tool names and descriptions never drift between the\n * live server and its advertised capabilities.\n */\n\n/** A read-only, non-mutating tool hint set (every Blume tool is read-only). */\nconst READ_ONLY = { openWorldHint: false, readOnlyHint: true } as const;\n\nexport interface McpToolMeta {\n annotations: { openWorldHint: boolean; readOnlyHint: boolean };\n description: string;\n name: string;\n title: string;\n}\n\nexport const MCP_TOOLS: McpToolMeta[] = [\n {\n annotations: READ_ONLY,\n description:\n \"Full-text search across the documentation. Returns matching pages with their title, route, and a short excerpt. Use this first to discover relevant pages, then `get_page` to read one in full.\",\n name: \"search_docs\",\n title: \"Search documentation\",\n },\n {\n annotations: READ_ONLY,\n description:\n \"Fetch a single documentation page as its original Markdown source (frontmatter included). Pass a route from `search_docs` or `list_pages`, e.g. `/guides/install`.\",\n name: \"get_page\",\n title: \"Get page Markdown\",\n },\n {\n annotations: READ_ONLY,\n description:\n \"List every documentation page with its route, title, description, and content type. Useful for enumerating the docs or finding a page when search is too narrow.\",\n name: \"list_pages\",\n title: \"List pages\",\n },\n {\n annotations: READ_ONLY,\n description:\n \"Return the documentation navigation tree (header tabs and the sidebar hierarchy), reflecting how the docs are organized for readers.\",\n name: \"get_navigation\",\n title: \"Get navigation\",\n },\n];\n",
77
- "import { MCP_TOOLS } from \"./tools.ts\";\n\n/** Inputs needed to describe the MCP server in discovery documents. */\nexport interface McpDiscoveryInput {\n name: string;\n route: string;\n site: string | null;\n version: string;\n}\n\n/** The MCP server's address — absolute when a site is configured. */\nconst serverUrl = (input: McpDiscoveryInput): string =>\n input.site ? new URL(input.route, input.site).href : input.route;\n\n/**\n * The `/.well-known/mcp.json` discovery document: the minimal pointer agents use\n * to find the server and its transport.\n */\nexport const buildMcpDiscovery = (\n input: McpDiscoveryInput\n): Record<string, unknown> => ({\n servers: [\n {\n name: input.name,\n transport: \"streamable-http\",\n url: serverUrl(input),\n },\n ],\n});\n\n/**\n * The `/.well-known/mcp/server-card.json` document: richer metadata including\n * the advertised tool set (full input schemas are served live via `tools/list`).\n */\nexport const buildMcpServerCard = (\n input: McpDiscoveryInput\n): Record<string, unknown> => ({\n description: `Model Context Protocol server for the ${input.name} documentation.`,\n name: input.name,\n tools: MCP_TOOLS.map((tool) => ({\n annotations: tool.annotations,\n description: tool.description,\n name: tool.name,\n title: tool.title,\n })),\n transport: \"streamable-http\",\n url: serverUrl(input),\n version: input.version,\n});\n",
77
+ "import { MCP_TOOLS } from \"./tools.ts\";\n\n/** Inputs needed to describe the MCP server in discovery documents. */\nexport interface McpDiscoveryInput {\n name: string;\n route: string;\n site: string | null;\n version: string;\n}\n\n/** The MCP server's address — absolute when a site is configured. */\nconst serverUrl = (input: McpDiscoveryInput): string =>\n // Concatenate rather than `new URL(route, site)` — a root-absolute route\n // would drop the base path of a subpath deployment (`acme.com/docs`).\n input.site ? `${input.site.replace(/\\/+$/u, \"\")}${input.route}` : input.route;\n\n/**\n * The `/.well-known/mcp.json` discovery document: the minimal pointer agents use\n * to find the server and its transport.\n */\nexport const buildMcpDiscovery = (\n input: McpDiscoveryInput\n): Record<string, unknown> => ({\n servers: [\n {\n name: input.name,\n transport: \"streamable-http\",\n url: serverUrl(input),\n },\n ],\n});\n\n/**\n * The `/.well-known/mcp/server-card.json` document: richer metadata including\n * the advertised tool set (full input schemas are served live via `tools/list`).\n */\nexport const buildMcpServerCard = (\n input: McpDiscoveryInput\n): Record<string, unknown> => ({\n description: `Model Context Protocol server for the ${input.name} documentation.`,\n name: input.name,\n tools: MCP_TOOLS.map((tool) => ({\n annotations: tool.annotations,\n description: tool.description,\n name: tool.name,\n title: tool.title,\n })),\n transport: \"streamable-http\",\n url: serverUrl(input),\n version: input.version,\n});\n",
78
78
  "/**\n * The MDX component tags Blume ships (the keys of the catch-all's component map,\n * plus composed sub-parts like `Color.Item`/`Tree.File`). Used by the\n * missing-component diagnostic to tell an unknown `<Tag>` from a built-in. Keep\n * in sync with the component map in `astro/templates.ts`.\n */\nexport const BUILTIN_MDX_TAGS = new Set<string>([\n \"Accordion\",\n \"AccordionItem\",\n \"ApiOverview\",\n \"AutoTypeTable\",\n \"Badge\",\n \"Callout\",\n \"Card\",\n \"CardGroup\",\n \"CodeBlock\",\n \"CodeGroup\",\n \"Color\",\n \"Column\",\n \"Columns\",\n \"Component\",\n \"Diff\",\n \"Expandable\",\n \"FileTree\",\n \"Frame\",\n \"GithubInfo\",\n \"Icon\",\n \"Math\",\n \"Operation\",\n \"Panel\",\n \"ParamField\",\n \"Prompt\",\n \"RequestField\",\n \"ResponseField\",\n \"Step\",\n \"Steps\",\n \"Tab\",\n \"Tabs\",\n \"Tile\",\n \"Tooltip\",\n \"Tree\",\n \"TypeTable\",\n \"Visibility\",\n \"YouTube\",\n]);\n",
79
79
  "import { BUILTIN_MDX_TAGS } from \"./builtin-tags.ts\";\nimport type { Diagnostic, PageRecord } from \"./types.ts\";\n\n/** `CardGroup` → `card-group`, matching registry item names. */\nconst toKebab = (tag: string): string =>\n tag\n .replaceAll(/(?<lower>[a-z0-9])(?<upper>[A-Z])/gu, \"$<lower>-$<upper>\")\n .toLowerCase();\n\n/**\n * Warn when an `.mdx` page uses a `<Component>` tag that resolves to nothing —\n * a built-in, an island, or a `components.ts` override — so a typo surfaces as a\n * friendly diagnostic (with a `blume add` hint where one exists) instead of a raw\n * MDX \"X is not defined\" build error. `extraTags` are the project's own known\n * components (islands + overrides); `registryNames` gates the install hint.\n */\nexport const validateUsedComponents = (\n pages: PageRecord[],\n extraTags: Set<string>,\n registryNames: Set<string>\n): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const page of pages) {\n for (const tag of page.componentsUsed ?? []) {\n if (BUILTIN_MDX_TAGS.has(tag) || extraTags.has(tag) || seen.has(tag)) {\n continue;\n }\n seen.add(tag);\n const name = toKebab(tag);\n const suggestion = registryNames.has(name)\n ? `Run \\`blume add ${name}\\` to install it, or register <${tag}> in components.ts (mdx).`\n : `Register <${tag}> in components.ts (mdx), or add an islands/${tag}.tsx component.`;\n diagnostics.push({\n code: \"BLUME_UNKNOWN_COMPONENT\",\n file: page.sourcePath ?? page.id,\n message: `<${tag}> is used in ${page.route} but isn't a known component.`,\n severity: \"warning\",\n suggestion,\n });\n }\n }\n return diagnostics;\n};\n",
80
80
  "import { existsSync } from \"node:fs\";\n\nimport { dirname, extname, isAbsolute, resolve } from \"pathe\";\nimport ts from \"typescript\";\n\nimport type { HydrationMode } from \"./schema.ts\";\n\n/**\n * Static analysis of a user `components.ts`/`.tsx`.\n *\n * Astro can only hydrate a component it imports *statically by path*, so to honor\n * hydration on overrides (the `islands` group and `client:*` layout/mdx\n * descriptors) Blume needs each override's source path and client mode at\n * generate time — before Vite compiles anything. We read that here by parsing the\n * file with the TypeScript compiler API (never executing it, so `.astro`/React\n * imports don't need a Node loader).\n *\n * Only statically-analyzable authoring is understood: a default export that is an\n * object literal or a `defineComponents({ ... })` call, with entries that are\n * imported identifiers, path strings, or `{ component, client, media }` object\n * literals. Anything else falls back to the runtime overrides object (which can\n * still render a static component, just not hydrate it).\n */\n\nexport type OverrideFramework = \"react\" | \"svelte\" | \"vue\";\n\n/** How a wrapper should import an override's component. */\nexport interface OverrideImport {\n /** Framework inferred from the file extension, or null (e.g. `.astro`). */\n framework: OverrideFramework | null;\n /** Exported name to import: `\"default\"` or a named export. */\n name: string;\n /** Absolute path (for relative/absolute specifiers) or a bare specifier. */\n path: string;\n}\n\n/** A normalized override entry, keyed by its MDX tag / layout-slot name. */\nexport interface NormalizedOverride {\n /** Present when the override should hydrate; drives the `client:*` directive. */\n client?: HydrationMode;\n /**\n * True when the value is a bare imported identifier, so the runtime overrides\n * object already holds a usable component (no generated import needed for a\n * non-hydrated entry). False for path strings and `{ component }` descriptors.\n */\n identifier: boolean;\n key: string;\n /** Media query for `client: \"media\"`. */\n media?: string;\n /**\n * How to obtain the component. `null` means it couldn't be resolved to a file,\n * so the runtime overrides object is used (static render only).\n */\n source: OverrideImport | null;\n}\n\nexport interface ComponentOverrideAnalysis {\n islands: NormalizedOverride[];\n layout: NormalizedOverride[];\n mdx: NormalizedOverride[];\n warnings: string[];\n}\n\nconst GROUPS = [\"mdx\", \"layout\", \"islands\"] as const;\ntype Group = (typeof GROUPS)[number];\n\nconst FRAMEWORK_BY_EXT: Record<string, OverrideFramework> = {\n jsx: \"react\",\n svelte: \"svelte\",\n tsx: \"react\",\n vue: \"vue\",\n};\n\nconst FRAMEWORK_LABEL: Record<OverrideFramework, string> = {\n react: \"React\",\n svelte: \"Svelte\",\n vue: \"Vue\",\n};\n\n/** Extensions probed (in order) when a specifier omits one. */\nconst COMPONENT_EXTS = [\n \"astro\",\n \"tsx\",\n \"ts\",\n \"jsx\",\n \"js\",\n \"mjs\",\n \"vue\",\n \"svelte\",\n];\n\nconst HYDRATION_MODES = new Set<HydrationMode>([\n \"idle\",\n \"load\",\n \"media\",\n \"only\",\n \"visible\",\n]);\n\ninterface ImportBinding {\n /** Exported name: `\"default\"` or a named export. */\n imported: string;\n specifier: string;\n}\n\n/** An override's declared component before framework/path resolution. */\ninterface RawDescriptor {\n client?: HydrationMode;\n hadComponent: boolean;\n media?: string;\n source: OverrideImport | null;\n}\n\nconst emptyAnalysis = (): ComponentOverrideAnalysis => ({\n islands: [],\n layout: [],\n mdx: [],\n warnings: [],\n});\n\nconst propName = (name: ts.PropertyName): string | undefined =>\n ts.isIdentifier(name) || ts.isStringLiteral(name) ? name.text : undefined;\n\n/** Map each local binding name to the module + exported name it came from. */\nconst collectImports = (\n sourceFile: ts.SourceFile\n): Map<string, ImportBinding> => {\n const map = new Map<string, ImportBinding>();\n for (const statement of sourceFile.statements) {\n if (\n !ts.isImportDeclaration(statement) ||\n !ts.isStringLiteral(statement.moduleSpecifier)\n ) {\n continue;\n }\n const specifier = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n if (!clause) {\n continue;\n }\n if (clause.name) {\n map.set(clause.name.text, { imported: \"default\", specifier });\n }\n const named = clause.namedBindings;\n if (named && ts.isNamedImports(named)) {\n for (const element of named.elements) {\n map.set(element.name.text, {\n imported: (element.propertyName ?? element.name).text,\n specifier,\n });\n }\n }\n }\n return map;\n};\n\n/** Unwrap `defineComponents({...})`, `({...})`, or `{...} as T` to the object. */\nconst unwrapObject = (\n expression: ts.Expression\n): ts.ObjectLiteralExpression | undefined => {\n if (ts.isObjectLiteralExpression(expression)) {\n return expression;\n }\n if (ts.isCallExpression(expression)) {\n const [arg] = expression.arguments;\n return arg && ts.isObjectLiteralExpression(arg) ? arg : undefined;\n }\n if (\n ts.isAsExpression(expression) ||\n ts.isParenthesizedExpression(expression)\n ) {\n return unwrapObject(expression.expression);\n }\n return undefined;\n};\n\nconst findDefaultExportObject = (\n sourceFile: ts.SourceFile\n): ts.ObjectLiteralExpression | undefined => {\n for (const statement of sourceFile.statements) {\n if (ts.isExportAssignment(statement) && !statement.isExportEquals) {\n return unwrapObject(statement.expression);\n }\n }\n return undefined;\n};\n\nconst probeExtension = (base: string): string | null => {\n for (const extension of COMPONENT_EXTS) {\n const candidate = `${base}.${extension}`;\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return null;\n};\n\n/** Resolve a module specifier to a wrapper-importable path + framework. */\nconst toImport = (\n specifier: string,\n imported: string,\n dir: string\n): OverrideImport => {\n const relative = specifier.startsWith(\".\") || isAbsolute(specifier);\n let path = specifier;\n let extension = extname(specifier).slice(1).toLowerCase();\n if (relative) {\n const absolute = isAbsolute(specifier)\n ? specifier\n : resolve(dir, specifier);\n if (extension) {\n path = absolute;\n } else {\n const probed = probeExtension(absolute);\n path = probed ?? absolute;\n extension = probed ? extname(probed).slice(1).toLowerCase() : \"\";\n }\n }\n return {\n framework: FRAMEWORK_BY_EXT[extension] ?? null,\n name: imported,\n path,\n };\n};\n\nconst resolveIdentifier = (\n name: string,\n imports: Map<string, ImportBinding>,\n dir: string\n): OverrideImport | null => {\n const binding = imports.get(name);\n return binding ? toImport(binding.specifier, binding.imported, dir) : null;\n};\n\nconst readDescriptor = (\n object: ts.ObjectLiteralExpression,\n imports: Map<string, ImportBinding>,\n dir: string\n): RawDescriptor => {\n const descriptor: RawDescriptor = { hadComponent: false, source: null };\n for (const property of object.properties) {\n if (ts.isShorthandPropertyAssignment(property)) {\n if (property.name.text === \"component\") {\n descriptor.hadComponent = true;\n descriptor.source = resolveIdentifier(property.name.text, imports, dir);\n }\n continue;\n }\n if (!ts.isPropertyAssignment(property)) {\n continue;\n }\n const name = propName(property.name);\n const init = property.initializer;\n if (name === \"component\") {\n descriptor.hadComponent = true;\n if (ts.isStringLiteral(init)) {\n descriptor.source = toImport(init.text, \"default\", dir);\n } else if (ts.isIdentifier(init)) {\n descriptor.source = resolveIdentifier(init.text, imports, dir);\n }\n } else if (\n name === \"client\" &&\n ts.isStringLiteral(init) &&\n HYDRATION_MODES.has(init.text as HydrationMode)\n ) {\n descriptor.client = init.text as HydrationMode;\n } else if (name === \"media\" && ts.isStringLiteral(init)) {\n descriptor.media = init.text;\n }\n }\n return descriptor;\n};\n\n/** Apply cross-cutting validation and produce the final normalized override. */\nconst finalize = (\n key: string,\n group: Group,\n descriptor: RawDescriptor,\n label: string,\n identifier: boolean,\n warnings: string[]\n): NormalizedOverride | null => {\n const { client, media, source } = descriptor;\n\n if (group === \"islands\") {\n if (!source) {\n warnings.push(\n `Island override \"${key}\" couldn't be resolved to a file. Reference it by an imported component or a path string with an extension.`\n );\n return null;\n }\n if (!source.framework) {\n warnings.push(\n `Island override \"${key}\" (${label}) is not a React, Vue, or Svelte component; only framework components can be islands.`\n );\n return null;\n }\n }\n\n if (client === \"media\" && !media) {\n warnings.push(\n `Override \"${key}\" uses client: \"media\" but no \\`media\\` query was given; it will hydrate as if \\`client: \"load\"\\`.`\n );\n }\n\n if (client === \"only\" && source && !source.framework) {\n warnings.push(\n `Override \"${key}\" uses client: \"only\" but its framework couldn't be inferred; reference a .tsx/.jsx/.vue/.svelte file.`\n );\n }\n\n if (client && !source) {\n warnings.push(\n `Override \"${key}\" declares client: \"${client}\" but its component couldn't be resolved to a file, so it can't hydrate. Reference it by an imported component or a path string.`\n );\n return { identifier, key, source: null };\n }\n\n if (!client && source?.framework) {\n warnings.push(\n `Override \"${key}\" points to a ${FRAMEWORK_LABEL[source.framework]} component (${label}) but has no hydration mode, so it renders as static HTML with no interactivity. Add one, e.g. \\`${key}: { component: ${JSON.stringify(label)}, client: \"load\" }\\`.`\n );\n }\n\n return {\n identifier,\n key,\n ...(client ? { client } : {}),\n ...(media ? { media } : {}),\n source,\n };\n};\n\nconst normalizeEntry = (\n entry: ts.ObjectLiteralElementLike,\n group: Group,\n imports: Map<string, ImportBinding>,\n dir: string,\n warnings: string[]\n): NormalizedOverride | null => {\n const defaultClient: HydrationMode | undefined =\n group === \"islands\" ? \"visible\" : undefined;\n\n if (ts.isShorthandPropertyAssignment(entry)) {\n const name = entry.name.text;\n return finalize(\n name,\n group,\n {\n client: defaultClient,\n hadComponent: true,\n source: resolveIdentifier(name, imports, dir),\n },\n name,\n true,\n warnings\n );\n }\n\n if (!ts.isPropertyAssignment(entry)) {\n return null;\n }\n const key = propName(entry.name);\n if (!key) {\n return null;\n }\n const value = entry.initializer;\n\n if (ts.isIdentifier(value)) {\n return finalize(\n key,\n group,\n {\n client: defaultClient,\n hadComponent: true,\n source: resolveIdentifier(value.text, imports, dir),\n },\n value.text,\n true,\n warnings\n );\n }\n if (ts.isStringLiteral(value)) {\n return finalize(\n key,\n group,\n {\n client: defaultClient,\n hadComponent: true,\n source: toImport(value.text, \"default\", dir),\n },\n value.text,\n false,\n warnings\n );\n }\n if (ts.isObjectLiteralExpression(value)) {\n const descriptor = readDescriptor(value, imports, dir);\n if (!descriptor.hadComponent) {\n warnings.push(\n `Override \"${key}\" is an object without a \\`component\\` field; expected \\`{ component, client }\\`.`\n );\n return null;\n }\n if (!descriptor.source) {\n warnings.push(\n `Override \"${key}\"'s \\`component\\` couldn't be resolved to a file. Reference an imported component or a path string with an extension.`\n );\n return null;\n }\n return finalize(\n key,\n group,\n { ...descriptor, client: descriptor.client ?? defaultClient },\n key,\n false,\n warnings\n );\n }\n\n // An inline function/expression: keep it on the runtime object (static only).\n return { identifier: false, key, source: null };\n};\n\n/**\n * Parse a user `components.ts`/`.tsx` and return its normalized overrides. Never\n * executes the file. On a parse failure or unrecognized shape, returns empty\n * groups so generation falls back to the plain runtime overrides object.\n */\nexport const analyzeComponentOverrides = (\n source: string,\n filePath: string\n): ComponentOverrideAnalysis => {\n const result = emptyAnalysis();\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith(\"tsx\") ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n );\n\n const object = findDefaultExportObject(sourceFile);\n if (!object) {\n return result;\n }\n\n const imports = collectImports(sourceFile);\n const dir = dirname(filePath);\n\n for (const property of object.properties) {\n if (!ts.isPropertyAssignment(property)) {\n continue;\n }\n const name = propName(property.name);\n if (\n !(name && (GROUPS as readonly string[]).includes(name)) ||\n !ts.isObjectLiteralExpression(property.initializer)\n ) {\n continue;\n }\n const group = name as Group;\n for (const entry of property.initializer.properties) {\n const normalized = normalizeEntry(\n entry,\n group,\n imports,\n dir,\n result.warnings\n );\n if (normalized) {\n result[group].push(normalized);\n }\n }\n }\n\n return result;\n};\n",
81
81
  "import { z } from \"zod\";\n\nimport { UI_PACKS } from \"./ui-packs/index.ts\";\n\n/**\n * Translatable UI chrome strings.\n *\n * The schema is the single source of truth: each field's `.default()` is the\n * English baseline, so `EN_UI = uiStringsSchema.parse({})`. Shipped packs and\n * user overrides merge on top (see {@link resolveUIStrings}). Grouped by surface\n * to keep the runtime payload and component props readable.\n */\nconst uiStringsObject = z.object({\n actions: z\n .object({\n addToCursor: z.string().default(\"Add to Cursor\"),\n addToVscode: z.string().default(\"Add to VS Code\"),\n askAI: z.string().default(\"Ask AI about this page\"),\n connectMcp: z.string().default(\"Connect to MCP\"),\n copied: z.string().default(\"Copied!\"),\n copyClaudeCode: z.string().default(\"Copy Claude Code command\"),\n copyMarkdown: z.string().default(\"Copy as Markdown\"),\n copyServerUrl: z.string().default(\"Copy server URL\"),\n edit: z.string().default(\"Edit on GitHub\"),\n openInChat: z.string().default(\"Open in chat\"),\n scrollToTop: z.string().default(\"Scroll to top\"),\n })\n .default({}),\n ask: z\n .object({\n empty: z.string().default(\"Ask a question about the docs.\"),\n error: z.string().default(\"Sorry, something went wrong.\"),\n label: z.string().default(\"Ask a question\"),\n placeholder: z.string().default(\"Ask a question…\"),\n send: z.string().default(\"Send\"),\n title: z.string().default(\"Ask AI\"),\n })\n .default({}),\n feedback: z\n .object({\n no: z.string().default(\"No\"),\n question: z.string().default(\"Was this page helpful?\"),\n thanks: z.string().default(\"Thanks for your feedback!\"),\n yes: z.string().default(\"Yes\"),\n })\n .default({}),\n languageSwitcher: z\n .object({\n label: z.string().default(\"Language\"),\n untranslated: z.string().default(\"Not translated\"),\n })\n .default({}),\n notFound: z\n .object({\n description: z\n .string()\n .default(\"We couldn't find the page you're looking for.\"),\n home: z.string().default(\"Back to home\"),\n title: z.string().default(\"Page not found\"),\n })\n .default({}),\n page: z\n .object({\n lastUpdated: z.string().default(\"Last updated on\"),\n next: z.string().default(\"Next\"),\n previous: z.string().default(\"Previous\"),\n skipToContent: z.string().default(\"Skip to content\"),\n })\n .default({}),\n search: z\n .object({\n allLanguages: z.string().default(\"All languages\"),\n button: z.string().default(\"Search\"),\n devOnly: z\n .string()\n .default(\"Search is available in the production build.\"),\n label: z.string().default(\"Search docs\"),\n noResults: z.string().default(\"No results found.\"),\n placeholder: z.string().default(\"Search documentation…\"),\n })\n .default({}),\n toc: z\n .object({\n title: z.string().default(\"On this page\"),\n })\n .default({}),\n});\n\nexport const uiStringsSchema = uiStringsObject.default({});\n\n/** A fully-resolved dictionary; every key present. */\nexport type UIStrings = z.infer<typeof uiStringsObject>;\n\n/** The English baseline, derived from the schema defaults. */\nexport const EN_UI: UIStrings = uiStringsObject.parse({});\n\n/**\n * A partial override: `{ group: { key: \"translation\" } }`. Validated loosely\n * (object of objects of strings) so packs and user config can supply only the\n * keys they translate. Unknown groups/keys merge harmlessly.\n */\nexport const uiStringsOverrideSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n);\n\nexport type UIStringsOverride = z.infer<typeof uiStringsOverrideSchema>;\n\n/** Per-locale UI overrides supplied in `i18n.ui`. */\nexport const uiLocaleOverridesSchema = z.record(\n z.string(),\n uiStringsOverrideSchema\n);\n\n/** Merge an override's string leaves onto a base dictionary (two levels deep). */\nconst mergeUI = (base: UIStrings, override?: UIStringsOverride): UIStrings => {\n if (!override) {\n return base;\n }\n const out: UIStrings = structuredClone(base);\n for (const [group, values] of Object.entries(override)) {\n const target = (out as Record<string, Record<string, string>>)[group];\n if (target && values) {\n Object.assign(target, values);\n }\n }\n return out;\n};\n\n/**\n * Built-in translation packs, one module per locale under {@link ./ui-packs}.\n * English is the schema baseline (no pack); every other locale ships a starter\n * pack so adopters get translated chrome out of the box. Re-exported here so the\n * resolver and existing imports keep a single entry point.\n */\nexport { UI_PACKS };\n\n/** Case-insensitive index for region-variant lookup (`pt-br` -> `pt-BR`). */\nconst PACKS_BY_LOWER: Record<string, UIStringsOverride> = Object.fromEntries(\n Object.entries(UI_PACKS).map(([code, pack]) => [code.toLowerCase(), pack])\n);\n\n/**\n * Find the built-in pack for a locale code, tolerating case and region subtags:\n * an exact match wins, then a case-insensitive match (`pt-br` -> `pt-BR`), then\n * the base language (`fr-CA` -> `fr`). So any reasonable code gets sensible\n * chrome without the project having to match our exact casing.\n */\nconst packFor = (code: string): UIStringsOverride | undefined => {\n const lower = code.toLowerCase();\n return (\n UI_PACKS[code] ??\n PACKS_BY_LOWER[lower] ??\n PACKS_BY_LOWER[lower.split(/[-_]/u)[0] ?? lower]\n );\n};\n\n/**\n * Resolve the active dictionary for a locale. Layers, in order:\n * English baseline ← default-locale pack ← default-locale override ←\n * locale pack ← locale override. So a missing key falls back to the default\n * locale's translation, then to English.\n */\nexport const resolveUIStrings = (\n locale: string,\n options: {\n defaultLocale: string;\n overrides?: Record<string, UIStringsOverride>;\n }\n): UIStrings => {\n const { defaultLocale, overrides } = options;\n let dict = EN_UI;\n dict = mergeUI(dict, packFor(defaultLocale));\n dict = mergeUI(dict, overrides?.[defaultLocale]);\n if (locale !== defaultLocale) {\n dict = mergeUI(dict, packFor(locale));\n dict = mergeUI(dict, overrides?.[locale]);\n }\n return dict;\n};\n",
82
- "/**\n * Icon resolution backed by the open Iconify icon sets — Font Awesome (free),\n * Lucide, and Tabler — the three libraries Mintlify exposes. Resolution runs at\n * **build time, server-side**, and returns ready-to-inline SVG, so icons stay\n * zero-JS and fully self-contained (no runtime CDN fetch, unlike Mintlify).\n *\n * Because the Iconify set data is large, this module must only be imported from\n * server contexts (`.astro` frontmatter, the CLI). Client scripts use the tiny\n * hand-inlined set in `./chrome-icons.ts` instead.\n *\n * Coverage vs Mintlify: full parity for every Font Awesome *free* name, Lucide,\n * and Tabler. Font Awesome Pro styles (`light`/`thin`/`duotone`/`sharp-solid`)\n * aren't in the open data, so they fall back to `solid`.\n */\nimport { createRequire } from \"node:module\";\n\nimport type { IconifyJSON } from \"@iconify/types\";\nimport { getIconData, iconToSVG } from \"@iconify/utils\";\n\n// Load the icon-set JSON with a CJS `require` rather than an `import ... with\n// { type: \"json\" }`: the bundled Node CLI drops the import attribute (Bun.build\n// strips it when externalizing) and then rejects the module, whereas `require`\n// of a JSON file needs no attribute and works under both Node and Bun.\nconst requireJson = createRequire(import.meta.url);\nconst loadSet = (pkg: string): IconifyJSON => requireJson(pkg) as IconifyJSON;\n\nconst SETS: Record<string, IconifyJSON> = {\n \"fa6-brands\": loadSet(\"@iconify-json/fa6-brands/icons.json\"),\n \"fa6-regular\": loadSet(\"@iconify-json/fa6-regular/icons.json\"),\n \"fa6-solid\": loadSet(\"@iconify-json/fa6-solid/icons.json\"),\n lucide: loadSet(\"@iconify-json/lucide/icons.json\"),\n tabler: loadSet(\"@iconify-json/tabler/icons.json\"),\n};\n\n/** Blume's default library when a project sets no `icons.library`. */\nconst DEFAULT_SET = \"lucide\";\n\n/** `icons.library` config value → Iconify set. */\nconst LIBRARY_SETS: Record<string, string> = {\n fa: \"fa6-solid\",\n \"font-awesome\": \"fa6-solid\",\n fontawesome: \"fa6-solid\",\n lucide: \"lucide\",\n tabler: \"tabler\",\n};\n\n/**\n * Mintlify Font Awesome `iconType` → Iconify set. The Pro-only styles\n * (`light`/`thin`/`duotone`/`sharp-solid`) aren't in the free data, so they map\n * to `solid` rather than render nothing.\n */\nconst ICON_TYPE_SETS: Record<string, string> = {\n brands: \"fa6-brands\",\n duotone: \"fa6-solid\",\n light: \"fa6-solid\",\n regular: \"fa6-regular\",\n \"sharp-solid\": \"fa6-solid\",\n solid: \"fa6-solid\",\n thin: \"fa6-solid\",\n};\n\n/** Explicit `prefix:name` prefixes (Iconify prefixes + common FA aliases). */\nconst PREFIX_SETS: Record<string, string> = {\n ...LIBRARY_SETS,\n fa: \"fa6-solid\",\n \"fa-brands\": \"fa6-brands\",\n \"fa-regular\": \"fa6-regular\",\n \"fa-solid\": \"fa6-solid\",\n \"fa6-brands\": \"fa6-brands\",\n \"fa6-regular\": \"fa6-regular\",\n \"fa6-solid\": \"fa6-solid\",\n fab: \"fa6-brands\",\n far: \"fa6-regular\",\n fas: \"fa6-solid\",\n ti: \"tabler\",\n};\n\nexport interface ResolvedIcon {\n /** Inner SVG markup (self-styled: carries its own fill/stroke). */\n body: string;\n /** The resolved icon name. */\n name: string;\n /** The icon's viewBox, which varies per library (24×24, 512-height, …). */\n viewBox: string;\n}\n\nexport interface ResolveIconOptions {\n /** Font Awesome style selector (`solid`, `regular`, `brands`, …). */\n iconType?: string;\n /** Default library for a bare name (`fontawesome` | `lucide` | `tabler`). */\n library?: string;\n}\n\nconst normalize = (name: string): string =>\n name\n .trim()\n .toLowerCase()\n .replaceAll(/[\\s_]+/gu, \"-\");\n\n/** Which set a bare name resolves against, given library/iconType hints. */\nconst setFor = (options: ResolveIconOptions): string => {\n if (options.iconType) {\n const set = ICON_TYPE_SETS[normalize(options.iconType)];\n if (set) {\n return set;\n }\n }\n if (options.library) {\n const set = LIBRARY_SETS[normalize(options.library)];\n if (set) {\n return set;\n }\n }\n return DEFAULT_SET;\n};\n\nconst fromSet = (setName: string, iconName: string): ResolvedIcon | null => {\n const set = SETS[setName];\n const data = set && getIconData(set, iconName);\n if (!data) {\n return null;\n }\n const { attributes, body } = iconToSVG(data, { height: \"auto\" });\n return { body, name: iconName, viewBox: attributes.viewBox };\n};\n\n// Font Awesome splits brands into their own set, so a bare `github` under a\n// solid/regular default still resolves.\nconst fromFaSet = (setName: string, name: string): ResolvedIcon | null =>\n fromSet(setName, name) ?? fromSet(\"fa6-brands\", name);\n\nconst resolveInSet = (setName: string, name: string): ResolvedIcon | null =>\n setName.startsWith(\"fa6-\")\n ? fromFaSet(setName, name)\n : fromSet(setName, name);\n\n/**\n * Resolve an icon name to inline SVG. Honors an explicit `prefix:name`\n * (`lucide:rocket`, `fa6-brands:github`), then `iconType`, then the configured\n * `library`, falling back to Lucide.\n */\nexport const resolveIcon = (\n name: string,\n options: ResolveIconOptions = {}\n): ResolvedIcon | null => {\n const normalized = normalize(name);\n const colon = normalized.indexOf(\":\");\n if (colon > 0) {\n const setName = PREFIX_SETS[normalized.slice(0, colon)];\n if (setName) {\n return resolveInSet(setName, normalized.slice(colon + 1));\n }\n }\n return resolveInSet(setFor(options), normalized);\n};\n\n/**\n * Whether a name resolves to a known icon. Without a library hint this checks\n * every bundled set, so a valid Font Awesome/Tabler name isn't flagged as a typo\n * just because the project's default library is Lucide.\n */\nexport const hasIcon = (\n name: string,\n options: ResolveIconOptions = {}\n): boolean => {\n if (resolveIcon(name, options)) {\n return true;\n }\n const normalized = normalize(name);\n const bare = normalized.includes(\":\")\n ? normalized.slice(normalized.indexOf(\":\") + 1)\n : normalized;\n return Object.values(SETS).some((set) => getIconData(set, bare) !== null);\n};\n",
82
+ "/**\n * Icon resolution backed by the open Iconify icon sets — Font Awesome (free),\n * Lucide, and Tabler — the three libraries Mintlify exposes. Resolution runs at\n * **build time, server-side**, and returns ready-to-inline SVG, so icons stay\n * zero-JS and fully self-contained (no runtime CDN fetch, unlike Mintlify).\n *\n * Because the Iconify set data is large, this module must only be imported from\n * server contexts (`.astro` frontmatter, the CLI). Client scripts use the tiny\n * hand-inlined set in `./chrome-icons.ts` instead.\n *\n * Coverage vs Mintlify: full parity for every Font Awesome *free* name, Lucide,\n * and Tabler. Font Awesome Pro styles (`light`/`thin`/`duotone`/`sharp-solid`)\n * aren't in the open data, so they fall back to `solid`.\n */\nimport { createRequire } from \"node:module\";\n\nimport type { IconifyJSON } from \"@iconify/types\";\nimport { getIconData, iconToSVG } from \"@iconify/utils\";\n\n// Load the icon-set JSON with a CJS `require` rather than an `import ... with\n// { type: \"json\" }`: the bundled Node CLI drops the import attribute (Bun.build\n// strips it when externalizing) and then rejects the module, whereas `require`\n// of a JSON file needs no attribute and works under both Node and Bun.\nconst requireJson = createRequire(import.meta.url);\nconst loadSet = (pkg: string): IconifyJSON => requireJson(pkg) as IconifyJSON;\n\nconst SETS: Record<string, IconifyJSON> = {\n \"fa6-brands\": loadSet(\"@iconify-json/fa6-brands/icons.json\"),\n \"fa6-regular\": loadSet(\"@iconify-json/fa6-regular/icons.json\"),\n \"fa6-solid\": loadSet(\"@iconify-json/fa6-solid/icons.json\"),\n lucide: loadSet(\"@iconify-json/lucide/icons.json\"),\n tabler: loadSet(\"@iconify-json/tabler/icons.json\"),\n};\n\n/** Blume's default library when a project sets no `icons.library`. */\nconst DEFAULT_SET = \"lucide\";\n\n/** `icons.library` config value → Iconify set. */\nconst LIBRARY_SETS: Record<string, string> = {\n fa: \"fa6-solid\",\n \"font-awesome\": \"fa6-solid\",\n fontawesome: \"fa6-solid\",\n lucide: \"lucide\",\n tabler: \"tabler\",\n};\n\n/**\n * Mintlify Font Awesome `iconType` → Iconify set. The Pro-only styles\n * (`light`/`thin`/`duotone`/`sharp-solid`) aren't in the free data, so they map\n * to `solid` rather than render nothing.\n */\nconst ICON_TYPE_SETS: Record<string, string> = {\n brands: \"fa6-brands\",\n duotone: \"fa6-solid\",\n light: \"fa6-solid\",\n regular: \"fa6-regular\",\n \"sharp-solid\": \"fa6-solid\",\n solid: \"fa6-solid\",\n thin: \"fa6-solid\",\n};\n\n/** Explicit `prefix:name` prefixes (Iconify prefixes + common FA aliases). */\nconst PREFIX_SETS: Record<string, string> = {\n ...LIBRARY_SETS,\n fa: \"fa6-solid\",\n \"fa-brands\": \"fa6-brands\",\n \"fa-regular\": \"fa6-regular\",\n \"fa-solid\": \"fa6-solid\",\n \"fa6-brands\": \"fa6-brands\",\n \"fa6-regular\": \"fa6-regular\",\n \"fa6-solid\": \"fa6-solid\",\n fab: \"fa6-brands\",\n far: \"fa6-regular\",\n fas: \"fa6-solid\",\n ti: \"tabler\",\n};\n\n/**\n * Own-property map lookup. Icon names and library/iconType hints come from\n * content and config, so a value like `constructor:x` would otherwise resolve\n * an Object.prototype member (a function) and crash resolution deep in the\n * build with no pointer to the offending page.\n */\nconst ownEntry = <T>(map: Record<string, T>, key: string): T | undefined =>\n Object.hasOwn(map, key) ? map[key] : undefined;\n\nexport interface ResolvedIcon {\n /** Inner SVG markup (self-styled: carries its own fill/stroke). */\n body: string;\n /** The resolved icon name. */\n name: string;\n /** The icon's viewBox, which varies per library (24×24, 512-height, …). */\n viewBox: string;\n}\n\nexport interface ResolveIconOptions {\n /** Font Awesome style selector (`solid`, `regular`, `brands`, …). */\n iconType?: string;\n /** Default library for a bare name (`fontawesome` | `lucide` | `tabler`). */\n library?: string;\n}\n\nconst normalize = (name: string): string =>\n name\n .trim()\n .toLowerCase()\n .replaceAll(/[\\s_]+/gu, \"-\");\n\n/** Which set a bare name resolves against, given library/iconType hints. */\nconst setFor = (options: ResolveIconOptions): string => {\n if (options.iconType) {\n const set = ownEntry(ICON_TYPE_SETS, normalize(options.iconType));\n if (set) {\n return set;\n }\n }\n if (options.library) {\n const set = ownEntry(LIBRARY_SETS, normalize(options.library));\n if (set) {\n return set;\n }\n }\n return DEFAULT_SET;\n};\n\nconst fromSet = (setName: string, iconName: string): ResolvedIcon | null => {\n const set = ownEntry(SETS, setName);\n const data = set && getIconData(set, iconName);\n if (!data) {\n return null;\n }\n const { attributes, body } = iconToSVG(data, { height: \"auto\" });\n return { body, name: iconName, viewBox: attributes.viewBox };\n};\n\n// Font Awesome splits brands into their own set, so a bare `github` under a\n// solid/regular default still resolves.\nconst fromFaSet = (setName: string, name: string): ResolvedIcon | null =>\n fromSet(setName, name) ?? fromSet(\"fa6-brands\", name);\n\nconst resolveInSet = (setName: string, name: string): ResolvedIcon | null =>\n setName.startsWith(\"fa6-\")\n ? fromFaSet(setName, name)\n : fromSet(setName, name);\n\n/**\n * Resolve an icon name to inline SVG. Honors an explicit `prefix:name`\n * (`lucide:rocket`, `fa6-brands:github`), then `iconType`, then the configured\n * `library`, falling back to Lucide.\n */\nexport const resolveIcon = (\n name: string,\n options: ResolveIconOptions = {}\n): ResolvedIcon | null => {\n const normalized = normalize(name);\n const colon = normalized.indexOf(\":\");\n if (colon > 0) {\n const setName = ownEntry(PREFIX_SETS, normalized.slice(0, colon));\n if (setName) {\n return resolveInSet(setName, normalized.slice(colon + 1));\n }\n }\n return resolveInSet(setFor(options), normalized);\n};\n\n/**\n * Whether a name resolves to a known icon. Without a library hint this checks\n * every bundled set, so a valid Font Awesome/Tabler name isn't flagged as a typo\n * just because the project's default library is Lucide.\n */\nexport const hasIcon = (\n name: string,\n options: ResolveIconOptions = {}\n): boolean => {\n if (resolveIcon(name, options)) {\n return true;\n }\n const normalized = normalize(name);\n const bare = normalized.includes(\":\")\n ? normalized.slice(normalized.indexOf(\":\") + 1)\n : normalized;\n return Object.values(SETS).some((set) => getIconData(set, bare) !== null);\n};\n",
83
83
  "import { hasIcon } from \"../theme/icons.ts\";\nimport type { Diagnostic, NavNode, Navigation, PageRecord } from \"./types.ts\";\n\n/**\n * Navigation diagnostics: catch icon typos and structural mistakes (missing\n * pages, duplicate labels) that otherwise fail silently — a wrong icon just\n * doesn't render, a bad tab path just 404s. Run over the built navigation so it\n * covers every source (config, folder meta, frontmatter) at once.\n */\n\nconst IMAGE_ICON =\n /^(?:https?:\\/\\/|data:image\\/|\\/|\\.{1,2}\\/)|\\.(?:avif|gif|jpe?g|png|svg|webp)$/iu;\n\n/** Whether an icon string is an asset (image/URL/inline SVG), not a set name. */\nconst isAssetIcon = (value: string): boolean =>\n value.startsWith(\"<\") || IMAGE_ICON.test(value);\n\n/** Flatten a sidebar tree to every node, descending into groups. */\nconst flattenNodes = (nodes: NavNode[]): NavNode[] =>\n nodes.flatMap((node) =>\n node.kind === \"group\" ? [node, ...flattenNodes(node.children)] : [node]\n );\n\n/** Every icon string referenced anywhere in the navigation, with a label. */\nconst collectIcons = (\n navigation: Navigation\n): { icon: string; where: string }[] => {\n const icons: { icon: string; where: string }[] = [];\n const push = (icon: string | undefined, where: string): void => {\n if (icon) {\n icons.push({ icon, where });\n }\n };\n for (const tab of navigation.tabs) {\n push(tab.icon, `tab \"${tab.label}\"`);\n for (const item of tab.items ?? []) {\n push(item.icon, `tab item \"${item.label}\"`);\n }\n }\n for (const selector of navigation.selectors) {\n for (const item of selector.items) {\n push(item.icon, `selector \"${item.label}\"`);\n }\n }\n const sidebars = [navigation.sidebar];\n for (const sidebar of sidebars) {\n for (const node of flattenNodes(sidebar)) {\n push(node.icon, `\"${node.label}\"`);\n }\n }\n return icons;\n};\n\n/** Warn about icon names that aren't in Blume's set (skipping image/SVG icons). */\nexport const validateNavIcons = (navigation: Navigation): Diagnostic[] => {\n const seen = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n for (const { icon, where } of collectIcons(navigation)) {\n if (isAssetIcon(icon) || hasIcon(icon) || seen.has(icon)) {\n continue;\n }\n seen.add(icon);\n diagnostics.push({\n code: \"BLUME_UNKNOWN_ICON\",\n message: `Unknown icon \"${icon}\" (${where}) — it isn't in Blume's icon set.`,\n severity: \"warning\",\n suggestion:\n \"Use a built-in icon name, an image path/URL, or inline SVG markup.\",\n });\n }\n return diagnostics;\n};\n\n/** Whether an internal path resolves to a page or a section that has pages. */\nconst resolvesToPages = (routes: Set<string>, path: string): boolean =>\n routes.has(path) || [...routes].some((route) => route.startsWith(`${path}/`));\n\n/**\n * Warn when a config-linked tab/selector target has no matching page. `routes`\n * must be the full set of servable routes — content, custom `.astro` pages, and\n * generated routes — so this runs where all three are known (`generateRuntime`),\n * not in the content-only graph build.\n */\nexport const validateNavTargets = (\n navigation: Navigation,\n routes: Set<string>\n): Diagnostic[] => {\n const targets: { label: string; path: string }[] = [\n ...navigation.tabs.map((tab) => ({ label: tab.label, path: tab.path })),\n ...navigation.selectors.flatMap((selector) =>\n selector.items.map((item) => ({ label: item.label, path: item.path }))\n ),\n ];\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const { label, path } of targets) {\n // Only internal, non-anchor paths can be checked against routes.\n if (!path.startsWith(\"/\") || path.startsWith(\"/#\") || seen.has(path)) {\n continue;\n }\n if (!resolvesToPages(routes, path.split(\"#\")[0] ?? path)) {\n seen.add(path);\n diagnostics.push({\n code: \"BLUME_NAV_MISSING_PAGE\",\n message: `Navigation entry \"${label}\" points to ${path}, but no page matches it.`,\n severity: \"warning\",\n suggestion: \"Fix the path, or add a page at that route.\",\n });\n }\n }\n return diagnostics;\n};\n\n/** Warn about two nav items sharing a label at the same sidebar level. */\nconst duplicateLabelDiagnostics = (navigation: Navigation): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const checkLevel = (nodes: NavNode[], where: string): void => {\n const counts = new Map<string, number>();\n for (const node of nodes) {\n counts.set(node.label, (counts.get(node.label) ?? 0) + 1);\n }\n for (const [label, count] of counts) {\n if (count > 1) {\n diagnostics.push({\n code: \"BLUME_NAV_DUPLICATE_LABEL\",\n message: `Duplicate sidebar label \"${label}\" appears ${count} times ${where}.`,\n severity: \"warning\",\n suggestion: \"Give the entries distinct titles.\",\n });\n }\n }\n for (const node of nodes) {\n if (node.kind === \"group\") {\n checkLevel(node.children, `under \"${node.label}\"`);\n }\n }\n };\n const sidebars: { nodes: NavNode[]; where: string }[] = [\n { nodes: navigation.sidebar, where: \"at the top level\" },\n ];\n for (const { nodes, where } of sidebars) {\n checkLevel(nodes, where);\n }\n return diagnostics;\n};\n\n/** Warn when a page shown in the sidebar is marked hidden (so pagination hits it). */\nconst hiddenInSidebarDiagnostics = (\n navigation: Navigation,\n pages: PageRecord[]\n): Diagnostic[] => {\n const hidden = new Set(\n pages.filter((page) => page.meta.sidebar.hidden).map((page) => page.id)\n );\n if (hidden.size === 0) {\n return [];\n }\n const sidebars = [navigation.sidebar];\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const sidebar of sidebars) {\n for (const node of flattenNodes(sidebar)) {\n if (\n node.kind === \"page\" &&\n hidden.has(node.pageId) &&\n !seen.has(node.pageId)\n ) {\n seen.add(node.pageId);\n diagnostics.push({\n code: \"BLUME_NAV_HIDDEN_IN_SIDEBAR\",\n message: `Page \"${node.label}\" is marked hidden but appears in the sidebar (and its pagination).`,\n severity: \"warning\",\n suggestion:\n \"Remove it from the navigation config, or unset sidebar.hidden.\",\n });\n }\n }\n }\n return diagnostics;\n};\n\n/**\n * Structural navigation diagnostics that need only the built navigation +\n * content pages: duplicate sidebar labels at a level, and hidden pages that\n * still surface in the sidebar (so pagination lands on them). Target existence\n * is checked separately by {@link validateNavTargets}, which needs the full\n * route set.\n */\nexport const validateNavStructure = (\n navigation: Navigation,\n pages: PageRecord[]\n): Diagnostic[] => [\n ...duplicateLabelDiagnostics(navigation),\n ...hiddenInSidebarDiagnostics(navigation, pages),\n];\n",
84
84
  "import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { dirname, isAbsolute, join, resolve } from \"pathe\";\n\n/**\n * Read the project's TypeScript path aliases (`compilerOptions.paths`) and turn\n * them into Vite `resolve.alias` entries, so `@/`-style imports in custom pages,\n * islands, and components resolve in the generated Astro build exactly as they\n * do in the user's own tooling.\n *\n * The generated `.blume/` runtime is its own Astro project with its own tsconfig\n * and never inherits the project's, so without this every shadcn-style `@/…`\n * import would have to be rewritten to a relative path. Reading the aliases here\n * lets those components port over unchanged.\n *\n * Best-effort and non-fatal: tsconfig is parsed leniently (it is JSONC —\n * comments and trailing commas), a single `extends` chain is followed to the\n * file that actually declares `paths`, and anything unparseable yields no\n * aliases (the prior behavior).\n */\n\n/** Strip `//` line and `/* *\\/` block comments that sit outside strings. */\nconst stripJsonComments = (text: string): string => {\n let out = \"\";\n let inString = false;\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n if (inString) {\n out += char;\n if (char === \"\\\\\") {\n out += text[index + 1] ?? \"\";\n index += 1;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n if (char === '\"') {\n inString = true;\n out += char;\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"/\") {\n const newline = text.indexOf(\"\\n\", index + 2);\n index = newline === -1 ? text.length : newline - 1;\n continue;\n }\n if (char === \"/\" && text[index + 1] === \"*\") {\n const end = text.indexOf(\"*/\", index + 2);\n index = end === -1 ? text.length : end + 1;\n continue;\n }\n out += char;\n }\n return out;\n};\n\nconst TRAILING_COMMA = /,(?<rest>\\s*[}\\]])/gu;\n\n/** Parse JSONC (tsconfig) into a plain object, or null if it can't be read. */\nconst parseJsonc = (text: string): Record<string, unknown> | null => {\n try {\n const cleaned = stripJsonComments(text).replaceAll(\n TRAILING_COMMA,\n \"$<rest>\"\n );\n const value: unknown = JSON.parse(cleaned);\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n};\n\nconst isFile = (path: string): boolean => {\n try {\n return statSync(path).isFile();\n } catch {\n return false;\n }\n};\n\n/** Resolve a tsconfig `extends` target (relative path, directory, or package). */\nconst resolveExtends = (spec: string, fromDir: string): string | null => {\n if (spec.startsWith(\".\") || isAbsolute(spec)) {\n const candidates = spec.endsWith(\".json\")\n ? [resolve(fromDir, spec)]\n : [\n resolve(fromDir, `${spec}.json`),\n resolve(fromDir, spec, \"tsconfig.json\"),\n resolve(fromDir, spec),\n ];\n return candidates.find(isFile) ?? null;\n }\n // A bare specifier points at a package's shared config (e.g. `@tsconfig/*`).\n try {\n const require_ = createRequire(pathToFileURL(join(fromDir, \"_.js\")).href);\n for (const sub of [`${spec}/tsconfig.json`, spec]) {\n try {\n return require_.resolve(sub);\n } catch {\n // try the next candidate\n }\n }\n } catch {\n // createRequire failed; fall through\n }\n return null;\n};\n\ninterface LoadedPaths {\n /** Directory `paths` entries resolve against (`dirname(file)` + `baseUrl`). */\n baseDir: string;\n paths: Record<string, unknown>;\n}\n\n/** Find the nearest tsconfig in an `extends` chain that declares `paths`. */\nconst loadPaths = (file: string, seen: Set<string>): LoadedPaths | null => {\n if (seen.has(file) || !existsSync(file)) {\n return null;\n }\n seen.add(file);\n const json = parseJsonc(readFileSync(file, \"utf-8\"));\n if (!json) {\n return null;\n }\n const options = (json.compilerOptions ?? {}) as Record<string, unknown>;\n if (options.paths && typeof options.paths === \"object\") {\n const baseUrl = typeof options.baseUrl === \"string\" ? options.baseUrl : \".\";\n return {\n baseDir: resolve(dirname(file), baseUrl),\n paths: options.paths as Record<string, unknown>,\n };\n }\n // `extends` is a string or, since TS 5.0, an array searched first-to-last.\n const bases = Array.isArray(json.extends)\n ? json.extends\n : [json.extends].filter(Boolean);\n for (const base of bases) {\n if (typeof base !== \"string\") {\n continue;\n }\n const resolved = resolveExtends(base, dirname(file));\n const found = resolved ? loadPaths(resolved, seen) : null;\n if (found) {\n return found;\n }\n }\n return null;\n};\n\n/** Convert one tsconfig `paths` mapping to a Vite alias, or null to skip. */\nconst toAlias = (\n key: string,\n value: unknown,\n baseDir: string\n): { find: string; replacement: string } | null => {\n // tsconfig allows a fallback array; Vite aliases are 1:1, so take the first.\n const first = Array.isArray(value) ? value[0] : value;\n if (typeof first !== \"string\") {\n return null;\n }\n const find = key.endsWith(\"/*\") ? key.slice(0, -2) : key;\n const target = first.endsWith(\"/*\") ? first.slice(0, -2) : first;\n // A bare `*`/`/*` catch-all would alias every import — never wire that.\n if (find === \"\" || find === \"*\") {\n return null;\n }\n return { find, replacement: resolve(baseDir, target) };\n};\n\n/**\n * Resolve the project's tsconfig/jsconfig path aliases to absolute Vite\n * `resolve.alias` entries (`find` → absolute replacement). Returns `{}` when no\n * config or no usable `paths` is found.\n */\nexport const resolveTsconfigAliases = (\n root: string\n): Record<string, string> => {\n const entry = [\"tsconfig.json\", \"jsconfig.json\"]\n .map((name) => join(root, name))\n .find((file) => existsSync(file));\n if (!entry) {\n return {};\n }\n const loaded = loadPaths(entry, new Set());\n if (!loaded) {\n return {};\n }\n const aliases: Record<string, string> = {};\n for (const [key, value] of Object.entries(loaded.paths)) {\n const alias = toAlias(key, value, loaded.baseDir);\n if (alias) {\n aliases[alias.find] = alias.replacement;\n }\n }\n return aliases;\n};\n",
85
85
  "import type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { PageRecord } from \"../core/types.ts\";\nimport { escapeXml } from \"./xml.ts\";\n\n/** A single feed entry derived from a content page. */\nexport interface RssItem {\n title: string;\n /** Absolute item URL. */\n link: string;\n description?: string;\n /** Publish date, when the page declares one. */\n date?: Date;\n}\n\n/** A resolved RSS feed for one content type. */\nexport interface RssFeed {\n /** Content type the feed covers, e.g. `blog`. */\n type: string;\n /** Feed URL path, e.g. `/blog/rss.xml`. */\n path: string;\n /** Channel title, e.g. `Blume — Blog`. */\n title: string;\n /** Absolute site link. */\n link: string;\n description?: string;\n items: RssItem[];\n}\n\nconst capitalize = (value: string): string =>\n value.charAt(0).toUpperCase() + value.slice(1);\n\n/** Publish date for a page: top-level `date`, else `changelog.date`. */\nconst pageDate = (page: PageRecord): Date | undefined => {\n const raw = page.meta.date ?? page.meta.changelog?.date;\n if (!raw) {\n return;\n }\n const date = new Date(raw);\n return Number.isNaN(date.getTime()) ? undefined : date;\n};\n\n/**\n * Build an RSS feed per configured content type that has publishable pages.\n * Returns an empty list when RSS is disabled or no `deployment.site` is set —\n * absolute URLs are required for a valid feed, mirroring `buildSitemap`.\n */\nexport const buildRssFeeds = (project: BlumeProject): RssFeed[] => {\n const { config } = project;\n const { rss } = config.seo;\n const { site } = config.deployment;\n if (!(rss.enabled && site)) {\n return [];\n }\n const base = site.replace(/\\/$/u, \"\");\n\n const feeds: RssFeed[] = [];\n for (const type of rss.types) {\n const pages = project.graph.pages.filter(\n (page) =>\n page.contentType === type &&\n !(page.meta.draft || page.meta.sidebar.hidden)\n );\n if (pages.length === 0) {\n continue;\n }\n\n const items: RssItem[] = pages\n .map((page) => ({\n date: pageDate(page),\n description: page.description,\n link: `${base}${page.route}`,\n title: page.title,\n }))\n .toSorted((a, b) => (b.date?.getTime() ?? 0) - (a.date?.getTime() ?? 0))\n .slice(0, rss.limit);\n\n feeds.push({\n description: config.description,\n items,\n link: base,\n path: `/${type}/rss.xml`,\n title: `${config.title} — ${capitalize(type)}`,\n type,\n });\n }\n return feeds;\n};\n\nconst renderItem = (item: RssItem): string => {\n const parts = [\n ` <title>${escapeXml(item.title)}</title>`,\n ` <link>${escapeXml(item.link)}</link>`,\n ` <guid isPermaLink=\"true\">${escapeXml(item.link)}</guid>`,\n ];\n if (item.description) {\n parts.push(` <description>${escapeXml(item.description)}</description>`);\n }\n if (item.date) {\n parts.push(` <pubDate>${item.date.toUTCString()}</pubDate>`);\n }\n return ` <item>\\n${parts.join(\"\\n\")}\\n </item>`;\n};\n\n/** Serialize a resolved feed into an RSS 2.0 XML document. */\nexport const renderRssFeed = (feed: RssFeed): string => {\n const channel = [\n ` <title>${escapeXml(feed.title)}</title>`,\n ` <link>${escapeXml(feed.link)}</link>`,\n ` <description>${escapeXml(feed.description ?? feed.title)}</description>`,\n ` <atom:link href=\"${escapeXml(`${feed.link}${feed.path}`)}\" rel=\"self\" type=\"application/rss+xml\" />`,\n ];\n const items = feed.items.map(renderItem).join(\"\\n\");\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n<channel>\n${channel.join(\"\\n\")}\n${items}\n</channel>\n</rss>\n`;\n};\n",
86
86
  "import type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { NavTab } from \"../core/types.ts\";\n\n/**\n * Pure resolution of the configured API reference blocks into concrete routes,\n * labels, and a renderer choice — no file IO, so the content source, the nav\n * tabs, the Scalar page generator, and the `blume:openapi` data module all share\n * one source of truth. Kept free of any Astro/template imports so `core` can\n * depend on it without a cycle.\n */\n\nexport type ReferenceKind = \"openapi\" | \"asyncapi\";\n\n/** Who renders a reference: Blume's own UI, or the embedded Scalar SPA. */\nexport type ReferenceRenderer = \"blume\" | \"scalar\";\n\n/** Per-block display options for the Blume renderer. */\nexport interface ReferenceDisplay {\n /** Code-sample languages shown per operation. */\n codeSamples: string[];\n /** Whether nested schema rows start expanded. */\n expandSchemas: boolean;\n}\n\n/** A spec source resolved to a concrete route, label, and renderer. */\nexport interface ReferenceSource {\n kind: ReferenceKind;\n renderer: ReferenceRenderer;\n /** Unique token derived from the route; the `<Operation source>` / data key. */\n slug: string;\n /** Normalized route the reference mounts at, e.g. `/reference`. */\n route: string;\n label: string;\n /** Local path or `http(s)` URL, verbatim from config. */\n spec: string;\n /** Per-block Scalar theme name override, if any (Scalar renderer only). */\n theme?: string;\n /** Display options carried through to the Blume renderer. */\n display: ReferenceDisplay;\n}\n\nconst NON_SLUG = /[^a-z0-9]+/gu;\nconst SLUG_EDGES = /^-+|-+$/gu;\nconst ROUTE_EDGES = /^\\/+|\\/+$/gu;\nconst TRAILING_SLASH = /\\/+$/u;\n\nexport const slugify = (text: string): string =>\n text.toLowerCase().replace(NON_SLUG, \"-\").replace(SLUG_EDGES, \"\");\n\n/** Normalize a configured route to a single leading slash, no trailing slash. */\nexport const normalizeRoute = (route: string): string => {\n const trimmed = route.trim();\n const withSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n const noTrailing = withSlash.replace(TRAILING_SLASH, \"\");\n return noTrailing === \"\" ? \"/\" : noTrailing;\n};\n\n/** A stable per-reference token from its route: `/api/events` -> `api-events`. */\nconst routeSlug = (route: string): string =>\n slugify(route.replace(ROUTE_EDGES, \"\")) || \"reference\";\n\ntype Block = ResolvedConfig[\"openapi\"] | ResolvedConfig[\"asyncapi\"];\n\n/** A spec is a single source (`spec` shorthand prepended to any `sources`). */\nconst sourcesOf = (\n block: Block\n): { label?: string; route?: string; spec: string }[] => {\n const sources = [...block.sources];\n if (block.spec) {\n sources.unshift({ spec: block.spec });\n }\n return sources;\n};\n\nconst referencesFor = (\n kind: ReferenceKind,\n block: Block,\n defaultLabel: string,\n renderer: ReferenceRenderer,\n display: ReferenceDisplay\n): ReferenceSource[] => {\n if (!block.enabled) {\n return [];\n }\n const sources = sourcesOf(block);\n const base = normalizeRoute(block.route);\n\n return sources.map((source, index) => {\n const label =\n source.label ??\n (sources.length > 1 ? `${defaultLabel} ${index + 1}` : defaultLabel);\n\n let route: string;\n if (source.route) {\n route = normalizeRoute(source.route);\n } else if (sources.length === 1) {\n route = base;\n } else {\n const suffix = source.label ? slugify(source.label) : \"\";\n route = normalizeRoute(`${base}/${suffix || index + 1}`);\n }\n\n return {\n display,\n kind,\n label,\n renderer,\n route,\n slug: routeSlug(route),\n spec: source.spec,\n theme: block.theme,\n };\n });\n};\n\nconst NO_DISPLAY: ReferenceDisplay = { codeSamples: [], expandSchemas: false };\n\n/**\n * Resolve every enabled reference. OpenAPI honors its `renderer` (Blume's own UI\n * by default); AsyncAPI is always rendered by Scalar for now.\n */\nexport const resolveReferences = (\n config: ResolvedConfig\n): ReferenceSource[] => [\n ...referencesFor(\n \"openapi\",\n config.openapi,\n \"API Reference\",\n config.openapi.renderer,\n {\n codeSamples: config.openapi.codeSamples,\n expandSchemas: config.openapi.expandSchemas,\n }\n ),\n ...referencesFor(\"asyncapi\", config.asyncapi, \"Events\", \"scalar\", NO_DISPLAY),\n];\n\n/** Nav tabs (header links) for every reference, regardless of renderer. */\nexport const referenceTabs = (config: ResolvedConfig): NavTab[] =>\n resolveReferences(config).map((ref) => ({\n label: ref.label,\n path: ref.route,\n }));\n\n/** Blume-rendered OpenAPI references, deduped by route (first wins). */\nexport const blumeReferences = (config: ResolvedConfig): ReferenceSource[] => {\n const seen = new Set<string>();\n const result: ReferenceSource[] = [];\n for (const ref of resolveReferences(config)) {\n if (ref.kind !== \"openapi\" || ref.renderer !== \"blume\") {\n continue;\n }\n if (seen.has(ref.route)) {\n continue;\n }\n seen.add(ref.route);\n result.push(ref);\n }\n return result;\n};\n\n/** Whether any reference is Scalar-rendered (gates the `@scalar/astro` dep + pages). */\nexport const hasScalarReferences = (config: ResolvedConfig): boolean =>\n resolveReferences(config).some((ref) => ref.renderer === \"scalar\");\n",
87
87
  "import { readFile } from \"node:fs/promises\";\n\nimport { isAbsolute, join } from \"pathe\";\n\nimport { scalarReferenceTemplate } from \"../astro/templates.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport { resolveAccent, resolveRadius } from \"../theme/palette.ts\";\nimport { resolveReferences } from \"./references.ts\";\nimport type { ReferenceSource } from \"./references.ts\";\n\n/**\n * The Scalar renderer: an escape hatch (`openapi.renderer: \"scalar\"`) and the\n * path AsyncAPI still uses. Each Scalar-rendered spec becomes one self-contained\n * `@scalar/astro` page loaded client-side from Scalar's CDN. Blume's own OpenAPI\n * renderer (the default) lives in `source.ts` / the `components/openapi` set and\n * does not pass through here.\n */\n\n/** A generated Scalar reference page, ready to write under `src/pages`. */\nexport interface ReferenceFile {\n /** Path relative to `src/pages`, e.g. `reference.astro`, `api/events.astro`. */\n pagePath: string;\n content: string;\n}\n\nconst URL_SPEC = /^https?:\\/\\//u;\nconst ROUTE_EDGES = /^\\/+|\\/+$/gu;\n\n/** The `src/pages`-relative file path for a reference route. */\nconst referencePagePath = (route: string): string => {\n const segments = route.replace(ROUTE_EDGES, \"\");\n return `${segments === \"\" ? \"index\" : segments}.astro`;\n};\n\nconst darkModeConfig = (\n mode: ResolvedConfig[\"theme\"][\"mode\"]\n): Record<string, boolean> => {\n if (mode === \"dark\") {\n return { darkMode: true };\n }\n if (mode === \"light\") {\n return { darkMode: false };\n }\n // \"system\": leave Scalar to follow the OS preference.\n return {};\n};\n\n/**\n * Map Blume's theme onto Scalar's. An explicit `theme` name wins; otherwise we\n * keep Scalar's default theme and layer Blume's accent/radius on top via\n * `customCss`. Scalar re-injects `customCss` after its bundled theme, so these\n * variables reliably override the defaults. Best-effort, not pixel-exact.\n */\nconst themeConfiguration = (\n config: ResolvedConfig,\n override?: string\n): Record<string, unknown> => {\n if (override) {\n return { theme: override };\n }\n const accent = resolveAccent(config.theme);\n const radius = resolveRadius(config.theme);\n return {\n customCss: `:root,.light-mode,.dark-mode{--scalar-color-accent:${accent};--scalar-radius:${radius};}`,\n ...darkModeConfig(config.theme.mode),\n };\n};\n\n/** Build the Scalar spec config for a source: inline `content` or remote `url`. */\nconst specConfiguration = async (\n spec: string,\n root: string\n): Promise<{ config: Record<string, unknown>; warning?: string }> => {\n if (URL_SPEC.test(spec)) {\n return { config: { url: spec } };\n }\n // A local spec is read at generate time and inlined as `content`, so the page\n // stays self-contained and nothing is copied into the user's source tree.\n const absolute = isAbsolute(spec) ? spec : join(root, spec);\n try {\n return { config: { content: await readFile(absolute, \"utf-8\") } };\n } catch {\n return {\n config: { url: spec },\n warning: `API reference spec not found: \"${spec}\" (looked in ${absolute}).`,\n };\n }\n};\n\n/**\n * Build the Scalar reference page(s) for the project. Only Scalar-rendered\n * references are emitted here (Blume-rendered OpenAPI is staged content). Reads\n * local specs, maps the theme, and skips routes that collide with a content page\n * or another source. Returns the files to write under `src/pages` plus warnings.\n */\nexport const buildReferenceFiles = async (options: {\n config: ResolvedConfig;\n root: string;\n contentRoutes: ReadonlySet<string>;\n}): Promise<{ files: ReferenceFile[]; warnings: string[] }> => {\n const { config, root, contentRoutes } = options;\n const warnings: string[] = [];\n\n // Resolve and dedupe routes first (sync), then read every spec in parallel.\n const seen = new Set<string>();\n const accepted: ReferenceSource[] = [];\n for (const ref of resolveReferences(config)) {\n if (ref.renderer !== \"scalar\") {\n continue;\n }\n if (seen.has(ref.route)) {\n warnings.push(\n `Two API reference sources resolve to ${ref.route}; keeping the first.`\n );\n continue;\n }\n if (contentRoutes.has(ref.route)) {\n warnings.push(\n `API reference route ${ref.route} collides with a content page; skipping the reference there.`\n );\n continue;\n }\n seen.add(ref.route);\n accepted.push(ref);\n }\n\n const built = await Promise.all(\n accepted.map(async (ref) => ({\n ref,\n spec: await specConfiguration(ref.spec, root),\n }))\n );\n\n const files: ReferenceFile[] = [];\n for (const { ref, spec } of built) {\n if (spec.warning) {\n warnings.push(spec.warning);\n }\n const pagePath = referencePagePath(ref.route);\n // Relative path from the page back to src/generated/data.json: a page one\n // directory deep (api/events.astro) needs an extra \"../\".\n const depth = pagePath.split(\"/\").length - 1;\n files.push({\n content: scalarReferenceTemplate({\n configuration: {\n ...spec.config,\n ...themeConfiguration(config, ref.theme),\n },\n dataImport: `${\"../\".repeat(depth + 1)}generated/data.json`,\n route: ref.route,\n title: ref.label,\n }),\n pagePath,\n });\n }\n\n return { files, warnings };\n};\n",
88
- "import { existsSync, readFileSync } from \"node:fs\";\n\nimport { dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { askBackendRuntimeDep } from \"../ai/ask.ts\";\nimport type { AskBackend } from \"../ai/ask.ts\";\nimport { resolveAssetMounts } from \"../core/assets.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { hasScalarReferences } from \"../openapi/references.ts\";\nimport { searchProviderMeta } from \"../search/providers.ts\";\nimport { buildFontEntries } from \"../theme/fonts.ts\";\nimport type { ExampleSpec } from \"./examples.ts\";\nimport type { BlumePageRoute } from \"./integration.ts\";\nimport type { IslandSpec } from \"./islands.ts\";\nimport type { OgCustomRoute } from \"./pages.ts\";\n\nconst WORKSPACE_MARKERS = [\n \".git\",\n \"bun.lock\",\n \"bun.lockb\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"pnpm-workspace.yaml\",\n \"yarn.lock\",\n];\n\n/** True when the package.json at this path declares a `workspaces` field. */\nconst hasWorkspacesField = (pkgPath: string): boolean => {\n if (!existsSync(pkgPath)) {\n return false;\n }\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as {\n workspaces?: unknown;\n };\n return pkg.workspaces !== undefined;\n } catch {\n return false;\n }\n};\n\n/** True when a directory looks like a workspace/monorepo root. */\nconst hasWorkspaceMarker = (dir: string): boolean =>\n hasWorkspacesField(join(dir, \"package.json\")) ||\n WORKSPACE_MARKERS.some((marker) => existsSync(join(dir, marker)));\n\n/**\n * Walk up from the project root to the workspace/monorepo root so Vite's\n * `fs.allow` can reach hoisted dependencies — e.g. KaTeX fonts that resolve to\n * a monorepo root `node_modules` outside the project directory. Falls back to\n * the project root when no workspace markers are found.\n */\nconst findWorkspaceRoot = (start: string): string => {\n let dir = start;\n for (;;) {\n if (hasWorkspaceMarker(dir)) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return start;\n }\n dir = parent;\n }\n};\n\nconst ADAPTER_IMPORTS: Record<string, string> = {\n cloudflare: \"@astrojs/cloudflare\",\n netlify: \"@astrojs/netlify\",\n node: \"@astrojs/node\",\n vercel: \"@astrojs/vercel\",\n};\n\nconst ADAPTER_OPTIONS: Record<string, string> = {\n node: '{ mode: \"standalone\" }',\n};\n\n/**\n * Integration packages the generated runtime imports. Declaring them in\n * `.blume/package.json` lets Astro's framework-package crawl discover and bundle\n * them — notably the React renderer's server entry, which imports the\n * `astro:react:opts` virtual module and must not be externalized (this applies\n * across the `ssr`, `prerender`, and `client` Vite environments).\n */\nexport const runtimeDependencies = (options: {\n config: ResolvedConfig;\n needsReact: boolean;\n needsVue?: boolean;\n needsSvelte?: boolean;\n}): string[] => {\n const { config, needsReact, needsSvelte, needsVue } = options;\n const deps = [\"@astrojs/mdx\"];\n if (needsReact) {\n deps.push(\"@astrojs/react\");\n }\n if (needsVue) {\n deps.push(\"@astrojs/vue\");\n }\n if (needsSvelte) {\n deps.push(\"@astrojs/svelte\");\n }\n // The Scalar integration is only declared for a Scalar-rendered reference\n // (the `renderer: \"scalar\"` fallback, or AsyncAPI). Blume-rendered OpenAPI\n // parses at generate time and needs no runtime Scalar dependency.\n if (hasScalarReferences(config)) {\n deps.push(\"@scalar/astro\");\n }\n // Only the configured search provider's SDK is declared, so a project pulls in\n // (and the user installs) exactly the backend it uses — nothing more.\n deps.push(...searchProviderMeta(config.search.provider).runtimeDeps);\n // Ask AI's provider SDK, when its backend needs one (gateway uses core `ai`).\n if (config.ai.ask?.enabled) {\n const askDep = askBackendRuntimeDep(config.ai.ask);\n if (askDep) {\n deps.push(askDep);\n }\n }\n const { deployment } = config;\n if (deployment.output === \"server\" && deployment.adapter) {\n const adapter = ADAPTER_IMPORTS[deployment.adapter];\n if (adapter) {\n deps.push(adapter);\n }\n }\n return deps;\n};\n\n/** Generate `.blume/astro.config.mjs`. */\n/**\n * Render project tsconfig path aliases as `vite.resolve.alias` object entries.\n * Longest find first, so a more specific prefix (`@components`) is matched\n * before a broader one (`@`); these follow Blume's `blume:*` aliases, which\n * never overlap with a project's.\n */\n/**\n * Blume's render-time dependencies, forced external on the build's SSR and\n * static-prerender Vite environments.\n *\n * Two reasons a dep lands here:\n * - `@takumi-rs/core` (OG image rendering) is a native NAPI addon that loads a\n * platform-specific `.node` binding via `createRequire(import.meta.url)`.\n * Bundling it relocates `import.meta.url` and breaks the binding lookup\n * (\"Cannot find native binding\") on other platforms (e.g. the Linux CI\n * runner), so it must resolve from `node_modules` at runtime instead.\n * - The rest are pure-JS packages kept external so an isolated linker (Bun's\n * `isolated` mode, pnpm) doesn't bundle their symlinked store copies. When\n * Vite bundles such a package but leaves its own `node_modules` child\n * external, that child surfaces as an unresolvable bare import in the\n * prerender chunk (e.g. `batchwork` via `@astrojs/markdown-satteri`). Kept\n * external, each package's transitive imports resolve relative to its real\n * store location — reachable through the `node_modules` junction {@link\n * prerenderDepsPlugin} drops beside the prerender bundle.\n *\n * Astro 7 configures externalization per Vite environment, so this must be\n * applied to both `prerender` (static) and `ssr` (server) — a top-level\n * `ssr.external` only reaches the latter.\n */\nconst RENDER_EXTERNAL_DEPS = [\n \"@astrojs/markdown-satteri\",\n \"@pierre/diffs\",\n \"@shikijs/transformers\",\n \"@takumi-rs/core\",\n \"@takumi-rs/helpers\",\n \"github-slugger\",\n \"katex\",\n \"shiki\",\n \"simple-icons\",\n \"zod\",\n];\n\nconst renderUserAliases = (\n aliases: Record<string, string> | undefined\n): string =>\n Object.entries(aliases ?? {})\n .toSorted(([a], [b]) => b.length - a.length)\n .map(\n ([find, replacement]) =>\n `\\n ${JSON.stringify(find)}: ${JSON.stringify(replacement)},`\n )\n .join(\"\");\n\n/** Astro's build output dir: the runtime's own `distDir`, else `<root>/dist`. */\nconst astroOutDir = (context: ProjectContext): string =>\n context.distDir ?? `${context.root}/dist`;\n\nexport const astroConfigTemplate = (options: {\n context: ProjectContext;\n config: ResolvedConfig;\n needsReact: boolean;\n needsVue?: boolean;\n needsSvelte?: boolean;\n pages: BlumePageRoute[];\n contentRoutes: string[];\n dataPath: string;\n examplesPath: string;\n themePath: string;\n searchClientPath: string;\n openapiPath: string;\n /** Project tsconfig path aliases (`find` -> absolute dir), e.g. `@` -> src. */\n aliases?: Record<string, string>;\n}): string => {\n const { context, config, needsReact, pages, dataPath, themePath } = options;\n const {\n contentRoutes,\n examplesPath,\n needsSvelte,\n needsVue,\n openapiPath,\n searchClientPath,\n } = options;\n const { deployment } = config;\n const userAliasLines = renderUserAliases(options.aliases);\n const server = deployment.output === \"server\";\n\n // The project root plus the workspace root, so hoisted dependencies (e.g.\n // KaTeX fonts under a monorepo's root node_modules) stay servable in dev.\n const fsAllow = [...new Set([findWorkspaceRoot(context.root), context.root])];\n\n const adapterImport =\n server && deployment.adapter\n ? `import adapter from \"${ADAPTER_IMPORTS[deployment.adapter]}\";\\n`\n : \"\";\n const adapterArgs =\n server && deployment.adapter\n ? (ADAPTER_OPTIONS[deployment.adapter] ?? \"\")\n : \"\";\n const adapterOption =\n server && deployment.adapter ? `\\n adapter: adapter(${adapterArgs}),` : \"\";\n\n const siteOption = deployment.site\n ? `\\n site: ${JSON.stringify(deployment.site)},`\n : \"\";\n const baseOption = deployment.base\n ? `\\n base: ${JSON.stringify(deployment.base)},`\n : \"\";\n\n // Astro's native i18n gives locale-aware helpers + `<html lang>` correctness.\n // Blume owns getStaticPaths and materializes fallback routes in the manifest,\n // so we deliberately omit Astro's `fallback` to keep one source of routing.\n const i18nOption = config.i18n\n ? `\\n i18n: ${JSON.stringify({\n defaultLocale: config.i18n.defaultLocale,\n locales: config.i18n.locales.map((locale) => locale.code),\n routing: {\n prefixDefaultLocale: !config.i18n.hideDefaultLocalePrefix,\n },\n })},`\n : \"\";\n\n const redirectsOption =\n config.redirects.length > 0\n ? `\\n redirects: ${JSON.stringify(\n Object.fromEntries(\n config.redirects.map((redirect) => [\n redirect.from,\n { destination: redirect.to, status: redirect.status },\n ])\n )\n )},`\n : \"\";\n\n // Self-hosted Google Fonts via Astro's Fonts API, derived from theme.fonts.\n // `fontProviders` is only imported when at least one font is configured.\n const fontEntries = buildFontEntries(config.theme.fonts);\n const fontsOption = fontEntries.length\n ? `\\n fonts: [${fontEntries\n .map(\n (font) =>\n `{ provider: fontProviders.google(), name: ${JSON.stringify(\n font.name\n )}, cssVariable: ${JSON.stringify(\n font.cssVariable\n )}, weights: ${JSON.stringify(\n font.weights\n )}, fallbacks: ${JSON.stringify(font.fallbacks)} }`\n )\n .join(\", \")}],`\n : \"\";\n const defineConfigImport = fontEntries.length\n ? `import { defineConfig, fontProviders } from \"astro/config\";`\n : `import { defineConfig } from \"astro/config\";`;\n\n // Framework renderers are only wired in when an island (or Ask AI, for React)\n // needs them. The core theme is Astro-first and ships no client JS.\n const reactImport = needsReact ? `import react from \"@astrojs/react\";\\n` : \"\";\n const vueImport = needsVue ? `import vue from \"@astrojs/vue\";\\n` : \"\";\n const svelteImport = needsSvelte\n ? `import svelte from \"@astrojs/svelte\";\\n`\n : \"\";\n const blumeImport = `import { blumeIntegration, prerenderDepsPlugin } from \"blume/astro\";\\n`;\n\n // Twoslash runs first, before the always-on transformers, but only on fences\n // with the `twoslash` meta (explicitTrigger) — so it's opt-in per block with\n // no config flag; the TypeScript compiler only spins up when a block uses it.\n const twoslashImport = `import { transformerTwoslash } from \"@shikijs/twoslash\";\\n`;\n const twoslashTransformer =\n \"transformerTwoslash({ explicitTrigger: true }), \";\n\n const integrations = [\n `mdx({ processor: blumeMdxProcessor(${JSON.stringify({\n headingAnchors: config.markdown.headingAnchors,\n inline: config.markdown.code.inline,\n math: config.markdown.math,\n })}) })`,\n ];\n if (needsReact) {\n integrations.push(\"react()\");\n }\n if (needsVue) {\n integrations.push(\"vue()\");\n }\n if (needsSvelte) {\n integrations.push(\"svelte()\");\n }\n // Always mounted: injects user pages (a no-op when there are none), serves\n // `content.assets` mounts, and wires up dev-server `Accept: text/markdown`\n // negotiation over the content routes.\n const assets = resolveAssetMounts(context.root, config.content.assets);\n integrations.push(\n `blumeIntegration(${JSON.stringify({ assets, base: deployment.base, contentRoutes, pages })})`\n );\n\n return `// Generated by Blume. Do not edit; this file is recreated on each run.\n${defineConfigImport}\nimport mdx from \"@astrojs/mdx\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport { blumeMarkdownProcessor, blumeMdxProcessor, blumeShikiTransformers } from \"blume/markdown\";\n${twoslashImport}${reactImport}${vueImport}${svelteImport}${blumeImport}${adapterImport}\nexport default defineConfig({\n root: ${JSON.stringify(context.outDir)},\n srcDir: ${JSON.stringify(`${context.outDir}/src`)},\n outDir: ${JSON.stringify(astroOutDir(context))},\n publicDir: ${JSON.stringify(`${context.root}/public`)},\n output: ${JSON.stringify(deployment.output)},${adapterOption}${siteOption}${baseOption}${redirectsOption}${i18nOption}${fontsOption}\n integrations: [${integrations.join(\", \")}],\n markdown: {\n processor: blumeMarkdownProcessor(${JSON.stringify({\n headingAnchors: config.markdown.headingAnchors,\n inline: config.markdown.code.inline,\n })}),\n shikiConfig: {\n themes: {\n light: \"github-light\",\n dark: \"github-dark\",\n },\n defaultColor: false,\n transformers: [${twoslashTransformer}...blumeShikiTransformers(${JSON.stringify(\n { icons: config.markdown.code.icons }\n )})],\n },\n },\n devToolbar: { enabled: false },\n vite: {\n plugins: [tailwindcss(), prerenderDepsPlugin()],\n // Blume's render-time deps are forced external on both build environments so\n // native bindings resolve at runtime and isolated linkers don't bundle\n // symlinked store copies (which would surface their children as unresolvable\n // imports). See RENDER_EXTERNAL_DEPS / prerenderDepsPlugin.\n environments: {\n prerender: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n ssr: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n },\n resolve: {\n alias: {\n \"blume:data\": ${JSON.stringify(dataPath)},\n \"blume:examples\": ${JSON.stringify(examplesPath)},\n \"blume:openapi\": ${JSON.stringify(openapiPath)},\n \"blume:search-client\": ${JSON.stringify(searchClientPath)},\n \"blume:theme\": ${JSON.stringify(themePath)},${userAliasLines}\n },\n },\n server: {\n fs: {\n allow: ${JSON.stringify(fsAllow)},\n },\n },\n },\n});\n`;\n};\n\n/** The default staged-content base, relative to the runtime `outDir`. */\nexport const stagedContentDir = (outDir: string): string =>\n join(outDir, \"content\");\n\n/** Generate `.blume/src/content.config.ts`. */\nexport const contentConfigTemplate = (options: {\n context: ProjectContext;\n config: ResolvedConfig;\n /** Whether any non-filesystem source materialized MDX into the staged dir. */\n staged?: boolean;\n /** Base dir for the staged collection; defaults to `<outDir>/content`. */\n stagedBase?: string;\n /**\n * Whether any filesystem (non-staged) source feeds the `docs` collection.\n * When false (e.g. Mintlify bridge mode, where every page is staged), the\n * collection globs nothing — see below.\n */\n filesystem?: boolean;\n}): string => {\n const { context, config } = options;\n const stagedBase = options.stagedBase ?? stagedContentDir(context.outDir);\n\n // Fold the content excludes into the glob as negative patterns so the `docs`\n // collection doesn't ingest ignored trees (`node_modules`, `snippets`, the\n // staged bodies under `.blume/content`, …) as entries. This matters when\n // `content.root` is the project root (a migrated `.`-rooted project).\n const outDirRel = relative(context.contentRoot, context.outDir);\n const outDirIgnore =\n outDirRel && !outDirRel.startsWith(\"..\") && !isAbsolute(outDirRel)\n ? [`!${outDirRel}/**`]\n : [];\n\n // With no filesystem source, no route renders through `docs`, so glob nothing.\n // Beyond skipping wasted work, this is the only thing that keeps Astro's\n // content-layer *watcher* out of `.blume/`: bridge mode roots the collection\n // at the project dir (which contains `.blume/.astro/fonts`, rewritten on every\n // request), and the watcher's match test is `picomatch.isMatch(path, pattern)`\n // — with array-OR semantics, any `!ignored/**` negation *matches* unrelated\n // files, so negative patterns can't exclude a subtree there. An empty pattern\n // matches nothing, so the watcher stays silent. The collection is still\n // declared below so `getCollection(\"docs\")` / `getEntry` resolve (to empty).\n const filesystem = options.filesystem ?? true;\n const docsPattern = filesystem\n ? [\n ...config.content.include,\n ...(config.content.exclude ?? []).map((pattern) => `!${pattern}`),\n \"!**/node_modules/**\",\n ...outDirIgnore,\n ]\n : [];\n\n // Non-filesystem sources render through a parallel `staged` collection backed\n // by materialized MDX, so the filesystem `docs` collection stays untouched.\n const stagedBlock = options.staged\n ? `\nconst staged = defineCollection({\n loader: glob({\n pattern: [\"**/*.{md,mdx}\"],\n base: ${JSON.stringify(stagedBase)},\n generateId: ({ entry }) => entry,\n }),\n});\n`\n : \"\";\n\n return `// Generated by Blume. Do not edit.\nimport { defineCollection } from \"astro:content\";\nimport { glob } from \"astro/loaders\";\n\nconst docs = defineCollection({\n loader: glob({\n pattern: ${JSON.stringify(docsPattern)},\n base: ${JSON.stringify(context.contentRoot)},\n generateId: ({ entry }) => entry,\n }),\n});\n${stagedBlock}\nexport const collections = { docs${options.staged ? \", staged\" : \"\"} };\n`;\n};\n\n/** Generate `.blume/src/pages/[...slug].astro`, the docs catch-all route. */\n/** Generate the Ask AI server endpoint (`.blume/src/pages/api/ask.ts`). */\nexport const askEndpointTemplate = (\n backend: AskBackend,\n grounded: boolean\n): string => {\n const imports = [\n 'import type { APIRoute } from \"astro\";',\n 'import { streamText } from \"ai\";',\n ];\n let setup = \"\";\n let modelExpr = JSON.stringify(backend.model);\n if (backend.kind === \"openrouter\") {\n imports.push(\n 'import { createOpenRouter } from \"@openrouter/ai-sdk-provider\";'\n );\n setup = `\\nconst openrouter = createOpenRouter({ apiKey: process.env[${JSON.stringify(\n backend.apiKeyEnv\n )}] });\\n`;\n modelExpr = `openrouter(${JSON.stringify(backend.model)})`;\n } else if (backend.kind === \"openai-compatible\") {\n imports.push(\n 'import { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";'\n );\n setup = `\\nconst provider = createOpenAICompatible({\n apiKey: process.env[${JSON.stringify(backend.apiKeyEnv)}],\n baseURL: ${JSON.stringify(backend.baseUrl)},\n name: ${JSON.stringify(backend.name)},\n});\\n`;\n modelExpr = `provider(${JSON.stringify(backend.model)})`;\n }\n // Ground the answer in retrieved docs, except for RAG-native backends (Inkeep),\n // which run their own retrieval and would conflict with injected context.\n if (grounded) {\n imports.push(\n 'import { createAskContext } from \"blume/ai/ask-context.ts\";',\n 'import askData from \"../../generated/ask-data.json\";'\n );\n setup += \"\\nconst ground = createAskContext(askData);\\n\";\n }\n // Validate the client-supplied body and cap its size. The endpoint is\n // unauthenticated, so bounding message count/length limits how much a caller\n // can spend against the model per request; front it with a rate limiter (or\n // your provider's limits) for stronger protection.\n const validate = ` const body = await request.json().catch(() => null);\n const messages = body?.messages;\n if (\n !Array.isArray(messages) ||\n messages.length === 0 ||\n messages.length > 40 ||\n JSON.stringify(messages).length > 24_000\n ) {\n return new Response(\"Invalid request: send 1-40 messages.\", {\n status: 400,\n });\n }`;\n const stream = grounded\n ? ` const system =\n (await ground(messages, body.page)) ??\n \"You are a helpful documentation assistant. Answer using the project's documentation.\";\n const result = streamText({\n model: ${modelExpr},\n system,\n messages,\n });`\n : ` const result = streamText({\n model: ${modelExpr},\n system:\n \"You are a helpful documentation assistant. Answer using the project's documentation.\",\n messages,\n });`;\n const handler = `export const POST: APIRoute = async ({ request }) => {\n${validate}\n try {\n${stream}\n return result.toTextStreamResponse();\n } catch {\n return new Response(\"Failed to generate a response.\", { status: 500 });\n }\n};`;\n return `// Generated by Blume. Do not edit.\n${imports.join(\"\\n\")}\n\nexport const prerender = false;\n${setup}\n${handler}\n`;\n};\n\n/** Generate the static search index endpoint (`/blume-search.json`). */\nexport const searchEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport documents from \"../generated/search.json\";\n\nexport const prerender = true;\n\nexport function GET() {\n return new Response(JSON.stringify(documents), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n`;\n\nconst SEARCH_CLIENT_HEADER = \"// Generated by Blume. Do not edit.\\n\";\n\n/** Import the chosen provider's `createSearch` from the Blume package. */\nconst searchClientImport = (module: string): string =>\n `import { createSearch as create } from \"blume/components/layout/search/${module}.ts\";\\n`;\n\n/** A client that loads a static `blume-search.json` index (Orama, FlexSearch). */\nconst staticSearchClient = (module: string): string =>\n `${SEARCH_CLIENT_HEADER}${searchClientImport(module)}\nconst indexUrl = \\`\\${import.meta.env.BASE_URL}blume-search.json\\`.replace(\"//\", \"/\");\n\nexport const createSearch = () => create({ indexUrl });\n`;\n\n/** A client that passes public credentials straight to the provider SDK. */\nconst hostedSearchClient = (\n module: string,\n options: Record<string, unknown>\n): string =>\n `${SEARCH_CLIENT_HEADER}${searchClientImport(module)}\nexport const createSearch = () => create(${JSON.stringify(options)});\n`;\n\n/** Build the per-provider config object the hosted client is created with. */\nconst hostedSearchOptions = (\n search: ResolvedConfig[\"search\"]\n): { module: string; options: Record<string, unknown> } | null => {\n switch (search.provider) {\n case \"algolia\": {\n return { module: \"algolia\", options: { ...search.algolia } };\n }\n case \"orama-cloud\": {\n return {\n module: \"orama-cloud\",\n options: {\n apiKey: search.oramaCloud?.apiKey,\n endpoint: search.oramaCloud?.endpoint,\n },\n };\n }\n case \"typesense\": {\n return { module: \"typesense\", options: { ...search.typesense } };\n }\n default: {\n return null;\n }\n }\n};\n\n/**\n * Generate `.blume/src/generated/search-client.ts` — the provider-specific\n * loader the `<Search>` component lazy-imports via the `blume:search-client`\n * alias. Only the configured provider's module (and therefore its SDK) is\n * referenced, so the build bundles exactly one backend. Public credentials are\n * baked in here; secret keys never reach the client.\n */\nexport const searchClientTemplate = (config: ResolvedConfig): string => {\n const { search } = config;\n\n if (search.provider === \"orama\" || search.provider === \"flexsearch\") {\n return staticSearchClient(search.provider);\n }\n\n const hosted = hostedSearchOptions(search);\n if (hosted) {\n return hostedSearchClient(hosted.module, hosted.options);\n }\n\n if (search.provider === \"mixedbread\") {\n return `${SEARCH_CLIENT_HEADER}${searchClientImport(\"endpoint\")}\nconst api = \\`\\${import.meta.env.BASE_URL}api/search\\`.replace(\"//\", \"/\");\n\nexport const createSearch = () => create({ api });\n`;\n }\n\n if (search.provider === \"pagefind\") {\n return `${SEARCH_CLIENT_HEADER}${searchClientImport(\"pagefind\")}\nconst url = \\`\\${import.meta.env.BASE_URL}pagefind/pagefind.js\\`.replace(\"//\", \"/\");\n\nexport const createSearch = () => create({ url });\n`;\n }\n\n // Search disabled: a no-op client so the alias always resolves.\n return `${SEARCH_CLIENT_HEADER}export const createSearch = () => () =>\n Promise.resolve({ hits: [], sections: [] });\n`;\n};\n\n/**\n * Generate the Mixedbread search endpoint (`/api/search`). It holds the secret\n * key server-side and proxies semantic queries to the configured store. The\n * result mapping is best-effort and may need tuning to how your content was\n * synced (see the Mixedbread sync step / \\`mxbai vs sync\\`).\n */\nexport const mixedbreadSearchEndpointTemplate = (storeId: string): string =>\n `// Generated by Blume. Do not edit.\nimport type { APIRoute } from \"astro\";\nimport Mixedbread from \"@mixedbread/sdk\";\n\nexport const prerender = false;\n\nconst client = new Mixedbread({ apiKey: process.env.MIXEDBREAD_API_KEY ?? \"\" });\nconst STORE_ID = ${JSON.stringify(storeId)};\n\nexport const POST: APIRoute = async ({ request }) => {\n const { query } = await request.json();\n if (!query) {\n return new Response(\"[]\", {\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n const response = await client.stores.search({\n query,\n store_identifiers: [STORE_ID],\n top_k: 8,\n });\n const hits = (response.data ?? []).map((chunk) => {\n const meta = chunk.generated_metadata ?? {};\n return {\n excerpt: chunk.text ?? meta.excerpt ?? \"\",\n title: meta.title ?? chunk.filename ?? \"\",\n url: meta.url ?? \"\",\n };\n });\n return new Response(JSON.stringify(hits), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n`;\n\n/**\n * Generate the raw-Markdown endpoints (`[...slug].md.ts` and `[...slug].mdx.ts`).\n * Each route's source is served verbatim so `/<route>.md` returns plain Markdown.\n */\nexport const rawMarkdownEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport raw from \"../generated/raw-markdown.json\";\n\nexport const prerender = true;\n\nexport function getStaticPaths() {\n return Object.keys(raw).map((route) => ({\n params: { slug: route === \"/\" ? \"index\" : route.slice(1) },\n props: { route },\n }));\n}\n\nexport function GET({ props }) {\n return new Response(raw[props.route] ?? \"\", {\n headers: { \"Content-Type\": \"text/markdown; charset=utf-8\" },\n });\n}\n`;\n\n/** The `src/pages` file that serves a route, e.g. `/mcp` -> `mcp.ts`. */\nexport const mcpPageFile = (route: string): string => {\n const clean = route.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n return `${clean}.ts`;\n};\n\n/**\n * Generate the hosted MCP server endpoint (e.g. `.blume/src/pages/mcp.ts`). A\n * thin wrapper around the shipped `createMcpFetchHandler`, served from the\n * generated data snapshot. Runs server-side (no prerender) so agents can query\n * the docs over Streamable HTTP.\n */\nexport const mcpEndpointTemplate = (route: string): string => {\n const clean = route.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n const up = \"../\".repeat(clean.split(\"/\").length);\n return `// Generated by Blume. Do not edit.\nimport type { APIRoute } from \"astro\";\nimport { createMcpFetchHandler } from \"blume/ai/mcp/server.ts\";\nimport data from \"${up}generated/mcp-data.json\";\n\nexport const prerender = false;\n\nconst handler = createMcpFetchHandler(data);\n\nexport const ALL: APIRoute = ({ request }) => handler(request);\n`;\n};\n\n/** Generate a prerendered endpoint that serves a fixed JSON payload. */\nexport const staticJsonEndpointTemplate = (payload: unknown): string =>\n `// Generated by Blume. Do not edit.\nexport const prerender = true;\n\nconst payload = ${JSON.stringify(payload, null, 2)};\n\nexport function GET() {\n return new Response(JSON.stringify(payload), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n`;\n\n/**\n * Generate the RSS endpoint (`[section]/rss.xml.ts`). One feed per content\n * type is served from the generated `rss.json`, e.g. `/blog/rss.xml`.\n */\nexport const rssEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport feeds from \"../../generated/rss.json\";\n\nexport const prerender = true;\n\nexport function getStaticPaths() {\n return Object.keys(feeds).map((section) => ({\n params: { section },\n props: { section },\n }));\n}\n\nexport function GET({ props }) {\n return new Response(feeds[props.section] ?? \"\", {\n headers: { \"Content-Type\": \"application/rss+xml; charset=utf-8\" },\n });\n}\n`;\n\n/** Generate the OG image endpoint (`.blume/src/pages/_og/[...slug].png.ts`). */\nexport const ogEndpointTemplate = (\n customRoutes: OgCustomRoute[] = []\n): string =>\n `// Generated by Blume. Do not edit.\nimport { renderOgImage } from \"blume/og\";\nimport data from \"../../generated/data.json\";\n\nexport const prerender = true;\n\n// Custom (non-content) pages opted into a generated card, baked in at build.\nconst customRoutes = ${JSON.stringify(customRoutes)};\n\nexport function getStaticPaths() {\n const seen = new Set();\n const paths = [];\n const add = (slug, title) => {\n if (seen.has(slug)) {\n return;\n }\n seen.add(slug);\n paths.push({ params: { slug }, props: { title } });\n };\n // A custom page wins over a content route sharing its path, so add it first.\n for (const route of customRoutes) {\n add(route.slug, route.title);\n }\n for (const route of data.routes) {\n add(route.path === \"/\" ? \"index\" : route.path.slice(1), route.title);\n }\n return paths;\n}\n\n// Footer branding shared by every card, derived once from the resolved config.\n// The repo slug reuses the header link URL; the host comes from the site URL.\nconst repoSlug = data.config.repoUrl\n ? data.config.repoUrl.split(\"github.com/\")[1]\n : undefined;\nconst siteHost = (() => {\n if (!data.config.site) {\n return undefined;\n }\n try {\n return new URL(data.config.site).host;\n } catch {\n return undefined;\n }\n})();\n\nexport async function GET({ props }) {\n const png = await renderOgImage({\n accent: data.config.theme.accent,\n brand: data.config.title,\n description: data.config.description,\n logo: data.config.logo?.svg,\n repo: repoSlug,\n site: siteHost,\n title: props.title,\n });\n return new Response(png, {\n headers: {\n \"Cache-Control\": \"public, max-age=31536000, immutable\",\n \"Content-Type\": \"image/png\",\n },\n });\n}\n`;\n\n/**\n * Generate a Scalar API/AsyncAPI reference page (`.blume/src/pages/<route>.astro`).\n * The reference UI is owned by Scalar (its standalone bundle, loaded from a CDN)\n * but mounted inside Blume's {@link ReferenceLayout} so the page keeps Blume's\n * navbar on top. `renderMode: \"client\"` mounts the reference into a container\n * element (rather than emitting a full HTML document), which is what lets it\n * live inside our shell. `dataImport` is the route-depth-aware relative path to\n * the generated data module the layout reads.\n */\nexport const scalarReferenceTemplate = (options: {\n configuration: Record<string, unknown>;\n dataImport: string;\n route: string;\n title: string;\n}): string =>\n `---\n// Generated by Blume. Do not edit.\nimport { ScalarComponent } from \"@scalar/astro\";\nimport ReferenceLayout from \"blume/components/layout/ReferenceLayout.astro\";\nimport data from ${JSON.stringify(options.dataImport)};\n\nexport const prerender = true;\n\nconst configuration = ${JSON.stringify(options.configuration, null, 2)};\n---\n\n<ReferenceLayout\n analytics={data.config.analytics}\n banner={data.config.banner}\n fontCssVars={data.fontCssVars}\n logo={data.config.logo}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n navigation={data.navigation}\n pageTitle={${JSON.stringify(options.title)}}\n route={${JSON.stringify(options.route)}}\n searchEnabled={data.config.search.enabled}\n site={{ title: data.config.title, description: data.config.description }}\n themeMode={data.config.theme.mode}\n>\n <ScalarComponent configuration={configuration} renderMode=\"client\" />\n</ReferenceLayout>\n`;\n\nexport const catchAllPageTemplate = (options: {\n askEnabled: boolean;\n exportEpub: boolean;\n exportPdf: boolean;\n mathEnabled: boolean;\n /** Serialize the island-hooks snapshot; only needed when React is enabled. */\n needsReact: boolean;\n}): string => {\n const askImport = options.askEnabled\n ? 'import AskAI from \"blume/components/islands/AskAI.astro\";\\n'\n : \"\";\n const askSlot = options.askEnabled\n ? '\\n <AskAI slot=\"ask\" strings={ui.ask} />'\n : \"\";\n const mathImport = options.mathEnabled\n ? 'import Math from \"blume/components/content/Math.astro\";\\n'\n : \"\";\n const mathEntry = options.mathEnabled ? \"Math,\\n \" : \"\";\n // The island-hooks snapshot (config + navigation + page) for `blume/hooks`.\n const clientData = options.needsReact\n ? \"\\n clientData={{ config: data.config, navigation, page: { route, title: seo.title ?? title } }}\"\n : \"\";\n\n return `---\n// Generated by Blume. Do not edit.\nimport { getEntry, render } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\n${askImport}\nimport Accordion from \"blume/components/content/Accordion.astro\";\nimport AccordionItem from \"blume/components/content/AccordionItem.astro\";\nimport AutoTypeTable from \"blume/components/content/AutoTypeTable.astro\";\nimport Badge from \"blume/components/content/Badge.astro\";\nimport Callout from \"blume/components/content/Callout.astro\";\nimport Card from \"blume/components/content/Card.astro\";\nimport CardGroup from \"blume/components/content/CardGroup.astro\";\nimport CodeBlock from \"blume/components/content/CodeBlock.astro\";\nimport CodeGroup from \"blume/components/content/CodeGroup.astro\";\nimport ColorRoot from \"blume/components/content/Color.astro\";\nimport ColorItem from \"blume/components/content/ColorItem.astro\";\nimport ColorRow from \"blume/components/content/ColorRow.astro\";\nimport Column from \"blume/components/content/Column.astro\";\nimport Columns from \"blume/components/content/Columns.astro\";\nimport Component from \"blume/components/content/Component.astro\";\nimport Diff from \"blume/components/content/Diff.astro\";\nimport Expandable from \"blume/components/content/Expandable.astro\";\nimport FileTree from \"blume/components/content/FileTree.astro\";\nimport Frame from \"blume/components/content/Frame.astro\";\nimport GithubInfo from \"blume/components/content/GithubInfo.astro\";\nimport Panel from \"blume/components/content/Panel.astro\";\nimport ParamField from \"blume/components/content/ParamField.astro\";\nimport Prompt from \"blume/components/content/Prompt.astro\";\nimport RequestField from \"blume/components/content/RequestField.astro\";\nimport ResponseField from \"blume/components/content/ResponseField.astro\";\nimport Step from \"blume/components/content/Step.astro\";\nimport Steps from \"blume/components/content/Steps.astro\";\nimport Tab from \"blume/components/content/Tab.astro\";\nimport Tabs from \"blume/components/content/Tabs.astro\";\nimport Tile from \"blume/components/content/Tile.astro\";\nimport Tooltip from \"blume/components/content/Tooltip.astro\";\nimport TreeRoot from \"blume/components/content/Tree.astro\";\nimport TreeFile from \"blume/components/content/TreeFile.astro\";\nimport TreeFolder from \"blume/components/content/TreeFolder.astro\";\nimport TypeTable from \"blume/components/content/TypeTable.astro\";\nimport Visibility from \"blume/components/content/Visibility.astro\";\nimport YouTube from \"blume/components/content/YouTube.astro\";\nimport Icon from \"blume/components/Icon.astro\";\nimport ApiOverview from \"blume/components/openapi/ApiOverview.astro\";\nimport Operation from \"blume/components/openapi/Operation.astro\";\n${mathImport}import { mdxComponents as userMdx, layoutOverrides } from \"../generated/components.ts\";\nimport { islandComponents } from \"../generated/islands.ts\";\nimport data from \"../generated/data.json\";\n\nconst Color = Object.assign(ColorRoot, { Item: ColorItem, Row: ColorRow });\nconst Tree = Object.assign(TreeRoot, { File: TreeFile, Folder: TreeFolder });\n\n// Docs content is file-based and always prerendered, even in server output\n// (where only endpoints like /api/ask render on demand). Without this, server\n// builds would render this route on demand and ignore getStaticPaths, leaving\n// the entry id undefined.\nexport const prerender = true;\n\nconst components = {\n Accordion,\n AccordionItem,\n ApiOverview,\n AutoTypeTable,\n Badge,\n Callout,\n Card,\n CardGroup,\n CodeBlock,\n CodeGroup,\n Color,\n Column,\n Columns,\n Component,\n Diff,\n Expandable,\n FileTree,\n Frame,\n GithubInfo,\n Icon,\n Operation,\n Panel,\n ParamField,\n Prompt,\n RequestField,\n ResponseField,\n Step,\n Steps,\n Tab,\n Tabs,\n Tile,\n Tooltip,\n Tree,\n TypeTable,\n Visibility,\n YouTube,\n ${mathEntry}...islandComponents,\n ...userMdx,\n};\n\nexport function getStaticPaths() {\n return data.routes.map((route) => ({\n params: { slug: route.path === \"/\" ? undefined : route.path.slice(1) },\n props: {\n alternates: route.alternates,\n collection: route.collection,\n editUrl: route.editUrl,\n entryId: route.entryId,\n fallback: route.fallback,\n indexable: route.indexable,\n lastModified: route.lastModified,\n locale: route.locale,\n route: route.path,\n title: route.title,\n },\n }));\n}\n\nconst { entryId, collection, route, title, indexable, editUrl, lastModified, locale, alternates, fallback } = Astro.props;\nconst entry = await getEntry(collection, entryId);\nif (!entry) {\n return new Response(null, { status: 404 });\n}\nconst { Content, headings } = await render(entry);\nconst frontmatter = entry.data ?? {};\n\nconst seo = frontmatter.seo ?? {};\nconst base = data.config.site ? data.config.site.replace(/\\\\/$/, \"\") : null;\n\nconst ogPath = data.config.og.enabled\n ? \\`/og/\\${route === \"/\" ? \"index\" : route.slice(1)}.png\\`\n : null;\nconst ogRel = seo.image ?? ogPath;\nconst ogImage = ogRel && base ? \\`\\${base}\\${ogRel}\\` : ogRel;\n\nconst canonical =\n seo.canonical ?? (base ? \\`\\${base}\\${route === \"/\" ? \"\" : route}\\` : null);\n\n// Locale resolution. With i18n on, pick the active locale's nav + dictionary,\n// build hreflang alternates, and derive the language-switcher targets.\nconst i18n = data.config.i18n;\nconst localePrefix = (codeArg) =>\n i18n && codeArg === i18n.defaultLocale && i18n.hideDefaultLocalePrefix\n ? \"\"\n : \\`/\\${codeArg}\\`;\nconst localizeRoute = (logical, codeArg) => {\n const prefix = localePrefix(codeArg);\n if (!prefix) {\n return logical;\n }\n return logical === \"/\" ? prefix : \\`\\${prefix}\\${logical}\\`;\n};\nconst stripLocale = (path, codeArg) => {\n const prefix = localePrefix(codeArg);\n return prefix && path.startsWith(prefix) ? path.slice(prefix.length) || \"/\" : path;\n};\n\nconst navigation = i18n ? (data.navigationByLocale[locale] ?? data.navigation) : data.navigation;\nconst ui = i18n ? (data.uiByLocale[locale] ?? data.ui) : data.ui;\nconst localeMeta = i18n ? i18n.locales.find((l) => l.code === locale) : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? locale : \"en\";\n// A fallback page renders the fallback locale's content, so its text direction\n// follows that language — not the (mirrored) page locale.\nconst contentLocale =\n fallback && i18n?.fallbackLocale ? i18n.fallbackLocale : locale;\nconst contentDir = i18n\n ? (i18n.locales.find((l) => l.code === contentLocale)?.dir ?? \"ltr\")\n : \"ltr\";\nconst absolute = (path) => base + (path === \"/\" ? \"\" : path);\n\nconst localeAlternates =\n i18n && base\n ? (alternates ?? []).map((alt) => ({ hreflang: alt.locale, href: absolute(alt.path) }))\n : [];\nconst defaultAlt = i18n ? (alternates ?? []).find((alt) => alt.locale === i18n.defaultLocale) : null;\nconst xDefault = defaultAlt && base ? absolute(defaultAlt.path) : null;\n\nconst logicalRoute = i18n ? stripLocale(route, locale) : route;\nconst localeSwitch = i18n\n ? i18n.locales.map((l) => {\n const alt = (alternates ?? []).find((x) => x.locale === l.code);\n return {\n code: l.code,\n current: l.code === locale,\n dir: l.dir,\n href: alt ? alt.path : localizeRoute(logicalRoute, l.code),\n label: l.label,\n untranslated: !alt,\n };\n })\n : [];\n\n// The whole page shell is overridable via \\`layout.Layout\\`; it receives the same\n// props as the built-in RootLayout, plus the \\`layout\\` map for its inner slots.\nconst LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);\n---\n\n<LayoutComponent\n site={{ title: data.config.title, description: data.config.description }}\n layout={layoutOverrides}${clientData}\n logo={data.config.logo}\n mcp={data.config.mcp}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n imageZoom={data.config.imageZoom}\n codeWrap={data.config.codeWrap}\n navigation={navigation}\n locale={htmlLang}\n dir={dir}\n contentDir={contentDir}\n ui={ui}\n localeAlternates={localeAlternates}\n xDefault={xDefault}\n localeSwitch={localeSwitch}\n page={{ title: seo.title ?? title, description: seo.description ?? frontmatter.description, route }}\n headings={headings}\n toc={data.config.toc}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={indexable}\n ogImage={ogImage}\n canonical={canonical}\n editUrl={editUrl}\n feedback={data.config.feedback}\n askEnabled={${options.askEnabled}}\n exportPdf={${options.exportPdf}}\n exportEpub={${options.exportEpub}}\n feeds={data.feeds}\n siteUrl={data.config.site}\n pageType={frontmatter.type}\n published={frontmatter.date ?? frontmatter.changelog?.date ?? null}\n lastModified={lastModified}\n noindex={seo.noindex}\n structuredDataEnabled={data.config.structuredData}\n>${askSlot}\n <h1>{title}</h1>\n {frontmatter.description && <p class=\"text-lg text-muted-foreground\">{frontmatter.description}</p>}\n <Content components={components} />\n</LayoutComponent>\n`;\n};\n\n/**\n * Generate `.blume/src/pages/changelog.astro` — the changelog index. Collects\n * every `type: changelog` entry, sorts newest-first, and renders each through\n * the `Update` timeline layout (date/version rail + entry content). Only written\n * by {@link generateAstroProject} when changelog entries exist.\n */\nexport const changelogIndexTemplate = (options: {\n askEnabled: boolean;\n exportEpub: boolean;\n exportPdf: boolean;\n /** Serialize the island-hooks snapshot; only needed when React is enabled. */\n needsReact: boolean;\n /** Whether a `staged` collection exists (non-filesystem changelog sources). */\n staged: boolean;\n}): string => {\n const askImport = options.askEnabled\n ? 'import AskAI from \"blume/components/islands/AskAI.astro\";\\n'\n : \"\";\n const askSlot = options.askEnabled ? '\\n <AskAI slot=\"ask\" />' : \"\";\n const clientData = options.needsReact\n ? '\\n clientData={{ config: data.config, navigation: data.navigation, page: { route: \"/changelog\", title: data.config.title + \" changelog\" } }}'\n : \"\";\n // Staged sources (e.g. GitHub Releases) render through a parallel collection,\n // so fold them in alongside filesystem entries when one exists.\n const stagedSpread = options.staged\n ? '\\n ...(await getCollection(\"staged\")),'\n : \"\";\n\n return `---\n// Generated by Blume. Do not edit.\nimport { getCollection, render } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport Update from \"blume/components/content/Update.astro\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\nimport { layoutOverrides } from \"../generated/components.ts\";\n${askImport}import data from \"../generated/data.json\";\n\nexport const prerender = true;\n\nconst entryDate = (entry) =>\n entry.data.date ?? entry.data.changelog?.date ?? null;\n\nconst toTime = (value) => {\n if (!value) {\n return 0;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? 0 : date.getTime();\n};\n\nconst formatDate = (value) => {\n if (!value) {\n return;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? undefined\n : new Intl.DateTimeFormat(\"en\", {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(date);\n};\n\nconst slugify = (text) =>\n text.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") ||\n \"update\";\n\nconst changelogEntries = [\n ...(await getCollection(\"docs\")),${stagedSpread}\n]\n .filter(\n (entry) =>\n entry.data.type === \"changelog\" &&\n !entry.data.draft &&\n !entry.data.sidebar?.hidden\n )\n .toSorted((a, b) => toTime(entryDate(b)) - toTime(entryDate(a)));\n\nconst items = await Promise.all(\n changelogEntries.map(async (entry) => {\n const label =\n entry.data.title ??\n (entry.data.changelog?.version\n ? \"v\" + entry.data.changelog.version\n : \"Update\");\n return {\n Content: (await render(entry)).Content,\n date: formatDate(entryDate(entry)),\n id: slugify(label),\n label,\n tags: entry.data.changelog?.category\n ? [entry.data.changelog.category]\n : [],\n };\n })\n);\n\nconst headings = items.map((item) => ({\n depth: 2,\n slug: item.id,\n text: item.label,\n}));\n\nconst base = data.config.site ? data.config.site.replace(/\\\\/$/, \"\") : null;\nconst canonical = base ? base + \"/changelog\" : null;\n\nconst LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);\n---\n\n<LayoutComponent\n site={{ title: data.config.title, description: data.config.description }}\n layout={layoutOverrides}${clientData}\n logo={data.config.logo}\n mcp={data.config.mcp}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n imageZoom={data.config.imageZoom}\n codeWrap={data.config.codeWrap}\n navigation={data.navigation}\n page={{\n title: data.config.title + \" changelog\",\n description: \"Product updates and release notes.\",\n route: \"/changelog\",\n }}\n headings={headings}\n toc={data.config.toc}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={true}\n ogImage={null}\n canonical={canonical}\n askEnabled={${options.askEnabled}}\n exportPdf={${options.exportPdf}}\n exportEpub={${options.exportEpub}}\n feeds={data.feeds}\n siteUrl={data.config.site}\n noindex={false}\n structuredDataEnabled={data.config.structuredData}\n>${askSlot}\n <h1>Changelog</h1>\n {\n items.length === 0 ? (\n <p>No changelog entries yet.</p>\n ) : (\n <div class=\"not-prose mt-8\">\n {items.map(({ Content, id, label, date, tags }) => (\n <Update description={date} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </div>\n )\n }\n</LayoutComponent>\n`;\n};\n\n/**\n * Generate `.blume/src/pages/404.astro`: the default not-found page. Rendered\n * through `PageLayout` (header + search, no sidebar) so it stays consistent with\n * the rest of the site, with copy pulled from the translatable `notFound` UI\n * strings. Written at Astro's reserved `src/pages/404.astro` path so static\n * builds emit `dist/404.html` and the dev server serves it for unmatched routes.\n * Skipped by the generator when a user `pages/404.astro` already occupies the\n * `/404` route, so projects can fully override it.\n */\nexport const notFoundPageTemplate = (): string => `---\n// Generated by Blume. Do not edit. Override by adding \\`pages/404.astro\\`.\nimport PageLayout from \"blume/components/layout/PageLayout.astro\";\nimport data from \"../generated/data.json\";\n\nexport const prerender = true;\n\nconst nf = data.ui.notFound;\n---\n\n<PageLayout\n site={{ title: data.config.title, description: data.config.description }}\n logo={data.config.logo}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n navigation={data.navigation}\n page={{ title: nf.title, route: \"/404\" }}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n ui={data.ui}\n noindex={true}\n>\n <div\n class=\"mx-auto flex min-h-[60vh] max-w-2xl flex-col items-center justify-center gap-4 px-6 py-24 text-center\"\n >\n <p class=\"text-6xl font-bold text-muted-foreground\">404</p>\n <h1 class=\"text-2xl font-semibold text-foreground\">{nf.title}</h1>\n <p class=\"text-muted-foreground\">{nf.description}</p>\n <a\n class=\"mt-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-accent-foreground\"\n href=\"/\">{nf.home}</a\n >\n </div>\n</PageLayout>\n`;\n\n/** The literal Astro hydration directive for an island's client mode. */\nconst islandDirective = (spec: IslandSpec): string =>\n spec.client === \"only\"\n ? `client:only=\"${spec.framework}\"`\n : `client:${spec.client}`;\n\n/**\n * Generate `.blume/src/generated/islands/<Name>.astro` — a wrapper that renders\n * a convention island with its hydration directive applied. Astro client\n * directives must be written statically, so one wrapper is emitted per island;\n * props and the default slot (MDX children) forward through.\n */\nexport const islandWrapperTemplate = (spec: IslandSpec): string =>\n `---\n// Generated by Blume. Do not edit.\nimport Island from ${JSON.stringify(spec.file)};\n---\n<Island ${islandDirective(spec)} {...Astro.props}><slot /></Island>\n`;\n\n/**\n * Generate `.blume/src/generated/islands.ts` — the map of island names to their\n * wrappers, spread into the MDX component scope by the catch-all page. Always\n * written (an empty map when there are no islands) so the import resolves.\n */\nexport const islandMapTemplate = (specs: IslandSpec[]): string => {\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\nexport const islandComponents = {};\n`;\n }\n const imports = specs\n .map(\n (spec, index) => `import I${index} from \"./islands/${spec.name}.astro\";`\n )\n .join(\"\\n\");\n const entries = specs\n .map((spec, index) => ` ${spec.name}: I${index},`)\n .join(\"\\n\");\n return `// Generated by Blume. Do not edit.\n${imports}\nexport const islandComponents = {\n${entries}\n};\n`;\n};\n\n/** The literal Astro hydration directive for an example's framework/client. */\nconst exampleDirective = (spec: ExampleSpec): string => {\n if (spec.framework === \"astro\" || !spec.client) {\n return \"\";\n }\n return spec.client === \"only\"\n ? `client:only=\"${spec.framework}\" `\n : `client:${spec.client} `;\n};\n\n/** Filesystem-safe slug for an example's generated wrapper file. */\nexport const exampleSlug = (path: string): string =>\n path.replaceAll(\"/\", \"__\").replaceAll(/[^a-zA-Z0-9_]+/gu, \"-\");\n\n/**\n * Generate `.blume/src/generated/examples/<slug>.astro` — a wrapper that renders\n * one example live, with its hydration directive applied (none for `.astro`).\n * Mirrors {@link islandWrapperTemplate}; `<Component>` resolves these by path.\n */\nexport const exampleWrapperTemplate = (spec: ExampleSpec): string =>\n `---\n// Generated by Blume. Do not edit.\nimport Example from ${JSON.stringify(spec.file)};\n---\n<Example ${exampleDirective(spec)}{...Astro.props}><slot /></Example>\n`;\n\n/**\n * Generate `.blume/src/generated/examples.ts` — a map of example path to its live\n * wrapper component plus raw source and language for the code tab. Reached by the\n * shipped `Component.astro` via the `blume:examples` alias. Always written (an\n * empty object when there are no examples) so the alias resolves.\n */\nexport const exampleMapTemplate = (specs: ExampleSpec[]): string => {\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\nexport const examples = {};\n`;\n }\n const imports = specs\n .map(\n (spec, index) =>\n `import E${index} from \"./examples/${exampleSlug(spec.path)}.astro\";`\n )\n .join(\"\\n\");\n const entries = specs\n .map(\n (spec, index) =>\n ` ${JSON.stringify(spec.path)}: { Component: E${index}, code: ${JSON.stringify(\n spec.source\n )}, lang: ${JSON.stringify(spec.lang)} },`\n )\n .join(\"\\n\");\n return `// Generated by Blume. Do not edit.\n${imports}\nexport const examples = {\n${entries}\n};\n`;\n};\n\n/** Generate `.blume/src/env.d.ts`. */\nexport const envTemplate =\n (): string => `/// <reference path=\"../.astro/types.d.ts\" />\n/// <reference types=\"astro/client\" />\n\ndeclare module \"blume:data\" {\n const data: import(\"blume\").BlumeData;\n export default data;\n}\n\ndeclare module \"blume:openapi\" {\n const specs: import(\"blume/openapi/model.ts\").OpenApiData;\n export default specs;\n}\n\ndeclare module \"blume:search-client\" {\n export const createSearch: () =>\n | import(\"blume/components/layout/search/types.ts\").SearchFn\n | Promise<import(\"blume/components/layout/search/types.ts\").SearchFn>;\n}\n`;\n\n/** Generate `.blume/package.json`. */\nexport const runtimePackageTemplate = (dependencies: string[] = []): string =>\n `${JSON.stringify(\n {\n dependencies: Object.fromEntries(\n [...dependencies].toSorted().map((name) => [name, \"*\"])\n ),\n name: \"blume-runtime\",\n private: true,\n type: \"module\",\n version: \"0.0.0\",\n },\n null,\n 2\n )}\\n`;\n\n/** Generate `.blume/tsconfig.json`. */\nexport const runtimeTsconfigTemplate = (): string =>\n `${JSON.stringify(\n {\n exclude: [\"dist\"],\n extends: \"astro/tsconfigs/strict\",\n include: [\".astro/types.d.ts\", \"**/*\"],\n },\n null,\n 2\n )}\\n`;\n",
88
+ "import { existsSync, readFileSync } from \"node:fs\";\n\nimport { dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { askBackendRuntimeDep } from \"../ai/ask.ts\";\nimport type { AskBackend } from \"../ai/ask.ts\";\nimport { resolveAssetMounts } from \"../core/assets.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { hasScalarReferences } from \"../openapi/references.ts\";\nimport { searchProviderMeta } from \"../search/providers.ts\";\nimport { buildFontEntries } from \"../theme/fonts.ts\";\nimport type { ExampleSpec } from \"./examples.ts\";\nimport type { BlumePageRoute } from \"./integration.ts\";\nimport type { IslandSpec } from \"./islands.ts\";\nimport type { OgCustomRoute } from \"./pages.ts\";\n\nconst WORKSPACE_MARKERS = [\n \".git\",\n \"bun.lock\",\n \"bun.lockb\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"pnpm-workspace.yaml\",\n \"yarn.lock\",\n];\n\n/** True when the package.json at this path declares a `workspaces` field. */\nconst hasWorkspacesField = (pkgPath: string): boolean => {\n if (!existsSync(pkgPath)) {\n return false;\n }\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as {\n workspaces?: unknown;\n };\n return pkg.workspaces !== undefined;\n } catch {\n return false;\n }\n};\n\n/** True when a directory looks like a workspace/monorepo root. */\nconst hasWorkspaceMarker = (dir: string): boolean =>\n hasWorkspacesField(join(dir, \"package.json\")) ||\n WORKSPACE_MARKERS.some((marker) => existsSync(join(dir, marker)));\n\n/**\n * Walk up from the project root to the workspace/monorepo root so Vite's\n * `fs.allow` can reach hoisted dependencies — e.g. KaTeX fonts that resolve to\n * a monorepo root `node_modules` outside the project directory. Falls back to\n * the project root when no workspace markers are found.\n */\nconst findWorkspaceRoot = (start: string): string => {\n let dir = start;\n for (;;) {\n if (hasWorkspaceMarker(dir)) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return start;\n }\n dir = parent;\n }\n};\n\nconst ADAPTER_IMPORTS: Record<string, string> = {\n cloudflare: \"@astrojs/cloudflare\",\n netlify: \"@astrojs/netlify\",\n node: \"@astrojs/node\",\n vercel: \"@astrojs/vercel\",\n};\n\nconst ADAPTER_OPTIONS: Record<string, string> = {\n node: '{ mode: \"standalone\" }',\n};\n\n/**\n * Integration packages the generated runtime imports. Declaring them in\n * `.blume/package.json` lets Astro's framework-package crawl discover and bundle\n * them — notably the React renderer's server entry, which imports the\n * `astro:react:opts` virtual module and must not be externalized (this applies\n * across the `ssr`, `prerender`, and `client` Vite environments).\n */\nexport const runtimeDependencies = (options: {\n config: ResolvedConfig;\n needsReact: boolean;\n needsVue?: boolean;\n needsSvelte?: boolean;\n}): string[] => {\n const { config, needsReact, needsSvelte, needsVue } = options;\n const deps = [\"@astrojs/mdx\"];\n if (needsReact) {\n deps.push(\"@astrojs/react\");\n }\n if (needsVue) {\n deps.push(\"@astrojs/vue\");\n }\n if (needsSvelte) {\n deps.push(\"@astrojs/svelte\");\n }\n // The Scalar integration is only declared for a Scalar-rendered reference\n // (the `renderer: \"scalar\"` fallback, or AsyncAPI). Blume-rendered OpenAPI\n // parses at generate time and needs no runtime Scalar dependency.\n if (hasScalarReferences(config)) {\n deps.push(\"@scalar/astro\");\n }\n // Only the configured search provider's SDK is declared, so a project pulls in\n // (and the user installs) exactly the backend it uses — nothing more.\n deps.push(...searchProviderMeta(config.search.provider).runtimeDeps);\n // Ask AI's provider SDK, when its backend needs one (gateway uses core `ai`).\n if (config.ai.ask?.enabled) {\n const askDep = askBackendRuntimeDep(config.ai.ask);\n if (askDep) {\n deps.push(askDep);\n }\n }\n const { deployment } = config;\n if (deployment.output === \"server\" && deployment.adapter) {\n const adapter = ADAPTER_IMPORTS[deployment.adapter];\n if (adapter) {\n deps.push(adapter);\n }\n }\n return deps;\n};\n\n/** Generate `.blume/astro.config.mjs`. */\n/**\n * Render project tsconfig path aliases as `vite.resolve.alias` object entries.\n * Longest find first, so a more specific prefix (`@components`) is matched\n * before a broader one (`@`); these follow Blume's `blume:*` aliases, which\n * never overlap with a project's.\n */\n/**\n * Blume's render-time dependencies, forced external on the build's SSR and\n * static-prerender Vite environments.\n *\n * Two reasons a dep lands here:\n * - `@takumi-rs/core` (OG image rendering) is a native NAPI addon that loads a\n * platform-specific `.node` binding via `createRequire(import.meta.url)`.\n * Bundling it relocates `import.meta.url` and breaks the binding lookup\n * (\"Cannot find native binding\") on other platforms (e.g. the Linux CI\n * runner), so it must resolve from `node_modules` at runtime instead.\n * - The rest are pure-JS packages kept external so an isolated linker (Bun's\n * `isolated` mode, pnpm) doesn't bundle their symlinked store copies. When\n * Vite bundles such a package but leaves its own `node_modules` child\n * external, that child surfaces as an unresolvable bare import in the\n * prerender chunk (e.g. `batchwork` via `@astrojs/markdown-satteri`). Kept\n * external, each package's transitive imports resolve relative to its real\n * store location — reachable through the `node_modules` junction {@link\n * prerenderDepsPlugin} drops beside the prerender bundle.\n *\n * Astro 7 configures externalization per Vite environment, so this must be\n * applied to both `prerender` (static) and `ssr` (server) — a top-level\n * `ssr.external` only reaches the latter.\n */\nconst RENDER_EXTERNAL_DEPS = [\n \"@astrojs/markdown-satteri\",\n \"@pierre/diffs\",\n \"@shikijs/transformers\",\n \"@takumi-rs/core\",\n \"@takumi-rs/helpers\",\n \"github-slugger\",\n \"katex\",\n \"shiki\",\n \"simple-icons\",\n \"zod\",\n];\n\nconst renderUserAliases = (\n aliases: Record<string, string> | undefined\n): string =>\n Object.entries(aliases ?? {})\n .toSorted(([a], [b]) => b.length - a.length)\n .map(\n ([find, replacement]) =>\n `\\n ${JSON.stringify(find)}: ${JSON.stringify(replacement)},`\n )\n .join(\"\");\n\n/** Astro's build output dir: the runtime's own `distDir`, else `<root>/dist`. */\nconst astroOutDir = (context: ProjectContext): string =>\n context.distDir ?? `${context.root}/dist`;\n\nexport const astroConfigTemplate = (options: {\n context: ProjectContext;\n config: ResolvedConfig;\n needsReact: boolean;\n needsVue?: boolean;\n needsSvelte?: boolean;\n pages: BlumePageRoute[];\n contentRoutes: string[];\n dataPath: string;\n examplesPath: string;\n themePath: string;\n searchClientPath: string;\n openapiPath: string;\n /** Project tsconfig path aliases (`find` -> absolute dir), e.g. `@` -> src. */\n aliases?: Record<string, string>;\n}): string => {\n const { context, config, needsReact, pages, dataPath, themePath } = options;\n const {\n contentRoutes,\n examplesPath,\n needsSvelte,\n needsVue,\n openapiPath,\n searchClientPath,\n } = options;\n const { deployment } = config;\n const userAliasLines = renderUserAliases(options.aliases);\n const server = deployment.output === \"server\";\n\n // The project root plus the workspace root, so hoisted dependencies (e.g.\n // KaTeX fonts under a monorepo's root node_modules) stay servable in dev.\n const fsAllow = [...new Set([findWorkspaceRoot(context.root), context.root])];\n\n const adapterImport =\n server && deployment.adapter\n ? `import adapter from \"${ADAPTER_IMPORTS[deployment.adapter]}\";\\n`\n : \"\";\n const adapterArgs =\n server && deployment.adapter\n ? (ADAPTER_OPTIONS[deployment.adapter] ?? \"\")\n : \"\";\n const adapterOption =\n server && deployment.adapter ? `\\n adapter: adapter(${adapterArgs}),` : \"\";\n\n const siteOption = deployment.site\n ? `\\n site: ${JSON.stringify(deployment.site)},`\n : \"\";\n const baseOption = deployment.base\n ? `\\n base: ${JSON.stringify(deployment.base)},`\n : \"\";\n\n // Astro's native i18n gives locale-aware helpers + `<html lang>` correctness.\n // Blume owns getStaticPaths and materializes fallback routes in the manifest,\n // so we deliberately omit Astro's `fallback` to keep one source of routing.\n const i18nOption = config.i18n\n ? `\\n i18n: ${JSON.stringify({\n defaultLocale: config.i18n.defaultLocale,\n locales: config.i18n.locales.map((locale) => locale.code),\n routing: {\n prefixDefaultLocale: !config.i18n.hideDefaultLocalePrefix,\n },\n })},`\n : \"\";\n\n const redirectsOption =\n config.redirects.length > 0\n ? `\\n redirects: ${JSON.stringify(\n Object.fromEntries(\n config.redirects.map((redirect) => [\n redirect.from,\n { destination: redirect.to, status: redirect.status },\n ])\n )\n )},`\n : \"\";\n\n // Self-hosted Google Fonts via Astro's Fonts API, derived from theme.fonts.\n // `fontProviders` is only imported when at least one font is configured.\n const fontEntries = buildFontEntries(config.theme.fonts);\n const fontsOption = fontEntries.length\n ? `\\n fonts: [${fontEntries\n .map(\n (font) =>\n `{ provider: fontProviders.google(), name: ${JSON.stringify(\n font.name\n )}, cssVariable: ${JSON.stringify(\n font.cssVariable\n )}, weights: ${JSON.stringify(\n font.weights\n )}, fallbacks: ${JSON.stringify(font.fallbacks)} }`\n )\n .join(\", \")}],`\n : \"\";\n const defineConfigImport = fontEntries.length\n ? `import { defineConfig, fontProviders } from \"astro/config\";`\n : `import { defineConfig } from \"astro/config\";`;\n\n // Framework renderers are only wired in when an island (or Ask AI, for React)\n // needs them. The core theme is Astro-first and ships no client JS.\n const reactImport = needsReact ? `import react from \"@astrojs/react\";\\n` : \"\";\n const vueImport = needsVue ? `import vue from \"@astrojs/vue\";\\n` : \"\";\n const svelteImport = needsSvelte\n ? `import svelte from \"@astrojs/svelte\";\\n`\n : \"\";\n const blumeImport = `import { blumeIntegration, prerenderDepsPlugin } from \"blume/astro\";\\n`;\n\n // Twoslash runs first, before the always-on transformers, but only on fences\n // with the `twoslash` meta (explicitTrigger) — so it's opt-in per block with\n // no config flag; the TypeScript compiler only spins up when a block uses it.\n const twoslashImport = `import { transformerTwoslash } from \"@shikijs/twoslash\";\\n`;\n const twoslashTransformer =\n \"transformerTwoslash({ explicitTrigger: true }), \";\n\n const integrations = [\n `mdx({ processor: blumeMdxProcessor(${JSON.stringify({\n headingAnchors: config.markdown.headingAnchors,\n inline: config.markdown.code.inline,\n math: config.markdown.math,\n })}) })`,\n ];\n if (needsReact) {\n integrations.push(\"react()\");\n }\n if (needsVue) {\n integrations.push(\"vue()\");\n }\n if (needsSvelte) {\n integrations.push(\"svelte()\");\n }\n // Always mounted: injects user pages (a no-op when there are none), serves\n // `content.assets` mounts, and wires up dev-server `Accept: text/markdown`\n // negotiation over the content routes.\n const assets = resolveAssetMounts(context.root, config.content.assets);\n integrations.push(\n `blumeIntegration(${JSON.stringify({ assets, base: deployment.base, contentRoutes, pages })})`\n );\n\n return `// Generated by Blume. Do not edit; this file is recreated on each run.\n${defineConfigImport}\nimport mdx from \"@astrojs/mdx\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport { blumeMarkdownProcessor, blumeMdxProcessor, blumeShikiTransformers } from \"blume/markdown\";\n${twoslashImport}${reactImport}${vueImport}${svelteImport}${blumeImport}${adapterImport}\nexport default defineConfig({\n root: ${JSON.stringify(context.outDir)},\n srcDir: ${JSON.stringify(`${context.outDir}/src`)},\n outDir: ${JSON.stringify(astroOutDir(context))},\n publicDir: ${JSON.stringify(`${context.root}/public`)},\n output: ${JSON.stringify(deployment.output)},${adapterOption}${siteOption}${baseOption}${redirectsOption}${i18nOption}${fontsOption}\n integrations: [${integrations.join(\", \")}],\n markdown: {\n processor: blumeMarkdownProcessor(${JSON.stringify({\n headingAnchors: config.markdown.headingAnchors,\n inline: config.markdown.code.inline,\n })}),\n shikiConfig: {\n themes: {\n light: \"github-light\",\n dark: \"github-dark\",\n },\n defaultColor: false,\n transformers: [${twoslashTransformer}...blumeShikiTransformers(${JSON.stringify(\n { icons: config.markdown.code.icons }\n )})],\n },\n },\n devToolbar: { enabled: false },\n vite: {\n plugins: [tailwindcss(), prerenderDepsPlugin()],\n // Blume's render-time deps are forced external on both build environments so\n // native bindings resolve at runtime and isolated linkers don't bundle\n // symlinked store copies (which would surface their children as unresolvable\n // imports). See RENDER_EXTERNAL_DEPS / prerenderDepsPlugin.\n environments: {\n prerender: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n ssr: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n },\n resolve: {\n alias: {\n \"blume:data\": ${JSON.stringify(dataPath)},\n \"blume:examples\": ${JSON.stringify(examplesPath)},\n \"blume:openapi\": ${JSON.stringify(openapiPath)},\n \"blume:search-client\": ${JSON.stringify(searchClientPath)},\n \"blume:theme\": ${JSON.stringify(themePath)},${userAliasLines}\n },\n },\n server: {\n fs: {\n allow: ${JSON.stringify(fsAllow)},\n },\n // Keep the file watcher out of Astro's own cache dir. In a migrated\n // (root-rooted) project the docs collection is rooted at the project dir,\n // so its glob-loader watcher would otherwise fire on every write Astro\n // makes under .blume/.astro (data-store.json, content module manifests,\n // self-hosted fonts) -- pure noise the loader logs as \"No entry type\n // found\". Vite appends this to its default ignores.\n watch: {\n ignored: ${JSON.stringify([join(context.outDir, \".astro\", \"**\")])},\n },\n },\n },\n});\n`;\n};\n\n/** The default staged-content base, relative to the runtime `outDir`. */\nexport const stagedContentDir = (outDir: string): string =>\n join(outDir, \"content\");\n\n/** Generate `.blume/src/content.config.ts`. */\nexport const contentConfigTemplate = (options: {\n context: ProjectContext;\n config: ResolvedConfig;\n /** Whether any non-filesystem source materialized MDX into the staged dir. */\n staged?: boolean;\n /** Base dir for the staged collection; defaults to `<outDir>/content`. */\n stagedBase?: string;\n /**\n * Whether any filesystem (non-staged) source feeds the `docs` collection.\n * When false (e.g. Mintlify bridge mode, where every page is staged), the\n * collection globs nothing — see below.\n */\n filesystem?: boolean;\n}): string => {\n const { context, config } = options;\n const stagedBase = options.stagedBase ?? stagedContentDir(context.outDir);\n\n // Fold the content excludes into the glob as negative patterns so the `docs`\n // collection doesn't ingest ignored trees (`node_modules`, `snippets`, the\n // staged bodies under `.blume/content`, …) as entries. This matters when\n // `content.root` is the project root (a migrated `.`-rooted project).\n const outDirRel = relative(context.contentRoot, context.outDir);\n const outDirIgnore =\n outDirRel && !outDirRel.startsWith(\"..\") && !isAbsolute(outDirRel)\n ? [`!${outDirRel}/**`]\n : [];\n\n // With no filesystem source, no route renders through `docs`, so glob nothing.\n // Beyond skipping wasted work, this is the only thing that keeps Astro's\n // content-layer *watcher* out of `.blume/`: bridge mode roots the collection\n // at the project dir (which contains `.blume/.astro/fonts`, rewritten on every\n // request), and the watcher's match test is `picomatch.isMatch(path, pattern)`\n // — with array-OR semantics, any `!ignored/**` negation *matches* unrelated\n // files, so negative patterns can't exclude a subtree there. An empty pattern\n // matches nothing, so the watcher stays silent. The collection is still\n // declared below so `getCollection(\"docs\")` / `getEntry` resolve (to empty).\n const filesystem = options.filesystem ?? true;\n const docsPattern = filesystem\n ? [\n ...config.content.include,\n ...(config.content.exclude ?? []).map((pattern) => `!${pattern}`),\n \"!**/node_modules/**\",\n ...outDirIgnore,\n ]\n : [];\n\n // Non-filesystem sources render through a parallel `staged` collection backed\n // by materialized MDX, so the filesystem `docs` collection stays untouched.\n const stagedBlock = options.staged\n ? `\nconst staged = defineCollection({\n loader: glob({\n pattern: [\"**/*.{md,mdx}\"],\n base: ${JSON.stringify(stagedBase)},\n generateId: ({ entry }) => entry,\n }),\n});\n`\n : \"\";\n\n return `// Generated by Blume. Do not edit.\nimport { defineCollection } from \"astro:content\";\nimport { glob } from \"astro/loaders\";\n\nconst docs = defineCollection({\n loader: glob({\n pattern: ${JSON.stringify(docsPattern)},\n base: ${JSON.stringify(context.contentRoot)},\n generateId: ({ entry }) => entry,\n }),\n});\n${stagedBlock}\nexport const collections = { docs${options.staged ? \", staged\" : \"\"} };\n`;\n};\n\n/** Generate `.blume/src/pages/[...slug].astro`, the docs catch-all route. */\n/** Generate the Ask AI server endpoint (`.blume/src/pages/api/ask.ts`). */\nexport const askEndpointTemplate = (\n backend: AskBackend,\n grounded: boolean\n): string => {\n const imports = [\n 'import type { APIRoute } from \"astro\";',\n 'import { streamText } from \"ai\";',\n ];\n let setup = \"\";\n let modelExpr = JSON.stringify(backend.model);\n if (backend.kind === \"openrouter\") {\n imports.push(\n 'import { createOpenRouter } from \"@openrouter/ai-sdk-provider\";'\n );\n setup = `\\nconst openrouter = createOpenRouter({ apiKey: process.env[${JSON.stringify(\n backend.apiKeyEnv\n )}] });\\n`;\n modelExpr = `openrouter(${JSON.stringify(backend.model)})`;\n } else if (backend.kind === \"openai-compatible\") {\n imports.push(\n 'import { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";'\n );\n setup = `\\nconst provider = createOpenAICompatible({\n apiKey: process.env[${JSON.stringify(backend.apiKeyEnv)}],\n baseURL: ${JSON.stringify(backend.baseUrl)},\n name: ${JSON.stringify(backend.name)},\n});\\n`;\n modelExpr = `provider(${JSON.stringify(backend.model)})`;\n }\n // Ground the answer in retrieved docs, except for RAG-native backends (Inkeep),\n // which run their own retrieval and would conflict with injected context.\n if (grounded) {\n imports.push(\n 'import { createAskContext } from \"blume/ai/ask-context.ts\";',\n 'import askData from \"../../generated/ask-data.json\";'\n );\n setup += \"\\nconst ground = createAskContext(askData);\\n\";\n }\n // Validate the client-supplied body and cap its size. The endpoint is\n // unauthenticated, so bounding message count/length limits how much a caller\n // can spend against the model per request, and restricting roles to\n // user/assistant keeps callers from injecting their own system prompt and\n // repurposing the endpoint as a general LLM proxy; front it with a rate\n // limiter (or your provider's limits) for stronger protection.\n const validate = ` const body = await request.json().catch(() => null);\n const raw = body?.messages;\n const valid =\n Array.isArray(raw) &&\n raw.length > 0 &&\n raw.length <= 40 &&\n raw.every(\n (m: unknown) =>\n typeof m === \"object\" &&\n m !== null &&\n (\"role\" in m && (m.role === \"user\" || m.role === \"assistant\")) &&\n (\"content\" in m && typeof m.content === \"string\")\n ) &&\n JSON.stringify(raw).length <= 24_000;\n if (!valid) {\n return new Response(\n \"Invalid request: send 1-40 user/assistant messages with string content.\",\n { status: 400 }\n );\n }\n // Re-build the array so only role/content ever reach the model.\n const messages = raw.map((m: { role: \"user\" | \"assistant\"; content: string }) => ({\n content: m.content,\n role: m.role,\n }));`;\n const stream = grounded\n ? ` const system =\n (await ground(messages, body.page)) ??\n \"You are a helpful documentation assistant. Answer using the project's documentation.\";\n const result = streamText({\n model: ${modelExpr},\n system,\n messages,\n });`\n : ` const result = streamText({\n model: ${modelExpr},\n system:\n \"You are a helpful documentation assistant. Answer using the project's documentation.\",\n messages,\n });`;\n const handler = `export const POST: APIRoute = async ({ request }) => {\n${validate}\n try {\n${stream}\n return result.toTextStreamResponse();\n } catch {\n return new Response(\"Failed to generate a response.\", { status: 500 });\n }\n};`;\n return `// Generated by Blume. Do not edit.\n${imports.join(\"\\n\")}\n\nexport const prerender = false;\n${setup}\n${handler}\n`;\n};\n\n/** Generate the static search index endpoint (`/blume-search.json`). */\nexport const searchEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport documents from \"../generated/search.json\";\n\nexport const prerender = true;\n\nexport function GET() {\n return new Response(JSON.stringify(documents), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n`;\n\nconst SEARCH_CLIENT_HEADER = \"// Generated by Blume. Do not edit.\\n\";\n\n/** Import the chosen provider's `createSearch` from the Blume package. */\nconst searchClientImport = (module: string): string =>\n `import { createSearch as create } from \"blume/components/layout/search/${module}.ts\";\\n`;\n\n// Joins a base-relative path onto BASE_URL, which arrives with or without a\n// trailing slash (Astro's default trailingSlash: \"ignore\" passes `/docs`\n// through bare — naive concatenation would yield `/docsblume-search.json`).\nconst SEARCH_BASE_IMPORT =\n 'import { joinBase } from \"blume/components/islands/base-path.ts\";\\n';\n\n/** A client that loads a static `blume-search.json` index (Orama, FlexSearch). */\nconst staticSearchClient = (module: string): string =>\n `${SEARCH_CLIENT_HEADER}${searchClientImport(module)}${SEARCH_BASE_IMPORT}\nconst indexUrl = joinBase(import.meta.env.BASE_URL, \"blume-search.json\");\n\nexport const createSearch = () => create({ indexUrl });\n`;\n\n/** A client that passes public credentials straight to the provider SDK. */\nconst hostedSearchClient = (\n module: string,\n options: Record<string, unknown>\n): string =>\n `${SEARCH_CLIENT_HEADER}${searchClientImport(module)}\nexport const createSearch = () => create(${JSON.stringify(options)});\n`;\n\n/** Build the per-provider config object the hosted client is created with. */\nconst hostedSearchOptions = (\n search: ResolvedConfig[\"search\"]\n): { module: string; options: Record<string, unknown> } | null => {\n switch (search.provider) {\n case \"algolia\": {\n return { module: \"algolia\", options: { ...search.algolia } };\n }\n case \"orama-cloud\": {\n return {\n module: \"orama-cloud\",\n options: {\n apiKey: search.oramaCloud?.apiKey,\n endpoint: search.oramaCloud?.endpoint,\n },\n };\n }\n case \"typesense\": {\n return { module: \"typesense\", options: { ...search.typesense } };\n }\n default: {\n return null;\n }\n }\n};\n\n/**\n * Generate `.blume/src/generated/search-client.ts` — the provider-specific\n * loader the `<Search>` component lazy-imports via the `blume:search-client`\n * alias. Only the configured provider's module (and therefore its SDK) is\n * referenced, so the build bundles exactly one backend. Public credentials are\n * baked in here; secret keys never reach the client.\n */\nexport const searchClientTemplate = (config: ResolvedConfig): string => {\n const { search } = config;\n\n if (search.provider === \"orama\" || search.provider === \"flexsearch\") {\n return staticSearchClient(search.provider);\n }\n\n const hosted = hostedSearchOptions(search);\n if (hosted) {\n return hostedSearchClient(hosted.module, hosted.options);\n }\n\n if (search.provider === \"mixedbread\") {\n return `${SEARCH_CLIENT_HEADER}${searchClientImport(\"endpoint\")}${SEARCH_BASE_IMPORT}\nconst api = joinBase(import.meta.env.BASE_URL, \"api/search\");\n\nexport const createSearch = () => create({ api });\n`;\n }\n\n if (search.provider === \"pagefind\") {\n return `${SEARCH_CLIENT_HEADER}${searchClientImport(\"pagefind\")}${SEARCH_BASE_IMPORT}\nconst url = joinBase(import.meta.env.BASE_URL, \"pagefind/pagefind.js\");\n\nexport const createSearch = () => create({ url });\n`;\n }\n\n // Search disabled: a no-op client so the alias always resolves.\n return `${SEARCH_CLIENT_HEADER}export const createSearch = () => () =>\n Promise.resolve({ hits: [], sections: [] });\n`;\n};\n\n/**\n * Generate the Mixedbread search endpoint (`/api/search`). It holds the secret\n * key server-side and proxies semantic queries to the configured store. The\n * result mapping is best-effort and may need tuning to how your content was\n * synced (see the Mixedbread sync step / \\`mxbai vs sync\\`).\n */\nexport const mixedbreadSearchEndpointTemplate = (storeId: string): string =>\n `// Generated by Blume. Do not edit.\nimport type { APIRoute } from \"astro\";\nimport Mixedbread from \"@mixedbread/sdk\";\n\nexport const prerender = false;\n\nconst client = new Mixedbread({ apiKey: process.env.MIXEDBREAD_API_KEY ?? \"\" });\nconst STORE_ID = ${JSON.stringify(storeId)};\n\nexport const POST: APIRoute = async ({ request }) => {\n // The endpoint is public: a malformed body must 200-empty, not 500.\n const body = await request.json().catch(() => null);\n const query = body?.query;\n if (!query || typeof query !== \"string\") {\n return new Response(\"[]\", {\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n const response = await client.stores.search({\n query,\n store_identifiers: [STORE_ID],\n top_k: 8,\n });\n const hits = (response.data ?? []).map((chunk) => {\n const meta = chunk.generated_metadata ?? {};\n return {\n excerpt: chunk.text ?? meta.excerpt ?? \"\",\n title: meta.title ?? chunk.filename ?? \"\",\n url: meta.url ?? \"\",\n };\n });\n return new Response(JSON.stringify(hits), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n`;\n\n/**\n * Generate the raw-Markdown endpoints (`[...slug].md.ts` and `[...slug].mdx.ts`).\n * Each route's source is served verbatim so `/<route>.md` returns plain Markdown.\n */\nexport const rawMarkdownEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport raw from \"../generated/raw-markdown.json\";\n\nexport const prerender = true;\n\nexport function getStaticPaths() {\n return Object.keys(raw).map((route) => ({\n params: { slug: route === \"/\" ? \"index\" : route.slice(1) },\n props: { route },\n }));\n}\n\nexport function GET({ props }) {\n return new Response(raw[props.route] ?? \"\", {\n headers: { \"Content-Type\": \"text/markdown; charset=utf-8\" },\n });\n}\n`;\n\n/** The `src/pages` file that serves a route, e.g. `/mcp` -> `mcp.ts`. */\nexport const mcpPageFile = (route: string): string => {\n const clean = route.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n return `${clean}.ts`;\n};\n\n/**\n * Generate the hosted MCP server endpoint (e.g. `.blume/src/pages/mcp.ts`). A\n * thin wrapper around the shipped `createMcpFetchHandler`, served from the\n * generated data snapshot. Runs server-side (no prerender) so agents can query\n * the docs over Streamable HTTP.\n */\nexport const mcpEndpointTemplate = (route: string): string => {\n const clean = route.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n const up = \"../\".repeat(clean.split(\"/\").length);\n return `// Generated by Blume. Do not edit.\nimport type { APIRoute } from \"astro\";\nimport { createMcpFetchHandler } from \"blume/ai/mcp/server.ts\";\nimport data from \"${up}generated/mcp-data.json\";\n\nexport const prerender = false;\n\nconst handler = createMcpFetchHandler(data);\n\nexport const ALL: APIRoute = ({ request }) => handler(request);\n`;\n};\n\n/** Generate a prerendered endpoint that serves a fixed JSON payload. */\nexport const staticJsonEndpointTemplate = (payload: unknown): string =>\n `// Generated by Blume. Do not edit.\nexport const prerender = true;\n\nconst payload = ${JSON.stringify(payload, null, 2)};\n\nexport function GET() {\n return new Response(JSON.stringify(payload), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n`;\n\n/**\n * Generate the RSS endpoint (`[section]/rss.xml.ts`). One feed per content\n * type is served from the generated `rss.json`, e.g. `/blog/rss.xml`.\n */\nexport const rssEndpointTemplate = (): string =>\n `// Generated by Blume. Do not edit.\nimport feeds from \"../../generated/rss.json\";\n\nexport const prerender = true;\n\nexport function getStaticPaths() {\n return Object.keys(feeds).map((section) => ({\n params: { section },\n props: { section },\n }));\n}\n\nexport function GET({ props }) {\n return new Response(feeds[props.section] ?? \"\", {\n headers: { \"Content-Type\": \"application/rss+xml; charset=utf-8\" },\n });\n}\n`;\n\n/** Generate the OG image endpoint (`.blume/src/pages/_og/[...slug].png.ts`). */\nexport const ogEndpointTemplate = (\n customRoutes: OgCustomRoute[] = []\n): string =>\n `// Generated by Blume. Do not edit.\nimport { renderOgImage } from \"blume/og\";\nimport data from \"../../generated/data.json\";\n\nexport const prerender = true;\n\n// Custom (non-content) pages opted into a generated card, baked in at build.\nconst customRoutes = ${JSON.stringify(customRoutes)};\n\nexport function getStaticPaths() {\n const seen = new Set();\n const paths = [];\n const add = (slug, title) => {\n if (seen.has(slug)) {\n return;\n }\n seen.add(slug);\n paths.push({ params: { slug }, props: { title } });\n };\n // A custom page wins over a content route sharing its path, so add it first.\n for (const route of customRoutes) {\n add(route.slug, route.title);\n }\n for (const route of data.routes) {\n add(route.path === \"/\" ? \"index\" : route.path.slice(1), route.title);\n }\n return paths;\n}\n\n// Footer branding shared by every card, derived once from the resolved config.\n// The repo slug reuses the header link URL; the host comes from the site URL.\nconst repoSlug = data.config.repoUrl\n ? data.config.repoUrl.split(\"github.com/\")[1]\n : undefined;\nconst siteHost = (() => {\n if (!data.config.site) {\n return undefined;\n }\n try {\n return new URL(data.config.site).host;\n } catch {\n return undefined;\n }\n})();\n\nexport async function GET({ props }) {\n const png = await renderOgImage({\n accent: data.config.theme.accent,\n brand: data.config.title,\n description: data.config.description,\n logo: data.config.logo?.svg,\n repo: repoSlug,\n site: siteHost,\n title: props.title,\n });\n return new Response(png, {\n headers: {\n \"Cache-Control\": \"public, max-age=31536000, immutable\",\n \"Content-Type\": \"image/png\",\n },\n });\n}\n`;\n\n/**\n * Generate a Scalar API/AsyncAPI reference page (`.blume/src/pages/<route>.astro`).\n * The reference UI is owned by Scalar (its standalone bundle, loaded from a CDN)\n * but mounted inside Blume's {@link ReferenceLayout} so the page keeps Blume's\n * navbar on top. `renderMode: \"client\"` mounts the reference into a container\n * element (rather than emitting a full HTML document), which is what lets it\n * live inside our shell. `dataImport` is the route-depth-aware relative path to\n * the generated data module the layout reads.\n */\nexport const scalarReferenceTemplate = (options: {\n configuration: Record<string, unknown>;\n dataImport: string;\n route: string;\n title: string;\n}): string =>\n `---\n// Generated by Blume. Do not edit.\nimport { ScalarComponent } from \"@scalar/astro\";\nimport ReferenceLayout from \"blume/components/layout/ReferenceLayout.astro\";\nimport data from ${JSON.stringify(options.dataImport)};\n\nexport const prerender = true;\n\nconst configuration = ${JSON.stringify(options.configuration, null, 2)};\n---\n\n<ReferenceLayout\n analytics={data.config.analytics}\n banner={data.config.banner}\n fontCssVars={data.fontCssVars}\n logo={data.config.logo}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n navigation={data.navigation}\n pageTitle={${JSON.stringify(options.title)}}\n route={${JSON.stringify(options.route)}}\n searchEnabled={data.config.search.enabled}\n site={{ title: data.config.title, description: data.config.description }}\n themeMode={data.config.theme.mode}\n>\n <ScalarComponent configuration={configuration} renderMode=\"client\" />\n</ReferenceLayout>\n`;\n\nexport const catchAllPageTemplate = (options: {\n askEnabled: boolean;\n exportEpub: boolean;\n exportPdf: boolean;\n mathEnabled: boolean;\n /** Serialize the island-hooks snapshot; only needed when React is enabled. */\n needsReact: boolean;\n}): string => {\n const askImport = options.askEnabled\n ? 'import AskAI from \"blume/components/islands/AskAI.astro\";\\n'\n : \"\";\n const askSlot = options.askEnabled\n ? '\\n <AskAI slot=\"ask\" strings={ui.ask} />'\n : \"\";\n const mathImport = options.mathEnabled\n ? 'import Math from \"blume/components/content/Math.astro\";\\n'\n : \"\";\n const mathEntry = options.mathEnabled ? \"Math,\\n \" : \"\";\n // The island-hooks snapshot (config + navigation + page) for `blume/hooks`.\n const clientData = options.needsReact\n ? \"\\n clientData={{ config: data.config, navigation, page: { route, title: seo.title ?? title } }}\"\n : \"\";\n\n return `---\n// Generated by Blume. Do not edit.\nimport { getEntry, render } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\n${askImport}\nimport Accordion from \"blume/components/content/Accordion.astro\";\nimport AccordionItem from \"blume/components/content/AccordionItem.astro\";\nimport AutoTypeTable from \"blume/components/content/AutoTypeTable.astro\";\nimport Badge from \"blume/components/content/Badge.astro\";\nimport Callout from \"blume/components/content/Callout.astro\";\nimport Card from \"blume/components/content/Card.astro\";\nimport CardGroup from \"blume/components/content/CardGroup.astro\";\nimport CodeBlock from \"blume/components/content/CodeBlock.astro\";\nimport CodeGroup from \"blume/components/content/CodeGroup.astro\";\nimport ColorRoot from \"blume/components/content/Color.astro\";\nimport ColorItem from \"blume/components/content/ColorItem.astro\";\nimport ColorRow from \"blume/components/content/ColorRow.astro\";\nimport Column from \"blume/components/content/Column.astro\";\nimport Columns from \"blume/components/content/Columns.astro\";\nimport Component from \"blume/components/content/Component.astro\";\nimport Diff from \"blume/components/content/Diff.astro\";\nimport Expandable from \"blume/components/content/Expandable.astro\";\nimport FileTree from \"blume/components/content/FileTree.astro\";\nimport Frame from \"blume/components/content/Frame.astro\";\nimport GithubInfo from \"blume/components/content/GithubInfo.astro\";\nimport Panel from \"blume/components/content/Panel.astro\";\nimport ParamField from \"blume/components/content/ParamField.astro\";\nimport Prompt from \"blume/components/content/Prompt.astro\";\nimport RequestField from \"blume/components/content/RequestField.astro\";\nimport ResponseField from \"blume/components/content/ResponseField.astro\";\nimport Step from \"blume/components/content/Step.astro\";\nimport Steps from \"blume/components/content/Steps.astro\";\nimport Tab from \"blume/components/content/Tab.astro\";\nimport Tabs from \"blume/components/content/Tabs.astro\";\nimport Tile from \"blume/components/content/Tile.astro\";\nimport Tooltip from \"blume/components/content/Tooltip.astro\";\nimport TreeRoot from \"blume/components/content/Tree.astro\";\nimport TreeFile from \"blume/components/content/TreeFile.astro\";\nimport TreeFolder from \"blume/components/content/TreeFolder.astro\";\nimport TypeTable from \"blume/components/content/TypeTable.astro\";\nimport Visibility from \"blume/components/content/Visibility.astro\";\nimport YouTube from \"blume/components/content/YouTube.astro\";\nimport Icon from \"blume/components/Icon.astro\";\nimport ApiOverview from \"blume/components/openapi/ApiOverview.astro\";\nimport Operation from \"blume/components/openapi/Operation.astro\";\n${mathImport}import { mdxComponents as userMdx, layoutOverrides } from \"../generated/components.ts\";\nimport { islandComponents } from \"../generated/islands.ts\";\nimport data from \"../generated/data.json\";\n\nconst Color = Object.assign(ColorRoot, { Item: ColorItem, Row: ColorRow });\nconst Tree = Object.assign(TreeRoot, { File: TreeFile, Folder: TreeFolder });\n\n// Docs content is file-based and always prerendered, even in server output\n// (where only endpoints like /api/ask render on demand). Without this, server\n// builds would render this route on demand and ignore getStaticPaths, leaving\n// the entry id undefined.\nexport const prerender = true;\n\nconst components = {\n Accordion,\n AccordionItem,\n ApiOverview,\n AutoTypeTable,\n Badge,\n Callout,\n Card,\n CardGroup,\n CodeBlock,\n CodeGroup,\n Color,\n Column,\n Columns,\n Component,\n Diff,\n Expandable,\n FileTree,\n Frame,\n GithubInfo,\n Icon,\n Operation,\n Panel,\n ParamField,\n Prompt,\n RequestField,\n ResponseField,\n Step,\n Steps,\n Tab,\n Tabs,\n Tile,\n Tooltip,\n Tree,\n TypeTable,\n Visibility,\n YouTube,\n ${mathEntry}...islandComponents,\n ...userMdx,\n};\n\nexport function getStaticPaths() {\n return data.routes.map((route) => ({\n params: { slug: route.path === \"/\" ? undefined : route.path.slice(1) },\n props: {\n alternates: route.alternates,\n collection: route.collection,\n editUrl: route.editUrl,\n entryId: route.entryId,\n fallback: route.fallback,\n indexable: route.indexable,\n lastModified: route.lastModified,\n locale: route.locale,\n route: route.path,\n title: route.title,\n },\n }));\n}\n\nconst { entryId, collection, route, title, indexable, editUrl, lastModified, locale, alternates, fallback } = Astro.props;\nconst entry = await getEntry(collection, entryId);\nif (!entry) {\n return new Response(null, { status: 404 });\n}\nconst { Content, headings } = await render(entry);\nconst frontmatter = entry.data ?? {};\n\nconst seo = frontmatter.seo ?? {};\nconst base = data.config.site ? data.config.site.replace(/\\\\/$/, \"\") : null;\n\nconst ogPath = data.config.og.enabled\n ? \\`/og/\\${route === \"/\" ? \"index\" : route.slice(1)}.png\\`\n : null;\nconst ogRel = seo.image ?? ogPath;\nconst ogImage = ogRel && base ? \\`\\${base}\\${ogRel}\\` : ogRel;\n\nconst canonical =\n seo.canonical ?? (base ? \\`\\${base}\\${route === \"/\" ? \"\" : route}\\` : null);\n\n// Locale resolution. With i18n on, pick the active locale's nav + dictionary,\n// build hreflang alternates, and derive the language-switcher targets.\nconst i18n = data.config.i18n;\nconst localePrefix = (codeArg) =>\n i18n && codeArg === i18n.defaultLocale && i18n.hideDefaultLocalePrefix\n ? \"\"\n : \\`/\\${codeArg}\\`;\nconst localizeRoute = (logical, codeArg) => {\n const prefix = localePrefix(codeArg);\n if (!prefix) {\n return logical;\n }\n return logical === \"/\" ? prefix : \\`\\${prefix}\\${logical}\\`;\n};\nconst stripLocale = (path, codeArg) => {\n const prefix = localePrefix(codeArg);\n return prefix && path.startsWith(prefix) ? path.slice(prefix.length) || \"/\" : path;\n};\n\nconst navigation = i18n ? (data.navigationByLocale[locale] ?? data.navigation) : data.navigation;\nconst ui = i18n ? (data.uiByLocale[locale] ?? data.ui) : data.ui;\nconst localeMeta = i18n ? i18n.locales.find((l) => l.code === locale) : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? locale : \"en\";\n// A fallback page renders the fallback locale's content, so its text direction\n// follows that language — not the (mirrored) page locale.\nconst contentLocale =\n fallback && i18n?.fallbackLocale ? i18n.fallbackLocale : locale;\nconst contentDir = i18n\n ? (i18n.locales.find((l) => l.code === contentLocale)?.dir ?? \"ltr\")\n : \"ltr\";\nconst absolute = (path) => base + (path === \"/\" ? \"\" : path);\n\nconst localeAlternates =\n i18n && base\n ? (alternates ?? []).map((alt) => ({ hreflang: alt.locale, href: absolute(alt.path) }))\n : [];\nconst defaultAlt = i18n ? (alternates ?? []).find((alt) => alt.locale === i18n.defaultLocale) : null;\nconst xDefault = defaultAlt && base ? absolute(defaultAlt.path) : null;\n\nconst logicalRoute = i18n ? stripLocale(route, locale) : route;\nconst localeSwitch = i18n\n ? i18n.locales.map((l) => {\n const alt = (alternates ?? []).find((x) => x.locale === l.code);\n return {\n code: l.code,\n current: l.code === locale,\n dir: l.dir,\n href: alt ? alt.path : localizeRoute(logicalRoute, l.code),\n label: l.label,\n untranslated: !alt,\n };\n })\n : [];\n\n// The whole page shell is overridable via \\`layout.Layout\\`; it receives the same\n// props as the built-in RootLayout, plus the \\`layout\\` map for its inner slots.\nconst LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);\n---\n\n<LayoutComponent\n site={{ title: data.config.title, description: data.config.description }}\n layout={layoutOverrides}${clientData}\n logo={data.config.logo}\n mcp={data.config.mcp}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n imageZoom={data.config.imageZoom}\n codeWrap={data.config.codeWrap}\n navigation={navigation}\n locale={htmlLang}\n dir={dir}\n contentDir={contentDir}\n ui={ui}\n localeAlternates={localeAlternates}\n xDefault={xDefault}\n localeSwitch={localeSwitch}\n page={{ title: seo.title ?? title, description: seo.description ?? frontmatter.description, route }}\n headings={headings}\n toc={data.config.toc}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={indexable}\n ogImage={ogImage}\n canonical={canonical}\n editUrl={editUrl}\n feedback={data.config.feedback}\n askEnabled={${options.askEnabled}}\n exportPdf={${options.exportPdf}}\n exportEpub={${options.exportEpub}}\n feeds={data.feeds}\n siteUrl={data.config.site}\n pageType={frontmatter.type}\n published={frontmatter.date ?? frontmatter.changelog?.date ?? null}\n lastModified={lastModified}\n noindex={seo.noindex}\n structuredDataEnabled={data.config.structuredData}\n>${askSlot}\n <h1>{title}</h1>\n {frontmatter.description && <p class=\"text-lg text-muted-foreground\">{frontmatter.description}</p>}\n <Content components={components} />\n</LayoutComponent>\n`;\n};\n\n/**\n * Generate `.blume/src/pages/changelog.astro` — the changelog index. Collects\n * every `type: changelog` entry, sorts newest-first, and renders each through\n * the `Update` timeline layout (date/version rail + entry content). Only written\n * by {@link generateAstroProject} when changelog entries exist.\n */\nexport const changelogIndexTemplate = (options: {\n askEnabled: boolean;\n exportEpub: boolean;\n exportPdf: boolean;\n /** Serialize the island-hooks snapshot; only needed when React is enabled. */\n needsReact: boolean;\n /** Whether a `staged` collection exists (non-filesystem changelog sources). */\n staged: boolean;\n}): string => {\n const askImport = options.askEnabled\n ? 'import AskAI from \"blume/components/islands/AskAI.astro\";\\n'\n : \"\";\n const askSlot = options.askEnabled ? '\\n <AskAI slot=\"ask\" />' : \"\";\n const clientData = options.needsReact\n ? '\\n clientData={{ config: data.config, navigation: data.navigation, page: { route: \"/changelog\", title: data.config.title + \" changelog\" } }}'\n : \"\";\n // Staged sources (e.g. GitHub Releases) render through a parallel collection,\n // so fold them in alongside filesystem entries when one exists.\n const stagedSpread = options.staged\n ? '\\n ...(await getCollection(\"staged\")),'\n : \"\";\n\n return `---\n// Generated by Blume. Do not edit.\nimport { getCollection, render } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport Update from \"blume/components/content/Update.astro\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\nimport { layoutOverrides } from \"../generated/components.ts\";\n${askImport}import data from \"../generated/data.json\";\n\nexport const prerender = true;\n\nconst entryDate = (entry) =>\n entry.data.date ?? entry.data.changelog?.date ?? null;\n\nconst toTime = (value) => {\n if (!value) {\n return 0;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? 0 : date.getTime();\n};\n\nconst formatDate = (value) => {\n if (!value) {\n return;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? undefined\n : new Intl.DateTimeFormat(\"en\", {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(date);\n};\n\nconst slugify = (text) =>\n text.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") ||\n \"update\";\n\nconst changelogEntries = [\n ...(await getCollection(\"docs\")),${stagedSpread}\n]\n .filter(\n (entry) =>\n entry.data.type === \"changelog\" &&\n !entry.data.draft &&\n !entry.data.sidebar?.hidden\n )\n .toSorted((a, b) => toTime(entryDate(b)) - toTime(entryDate(a)));\n\nconst items = await Promise.all(\n changelogEntries.map(async (entry) => {\n const label =\n entry.data.title ??\n (entry.data.changelog?.version\n ? \"v\" + entry.data.changelog.version\n : \"Update\");\n return {\n Content: (await render(entry)).Content,\n date: formatDate(entryDate(entry)),\n id: slugify(label),\n label,\n tags: entry.data.changelog?.category\n ? [entry.data.changelog.category]\n : [],\n };\n })\n);\n\nconst headings = items.map((item) => ({\n depth: 2,\n slug: item.id,\n text: item.label,\n}));\n\nconst base = data.config.site ? data.config.site.replace(/\\\\/$/, \"\") : null;\nconst canonical = base ? base + \"/changelog\" : null;\n\nconst LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);\n---\n\n<LayoutComponent\n site={{ title: data.config.title, description: data.config.description }}\n layout={layoutOverrides}${clientData}\n logo={data.config.logo}\n mcp={data.config.mcp}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n imageZoom={data.config.imageZoom}\n codeWrap={data.config.codeWrap}\n navigation={data.navigation}\n page={{\n title: data.config.title + \" changelog\",\n description: \"Product updates and release notes.\",\n route: \"/changelog\",\n }}\n headings={headings}\n toc={data.config.toc}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={true}\n ogImage={null}\n canonical={canonical}\n askEnabled={${options.askEnabled}}\n exportPdf={${options.exportPdf}}\n exportEpub={${options.exportEpub}}\n feeds={data.feeds}\n siteUrl={data.config.site}\n noindex={false}\n structuredDataEnabled={data.config.structuredData}\n>${askSlot}\n <h1>Changelog</h1>\n {\n items.length === 0 ? (\n <p>No changelog entries yet.</p>\n ) : (\n <div class=\"not-prose mt-8\">\n {items.map(({ Content, id, label, date, tags }) => (\n <Update description={date} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </div>\n )\n }\n</LayoutComponent>\n`;\n};\n\n/**\n * Generate `.blume/src/pages/404.astro`: the default not-found page. Rendered\n * through `PageLayout` (header + search, no sidebar) so it stays consistent with\n * the rest of the site, with copy pulled from the translatable `notFound` UI\n * strings. Written at Astro's reserved `src/pages/404.astro` path so static\n * builds emit `dist/404.html` and the dev server serves it for unmatched routes.\n * Skipped by the generator when a user `pages/404.astro` already occupies the\n * `/404` route, so projects can fully override it.\n */\nexport const notFoundPageTemplate = (): string => `---\n// Generated by Blume. Do not edit. Override by adding \\`pages/404.astro\\`.\nimport PageLayout from \"blume/components/layout/PageLayout.astro\";\nimport data from \"../generated/data.json\";\n\nexport const prerender = true;\n\nconst nf = data.ui.notFound;\n---\n\n<PageLayout\n site={{ title: data.config.title, description: data.config.description }}\n logo={data.config.logo}\n favicon={data.config.favicon}\n appleIcon={data.config.appleIcon}\n banner={data.config.banner}\n analytics={data.config.analytics}\n navigation={data.navigation}\n page={{ title: nf.title, route: \"/404\" }}\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n ui={data.ui}\n noindex={true}\n>\n <div\n class=\"mx-auto flex min-h-[60vh] max-w-2xl flex-col items-center justify-center gap-4 px-6 py-24 text-center\"\n >\n <p class=\"text-6xl font-bold text-muted-foreground\">404</p>\n <h1 class=\"text-2xl font-semibold text-foreground\">{nf.title}</h1>\n <p class=\"text-muted-foreground\">{nf.description}</p>\n <a\n class=\"mt-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-accent-foreground\"\n href=\"/\">{nf.home}</a\n >\n </div>\n</PageLayout>\n`;\n\n/** The literal Astro hydration directive for an island's client mode. */\nconst islandDirective = (spec: IslandSpec): string =>\n spec.client === \"only\"\n ? `client:only=\"${spec.framework}\"`\n : `client:${spec.client}`;\n\n/**\n * Generate `.blume/src/generated/islands/<Name>.astro` — a wrapper that renders\n * a convention island with its hydration directive applied. Astro client\n * directives must be written statically, so one wrapper is emitted per island;\n * props and the default slot (MDX children) forward through.\n */\nexport const islandWrapperTemplate = (spec: IslandSpec): string =>\n `---\n// Generated by Blume. Do not edit.\nimport Island from ${JSON.stringify(spec.file)};\n---\n<Island ${islandDirective(spec)} {...Astro.props}><slot /></Island>\n`;\n\n/**\n * Generate `.blume/src/generated/islands.ts` — the map of island names to their\n * wrappers, spread into the MDX component scope by the catch-all page. Always\n * written (an empty map when there are no islands) so the import resolves.\n */\nexport const islandMapTemplate = (specs: IslandSpec[]): string => {\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\nexport const islandComponents = {};\n`;\n }\n const imports = specs\n .map(\n (spec, index) => `import I${index} from \"./islands/${spec.name}.astro\";`\n )\n .join(\"\\n\");\n const entries = specs\n .map((spec, index) => ` ${spec.name}: I${index},`)\n .join(\"\\n\");\n return `// Generated by Blume. Do not edit.\n${imports}\nexport const islandComponents = {\n${entries}\n};\n`;\n};\n\n/** The literal Astro hydration directive for an example's framework/client. */\nconst exampleDirective = (spec: ExampleSpec): string => {\n if (spec.framework === \"astro\" || !spec.client) {\n return \"\";\n }\n return spec.client === \"only\"\n ? `client:only=\"${spec.framework}\" `\n : `client:${spec.client} `;\n};\n\n/** Filesystem-safe slug for an example's generated wrapper file. */\nexport const exampleSlug = (path: string): string =>\n path.replaceAll(\"/\", \"__\").replaceAll(/[^a-zA-Z0-9_]+/gu, \"-\");\n\n/**\n * Generate `.blume/src/generated/examples/<slug>.astro` — a wrapper that renders\n * one example live, with its hydration directive applied (none for `.astro`).\n * Mirrors {@link islandWrapperTemplate}; `<Component>` resolves these by path.\n */\nexport const exampleWrapperTemplate = (spec: ExampleSpec): string =>\n `---\n// Generated by Blume. Do not edit.\nimport Example from ${JSON.stringify(spec.file)};\n---\n<Example ${exampleDirective(spec)}{...Astro.props}><slot /></Example>\n`;\n\n/**\n * Generate `.blume/src/generated/examples.ts` — a map of example path to its live\n * wrapper component plus raw source and language for the code tab. Reached by the\n * shipped `Component.astro` via the `blume:examples` alias. Always written (an\n * empty object when there are no examples) so the alias resolves.\n */\nexport const exampleMapTemplate = (specs: ExampleSpec[]): string => {\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\nexport const examples = {};\n`;\n }\n const imports = specs\n .map(\n (spec, index) =>\n `import E${index} from \"./examples/${exampleSlug(spec.path)}.astro\";`\n )\n .join(\"\\n\");\n const entries = specs\n .map(\n (spec, index) =>\n ` ${JSON.stringify(spec.path)}: { Component: E${index}, code: ${JSON.stringify(\n spec.source\n )}, lang: ${JSON.stringify(spec.lang)} },`\n )\n .join(\"\\n\");\n return `// Generated by Blume. Do not edit.\n${imports}\nexport const examples = {\n${entries}\n};\n`;\n};\n\n/** Generate `.blume/src/env.d.ts`. */\nexport const envTemplate =\n (): string => `/// <reference path=\"../.astro/types.d.ts\" />\n/// <reference types=\"astro/client\" />\n\ndeclare module \"blume:data\" {\n const data: import(\"blume\").BlumeData;\n export default data;\n}\n\ndeclare module \"blume:openapi\" {\n const specs: import(\"blume/openapi/model.ts\").OpenApiData;\n export default specs;\n}\n\ndeclare module \"blume:search-client\" {\n export const createSearch: () =>\n | import(\"blume/components/layout/search/types.ts\").SearchFn\n | Promise<import(\"blume/components/layout/search/types.ts\").SearchFn>;\n}\n`;\n\n/** Generate `.blume/package.json`. */\nexport const runtimePackageTemplate = (dependencies: string[] = []): string =>\n `${JSON.stringify(\n {\n dependencies: Object.fromEntries(\n [...dependencies].toSorted().map((name) => [name, \"*\"])\n ),\n name: \"blume-runtime\",\n private: true,\n type: \"module\",\n version: \"0.0.0\",\n },\n null,\n 2\n )}\\n`;\n\n/** Generate `.blume/tsconfig.json`. */\nexport const runtimeTsconfigTemplate = (): string =>\n `${JSON.stringify(\n {\n exclude: [\"dist\"],\n extends: \"astro/tsconfigs/strict\",\n include: [\".astro/types.d.ts\", \"**/*\"],\n },\n null,\n 2\n )}\\n`;\n",
89
89
  "import { join } from \"pathe\";\n\n/** A static directory served at a URL prefix, in addition to `public/`. */\nexport interface AssetMount {\n /** Absolute filesystem path to the source directory (or file). */\n dir: string;\n /** URL path prefix the source is served at, e.g. `/images`. */\n url: string;\n}\n\n/**\n * Resolve `content.assets` entries (top-level dirs served at the site root,\n * alongside `public/`) to `{ dir, url }` mounts. Shared by the generated Astro\n * runtime (dev middleware + build copy) and by link validation, so all three\n * agree on where a `/images/foo.png` reference resolves on disk.\n *\n * Each entry is normalized to a leading-slash URL and joined to the project\n * root; leading `./` or `/` and any `..` segments are stripped so a mount can't\n * escape the root or collide with the site's own routing prefix.\n */\nexport const resolveAssetMounts = (\n root: string,\n assets: string[]\n): AssetMount[] =>\n assets.map((entry) => {\n const rel = entry\n .replace(/^[./]+/u, \"\")\n .replaceAll(/\\.\\.\\/?/gu, \"\")\n .replace(/\\/+$/u, \"\");\n return { dir: join(root, rel), url: `/${rel}` };\n });\n",
90
90
  "/**\n * Curated Google Fonts exposed through `theme.fonts`.\n *\n * Each slug maps to the official Google family name (Astro's font provider needs\n * the exact name), a docs-appropriate set of weights, and a fallback category.\n * Fonts are self-hosted and optimized by Astro's built-in Fonts API; this module\n * only resolves config slugs into the data that drives it.\n */\n\nexport type FontCategory = \"sans\" | \"serif\" | \"mono\";\n\n/** The three configurable roles in `theme.fonts`. */\nexport type FontSlot = \"display\" | \"body\" | \"mono\";\n\ninterface FontDef {\n category: FontCategory;\n family: string;\n weights: number[];\n}\n\n/** Resolved theme fonts (a validated slug per role, all optional). */\nexport type FontsConfig = Partial<Record<FontSlot, string>> | undefined;\n\n/** A single Astro `fonts:` entry (sans the literal `fontProviders.google()`). */\nexport interface FontEntry {\n cssVariable: string;\n fallbacks: string[];\n name: string;\n weights: number[];\n}\n\nconst FALLBACKS: Record<FontCategory, string[]> = {\n mono: [\"ui-monospace\", \"SF Mono\", \"Menlo\", \"monospace\"],\n sans: [\"ui-sans-serif\", \"system-ui\", \"sans-serif\"],\n serif: [\"ui-serif\", \"Georgia\", \"serif\"],\n};\n\n/** Slug -> Google family + weights + fallback category. Keep keys alphabetical. */\nexport const GOOGLE_FONTS = {\n \"dm-sans\": { category: \"sans\", family: \"DM Sans\", weights: [400, 500, 700] },\n figtree: {\n category: \"sans\",\n family: \"Figtree\",\n weights: [400, 500, 600, 700],\n },\n \"fira-code\": {\n category: \"mono\",\n family: \"Fira Code\",\n weights: [400, 500, 700],\n },\n geist: { category: \"sans\", family: \"Geist\", weights: [400, 500, 600, 700] },\n \"geist-mono\": {\n category: \"mono\",\n family: \"Geist Mono\",\n weights: [400, 500, 600],\n },\n \"ibm-plex-mono\": {\n category: \"mono\",\n family: \"IBM Plex Mono\",\n weights: [400, 500, 600],\n },\n \"ibm-plex-sans\": {\n category: \"sans\",\n family: \"IBM Plex Sans\",\n weights: [400, 500, 600, 700],\n },\n \"ibm-plex-serif\": {\n category: \"serif\",\n family: \"IBM Plex Serif\",\n weights: [400, 500, 600],\n },\n inter: { category: \"sans\", family: \"Inter\", weights: [400, 500, 600, 700] },\n \"inter-tight\": {\n category: \"sans\",\n family: \"Inter Tight\",\n weights: [400, 500, 600, 700],\n },\n \"jetbrains-mono\": {\n category: \"mono\",\n family: \"JetBrains Mono\",\n weights: [400, 500, 700],\n },\n lora: { category: \"serif\", family: \"Lora\", weights: [400, 500, 600, 700] },\n manrope: {\n category: \"sans\",\n family: \"Manrope\",\n weights: [400, 500, 600, 700],\n },\n merriweather: {\n category: \"serif\",\n family: \"Merriweather\",\n weights: [400, 700],\n },\n \"open-sans\": {\n category: \"sans\",\n family: \"Open Sans\",\n weights: [400, 600, 700],\n },\n \"playfair-display\": {\n category: \"serif\",\n family: \"Playfair Display\",\n weights: [400, 500, 700],\n },\n \"plus-jakarta-sans\": {\n category: \"sans\",\n family: \"Plus Jakarta Sans\",\n weights: [400, 500, 600, 700],\n },\n roboto: { category: \"sans\", family: \"Roboto\", weights: [400, 500, 700] },\n \"roboto-mono\": {\n category: \"mono\",\n family: \"Roboto Mono\",\n weights: [400, 500, 700],\n },\n \"source-code-pro\": {\n category: \"mono\",\n family: \"Source Code Pro\",\n weights: [400, 500, 600],\n },\n \"source-sans-3\": {\n category: \"sans\",\n family: \"Source Sans 3\",\n weights: [400, 600, 700],\n },\n \"source-serif-4\": {\n category: \"serif\",\n family: \"Source Serif 4\",\n weights: [400, 600, 700],\n },\n \"space-grotesk\": {\n category: \"sans\",\n family: \"Space Grotesk\",\n weights: [400, 500, 700],\n },\n \"space-mono\": { category: \"mono\", family: \"Space Mono\", weights: [400, 700] },\n \"work-sans\": {\n category: \"sans\",\n family: \"Work Sans\",\n weights: [400, 500, 600],\n },\n} satisfies Record<string, FontDef>;\n\nexport type FontSlug = keyof typeof GOOGLE_FONTS;\n\n/** All supported slugs, for schema validation and error messages. */\nexport const FONT_SLUGS = Object.keys(GOOGLE_FONTS);\n\n/** Type guard: is `value` a supported font slug? */\nexport const isFontSlug = (value: string): value is FontSlug =>\n Object.hasOwn(GOOGLE_FONTS, value);\n\n/** The CSS variable Astro populates for a given font (shared across roles). */\nconst fontVar = (slug: string): string => `--blume-ff-${slug}`;\n\nconst SLOTS: FontSlot[] = [\"display\", \"body\", \"mono\"];\n\n/** The unique Astro `fonts:` entries for the configured roles (deduped). */\nexport const buildFontEntries = (fonts: FontsConfig): FontEntry[] => {\n if (!fonts) {\n return [];\n }\n const slugs = SLOTS.map((slot) => fonts[slot]).filter(\n (slug): slug is FontSlug => typeof slug === \"string\" && isFontSlug(slug)\n );\n return [...new Set(slugs)].map((slug) => {\n const def = GOOGLE_FONTS[slug];\n return {\n cssVariable: fontVar(slug),\n fallbacks: FALLBACKS[def.category],\n name: def.family,\n weights: def.weights,\n };\n });\n};\n\n/**\n * The config-token CSS that points each role's `--blume-font-<role>-src` at the\n * Astro-populated family variable. Concatenated into the generated entry's\n * config tokens; empty when no fonts are set so defaults stay the system stacks.\n */\nexport const buildFontsCss = (fonts: FontsConfig): string => {\n if (!fonts) {\n return \"\";\n }\n const lines = SLOTS.flatMap((slot) => {\n const slug = fonts[slot];\n return slug && isFontSlug(slug)\n ? [` --blume-font-${slot}-src: var(${fontVar(slug)});`]\n : [];\n });\n return lines.length > 0\n ? `/* Generated by Blume from theme.fonts. */\\n:root {\\n${lines.join(\"\\n\")}\\n}\\n`\n : \"\";\n};\n\n/** The CSS variables to feed Astro's `<Font>` component in the document head. */\nexport const configuredCssVars = (fonts: FontsConfig): string[] =>\n buildFontEntries(fonts).map((entry) => entry.cssVariable);\n",
91
- "import type { ResolvedConfig } from \"../core/schema.ts\";\n\nconst FALLBACK_ACCENT = \"oklch(0.62 0.16 250)\";\n\n/** Named accent presets mapped to OKLCH values. */\nconst ACCENTS: Record<string, string> = {\n blue: FALLBACK_ACCENT,\n green: \"oklch(0.6 0.16 150)\",\n orange: \"oklch(0.68 0.17 50)\",\n pink: \"oklch(0.65 0.2 350)\",\n purple: \"oklch(0.58 0.2 290)\",\n red: \"oklch(0.58 0.22 25)\",\n teal: \"oklch(0.6 0.12 195)\",\n};\n\n// Characters valid in a CSS color value (hex, rgb/hsl/oklch functions, named\n// colors). Anything else — notably `;`, `{`, `}` — could break out of the\n// declaration and inject rules, so such a value is rejected.\nconst CSS_COLOR = /^[\\w\\s#%.,()/+-]+$/u;\n\n/** Pass a raw color through only if it can't break out of a CSS declaration. */\nconst safeColor = (value: string, fallback: string): string =>\n CSS_COLOR.test(value.trim()) ? value.trim() : fallback;\n\n/** Like {@link safeColor} but drops an unsafe/absent value to `null`. */\nconst safeColorOrNull = (value: string | undefined): string | null =>\n value && CSS_COLOR.test(value.trim()) ? value.trim() : null;\n\nconst RADII: Record<ResolvedConfig[\"theme\"][\"radius\"], string> = {\n lg: \"0.75rem\",\n md: \"0.5rem\",\n none: \"0\",\n sm: \"0.25rem\",\n};\n\nconst cssString = (value: string): string => JSON.stringify(value);\n\nconst backgroundImageCss = (image: string): string =>\n `url(${cssString(image)})`;\n\nconst cssToken = (name: string, value?: string | null): string[] =>\n value ? [` ${name}: ${value};`] : [];\n\nconst backgroundDecorationCss = (\n decoration: ResolvedConfig[\"theme\"][\"backgroundDecoration\"]\n): string => {\n if (decoration === \"gradient\") {\n return ` --blume-background-decoration: radial-gradient(circle at top left, color-mix(in oklab, var(--blume-accent) 18%, transparent), transparent 28rem), radial-gradient(circle at top right, color-mix(in oklab, var(--blume-action) 12%, transparent), transparent 24rem);\n --blume-background-decoration-repeat: no-repeat, no-repeat;\n --blume-background-decoration-size: auto, auto;\n`;\n }\n if (decoration === \"grid\") {\n return ` --blume-background-decoration: linear-gradient(var(--blume-border) 1px, transparent 1px), linear-gradient(90deg, var(--blume-border) 1px, transparent 1px);\n --blume-background-decoration-repeat: repeat, repeat;\n --blume-background-decoration-size: 2rem 2rem, 2rem 2rem;\n`;\n }\n if (decoration === \"windows\") {\n return ` --blume-background-decoration: linear-gradient(90deg, color-mix(in oklab, var(--blume-border) 70%, transparent) 1px, transparent 1px), linear-gradient(var(--blume-border) 1px, transparent 1px);\n --blume-background-decoration-repeat: repeat, repeat;\n --blume-background-decoration-size: 7rem 4.5rem, 7rem 4.5rem;\n`;\n }\n return \"\";\n};\n\nconst themeRootCss = (\n theme: ResolvedConfig[\"theme\"],\n options: {\n accent: string;\n action: string | null;\n backgroundDecoration: string;\n radius: string;\n }\n): string =>\n [\n ` --blume-accent: ${options.accent};`,\n ...cssToken(\"--blume-action\", options.action),\n ...cssToken(\n \"--blume-action-foreground\",\n options.action ? \"oklch(1 0 0)\" : null\n ),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.background)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImage ? backgroundImageCss(theme.backgroundImage) : null\n ),\n options.backgroundDecoration.trimEnd(),\n ` --blume-radius: ${options.radius};`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\nconst themeDarkCss = (\n theme: ResolvedConfig[\"theme\"],\n accentDark: string | null\n): string => {\n const tokens = [\n ...cssToken(\"--blume-accent\", accentDark),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.backgroundDark)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImageDark\n ? backgroundImageCss(theme.backgroundImageDark)\n : null\n ),\n ];\n if (tokens.length === 0) {\n return \"\";\n }\n return `:root[data-theme=\"dark\"] {\n${tokens.join(\"\\n\")}\n}\n`;\n};\n\n/**\n * Resolve the configured accent to a CSS color. A named accent resolves to its\n * preset; any other value is treated as a raw CSS color so users can pass\n * arbitrary colors without a config change.\n */\nexport const resolveAccent = (theme: ResolvedConfig[\"theme\"]): string =>\n ACCENTS[theme.accent] ?? safeColor(theme.accent, FALLBACK_ACCENT);\n\n/** Resolve the configured radius preset to a CSS length. */\nexport const resolveRadius = (theme: ResolvedConfig[\"theme\"]): string =>\n RADII[theme.radius];\n\n/**\n * Compile theme config into CSS custom properties. A named accent resolves to\n * its preset; any other value is treated as a raw CSS color so users can pass\n * arbitrary colors without a config change.\n */\nexport const buildThemeCss = (theme: ResolvedConfig[\"theme\"]): string => {\n const accent =\n ACCENTS[theme.accent] ?? safeColor(theme.accent, FALLBACK_ACCENT);\n const accentDark = theme.accentDark\n ? (ACCENTS[theme.accentDark] ??\n safeColor(theme.accentDark, FALLBACK_ACCENT))\n : null;\n const action = theme.action\n ? (ACCENTS[theme.action] ?? safeColor(theme.action, FALLBACK_ACCENT))\n : null;\n const backgroundDecoration = backgroundDecorationCss(\n theme.backgroundDecoration\n );\n const radius = RADII[theme.radius];\n const root = themeRootCss(theme, {\n accent,\n action,\n backgroundDecoration,\n radius,\n });\n const dark = themeDarkCss(theme, accentDark);\n\n return `/* Generated by Blume from theme config. */\n:root {\n${root}\n}\n${dark}`;\n};\n",
91
+ "import type { ResolvedConfig } from \"../core/schema.ts\";\n\nconst FALLBACK_ACCENT = \"oklch(0.62 0.16 250)\";\n\n/** Named accent presets mapped to OKLCH values. */\nconst ACCENTS: Record<string, string> = {\n blue: FALLBACK_ACCENT,\n green: \"oklch(0.6 0.16 150)\",\n orange: \"oklch(0.68 0.17 50)\",\n pink: \"oklch(0.65 0.2 350)\",\n purple: \"oklch(0.58 0.2 290)\",\n red: \"oklch(0.58 0.22 25)\",\n teal: \"oklch(0.6 0.12 195)\",\n};\n\n// Characters valid in a CSS color value (hex, rgb/hsl/oklch functions, named\n// colors). Anything else — notably `;`, `{`, `}` — could break out of the\n// declaration and inject rules, so such a value is rejected.\nconst CSS_COLOR = /^[\\w\\s#%.,()/+-]+$/u;\n\n/** Pass a raw color through only if it can't break out of a CSS declaration. */\nconst safeColor = (value: string, fallback: string): string =>\n CSS_COLOR.test(value.trim()) ? value.trim() : fallback;\n\n/**\n * Resolve a named preset or fall back to {@link safeColor}. `hasOwn` keeps a\n * value like \"constructor\" from resolving an Object.prototype member — which\n * would stringify a function into the generated CSS, breaking the rule (the\n * exact breakout safeColor exists to prevent).\n */\nconst presetOrColor = (value: string): string =>\n Object.hasOwn(ACCENTS, value)\n ? (ACCENTS[value] as string)\n : safeColor(value, FALLBACK_ACCENT);\n\n/** Like {@link safeColor} but drops an unsafe/absent value to `null`. */\nconst safeColorOrNull = (value: string | undefined): string | null =>\n value && CSS_COLOR.test(value.trim()) ? value.trim() : null;\n\nconst RADII: Record<ResolvedConfig[\"theme\"][\"radius\"], string> = {\n lg: \"0.75rem\",\n md: \"0.5rem\",\n none: \"0\",\n sm: \"0.25rem\",\n};\n\nconst cssString = (value: string): string => JSON.stringify(value);\n\nconst backgroundImageCss = (image: string): string =>\n `url(${cssString(image)})`;\n\nconst cssToken = (name: string, value?: string | null): string[] =>\n value ? [` ${name}: ${value};`] : [];\n\nconst backgroundDecorationCss = (\n decoration: ResolvedConfig[\"theme\"][\"backgroundDecoration\"]\n): string => {\n if (decoration === \"gradient\") {\n return ` --blume-background-decoration: radial-gradient(circle at top left, color-mix(in oklab, var(--blume-accent) 18%, transparent), transparent 28rem), radial-gradient(circle at top right, color-mix(in oklab, var(--blume-action) 12%, transparent), transparent 24rem);\n --blume-background-decoration-repeat: no-repeat, no-repeat;\n --blume-background-decoration-size: auto, auto;\n`;\n }\n if (decoration === \"grid\") {\n return ` --blume-background-decoration: linear-gradient(var(--blume-border) 1px, transparent 1px), linear-gradient(90deg, var(--blume-border) 1px, transparent 1px);\n --blume-background-decoration-repeat: repeat, repeat;\n --blume-background-decoration-size: 2rem 2rem, 2rem 2rem;\n`;\n }\n if (decoration === \"windows\") {\n return ` --blume-background-decoration: linear-gradient(90deg, color-mix(in oklab, var(--blume-border) 70%, transparent) 1px, transparent 1px), linear-gradient(var(--blume-border) 1px, transparent 1px);\n --blume-background-decoration-repeat: repeat, repeat;\n --blume-background-decoration-size: 7rem 4.5rem, 7rem 4.5rem;\n`;\n }\n return \"\";\n};\n\nconst themeRootCss = (\n theme: ResolvedConfig[\"theme\"],\n options: {\n accent: string;\n action: string | null;\n backgroundDecoration: string;\n radius: string;\n }\n): string =>\n [\n ` --blume-accent: ${options.accent};`,\n ...cssToken(\"--blume-action\", options.action),\n ...cssToken(\n \"--blume-action-foreground\",\n options.action ? \"oklch(1 0 0)\" : null\n ),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.background)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImage ? backgroundImageCss(theme.backgroundImage) : null\n ),\n options.backgroundDecoration.trimEnd(),\n ` --blume-radius: ${options.radius};`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\nconst themeDarkCss = (\n theme: ResolvedConfig[\"theme\"],\n options: {\n accent: string;\n action: string | null;\n backgroundDecoration: string;\n }\n): string => {\n // Mode-shared tokens (accent, action, decoration) must be re-declared here:\n // the base stylesheet's own `:root[data-theme=\"dark\"]` block outranks the\n // `:root` config tokens on specificity, so without this block dark mode\n // would silently keep its neutral defaults and ignore the config.\n const tokens = [\n ` --blume-accent: ${options.accent};`,\n \" --blume-accent-foreground: oklch(1 0 0);\",\n ...cssToken(\"--blume-action\", options.action),\n ...cssToken(\n \"--blume-action-foreground\",\n options.action ? \"oklch(1 0 0)\" : null\n ),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.backgroundDark)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImageDark\n ? backgroundImageCss(theme.backgroundImageDark)\n : null\n ),\n options.backgroundDecoration.trimEnd(),\n ].filter(Boolean);\n return `:root[data-theme=\"dark\"] {\n${tokens.join(\"\\n\")}\n}\n`;\n};\n\n/**\n * Resolve the configured accent to a CSS color. A named accent resolves to its\n * preset; any other value is treated as a raw CSS color so users can pass\n * arbitrary colors without a config change.\n */\nexport const resolveAccent = (theme: ResolvedConfig[\"theme\"]): string =>\n presetOrColor(theme.accent);\n\n/** Resolve the configured radius preset to a CSS length. */\nexport const resolveRadius = (theme: ResolvedConfig[\"theme\"]): string =>\n RADII[theme.radius];\n\n/**\n * Compile theme config into CSS custom properties. A named accent resolves to\n * its preset; any other value is treated as a raw CSS color so users can pass\n * arbitrary colors without a config change.\n */\nexport const buildThemeCss = (theme: ResolvedConfig[\"theme\"]): string => {\n const accent = presetOrColor(theme.accent);\n const accentDark = theme.accentDark ? presetOrColor(theme.accentDark) : null;\n const action = theme.action ? presetOrColor(theme.action) : null;\n const backgroundDecoration = backgroundDecorationCss(\n theme.backgroundDecoration\n );\n const radius = RADII[theme.radius];\n const root = themeRootCss(theme, {\n accent,\n action,\n backgroundDecoration,\n radius,\n });\n const dark = themeDarkCss(theme, {\n accent: accentDark ?? accent,\n action,\n backgroundDecoration,\n });\n\n return `/* Generated by Blume from theme config. */\n:root {\n${root}\n}\n${dark}`;\n};\n",
92
92
  "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport { BlumeError } from \"../diagnostics.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport type { SourceEntry, SourceLoadResult } from \"./types.ts\";\n\n/** Small, stable content hash for cache/HMR bookkeeping (non-bitwise). */\nexport const hashText = (text: string): string => {\n let hash = 5381;\n for (let i = 0; i < text.length; i += 1) {\n hash = (hash * 33 + (text.codePointAt(i) ?? 0)) % 2_147_483_647;\n }\n return hash.toString(36);\n};\n\n/** A stable digest of a source's entries, for change detection while polling. */\nexport const entriesDigest = (entries: SourceEntry[]): string =>\n hashText(\n entries\n .map((entry) => `${entry.ref}:${entry.hash ?? hashText(entry.body.text)}`)\n .join(\"|\")\n );\n\n/**\n * Build an opt-in polling watcher for a remote source: re-`load()` on an\n * interval and fire `onChange` only when the entry digest changes, so a remote\n * source can hot-reload in dev without refetching the world on every keystroke.\n */\nexport const pollingWatch =\n (\n load: () => Promise<SourceLoadResult>,\n intervalSeconds: number\n ): ((onChange: () => void) => () => void) =>\n (onChange) => {\n let last = \"\";\n const tick = async (): Promise<void> => {\n try {\n const { entries } = await load();\n const next = entriesDigest(entries);\n if (last && next !== last) {\n onChange();\n }\n last = next;\n } catch {\n // Ignore transient poll failures; the cache keeps serving last-known-good.\n }\n };\n const timer = setInterval(() => {\n void tick();\n }, intervalSeconds * 1000);\n return () => clearInterval(timer);\n };\n\n/** A per-source snapshot of the last successful fetch, for offline tolerance. */\nexport interface SnapshotCache {\n read: () => Promise<SourceEntry[]>;\n write: (entries: SourceEntry[]) => Promise<void>;\n}\n\n/** Build a JSON snapshot cache under `<cacheDir>/entries.json`. */\nexport const snapshotCache = (cacheDir: string): SnapshotCache => {\n const file = join(cacheDir, \"entries.json\");\n return {\n read: async () => {\n try {\n return JSON.parse(await readFile(file, \"utf-8\")) as SourceEntry[];\n } catch {\n return [];\n }\n },\n write: async (entries) => {\n try {\n await mkdir(cacheDir, { recursive: true });\n await writeFile(file, `${JSON.stringify(entries)}\\n`, \"utf-8\");\n } catch {\n // Cache is best-effort; a write failure must not fail the build.\n }\n },\n };\n};\n\n/**\n * Run a remote `fetchEntries`, caching the result. When `refresh` is false and a\n * snapshot exists, serve it without fetching (cache-first dev). On fetch failure,\n * serve the last-known-good snapshot with a warning so a CMS/network outage\n * doesn't fail the build; if there is no snapshot either, surface a hard error.\n */\nexport const loadWithCache = async (\n name: string,\n cache: SnapshotCache,\n fetchEntries: () => Promise<SourceEntry[]>,\n refresh = true\n): Promise<SourceLoadResult> => {\n if (!refresh) {\n const cached = await cache.read();\n if (cached.length > 0) {\n return { diagnostics: [], entries: cached };\n }\n }\n try {\n const entries = await fetchEntries();\n await cache.write(entries);\n return { diagnostics: [], entries };\n } catch (error) {\n const fallback = await cache.read();\n if (fallback.length > 0) {\n const diagnostic: Diagnostic = {\n code: \"BLUME_SOURCE_OFFLINE\",\n message: `Source \"${name}\" could not be fetched (${(error as Error).message}); served ${fallback.length} cached entries.`,\n severity: \"warning\",\n };\n return { diagnostics: [diagnostic], entries: fallback };\n }\n throw new BlumeError({\n code: \"BLUME_SOURCE_FETCH_FAILED\",\n message: `Source \"${name}\" failed to load and no cache is available: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n",
93
93
  "import type {\n Document,\n OperationObject,\n PathItemObject,\n} from \"@scalar/openapi-types/3.1\";\n\n/**\n * Blume's own OpenAPI model. Specs are parsed and upgraded to 3.1 (see\n * `parse.ts`) with internal `$ref`s left intact — the document stays\n * JSON-serializable (a fully dereferenced graph can be circular), and the schema\n * components resolve refs against `document.components.schemas` at render time.\n * Each operation is flattened into an {@link ApiOperationRef} with a real,\n * per-operation route so it becomes a first-class Blume page.\n */\n\n/** A normalized OpenAPI 3.1 document, internal `$ref`s intact. */\nexport type ApiDocument = Document;\n\nconst NON_SLUG = /[^a-z0-9]+/gu;\nconst SLUG_EDGES = /^-+|-+$/gu;\n\n/** Lowercase, URL-safe slug: `Add a Pet!` -> `add-a-pet`. */\nexport const slugify = (text: string): string =>\n text.toLowerCase().replace(NON_SLUG, \"-\").replace(SLUG_EDGES, \"\");\n\n/** The HTTP methods an OpenAPI path item may declare, in spec order. */\nexport const HTTP_METHODS = [\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\n/** Group used for operations that declare no tag. */\nconst UNTAGGED = \"Operations\";\n\n/** A stable, URL-safe key for an operation: its `operationId`, else method+path. */\nexport const operationKey = (\n method: string,\n path: string,\n operationId?: string\n): string => {\n const fromId = operationId ? slugify(operationId) : \"\";\n return fromId || slugify(`${method}-${path}`);\n};\n\n/** One operation, flattened out of the paths object and mapped to a route. */\nexport interface ApiOperationRef {\n /** Stable key, unique within a spec; matches the MDX `<Operation id>`. */\n key: string;\n method: HttpMethod;\n /** Templated path, e.g. `/pets/{id}`. */\n path: string;\n /** Full site route for this operation's page, e.g. `/reference/pet/add-pet`. */\n route: string;\n /** Display tag name (first tag, or `Operations` when untagged). */\n tag: string;\n tagSlug: string;\n summary: string;\n description: string;\n operationId?: string;\n deprecated: boolean;\n}\n\n/** A tag/section, in first-seen order. */\nexport interface ApiTagRef {\n slug: string;\n name: string;\n description: string;\n}\n\n/** Everything the runtime needs for one spec, serialized into `blume:openapi`. */\nexport interface ApiSpecData {\n /** Unique token used as the `<Operation source>` and the data-module key. */\n slug: string;\n /** Base route the spec's operations hang off, e.g. `/reference`. */\n route: string;\n label: string;\n title: string;\n version: string;\n description: string;\n document: ApiDocument;\n /** Operations keyed by {@link ApiOperationRef.key}. */\n operations: Record<string, ApiOperationRef>;\n tags: ApiTagRef[];\n /** Code-sample languages to render per operation. */\n codeSamples: string[];\n /** Whether nested schema rows start expanded. */\n expandSchemas: boolean;\n}\n\n/** The generated `blume:openapi` module: specs keyed by {@link ApiSpecData.slug}. */\nexport type OpenApiData = Record<string, ApiSpecData>;\n\nconst isOperation = (value: unknown): value is OperationObject =>\n typeof value === \"object\" && value !== null;\n\n/**\n * Flatten a 3.1 document into a route-mapped operation list and its ordered\n * tags. Operations inherit the first tag they declare; keys are de-duplicated so\n * a repeated `operationId` still yields distinct routes.\n */\nexport const extractOperations = (\n document: ApiDocument,\n baseRoute: string\n): { operations: ApiOperationRef[]; tags: ApiTagRef[] } => {\n const operations: ApiOperationRef[] = [];\n const tagOrder: string[] = [];\n const tagMeta = new Map(\n (document.tags ?? []).map((tag) => [tag.name, tag.description ?? \"\"])\n );\n const seen = new Set<string>();\n\n for (const [path, rawItem] of Object.entries(document.paths ?? {})) {\n const item = rawItem as PathItemObject | undefined;\n if (!item || \"$ref\" in item) {\n continue;\n }\n for (const method of HTTP_METHODS) {\n const operation = item[method];\n if (!isOperation(operation)) {\n continue;\n }\n const tag = operation.tags?.[0] ?? UNTAGGED;\n const tagSlug = slugify(tag) || \"operations\";\n if (!tagOrder.includes(tag)) {\n tagOrder.push(tag);\n }\n let key = operationKey(method, path, operation.operationId);\n while (seen.has(key)) {\n key = `${key}-${method}`;\n }\n seen.add(key);\n operations.push({\n deprecated: operation.deprecated ?? false,\n description: operation.description ?? \"\",\n key,\n method,\n operationId: operation.operationId,\n path,\n route: `${baseRoute}/${tagSlug}/${key}`,\n summary: operation.summary ?? \"\",\n tag,\n tagSlug,\n });\n }\n }\n\n const tags: ApiTagRef[] = tagOrder.map((name) => ({\n description: tagMeta.get(name) ?? \"\",\n name,\n slug: slugify(name) || \"operations\",\n }));\n\n return { operations, tags };\n};\n\n/** Resolve the operation object for a ref out of its document. */\nexport const operationObject = (\n spec: ApiSpecData,\n ref: ApiOperationRef\n): OperationObject | undefined => {\n const item = (spec.document.paths?.[ref.path] ?? undefined) as\n | PathItemObject\n | undefined;\n const operation = item?.[ref.method];\n return isOperation(operation) ? operation : undefined;\n};\n",
94
94
  "import { readFile } from \"node:fs/promises\";\n\nimport { normalize, upgrade } from \"@scalar/openapi-parser\";\nimport { isAbsolute, join } from \"pathe\";\n\nimport type { ApiDocument } from \"./model.ts\";\n\n/**\n * Spec loading and normalization. Blume reuses Scalar's parser\n * (`@scalar/openapi-parser`) to read a spec (YAML or JSON), then upgrade Swagger\n * 2.0 / OpenAPI 3.0 documents to 3.1 so the renderer only handles one shape.\n * Internal `$ref`s are deliberately left in place (see `model.ts`).\n */\n\nconst URL_SPEC = /^https?:\\/\\//u;\n\nexport interface ParsedSpec {\n document: ApiDocument;\n warnings: string[];\n}\n\n/** Read a spec's raw text from an `http(s)` URL or a local (project-relative) path. */\nconst readSpecText = async (spec: string, root: string): Promise<string> => {\n if (URL_SPEC.test(spec)) {\n const response = await fetch(spec);\n if (!response.ok) {\n throw new Error(`${spec} -> ${response.status} ${response.statusText}`);\n }\n return await response.text();\n }\n const absolute = isAbsolute(spec) ? spec : join(root, spec);\n return await readFile(absolute, \"utf-8\");\n};\n\n/**\n * Read, normalize, and upgrade a spec to an OpenAPI 3.1 document. Throws when the\n * spec can't be read; callers turn that into a source diagnostic rather than a\n * hard failure so a broken spec doesn't take down the whole build.\n */\nexport const parseSpec = async (\n spec: string,\n root: string\n): Promise<ParsedSpec> => {\n const text = await readSpecText(spec, root);\n const normalized = normalize(text);\n const { specification } = upgrade(normalized);\n return { document: specification as ApiDocument, warnings: [] };\n};\n",
95
- "import type { ApiOperationRef, ApiSpecData } from \"./model.ts\";\n\n/**\n * Lower a parsed spec into MDX for the staged content source. Each operation and\n * the spec overview become a thin MDX page: the frontmatter carries the\n * searchable `title` (so operations flow into Blume's search, OG, and llms.txt),\n * the operation/overview **description is emitted as markdown in the body** so it\n * renders parsed (links, formatting) and is indexed, and the structured UI is\n * deferred to a Blume-owned component (`<Operation>` / `<ApiOverview>`). The\n * catch-all renders the frontmatter title as the page `<h1>`, so the components\n * omit their own top heading.\n */\n\n// Neutralize the few characters MDX treats specially (`{` expressions, `<` JSX)\n// so an arbitrary spec description can be embedded in the body verbatim without\n// breaking compilation. They render as their literal selves.\nconst MDX_UNSAFE = /[<>{}]/gu;\nconst ENTITIES: Record<string, string> = {\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n \"{\": \"&#123;\",\n \"}\": \"&#125;\",\n};\nconst mdxSafe = (text: string): string =>\n text.replace(MDX_UNSAFE, (char) => ENTITIES[char] ?? char);\n\n/** Frontmatter + body for one operation or overview page. */\nexport interface RenderedPage {\n data: Record<string, unknown>;\n body: string;\n}\n\n/** Prepend a markdown description (if any) above a component invocation. */\nconst withDescription = (description: string, component: string): string =>\n description.trim()\n ? `${mdxSafe(description.trim())}\\n\\n${component}`\n : component;\n\nexport const operationMdx = (\n spec: ApiSpecData,\n operation: ApiOperationRef\n): RenderedPage => {\n const method = operation.method.toUpperCase();\n const title = operation.summary || `${method} ${operation.path}`;\n // Skip the body description when it only repeats the summary (the `<h1>`) —\n // common in specs that set summary and description to the same string.\n const description =\n operation.description.trim() === operation.summary.trim()\n ? \"\"\n : operation.description;\n return {\n body: withDescription(\n description,\n `<Operation source=\"${spec.slug}\" id=\"${operation.key}\" />`\n ),\n data: {\n ...(operation.deprecated ? { deprecated: true } : {}),\n search: { tags: [operation.tag, method] },\n sidebar: { badge: method, label: operation.summary || operation.path },\n title,\n // Signals the two-column API layout (request panel instead of the TOC).\n type: \"openapi-operation\",\n },\n };\n};\n\nexport const overviewMdx = (spec: ApiSpecData): RenderedPage => ({\n body: withDescription(\n spec.description,\n `<ApiOverview source=\"${spec.slug}\" />`\n ),\n data: {\n sidebar: { label: \"Overview\" },\n title: spec.title || spec.label,\n },\n});\n",
95
+ "import type { ApiOperationRef, ApiSpecData } from \"./model.ts\";\n\n/**\n * Lower a parsed spec into MDX for the staged content source. Each operation and\n * the spec overview become a thin MDX page: the frontmatter carries the\n * searchable `title` (so operations flow into Blume's search, OG, and llms.txt),\n * the operation/overview **description is emitted as markdown in the body** so it\n * renders parsed (links, formatting) and is indexed, and the structured UI is\n * deferred to a Blume-owned component (`<Operation>` / `<ApiOverview>`). The\n * catch-all renders the frontmatter title as the page `<h1>`, so the components\n * omit their own top heading.\n */\n\n// Neutralize the few characters MDX treats specially (`{` expressions, `<` JSX)\n// so an arbitrary spec description can be embedded in the body verbatim without\n// breaking compilation. They render as their literal selves.\nconst MDX_UNSAFE = /[<>{}]/gu;\nconst ENTITIES: Record<string, string> = {\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n \"{\": \"&#123;\",\n \"}\": \"&#125;\",\n};\n// MDX also parses lines starting with `import`/`export` as ESM (\"import the\n// SDK…\" is common spec prose). Entity-escape the keyword's first letter so the\n// construct can't match; it still renders as the literal word.\nconst MDX_ESM_KEYWORD = /^(?<keyword>import|export)\\b/gmu;\nconst mdxSafe = (text: string): string =>\n text\n .replace(MDX_UNSAFE, (char) => ENTITIES[char] ?? char)\n .replace(\n MDX_ESM_KEYWORD,\n (keyword) => `&#${keyword.codePointAt(0)};${keyword.slice(1)}`\n );\n\n/** Frontmatter + body for one operation or overview page. */\nexport interface RenderedPage {\n data: Record<string, unknown>;\n body: string;\n}\n\n/** Prepend a markdown description (if any) above a component invocation. */\nconst withDescription = (description: string, component: string): string =>\n description.trim()\n ? `${mdxSafe(description.trim())}\\n\\n${component}`\n : component;\n\nexport const operationMdx = (\n spec: ApiSpecData,\n operation: ApiOperationRef\n): RenderedPage => {\n const method = operation.method.toUpperCase();\n const title = operation.summary || `${method} ${operation.path}`;\n // Skip the body description when it only repeats the summary (the `<h1>`) —\n // common in specs that set summary and description to the same string.\n const description =\n operation.description.trim() === operation.summary.trim()\n ? \"\"\n : operation.description;\n return {\n body: withDescription(\n description,\n `<Operation source=\"${spec.slug}\" id=\"${operation.key}\" />`\n ),\n data: {\n ...(operation.deprecated ? { deprecated: true } : {}),\n search: { tags: [operation.tag, method] },\n sidebar: { badge: method, label: operation.summary || operation.path },\n title,\n // Signals the two-column API layout (request panel instead of the TOC).\n type: \"openapi-operation\",\n },\n };\n};\n\nexport const overviewMdx = (spec: ApiSpecData): RenderedPage => ({\n body: withDescription(\n spec.description,\n `<ApiOverview source=\"${spec.slug}\" />`\n ),\n data: {\n sidebar: { label: \"Overview\" },\n title: spec.title || spec.label,\n },\n});\n",
96
96
  "import matter from \"../core/frontmatter.ts\";\nimport { hashText } from \"../core/sources/cache.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"../core/sources/types.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport { extractOperations } from \"./model.ts\";\nimport type { ApiOperationRef, ApiSpecData, OpenApiData } from \"./model.ts\";\nimport { parseSpec } from \"./parse.ts\";\nimport type { ReferenceSource } from \"./references.ts\";\nimport { operationMdx, overviewMdx } from \"./render-mdx.ts\";\nimport type { RenderedPage } from \"./render-mdx.ts\";\n\n/**\n * The staged content source behind Blume's own OpenAPI renderer. Each configured\n * spec is parsed once here, then lowered into one MDX page per operation plus an\n * overview page — so operations become first-class Blume pages (real routes,\n * sidebar, search, i18n, OG) and the parsed documents are handed to the\n * generated `blume:openapi` module for the UI components to render.\n */\n\n/** A content source that also exposes the specs it parsed during `load()`. */\nexport interface OpenApiContentSource extends ContentSource {\n readonly kind: \"openapi-source\";\n /** Parsed spec data, populated by `load()`; `{}` before the first load. */\n openApiData: () => OpenApiData;\n}\n\n/** Narrow a content source to the OpenAPI source (to read its parsed specs). */\nexport const isOpenApiSource = (\n source: ContentSource\n): source is OpenApiContentSource =>\n (source as Partial<OpenApiContentSource>).kind === \"openapi-source\";\n\n/** Route (`/reference/pet/add-pet`) to a staged content ref, without extension. */\nconst routeToRef = (route: string): string => route.replace(/^\\/+/u, \"\");\n\nconst toEntry = (rendered: RenderedPage, ref: string): SourceEntry => {\n const raw = matter.stringify(`${rendered.body}\\n`, rendered.data);\n return {\n body: { format: \"mdx\", text: rendered.body },\n data: rendered.data,\n hash: hashText(raw),\n raw,\n ref,\n };\n};\n\n/** All staged entries for one spec: operations first, overview last. */\nconst specEntries = (\n spec: ApiSpecData,\n operations: ApiOperationRef[]\n): SourceEntry[] => {\n const entries = operations.map((operation) =>\n toEntry(operationMdx(spec, operation), `${routeToRef(operation.route)}.mdx`)\n );\n // Overview last so an operation sets the section's routePath before the index\n // page is inserted (the group's routePath is derived from its first child).\n entries.push(\n toEntry(overviewMdx(spec), `${routeToRef(spec.route)}/index.mdx`)\n );\n return entries;\n};\n\ninterface LoadedSpec {\n slug: string;\n spec: ApiSpecData;\n entries: SourceEntry[];\n}\n\nexport const openApiSource = (\n references: ReferenceSource[],\n ctx: SourceContext\n): OpenApiContentSource => {\n let parsed: OpenApiData = {};\n\n const loadReference = async (\n reference: ReferenceSource\n ): Promise<LoadedSpec | Diagnostic> => {\n try {\n const { document } = await parseSpec(reference.spec, ctx.projectRoot);\n const { operations, tags } = extractOperations(document, reference.route);\n const info = document.info ?? { title: reference.label, version: \"\" };\n const spec: ApiSpecData = {\n codeSamples: reference.display.codeSamples,\n description: info.description ?? \"\",\n document,\n expandSchemas: reference.display.expandSchemas,\n label: reference.label,\n operations: Object.fromEntries(\n operations.map((operation) => [operation.key, operation])\n ),\n route: reference.route,\n slug: reference.slug,\n tags,\n title: info.title ?? reference.label,\n version: info.version ?? \"\",\n };\n return {\n entries: specEntries(spec, operations),\n slug: reference.slug,\n spec,\n };\n } catch (error) {\n return {\n code: \"BLUME_OPENAPI_UNAVAILABLE\",\n message: `Could not load OpenAPI spec \"${reference.spec}\" for ${reference.route} (${(error as Error).message}); its reference pages were skipped.`,\n severity: \"warning\",\n };\n }\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n const results = await Promise.all(references.map(loadReference));\n const entries: SourceEntry[] = [];\n const diagnostics: Diagnostic[] = [];\n const data: OpenApiData = {};\n for (const result of results) {\n if (\"severity\" in result) {\n diagnostics.push(result);\n continue;\n }\n data[result.slug] = result.spec;\n entries.push(...result.entries);\n }\n parsed = data;\n return { diagnostics, entries };\n };\n\n return {\n kind: \"openapi-source\",\n load,\n name: \"openapi\",\n openApiData: () => parsed,\n staged: true,\n };\n};\n",
97
97
  "interface TailwindEntryOptions {\n /**\n * Globs to scan for utility classes. Typically the Blume package source and\n * the user's project (node_modules is skipped automatically).\n */\n sources: string[];\n /** Config-derived token overrides (`:root { --blume-accent: ... }`). */\n configTokens: string;\n /** Raw contents of the user's theme.css, if any. */\n userTheme: string;\n /** Twoslash rich-renderer styles (for fences with the `twoslash` meta). */\n twoslashCss?: string;\n}\n\n/**\n * Build the single Tailwind v4 entry stylesheet for the generated runtime.\n *\n * Everything flows through one Tailwind-processed file so utilities are\n * generated and design tokens cascade deterministically:\n * base defaults -> config tokens -> user theme.css.\n */\nexport const tailwindEntryTemplate = (options: TailwindEntryOptions): string =>\n `/* Generated by Blume. Do not edit. */\n@import \"tailwindcss\";\n@plugin \"@tailwindcss/typography\";\n\n/* Scan Blume's components and the user's project for utility classes. */\n${options.sources.map((source) => `@source \"${source}\";`).join(\"\\n\")}\n\n/* Dark mode is driven by data-theme on the <html> element. */\n@custom-variant dark (&:where([data-theme=\"dark\"], [data-theme=\"dark\"] *));\n\n:root {\n --blume-background: oklch(1 0 0);\n --blume-background-decoration: none;\n --blume-background-decoration-repeat: no-repeat;\n --blume-background-decoration-size: auto;\n --blume-background-image: none;\n --blume-background-image-repeat: no-repeat;\n --blume-background-image-size: cover;\n --blume-foreground: oklch(0.145 0 0);\n --blume-muted: oklch(0.965 0 0);\n --blume-muted-foreground: oklch(0.54 0 0);\n --blume-border: oklch(0.88 0.006 260 / 0.72);\n --blume-accent: oklch(0.145 0 0);\n --blume-accent-foreground: oklch(1 0 0);\n --blume-action: var(--blume-accent);\n --blume-action-foreground: var(--blume-accent-foreground);\n --blume-code-background: oklch(0.99 0 0);\n /* Shiki notation transformers: line/word highlight, diff add/remove. */\n --blume-code-highlight: oklch(0.55 0.16 255 / 0.1);\n --blume-code-highlight-border: oklch(0.55 0.16 255 / 0.55);\n --blume-code-add: oklch(0.72 0.16 150 / 0.16);\n --blume-code-add-border: oklch(0.52 0.15 150 / 0.7);\n --blume-code-remove: oklch(0.66 0.21 22 / 0.16);\n --blume-code-remove-border: oklch(0.55 0.2 22 / 0.7);\n --blume-code-word: oklch(0.55 0.16 255 / 0.16);\n --blume-code-word-border: oklch(0.55 0.16 255 / 0.5);\n --blume-radius: 0.75rem;\n\n /*\n * Font tokens resolve through optional src variables that Astro's Fonts API\n * populates (via theme.fonts). When unset they fall back to the system\n * stacks, so the default look is unchanged. The display font defaults to the\n * body font.\n */\n --blume-font-body: var(\n --blume-font-body-src,\n ui-sans-serif,\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Helvetica,\n Arial,\n sans-serif\n );\n --blume-font-mono: var(\n --blume-font-mono-src,\n ui-monospace,\n \"SF Mono\",\n \"Cascadia Code\",\n \"Source Code Pro\",\n Menlo,\n Consolas,\n monospace\n );\n --blume-font-display: var(--blume-font-display-src, var(--blume-font-body));\n}\n\n:root[data-theme=\"dark\"] {\n --blume-background: oklch(0.085 0 0);\n --blume-background-decoration: none;\n --blume-background-decoration-repeat: no-repeat;\n --blume-background-decoration-size: auto;\n --blume-background-image: none;\n --blume-background-image-repeat: no-repeat;\n --blume-background-image-size: cover;\n --blume-foreground: oklch(0.96 0 0);\n --blume-muted: oklch(0.16 0 0);\n --blume-muted-foreground: oklch(0.68 0 0);\n --blume-border: oklch(0.24 0 0 / 0.8);\n --blume-accent: oklch(0.96 0 0);\n --blume-accent-foreground: oklch(0.085 0 0);\n --blume-action: var(--blume-accent);\n --blume-action-foreground: var(--blume-accent-foreground);\n --blume-code-background: oklch(0.12 0 0);\n /* Brighter tints read better over the dark code surface. */\n --blume-code-highlight: oklch(0.7 0.14 255 / 0.16);\n --blume-code-highlight-border: oklch(0.7 0.14 255 / 0.6);\n --blume-code-add: oklch(0.78 0.17 150 / 0.2);\n --blume-code-add-border: oklch(0.72 0.16 150 / 0.7);\n --blume-code-remove: oklch(0.72 0.21 22 / 0.22);\n --blume-code-remove-border: oklch(0.7 0.2 22 / 0.7);\n --blume-code-word: oklch(0.7 0.14 255 / 0.22);\n --blume-code-word-border: oklch(0.7 0.14 255 / 0.55);\n}\n\n@theme inline {\n --color-background: var(--blume-background);\n --color-foreground: var(--blume-foreground);\n --color-muted: var(--blume-muted);\n --color-muted-foreground: var(--blume-muted-foreground);\n --color-border: var(--blume-border);\n --color-accent: var(--blume-accent);\n --color-accent-foreground: var(--blume-accent-foreground);\n --color-action: var(--blume-action);\n --color-action-foreground: var(--blume-action-foreground);\n --color-code: var(--blume-code-background);\n --radius-blume: var(--blume-radius);\n --font-sans: var(--blume-font-body);\n --font-mono: var(--blume-font-mono);\n --font-display: var(--blume-font-display);\n}\n\n@layer base {\n html {\n scroll-behavior: smooth;\n scroll-padding-top: 4.5rem;\n }\n /* Headings use the display font (defaults to the body font when unset). */\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-family: var(--font-display);\n }\n :focus-visible {\n outline: 2px solid var(--blume-accent);\n outline-offset: 2px;\n border-radius: 2px;\n }\n body {\n background-attachment: fixed, fixed;\n background-image:\n var(--blume-background-image), var(--blume-background-decoration);\n background-position: center top, top center;\n background-repeat:\n var(--blume-background-image-repeat),\n var(--blume-background-decoration-repeat);\n background-size:\n var(--blume-background-image-size),\n var(--blume-background-decoration-size);\n }\n @media (prefers-reduced-motion: reduce) {\n html {\n scroll-behavior: auto;\n }\n }\n}\n\n/* Code reads left-to-right regardless of page direction; only the surrounding\n chrome mirrors for RTL. Inline code is isolated so LTR identifiers don't\n disturb the bidi flow of right-to-left prose. */\n[dir=\"rtl\"] pre,\n[dir=\"rtl\"] .prose pre {\n direction: ltr;\n text-align: left;\n}\n[dir=\"rtl\"] :not(pre) > code {\n unicode-bidi: isolate;\n}\n\n/* Theme Tailwind Typography (prose) with Blume tokens. */\n.prose {\n --tw-prose-body: var(--blume-foreground);\n --tw-prose-headings: var(--blume-foreground);\n --tw-prose-lead: var(--blume-muted-foreground);\n --tw-prose-links: var(--blume-foreground);\n --tw-prose-bold: var(--blume-foreground);\n --tw-prose-counters: var(--blume-muted-foreground);\n --tw-prose-bullets: var(--blume-border);\n --tw-prose-hr: var(--blume-border);\n --tw-prose-quotes: var(--blume-muted-foreground);\n --tw-prose-quote-borders: var(--blume-border);\n --tw-prose-captions: var(--blume-muted-foreground);\n --tw-prose-code: var(--blume-foreground);\n --tw-prose-pre-code: var(--blume-foreground);\n --tw-prose-pre-bg: var(--blume-code-background);\n --tw-prose-th-borders: var(--blume-border);\n --tw-prose-td-borders: var(--blume-border);\n color: var(--blume-muted-foreground);\n font-size: 0.875rem;\n line-height: 1.7;\n}\n\n.prose :where(h1, h2, h3, h4) {\n font-weight: 500;\n letter-spacing: 0;\n}\n\n.prose :where(h1) {\n font-size: 3rem;\n line-height: 1.1;\n margin: 0 0 1rem;\n}\n\n.prose :where(h2) {\n font-size: 1.875rem;\n line-height: 1.2;\n margin-top: 3rem;\n}\n\n.prose :where(h3) {\n font-size: 1.25rem;\n line-height: 1.35;\n}\n\n.prose :where(h4) {\n color: var(--blume-muted-foreground);\n font-size: 0.875rem;\n line-height: 1.4;\n}\n\n.prose :where(h1, h2, h3, h4, h5, h6) a {\n color: inherit;\n font-weight: inherit;\n text-decoration: none;\n}\n\n/* Auto-generated heading permalinks (markdown.headingAnchors): the whole\n heading links to its own id, with a muted “#” revealed on hover or keyboard\n focus so the link is discoverable without cluttering the heading at rest. */\n.prose :where(h2, h3, h4, h5, h6) a.blume-heading-anchor::after {\n content: \"#\";\n color: var(--blume-muted-foreground);\n margin-inline-start: 0.35em;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n.prose :where(h2, h3, h4, h5, h6) a.blume-heading-anchor:hover::after,\n.prose :where(h2, h3, h4, h5, h6) a.blume-heading-anchor:focus-visible::after {\n opacity: 1;\n}\n\n.prose :where(h2:first-child) {\n border-top: 0;\n padding-top: 0;\n}\n\n.prose :where(p, ul, ol) {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n\n.prose :where(strong) {\n font-weight: 600;\n}\n\n.prose :where(a) {\n color: var(--blume-foreground);\n font-weight: 500;\n text-decoration-line: underline;\n text-decoration-style: dotted;\n text-decoration-thickness: 1px;\n text-underline-offset: 0.2em;\n}\n\n.prose :where(a[data-blume-card]) {\n color: inherit;\n font-weight: inherit;\n text-decoration: none;\n}\n\n.prose :where(hr) {\n margin: 2.5rem 0;\n}\n\n.prose :where(pre) {\n background: transparent;\n border: 1px solid var(--blume-border);\n border-radius: var(--blume-radius);\n color: var(--blume-foreground);\n font-family: var(--font-mono);\n font-size: 0.8125rem;\n line-height: 1.55;\n margin: 1.5rem 0;\n overflow-x: auto;\n padding: 1rem 1.25rem;\n position: relative;\n}\n\n.prose :where(pre.astro-code) {\n background: transparent !important;\n color: var(--shiki-light, var(--blume-foreground)) !important;\n}\n\n:root[data-theme=\"dark\"] .prose :where(pre.astro-code) {\n color: var(--shiki-dark, var(--blume-foreground)) !important;\n}\n\n.prose :where(pre.astro-code span) {\n background: transparent !important;\n color: var(--shiki-light, inherit);\n font-style: var(--shiki-light-font-style, inherit);\n font-weight: var(--shiki-light-font-weight, inherit);\n text-decoration: var(--shiki-light-text-decoration, inherit);\n}\n\n:root[data-theme=\"dark\"] .prose :where(pre.astro-code span) {\n color: var(--shiki-dark, inherit);\n font-style: var(--shiki-dark-font-style, inherit);\n font-weight: var(--shiki-dark-font-weight, inherit);\n text-decoration: var(--shiki-dark-text-decoration, inherit);\n}\n\n/* The Diff component (@pierre/diffs) renders into a declarative shadow root and\n themes itself with light-dark(). Drive that from Blume's data-theme instead\n of the OS, scoped to the diff host: the custom property pierces the shadow\n boundary, where the appended host color-scheme rule consumes it. */\nblume-diff {\n --blume-diff-color-scheme: light;\n display: block;\n}\n\n:root[data-theme=\"dark\"] blume-diff {\n --blume-diff-color-scheme: dark;\n}\n\n.prose :where(pre[data-language]) {\n padding-top: 3.75rem;\n}\n\n.prose :where(pre[data-language])::before {\n align-items: center;\n border-bottom: 1px solid var(--blume-border);\n color: var(--blume-muted-foreground);\n content: attr(data-language);\n display: flex;\n font-family: var(--font-sans);\n font-size: 0.75rem;\n font-weight: 500;\n height: 2.75rem;\n left: 0;\n padding: 0 3.25rem 0 1rem;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.prose :where(pre[data-title])::before {\n content: attr(data-title);\n}\n\n/* Language icon (simple-icons) sits at the header's left edge; the label shifts\n right to make room. Injected at build time by the language-icon transformer.\n Shown only for top-level prose blocks, which have a header — flush code in\n tabs and API panels is nested deeper, so the child combinator skips it. */\n.blume-lang-icon {\n display: none;\n}\n\n.prose > :where(pre[data-icon]) > .blume-lang-icon {\n color: var(--blume-muted-foreground);\n display: block;\n height: 0.875rem;\n left: 1rem;\n position: absolute;\n top: 0.875rem;\n width: 0.875rem;\n}\n\n.prose > :where(pre[data-icon])::before {\n padding-left: 2.5rem;\n}\n\n.prose :where(pre code) {\n background: transparent;\n border-radius: 0;\n color: inherit;\n font-size: inherit;\n font-weight: 400;\n padding: 0;\n}\n\n/* Word wrap (markdown.code.wrap): long lines wrap instead of scrolling. The\n attribute is set on <body> from config; default code keeps \\`white-space: pre\\`. */\n[data-blume-code-wrap] pre,\n[data-blume-code-wrap] pre code {\n overflow-wrap: break-word;\n white-space: pre-wrap;\n}\n\n.prose :where(table) {\n font-size: 0.8125rem;\n}\n\nblume-tabs pre,\n.not-prose > div > pre {\n background: var(--blume-code-background);\n}\n\n/* The Component source pane fills its tab's fixed height (set inline to match the\n preview tab) and scrolls the inner code element, leaving the pre static so the\n copy button — absolute, pinned to the pre — doesn't drift while it scrolls. */\npre.blume-source {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\npre.blume-source > code {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n\n/* Code blocks inside tabs sit flush; the tab container owns the frame. These\n rules are unlayered like the base \\`pre\\` styles, so they win over Tailwind's\n layered utilities (which a class on the panel cannot). The second selector\n covers <CodeGroup>, where each code block IS the panel (a direct child of the\n tab content wrapper) rather than a <pre> nested inside a <Tab>. */\nblume-tabs [data-blume-tab-panel] > pre,\nblume-tabs [data-blume-tab-content] > pre {\n /* Important to beat the astro-code background rule above; the tab container\n owns the surface, so the code sits directly on it. */\n background: transparent !important;\n border: 0;\n border-radius: 0;\n margin: 0;\n}\n\nblume-tabs pre[data-language],\n.not-prose pre[data-language] {\n padding-top: 1rem;\n}\n\nblume-tabs pre[data-language]::before,\n.not-prose pre[data-language]::before {\n content: none;\n}\n\n/* Pre-hydration layout-shift guard. The horizontal trigger row and\n single-panel visibility are built by the <blume-tabs> custom element's JS:\n until it upgrades, the trigger row is empty and every panel is in normal flow,\n so the browser paints all panels stacked vertically (e.g. all four\n package-manager commands at once) before JS hides them. While the element is\n :not(:defined), show only the first panel and reserve the trigger row's height\n so nothing jumps when JS takes over. The child selector covers both <Tab>\n panels and <CodeGroup> raw code blocks (which only gain\n [data-blume-tab-panel] from JS). */\nblume-tabs:not(:defined) [data-blume-tab-content] > *:nth-child(n + 2) {\n display: none;\n}\n\nblume-tabs:not(:defined) [data-blume-tablist] {\n /* Matches a trigger's height: py-2.5 + text-xs line-height + border-b-2. */\n min-height: 2.375rem;\n}\n\nblume-tabs:not(:defined)[data-dropdown=\"true\"] [data-blume-tablist] {\n /* Dropdown variant: p-3 padding around a select (py-2 + text-sm + border). */\n min-height: 3.875rem;\n}\n\n/* Code blocks inside request/response example panels sit flush; the panel owns\n the frame. Unlayered (like the tab rules) so they beat the base \\`pre\\` styles\n that a class on the panel cannot. */\n[data-blume-code-panel] pre {\n background: transparent !important;\n border: 0;\n border-radius: 0;\n margin: 0;\n}\n\n/* Opt-in line numbers (\\`\\`\\`ts file.ts lineNumbers): a counter-driven gutter that\n works in prose and flush (tab / API panel) code blocks alike. */\npre[data-line-numbers] code {\n counter-reset: line;\n}\n\npre[data-line-numbers] .line::before {\n color: var(--blume-muted-foreground);\n content: counter(line);\n counter-increment: line;\n display: inline-block;\n margin-right: 1.25rem;\n text-align: right;\n user-select: none;\n width: 1.25rem;\n}\n\n/* Shiki notation transformers (on by default). The notation comments are\n stripped from the output; these style the classes they leave behind. A styled\n line becomes a full-width inline-block so its background fills the row; plain\n lines are left untouched, so blocks without notations render as before. */\n.line.highlighted,\n.line.diff {\n display: inline-block;\n width: 100%;\n}\n\n/* The backgrounds need !important to beat the \\`pre.astro-code span\\` rule above,\n which forces token spans transparent; these line/word spans are exceptions. */\n.line.highlighted {\n background-color: var(--blume-code-highlight) !important;\n box-shadow: inset 2px 0 0 0 var(--blume-code-highlight-border);\n}\n\n.line.diff.add {\n background-color: var(--blume-code-add) !important;\n box-shadow: inset 2px 0 0 0 var(--blume-code-add-border);\n}\n\n.line.diff.remove {\n background-color: var(--blume-code-remove) !important;\n box-shadow: inset 2px 0 0 0 var(--blume-code-remove-border);\n}\n\n/* Word highlight (\\`// [!code word:x]\\`) wraps matches in an inline span. The\n element selector keeps it ahead of the transparent token-span rule. */\nspan.highlighted-word {\n background-color: var(--blume-code-word) !important;\n border-radius: 0.25rem;\n box-shadow: 0 0 0 1px var(--blume-code-word-border);\n padding: 0.1em 0.2em;\n}\n\n/* Focus (\\`// [!code focus]\\`): dim and blur the rest; reveal on hover. */\npre:has(.line.focused) .line:not(.focused) {\n filter: blur(0.085rem);\n opacity: 0.5;\n transition:\n filter 0.2s ease,\n opacity 0.2s ease;\n}\n\npre:has(.line.focused):hover .line:not(.focused) {\n filter: none;\n opacity: 1;\n}\n\n@media (prefers-reduced-motion: reduce) {\n pre:has(.line.focused) .line:not(.focused) {\n transition: none;\n }\n}\n\n@media (max-width: 640px) {\n .prose :where(h1) {\n font-size: 2.25rem;\n }\n\n .prose :where(h2) {\n font-size: 1.625rem;\n }\n}\n\n.prose :not(pre) > code {\n background: var(--blume-code-background);\n padding: 0.15em 0.35em;\n border-radius: 0.3rem;\n font-family: var(--font-mono);\n font-weight: 500;\n}\n\n.prose :not(pre) > code::before,\n.prose :not(pre) > code::after {\n content: none;\n}\n\n/* Inline code highlighting (markdown.code.inline): Shiki colors the tokens of a\n \\`code\\`{:lang} snippet via the same dual-theme CSS variables as fenced blocks,\n keeping the inline pill background. */\n.prose code.blume-inline-code span {\n color: var(--shiki-light);\n}\n\n:root[data-theme=\"dark\"] .prose code.blume-inline-code span {\n color: var(--shiki-dark);\n}\n\n/* Print / \"Save as PDF\" (the page-actions Export → PDF runs window.print()).\n Strip the surrounding chrome so the printout is just the article. */\n@media print {\n [data-blume-banner],\n header,\n aside,\n [data-blume-page-actions],\n #blume-content > nav,\n #blume-content > details {\n display: none !important;\n }\n\n #blume-content {\n padding: 0 !important;\n }\n\n .prose {\n margin: 0 !important;\n max-width: none !important;\n }\n\n /* Reveal collapsed tab panels so their content isn't dropped from the print. */\n blume-tabs [data-blume-tab-panel] {\n display: block !important;\n }\n\n /* Keep code/callout backgrounds (subject to the dialog's \"Background graphics\"\n toggle). */\n pre,\n .prose :not(pre) > code {\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n }\n}\n\n/* Twoslash rich-renderer styles (used by fences with the \\`twoslash\\` meta). */\n${options.twoslashCss ?? \"\"}\n\n/* Token overrides: config first, then the user's theme.css (highest priority). */\n${options.configTokens}\n${options.userTheme}\n`;\n",
98
98
  "/**\n * CSS for Twoslash's rich renderer, emitted into the Tailwind entry (Twoslash\n * runs on any fence with the `twoslash` meta). It is the shipped\n * `@shikijs/twoslash` stylesheet plus a Blume-themed override layer:\n *\n * - maps the renderer's `--twoslash-*` variables onto Blume tokens so popups\n * match the active theme (light/dark);\n * - lets popups escape the code block's horizontal scroll container; and\n * - restores backgrounds the theme's `pre.astro-code span { background:\n * transparent !important }` rule would otherwise clear from popup chrome.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\n\n/** Blume-token theming layered over the shipped rich renderer styles. */\nconst OVERRIDES = `\n/* Twoslash: theme the rich renderer with Blume tokens. */\n:root {\n --twoslash-border-color: var(--blume-border);\n --twoslash-popup-bg: var(--blume-code-background);\n --twoslash-popup-color: var(--blume-foreground);\n --twoslash-popup-shadow: 0 6px 24px oklch(0 0 0 / 0.18);\n --twoslash-docs-color: var(--blume-muted-foreground);\n --twoslash-docs-font: var(--font-sans);\n --twoslash-code-font: var(--font-mono);\n --twoslash-matched-color: var(--blume-foreground);\n --twoslash-unmatched-color: var(--blume-muted-foreground);\n --twoslash-cursor-color: var(--blume-muted-foreground);\n}\n\n/* Popups are absolutely positioned and must escape the pre's scroll container.\n The base prose pre rule (from the typography layer) wins the cascade here\n despite lower specificity, so !important is needed to force visibility. */\n.prose pre.twoslash {\n overflow: visible !important;\n}\n\n/* The rich renderer renders each popup's type signature as a nested Shiki\n pre. Strip the code-block chrome (border, radius, padding, background) so it\n sits flush inside the popup, which owns the frame. */\n.prose pre.twoslash .twoslash-popup-container pre {\n background: transparent !important;\n border: 0 !important;\n border-radius: 0 !important;\n margin: 0 !important;\n padding: 0 !important;\n}\n\n/* Re-assert chrome backgrounds the transparent token-span rule would clear. */\n.twoslash .twoslash-popup-container,\n.twoslash .twoslash-popup-arrow,\n.twoslash .twoslash-completion-cursor .twoslash-completion-list {\n background: var(--twoslash-popup-bg) !important;\n}\n.twoslash .twoslash-popup-error {\n background: var(--twoslash-error-bg) !important;\n}\n.twoslash .twoslash-highlighted {\n background: var(--twoslash-highlighted-bg) !important;\n}\n\n/* The error squiggle uses a background image the transparent rule clears, so\n draw it as a wavy underline instead. */\n.twoslash .twoslash-error {\n text-decoration: underline wavy var(--twoslash-error-color);\n text-underline-offset: 0.25em;\n}\n\n.twoslash-popup-container {\n max-width: min(90vw, 36rem);\n}\n`;\n\n/** The full Twoslash stylesheet (shipped rich styles + Blume overrides). */\nexport const twoslashCss = (): string => {\n const file = require.resolve(\"@shikijs/twoslash/style-rich.css\");\n return `${readFileSync(file, \"utf-8\")}\\n${OVERRIDES}`;\n};\n",
99
- "import type {\n ComponentOverrideAnalysis,\n NormalizedOverride,\n OverrideFramework,\n} from \"../core/component-overrides.ts\";\n\n/**\n * Turn analyzed `components.ts` overrides into the generated `components.ts`\n * module plus per-override hydration wrappers.\n *\n * The runtime overrides object already holds bare imported identifiers, so those\n * (when not hydrated) ride through a plain spread. Everything else needs a static\n * import Vite can see: path-string overrides import the file directly, while\n * hydrated overrides get a wrapper `.astro` that applies the `client:*` directive\n * (Astro directives must be written statically). The `islands` group is folded\n * into the MDX component map — it is just `mdx` with a default `client: \"visible\"`.\n */\n\nexport interface ComponentSlotWrapper {\n content: string;\n /** File name (no extension) under `.blume/src/generated/component-slots/`. */\n name: string;\n}\n\nexport interface ComponentSlotPlan {\n /** Frameworks used by resolved overrides; enable the matching Astro renderer. */\n frameworks: Set<OverrideFramework>;\n /** Contents of `.blume/src/generated/components.ts`. */\n module: string;\n wrappers: ComponentSlotWrapper[];\n}\n\nconst EMPTY_MODULE = `// Generated by Blume. Do not edit.\nexport const mdxComponents = {};\nexport const layoutOverrides = {};\n`;\n\n/** Astro client directive for a hydrated override. */\nconst directiveFor = (override: NormalizedOverride): string => {\n const framework = override.source?.framework;\n switch (override.client) {\n case \"idle\": {\n return \"client:idle\";\n }\n case \"visible\": {\n return \"client:visible\";\n }\n case \"media\": {\n return override.media\n ? `client:media=\"${override.media}\"`\n : \"client:load\";\n }\n case \"only\": {\n return framework ? `client:only=\"${framework}\"` : \"client:load\";\n }\n default: {\n return \"client:load\";\n }\n }\n};\n\nconst importClause = (variable: string, name: string, path: string): string =>\n name === \"default\"\n ? `import ${variable} from ${JSON.stringify(path)};`\n : `import { ${name} as ${variable} } from ${JSON.stringify(path)};`;\n\n/** A wrapper `.astro` that statically imports a component and hydrates it. */\nconst wrapperContent = (override: NormalizedOverride): string => {\n const { name, path } = override.source as NonNullable<\n NormalizedOverride[\"source\"]\n >;\n const clause =\n name === \"default\"\n ? `import Component from ${JSON.stringify(path)};`\n : `import { ${name} as Component } from ${JSON.stringify(path)};`;\n return `---\n// Generated by Blume. Do not edit.\n${clause}\n---\n<Component ${directiveFor(override)} {...Astro.props}><slot /></Component>\n`;\n};\n\nconst sanitize = (value: string): string =>\n value.replaceAll(/[^A-Za-z0-9]/gu, \"_\");\n\nexport const planComponentSlots = (\n componentsFile: string | null,\n analysis: ComponentOverrideAnalysis | null\n): ComponentSlotPlan => {\n const frameworks = new Set<OverrideFramework>();\n if (!componentsFile) {\n return { frameworks, module: EMPTY_MODULE, wrappers: [] };\n }\n if (!analysis) {\n return {\n frameworks,\n module: `// Generated by Blume. Do not edit.\nimport overrides from ${JSON.stringify(componentsFile)};\nexport const mdxComponents = overrides.mdx ?? {};\nexport const layoutOverrides = overrides.layout ?? {};\n`,\n wrappers: [],\n };\n }\n\n const wrappers: ComponentSlotWrapper[] = [];\n const importLines: string[] = [];\n // Explicit `key: Variable` map entries, per surface.\n const mdxEntries: string[] = [];\n const layoutEntries: string[] = [];\n let counter = 0;\n\n // Islands are MDX components hydrated by default, so plan them alongside `mdx`.\n const mdxOverrides = [...analysis.mdx, ...analysis.islands];\n\n const plan = (\n override: NormalizedOverride,\n group: \"mdx\" | \"layout\",\n entries: string[]\n ): void => {\n const { source } = override;\n if (source?.framework) {\n frameworks.add(source.framework);\n }\n // Bare identifier, not hydrated: the runtime object already has it.\n if (override.identifier && !override.client) {\n return;\n }\n if (!source) {\n // Unresolved (already warned): leave it on the runtime object.\n return;\n }\n const variable = `__blumeSlot${counter}`;\n counter += 1;\n if (override.client) {\n const name = `${group}-${sanitize(override.key)}`;\n wrappers.push({ content: wrapperContent(override), name });\n importLines.push(\n importClause(variable, \"default\", `./component-slots/${name}.astro`)\n );\n } else {\n importLines.push(importClause(variable, source.name, source.path));\n }\n entries.push(`${JSON.stringify(override.key)}: ${variable}`);\n };\n\n for (const override of mdxOverrides) {\n plan(override, \"mdx\", mdxEntries);\n }\n for (const override of analysis.layout) {\n plan(override, \"layout\", layoutEntries);\n }\n\n // `overrides.islands` is not spread: every valid island is hydrated, so it is\n // emitted as an explicit wrapper entry above (raw spreads only carry bare,\n // non-hydrated identifiers from `mdx`/`layout`).\n const moduleSource = `// Generated by Blume. Do not edit.\nimport overrides from ${JSON.stringify(componentsFile)};\n${importLines.join(\"\\n\")}${importLines.length ? \"\\n\" : \"\"}export const mdxComponents = { ...(overrides.mdx ?? {})${mdxEntries.length ? `, ${mdxEntries.join(\", \")}` : \"\"} };\nexport const layoutOverrides = { ...(overrides.layout ?? {})${layoutEntries.length ? `, ${layoutEntries.join(\", \")}` : \"\"} };\n`;\n\n return { frameworks, module: moduleSource, wrappers };\n};\n",
99
+ "import type {\n ComponentOverrideAnalysis,\n NormalizedOverride,\n OverrideFramework,\n} from \"../core/component-overrides.ts\";\n\n/**\n * Turn analyzed `components.ts` overrides into the generated `components.ts`\n * module plus per-override hydration wrappers.\n *\n * The runtime overrides object already holds bare imported identifiers, so those\n * (when not hydrated) ride through a plain spread. Everything else needs a static\n * import Vite can see: path-string overrides import the file directly, while\n * hydrated overrides get a wrapper `.astro` that applies the `client:*` directive\n * (Astro directives must be written statically). The `islands` group is folded\n * into the MDX component map — it is just `mdx` with a default `client: \"visible\"`.\n */\n\nexport interface ComponentSlotWrapper {\n content: string;\n /** File name (no extension) under `.blume/src/generated/component-slots/`. */\n name: string;\n}\n\nexport interface ComponentSlotPlan {\n /** Frameworks used by resolved overrides; enable the matching Astro renderer. */\n frameworks: Set<OverrideFramework>;\n /** Contents of `.blume/src/generated/components.ts`. */\n module: string;\n wrappers: ComponentSlotWrapper[];\n}\n\nconst EMPTY_MODULE = `// Generated by Blume. Do not edit.\nexport const mdxComponents = {};\nexport const layoutOverrides = {};\n`;\n\n// A user-supplied attribute value interpolated into a generated .astro tag: a\n// stray quote or newline would produce a malformed component and an opaque\n// Astro parse error pointing at the generated file, not the user's config.\nconst attributeValue = (value: string): string =>\n value.replaceAll(/[\"\\n\\r]/gu, \" \").trim();\n\n/** Astro client directive for a hydrated override. */\nconst directiveFor = (override: NormalizedOverride): string => {\n const framework = override.source?.framework;\n switch (override.client) {\n case \"idle\": {\n return \"client:idle\";\n }\n case \"visible\": {\n return \"client:visible\";\n }\n case \"media\": {\n return override.media\n ? `client:media=\"${attributeValue(override.media)}\"`\n : \"client:load\";\n }\n case \"only\": {\n return framework\n ? `client:only=\"${attributeValue(framework)}\"`\n : \"client:load\";\n }\n default: {\n return \"client:load\";\n }\n }\n};\n\nconst importClause = (variable: string, name: string, path: string): string =>\n name === \"default\"\n ? `import ${variable} from ${JSON.stringify(path)};`\n : `import { ${name} as ${variable} } from ${JSON.stringify(path)};`;\n\n/** A wrapper `.astro` that statically imports a component and hydrates it. */\nconst wrapperContent = (override: NormalizedOverride): string => {\n const { name, path } = override.source as NonNullable<\n NormalizedOverride[\"source\"]\n >;\n const clause =\n name === \"default\"\n ? `import Component from ${JSON.stringify(path)};`\n : `import { ${name} as Component } from ${JSON.stringify(path)};`;\n return `---\n// Generated by Blume. Do not edit.\n${clause}\n---\n<Component ${directiveFor(override)} {...Astro.props}><slot /></Component>\n`;\n};\n\nconst sanitize = (value: string): string =>\n value.replaceAll(/[^A-Za-z0-9]/gu, \"_\");\n\nexport const planComponentSlots = (\n componentsFile: string | null,\n analysis: ComponentOverrideAnalysis | null\n): ComponentSlotPlan => {\n const frameworks = new Set<OverrideFramework>();\n if (!componentsFile) {\n return { frameworks, module: EMPTY_MODULE, wrappers: [] };\n }\n if (!analysis) {\n return {\n frameworks,\n module: `// Generated by Blume. Do not edit.\nimport overrides from ${JSON.stringify(componentsFile)};\nexport const mdxComponents = overrides.mdx ?? {};\nexport const layoutOverrides = overrides.layout ?? {};\n`,\n wrappers: [],\n };\n }\n\n const wrappers: ComponentSlotWrapper[] = [];\n const importLines: string[] = [];\n // Explicit `key: Variable` map entries, per surface.\n const mdxEntries: string[] = [];\n const layoutEntries: string[] = [];\n let counter = 0;\n\n // Islands are MDX components hydrated by default, so plan them alongside `mdx`.\n const mdxOverrides = [...analysis.mdx, ...analysis.islands];\n\n const plan = (\n override: NormalizedOverride,\n group: \"mdx\" | \"layout\",\n entries: string[]\n ): void => {\n const { source } = override;\n if (source?.framework) {\n frameworks.add(source.framework);\n }\n // Bare identifier, not hydrated: the runtime object already has it.\n if (override.identifier && !override.client) {\n return;\n }\n if (!source) {\n // Unresolved (already warned): leave it on the runtime object.\n return;\n }\n const variable = `__blumeSlot${counter}`;\n counter += 1;\n if (override.client) {\n const name = `${group}-${sanitize(override.key)}`;\n wrappers.push({ content: wrapperContent(override), name });\n importLines.push(\n importClause(variable, \"default\", `./component-slots/${name}.astro`)\n );\n } else {\n importLines.push(importClause(variable, source.name, source.path));\n }\n entries.push(`${JSON.stringify(override.key)}: ${variable}`);\n };\n\n for (const override of mdxOverrides) {\n plan(override, \"mdx\", mdxEntries);\n }\n for (const override of analysis.layout) {\n plan(override, \"layout\", layoutEntries);\n }\n\n // `overrides.islands` is not spread: every valid island is hydrated, so it is\n // emitted as an explicit wrapper entry above (raw spreads only carry bare,\n // non-hydrated identifiers from `mdx`/`layout`).\n const moduleSource = `// Generated by Blume. Do not edit.\nimport overrides from ${JSON.stringify(componentsFile)};\n${importLines.join(\"\\n\")}${importLines.length ? \"\\n\" : \"\"}export const mdxComponents = { ...(overrides.mdx ?? {})${mdxEntries.length ? `, ${mdxEntries.join(\", \")}` : \"\"} };\nexport const layoutOverrides = { ...(overrides.layout ?? {})${layoutEntries.length ? `, ${layoutEntries.join(\", \")}` : \"\"} };\n`;\n\n return { frameworks, module: moduleSource, wrappers };\n};\n",
100
100
  "import { readFile } from \"node:fs/promises\";\n\nimport { join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport type { IslandClientMode } from \"./islands.ts\";\nimport { readClientMode } from \"./islands.ts\";\n\n/** Framework an example is authored in, inferred from its extension. */\nexport type ExampleFramework = \"astro\" | \"react\" | \"svelte\" | \"vue\";\n\n/** A discovered `examples/` file, ready to wrap (live) and show (source). */\nexport interface ExampleSpec {\n /** Hydration directive for a framework example; `undefined` for `.astro`. */\n client?: IslandClientMode;\n /** Absolute path to the example source file. */\n file: string;\n /** Framework, or `astro` for a server-rendered (static) example. */\n framework: ExampleFramework;\n /** Shiki language for the source pane — the file extension. */\n lang: string;\n /** MDX-facing key: the path under `examples/`, sans extension, `/`-joined. */\n path: string;\n /** Raw source text shown in the code tab. */\n source: string;\n}\n\nexport interface ExampleDiscovery {\n examples: ExampleSpec[];\n warnings: string[];\n}\n\n/** Example extensions mapped to the framework that renders them. */\nconst FRAMEWORK_BY_EXT: Record<string, ExampleFramework> = {\n astro: \"astro\",\n jsx: \"react\",\n svelte: \"svelte\",\n tsx: \"react\",\n vue: \"vue\",\n};\n\n// Captures the extension so we can strip it from the path key and pick the\n// framework. Kept in sync with the glob below — non-matching files a user glob\n// happens to sweep in (e.g. a registry's `.ts` sources) are dropped here.\nconst EXAMPLE_FILE = /\\.(?<ext>astro|jsx|svelte|tsx|vue)$/u;\n\n// Renderable example files when `examples` names a plain directory.\nconst DEFAULT_EXAMPLE_GLOB = \"**/*.{astro,jsx,svelte,tsx,vue}\";\n\n// Glob magic that turns `examples` from a plain directory into a pattern. `()`,\n// `@`, and `+` are excluded so literal path segments (npm scopes, parens) keep\n// resolving as directories; the extglob leads `*?!` still trigger here.\nconst GLOB_MAGIC = /[!*?[\\]{}]/u;\n\n/**\n * Split a glob into its static directory prefix and the remaining pattern, so\n * discovered files can be keyed relative to that prefix (e.g.\n * `registry/x/**\\/examples/*` → `{ base: \"registry/x\", rest: \"**\\/examples/*\" }`).\n */\nconst splitGlobBase = (pattern: string): { base: string; rest: string } => {\n const segments = pattern.split(\"/\");\n const firstMagic = segments.findIndex((segment) => GLOB_MAGIC.test(segment));\n if (firstMagic === -1) {\n return { base: pattern, rest: \"\" };\n }\n return {\n base: segments.slice(0, firstMagic).join(\"/\"),\n rest: segments.slice(firstMagic).join(\"/\"),\n };\n};\n\n/**\n * Discover preview examples for the `examples` config (default `examples`).\n * Every `.astro`/`.tsx`/`.jsx`/`.vue`/`.svelte` file becomes addressable by\n * `<Component path=\"...\">`, where the path is the file's location without its\n * extension (e.g. `forms/login.tsx` → `forms/login`).\n *\n * `pattern` is a directory by default, but may be a glob (anything with\n * `*`/`?`/`[]`/`{}`/`!`) — then only matching files are discovered and each\n * `<Component path>` key is relative to the glob's static prefix. This lets a\n * registry layout that colocates component sources with their examples be\n * targeted directly (e.g. `registry/<pkg>/**\\/examples/*`) without the sources —\n * which have no default export and so can't be wrapped — being swept in.\n *\n * Discovery is path-based (a glob), so no example code is executed. Framework\n * examples carry a hydration mode (default `client:visible`, overridable via\n * `export const client`); `.astro` examples render statically with no client\n * directive.\n */\nexport const discoverExamples = async (\n root: string,\n pattern = \"examples\"\n): Promise<ExampleDiscovery> => {\n const { base, rest } = GLOB_MAGIC.test(pattern)\n ? splitGlobBase(pattern)\n : { base: pattern, rest: DEFAULT_EXAMPLE_GLOB };\n const dir = join(root, base);\n const matches = await glob([rest], {\n absolute: true,\n cwd: dir,\n onlyFiles: true,\n });\n const files = matches.toSorted();\n const sources = await Promise.all(\n files.map((file) => readFile(file, \"utf-8\"))\n );\n\n const examples: ExampleSpec[] = [];\n const warnings: string[] = [];\n const seen = new Map<string, string>();\n\n for (const [index, file] of files.entries()) {\n const ext = file.match(EXAMPLE_FILE)?.groups?.ext;\n const framework = ext ? FRAMEWORK_BY_EXT[ext] : undefined;\n if (!(ext && framework)) {\n continue;\n }\n // Strip the trailing `.<ext>` to form the `<Component path>` key.\n const path = relative(dir, file).slice(0, -(ext.length + 1));\n const existing = seen.get(path);\n if (existing) {\n warnings.push(\n `Two examples both resolve to \"${path}\" (\"${existing}\" and \"${file}\"); ignoring the second. Give them distinct paths.`\n );\n continue;\n }\n seen.set(path, file);\n const source = sources[index] ?? \"\";\n examples.push({\n client:\n framework === \"astro\"\n ? undefined\n : readClientMode(source, file, warnings),\n file,\n framework,\n lang: ext,\n path,\n source,\n });\n }\n\n return { examples, warnings };\n};\n",
101
101
  "import { readFile } from \"node:fs/promises\";\n\nimport { basename, join } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\n/** Astro hydration directives Blume applies to a convention island. */\nexport type IslandClientMode = \"idle\" | \"load\" | \"only\" | \"visible\";\n\n/** Client framework an island is authored in, inferred from its extension. */\nexport type IslandFramework = \"react\" | \"svelte\" | \"vue\";\n\n/** A discovered `islands/` component, ready to wrap and expose to MDX. */\nexport interface IslandSpec {\n /** Hydration directive, from `export const client` or the default. */\n client: IslandClientMode;\n /** Absolute path to the island source file. */\n file: string;\n /** Astro client framework, used to enable the renderer and for `client:only`. */\n framework: IslandFramework;\n /** Component name used in MDX — the file's basename without extension. */\n name: string;\n}\n\nexport interface IslandDiscovery {\n islands: IslandSpec[];\n warnings: string[];\n}\n\n/** Hydration mode used when an island doesn't declare one. */\nconst DEFAULT_CLIENT: IslandClientMode = \"visible\";\n\nconst VALID_MODES = new Set<IslandClientMode>([\n \"idle\",\n \"load\",\n \"only\",\n \"visible\",\n]);\n\n/** Island extensions mapped to the Astro renderer that handles them. */\nconst FRAMEWORK_BY_EXT: Record<string, IslandFramework> = {\n jsx: \"react\",\n svelte: \"svelte\",\n tsx: \"react\",\n vue: \"vue\",\n};\n\n// Captures the extension so we can both strip it from the name and pick the\n// framework. Kept in sync with the glob below.\nconst ISLAND_FILE = /\\.(?<ext>jsx|svelte|tsx|vue)$/u;\n\n// Matches `export const client = \"load\"` (with optional type annotation and\n// either quote style). Read statically so we never execute island code in Node.\nconst CLIENT_EXPORT =\n /export\\s+const\\s+client\\s*(?::[^=]+)?=\\s*[\"'](?<mode>\\w+)[\"']/u;\n\nexport const readClientMode = (\n source: string,\n file: string,\n warnings: string[]\n): IslandClientMode => {\n const mode = source.match(CLIENT_EXPORT)?.groups?.mode;\n if (!mode) {\n return DEFAULT_CLIENT;\n }\n if (!VALID_MODES.has(mode as IslandClientMode)) {\n warnings.push(\n `Island \"${file}\" declares an unknown client mode \"${mode}\"; defaulting to \"${DEFAULT_CLIENT}\". Use \"load\", \"idle\", \"visible\", or \"only\".`\n );\n return DEFAULT_CLIENT;\n }\n return mode as IslandClientMode;\n};\n\n/**\n * Discover convention islands under `<root>/islands`. Every `.tsx`/`.jsx`/\n * `.vue`/`.svelte` file becomes a globally-available, hydrated MDX component\n * named after the file (which must be PascalCase to be usable as a JSX tag).\n * Hydration defaults to `client:visible`; a file opts out with `export const\n * client = \"load\" | \"idle\" | \"only\"`. Discovery is path-based (a glob), so no\n * user code is executed.\n */\nexport const discoverIslands = async (\n root: string\n): Promise<IslandDiscovery> => {\n const dir = join(root, \"islands\");\n const matches = await glob([\"**/*.{jsx,svelte,tsx,vue}\"], {\n absolute: true,\n cwd: dir,\n onlyFiles: true,\n });\n const files = matches.toSorted();\n const sources = await Promise.all(\n files.map((file) => readFile(file, \"utf-8\"))\n );\n\n const islands: IslandSpec[] = [];\n const warnings: string[] = [];\n const seen = new Map<string, string>();\n\n for (const [index, file] of files.entries()) {\n const base = basename(file);\n const ext = base.match(ISLAND_FILE)?.groups?.ext;\n const framework = ext ? FRAMEWORK_BY_EXT[ext] : undefined;\n if (!framework) {\n continue;\n }\n const name = base.replace(ISLAND_FILE, \"\");\n // The name is used verbatim as both an MDX tag and an unquoted object key\n // in the generated island map, so it must be a plain PascalCase identifier\n // — a `-`, `.`, or space (e.g. `Time-Picker.tsx`) would otherwise emit a\n // syntax-error module and fail the whole build with no pointer to the file.\n if (!/^[A-Z][A-Za-z0-9_]*$/u.test(name)) {\n warnings.push(\n `Island \"${file}\" must have a PascalCase identifier filename to be used in MDX (letters, digits, and underscores only, e.g. Counter.tsx → <Counter />); skipping it.`\n );\n continue;\n }\n const existing = seen.get(name);\n if (existing) {\n warnings.push(\n `Two islands both resolve to <${name}> (\"${existing}\" and \"${file}\"); ignoring the second. Give them distinct filenames.`\n );\n continue;\n }\n seen.set(name, file);\n islands.push({\n client: readClientMode(sources[index] ?? \"\", file, warnings),\n file,\n framework,\n name,\n });\n }\n\n return { islands, warnings };\n};\n",
102
102
  "import { extname, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport type { BlumePageRoute } from \"./integration.ts\";\n\n/**\n * Discover user `.astro` pages and map them to route patterns. Files keep their\n * original location; only the route pattern is derived (index -> parent,\n * dynamic `[param]` segments preserved).\n */\nexport const discoverPages = async (\n pagesRoot: string\n): Promise<BlumePageRoute[]> => {\n const files = await glob([\"**/*.astro\"], {\n absolute: true,\n cwd: pagesRoot,\n onlyFiles: true,\n });\n files.sort();\n\n return files.map((file) => {\n const rel = relative(pagesRoot, file);\n const withoutExt = rel.slice(0, rel.length - extname(rel).length);\n const parts = withoutExt.split(\"/\");\n // Only a trailing `index` maps to its parent dir; a folder literally named\n // `index` (e.g. `index/foo.astro`) must keep its segment.\n if (parts.at(-1) === \"index\") {\n parts.pop();\n }\n const pattern = parts.length === 0 ? \"/\" : `/${parts.join(\"/\")}`;\n return { entrypoint: file, pattern };\n });\n};\n\n/**\n * Whether the project already owns `route` — through a custom `.astro` page\n * (injected, so matched on `pattern`) or a content page (matched on `route`).\n * Used to skip a generated default page (e.g. `/404`, `/changelog`) so a\n * user-authored page overrides it without a route collision.\n */\nexport const routeIsTaken = (\n pages: { pattern: string }[],\n contentPages: { route: string }[],\n route: string\n): boolean =>\n pages.some((page) => page.pattern === route) ||\n contentPages.some((page) => page.route === route);\n\n/** A custom-page route that should get a generated OG card. */\nexport interface OgCustomRoute {\n /** `og/<slug>.png` path segment; `index` for the site root. */\n slug: string;\n /** Card headline. */\n title: string;\n}\n\n/** Skip private (`_partial`, `.well-known`) and Astro dynamic (`[param]`) parts. */\nconst PRIVATE_SEGMENT = /^[._]/u;\n\nconst humanizeSegment = (segment: string): string =>\n segment\n .split(/[-_]/u)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n/**\n * Pick the custom-page routes that should get a generated Open Graph card, with\n * the card's slug and text. OG is otherwise content-route only, so a custom page\n * — most importantly the landing `/`, the most-shared URL — would have no card.\n *\n * Dynamic (`[param]`) routes and private segments (`_partials`, `.well-known`)\n * are skipped: they aren't shareable pages. The home is titled with the site\n * title; a deeper page is titled from its last path segment. The card's brand\n * lockup, description, and footer come from the resolved config at render time.\n */\nexport const customOgRoutes = (\n pages: BlumePageRoute[],\n siteTitle: string\n): OgCustomRoute[] => {\n const seen = new Set<string>();\n const routes: OgCustomRoute[] = [];\n for (const { pattern } of pages) {\n const segments = pattern.split(\"/\").filter(Boolean);\n if (\n segments.some((part) => PRIVATE_SEGMENT.test(part) || part.includes(\"[\"))\n ) {\n continue;\n }\n const slug = segments.length === 0 ? \"index\" : segments.join(\"/\");\n if (seen.has(slug)) {\n continue;\n }\n seen.add(slug);\n const last = segments.at(-1);\n routes.push({ slug, title: last ? humanizeSegment(last) : siteTitle });\n }\n return routes;\n};\n",
103
- "import { existsSync, readFileSync } from \"node:fs\";\n\nimport { detectMintlifyBridge } from \"./bridge.ts\";\nimport type { BridgeDetection } from \"./bridge.ts\";\nimport { applyDeploymentEnv } from \"./deployment-env.ts\";\nimport { BlumeError, diagnosticsFromZod } from \"./diagnostics.ts\";\nimport { createModuleLoader } from \"./load-module.ts\";\nimport { findConfigFile } from \"./project.ts\";\nimport { blumeConfigSchema } from \"./schema.ts\";\nimport type { BlumeConfig, ResolvedConfig } from \"./schema.ts\";\nimport type { Diagnostic } from \"./types.ts\";\n\n/**\n * Identity helper for authoring `blume.config.ts`. Exists for type inference\n * and a stable future home for plugin hooks; it does not transform input.\n */\nexport const defineConfig = (config: BlumeConfig): BlumeConfig => config;\n\n/** Bridge mode info: a foreign docs tool Blume is serving without migrating. */\nexport interface ConfigBridge {\n tool: \"mintlify\";\n /** Absolute path of the foreign config file (`docs.json`/`mint.json`). */\n configFile: string;\n}\n\n/** Result of loading + validating a project config. */\nexport interface ConfigLoadResult {\n config: ResolvedConfig;\n /** Absolute path of the config file used, or null when defaults were used. */\n configFile: string | null;\n /** Set when a foreign docs config (e.g. Mintlify) is being bridged. */\n bridge: ConfigBridge | null;\n diagnostics: Diagnostic[];\n}\n\nconst importConfigModule = createModuleLoader();\n\n/**\n * Load and validate the project config. When no config file exists, schema\n * defaults produce a fully resolved config so the zero-boilerplate path works.\n */\nexport const loadConfig = async (\n root: string,\n /**\n * Supplied only by `blume dev`: the local dev server URL, used as the\n * `deployment.site` fallback when none is configured or detected. Builds\n * never pass it, so production output can't end up pointing at localhost.\n */\n options: { devServerUrl?: string } = {}\n): Promise<ConfigLoadResult> => {\n const configFile = findConfigFile(root);\n\n // With no Blume config, a Mintlify `docs.json` activates bridge mode: serve\n // the unconverted project by synthesizing config + a `mintlify` content source.\n let bridge: BridgeDetection | null = null;\n let raw: unknown = {};\n if (configFile) {\n try {\n raw = await importConfigModule(configFile);\n } catch (error) {\n throw new BlumeError({\n code: \"BLUME_CONFIG_LOAD_FAILED\",\n file: configFile,\n message: `Failed to load config: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n } else {\n bridge = await detectMintlifyBridge(root);\n if (bridge) {\n ({ raw } = bridge);\n }\n }\n\n const sourceFile = bridge?.configFile ?? configFile;\n const parsed = blumeConfigSchema.safeParse(raw ?? {});\n if (!parsed.success) {\n // Read the raw config text (when on disk) so errors carry a line/column.\n const source =\n sourceFile && existsSync(sourceFile)\n ? readFileSync(sourceFile, \"utf-8\")\n : undefined;\n const diagnostics = diagnosticsFromZod(parsed.error, {\n code: \"BLUME_CONFIG_INVALID\",\n file: sourceFile ?? undefined,\n source,\n });\n throw new BlumeError(\n diagnostics[0] ?? {\n code: \"BLUME_CONFIG_INVALID\",\n file: sourceFile ?? undefined,\n message: \"Invalid Blume config.\",\n severity: \"error\",\n }\n );\n }\n\n // Resolve the canonical site URL, then SEO defaults that depend on it.\n // Precedence: explicit config > platform env (Vercel/Netlify/Cloudflare, via\n // applyDeploymentEnv) > the local dev server URL (dev only).\n const config = applyDeploymentEnv(parsed.data);\n const site = config.deployment.site ?? options.devServerUrl;\n\n // OG images need an absolute `og:image`, so they default on once a site URL\n // is known and off otherwise. An explicit `seo.og.enabled` always wins.\n const ogEnabled = config.seo.og.enabled ?? Boolean(site);\n\n return {\n bridge: bridge\n ? { configFile: bridge.configFile, tool: bridge.tool }\n : null,\n config: {\n ...config,\n deployment: { ...config.deployment, site },\n seo: { ...config.seo, og: { ...config.seo.og, enabled: ogEnabled } },\n },\n configFile: sourceFile,\n diagnostics: [],\n };\n};\n",
103
+ "import { existsSync, readFileSync } from \"node:fs\";\n\nimport { detectMintlifyBridge } from \"./bridge.ts\";\nimport type { BridgeDetection } from \"./bridge.ts\";\nimport { applyDeploymentEnv } from \"./deployment-env.ts\";\nimport { BlumeError, diagnosticsFromZod } from \"./diagnostics.ts\";\nimport { createModuleLoader } from \"./load-module.ts\";\nimport { findConfigFile } from \"./project.ts\";\nimport { blumeConfigSchema } from \"./schema.ts\";\nimport type { BlumeConfig, ResolvedConfig } from \"./schema.ts\";\nimport type { Diagnostic } from \"./types.ts\";\n\n/**\n * Identity helper for authoring `blume.config.ts`. Exists for type inference\n * and a stable future home for plugin hooks; it does not transform input.\n */\nexport const defineConfig = (config: BlumeConfig): BlumeConfig => config;\n\n/** Bridge mode info: a foreign docs tool Blume is serving without migrating. */\nexport interface ConfigBridge {\n tool: \"mintlify\";\n /** Absolute path of the foreign config file (`docs.json`/`mint.json`). */\n configFile: string;\n}\n\n/** Result of loading + validating a project config. */\nexport interface ConfigLoadResult {\n config: ResolvedConfig;\n /** Absolute path of the config file used, or null when defaults were used. */\n configFile: string | null;\n /** Set when a foreign docs config (e.g. Mintlify) is being bridged. */\n bridge: ConfigBridge | null;\n diagnostics: Diagnostic[];\n}\n\nconst importConfigModule = createModuleLoader();\n\n/**\n * Load and validate the project config. When no config file exists, schema\n * defaults produce a fully resolved config so the zero-boilerplate path works.\n */\nexport const loadConfig = async (\n root: string,\n /**\n * Supplied only by `blume dev`: the local dev server URL, used as the\n * `deployment.site` fallback when none is configured or detected. Builds\n * never pass it, so production output can't end up pointing at localhost.\n */\n options: { devServerUrl?: string } = {}\n): Promise<ConfigLoadResult> => {\n const configFile = findConfigFile(root);\n\n // With no Blume config, a Mintlify `docs.json` activates bridge mode: serve\n // the unconverted project by synthesizing config + a `mintlify` content source.\n let bridge: BridgeDetection | null = null;\n let raw: unknown = {};\n if (configFile) {\n try {\n raw = await importConfigModule(configFile);\n } catch (error) {\n throw new BlumeError({\n code: \"BLUME_CONFIG_LOAD_FAILED\",\n file: configFile,\n message: `Failed to load config: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n } else {\n bridge = await detectMintlifyBridge(root);\n if (bridge) {\n ({ raw } = bridge);\n }\n }\n\n const sourceFile = bridge?.configFile ?? configFile;\n const parsed = blumeConfigSchema.safeParse(raw ?? {});\n if (!parsed.success) {\n // Read the raw config text (when on disk) so errors carry a line/column.\n const source =\n sourceFile && existsSync(sourceFile)\n ? readFileSync(sourceFile, \"utf-8\")\n : undefined;\n const diagnostics = diagnosticsFromZod(parsed.error, {\n code: \"BLUME_CONFIG_INVALID\",\n file: sourceFile ?? undefined,\n source,\n });\n const [first, ...rest] = diagnostics;\n const primary = first ?? {\n code: \"BLUME_CONFIG_INVALID\",\n file: sourceFile ?? undefined,\n message: \"Invalid Blume config.\",\n severity: \"error\" as const,\n };\n // Surface every issue in one failing run — reporting only the first turns\n // a three-mistake config into three fix-rerun-fail loops.\n throw new BlumeError(\n rest.length > 0\n ? {\n ...primary,\n message: `${primary.message}\\n${rest.length} more config issue(s):\\n${rest.map((d) => ` - ${d.message}`).join(\"\\n\")}`,\n }\n : primary\n );\n }\n\n // Resolve the canonical site URL, then SEO defaults that depend on it.\n // Precedence: explicit config > platform env (Vercel/Netlify/Cloudflare, via\n // applyDeploymentEnv) > the local dev server URL (dev only).\n const config = applyDeploymentEnv(parsed.data);\n const site = config.deployment.site ?? options.devServerUrl;\n\n // OG images need an absolute `og:image`, so they default on once a site URL\n // is known and off otherwise. An explicit `seo.og.enabled` always wins.\n const ogEnabled = config.seo.og.enabled ?? Boolean(site);\n\n return {\n bridge: bridge\n ? { configFile: bridge.configFile, tool: bridge.tool }\n : null,\n config: {\n ...config,\n deployment: { ...config.deployment, site },\n seo: { ...config.seo, og: { ...config.seo.og, enabled: ogEnabled } },\n },\n configFile: sourceFile,\n diagnostics: [],\n };\n};\n",
104
104
  "import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport { assetSegments } from \"../migrate/mintlify/assets.ts\";\nimport { loadMintlifyConfig } from \"../migrate/mintlify/config.ts\";\nimport { mintlifyI18n } from \"../migrate/mintlify/i18n.ts\";\nimport type { BlumeConfig } from \"./schema.ts\";\n\n/** A detected docs-tool config that Blume can serve without a migration. */\nexport interface BridgeDetection {\n /** Which foreign docs tool was detected. */\n tool: \"mintlify\";\n /** Absolute path of the detected config file (`docs.json`/`mint.json`). */\n configFile: string;\n /** A Blume config synthesized from the foreign config, ready to validate. */\n raw: BlumeConfig;\n}\n\nconst MINTLIFY_CONFIG_FILES = [\"docs.json\", \"mint.json\"];\n\n/**\n * Detect a Mintlify project at `root` and synthesize an equivalent Blume config.\n *\n * \"Bridge mode\" lets a team swap `mintlify dev` for `blume dev` with no file\n * changes: `docs.json` is translated to Blume config (`loadMintlifyConfig`) and\n * its content block is rewired to a single `mintlify` content source, which\n * transforms each MDX page to Blume idiom at scan time. The original\n * `content.root`/`exclude` and `variables` move onto the source (Blume has no\n * runtime variable substitution, so globals are inlined into content there).\n *\n * Returns `null` when no Mintlify config is present. Only called when no\n * `blume.config.*` exists, so an explicit Blume config always takes precedence.\n */\nexport const detectMintlifyBridge = async (\n root: string\n): Promise<BridgeDetection | null> => {\n const configFile = MINTLIFY_CONFIG_FILES.map((name) => join(root, name)).find(\n (candidate) => existsSync(candidate)\n );\n if (!configFile) {\n return null;\n }\n\n const config = await loadMintlifyConfig(root, configFile);\n\n // i18n is derived from the raw spec (language dirs), mirroring the migrator.\n const spec = JSON.parse(await readFile(configFile, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const i18n = mintlifyI18n(spec);\n if (i18n) {\n config.i18n = i18n;\n // Language switching is handled by Blume i18n, not a nav selector.\n if (config.navigation?.selectors) {\n config.navigation.selectors = config.navigation.selectors.filter(\n (selector) => selector.kind !== \"language\"\n );\n }\n }\n\n const variables = (config.variables as Record<string, string>) ?? {};\n const root_ = config.content?.root ?? \".\";\n const exclude = config.content?.exclude ?? [];\n\n // Mintlify serves assets from the project root; the bridge never moves files,\n // so referenced root-level asset folders (e.g. `images/`) are served in place\n // via `content.assets` instead. This is the read-only twin of the migrator's\n // relocation — same referenced segments, just no `public/` move.\n const assets = assetSegments(config).filter(\n (segment) => segment !== \"public\" && existsSync(join(root, segment))\n );\n\n return {\n configFile,\n raw: {\n ...config,\n content: {\n assets,\n // Mirror the excludes onto `content.exclude` too: the generated Astro\n // `docs` collection globs `content.root` (here the project root) and\n // must skip node_modules/snippets just like the source does.\n exclude,\n root: root_,\n sources: [\n {\n configFile,\n exclude,\n root: root_,\n type: \"mintlify\",\n variables,\n },\n ],\n },\n // Globals are inlined into content by the source; drop the top-level copy.\n variables: undefined,\n },\n tool: \"mintlify\",\n };\n};\n",
105
105
  "import type { BlumeConfig } from \"../../core/schema.ts\";\n\n/** Asset paths referenced by the resolved config (logo, favicon, backgrounds). */\nconst assetRefs = (config: BlumeConfig): unknown[] => {\n const refs: unknown[] = [\"/images\"];\n const logo = config.logo as\n | string\n | { dark?: string; light?: string }\n | undefined;\n if (typeof logo === \"string\") {\n refs.push(logo);\n } else if (logo) {\n refs.push(logo.light, logo.dark);\n }\n const favicon = config.favicon as\n | string\n | { dark?: string; light?: string }\n | undefined;\n if (typeof favicon === \"string\") {\n refs.push(favicon);\n } else if (favicon) {\n refs.push(favicon.light, favicon.dark);\n }\n refs.push(config.theme?.backgroundImage, config.theme?.backgroundImageDark);\n return refs;\n};\n\n/**\n * Top-level path segments referenced as static assets by a Mintlify config\n * (the conventional `/images`, plus logo/favicon/background paths). These are\n * the root-served folders Mintlify exposes at the site root; Blume serves them\n * via `content.assets` (bridge) or relocates them under `public/` (migrator).\n */\nexport const assetSegments = (config: BlumeConfig): string[] => {\n const segments = new Set<string>();\n for (const ref of assetRefs(config)) {\n if (typeof ref !== \"string\" || !ref.startsWith(\"/\")) {\n continue;\n }\n const [segment] = ref.replace(/^\\/+/u, \"\").split(\"/\");\n if (segment) {\n segments.add(segment);\n }\n }\n return [...segments];\n};\n",
106
- "import { readFile } from \"node:fs/promises\";\n\nimport { dirname, relative, resolve } from \"pathe\";\n\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport type {\n BlumeConfig,\n DirectoryMode,\n ResolvedConfig,\n SidebarItemConfig,\n} from \"../../core/schema.ts\";\nimport { GOOGLE_FONTS } from \"../../theme/fonts.ts\";\n\ntype JsonObject = Record<string, unknown>;\ntype NavigationSelectors = ResolvedConfig[\"navigation\"][\"selectors\"];\ntype NavigationSelectorItem = NavigationSelectors[number][\"items\"][number];\ntype NavigationChromeVariants = NonNullable<\n BlumeConfig[\"navigation\"]\n>[\"chromeVariants\"];\n\nconst MINTLIFY_DEFAULT_IGNORES = [\n \"**/_*\",\n \"**/.*\",\n \".git/**\",\n \".github/**\",\n \".claude/**\",\n \".agents/**\",\n \".mintlify/**\",\n \".idea/**\",\n \".vscode/**\",\n \".blume/**\",\n \"node_modules/**\",\n \"build/**\",\n \"dist/**\",\n \"coverage/**\",\n \".cache/**\",\n \"snippets/**\",\n \"tmp/**\",\n \"temp/**\",\n \"README.md\",\n \"README.mdx\",\n \"skill.md\",\n \"LICENSE.md\",\n \"CHANGELOG.md\",\n \"CONTRIBUTING.md\",\n];\nconst API_ENDPOINT_REF =\n /^(?<method>GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\s+(?<path>\\/.*)$/iu;\nconst VARIABLE_NAME = /^[A-Za-z0-9-]+$/u;\n\nconst asObject = (value: unknown): JsonObject | null =>\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as JsonObject)\n : null;\n\nconst asArray = (value: unknown): unknown[] =>\n Array.isArray(value) ? value : [];\n\nconst asString = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.length > 0 ? value : undefined;\n\nconst asDirectoryMode = (value: unknown): DirectoryMode | undefined =>\n value === \"accordion\" || value === \"card\" || value === \"none\"\n ? value\n : undefined;\n\nconst withoutUndefined = <T extends JsonObject>(value: T): T =>\n Object.fromEntries(\n Object.entries(value).filter(([, item]) => item !== undefined)\n ) as T;\n\nconst hasOwn = (object: JsonObject, key: string): boolean =>\n Object.hasOwn(object, key);\n\nconst isInsideRoot = (root: string, candidate: string): boolean => {\n const rel = relative(root, candidate);\n return rel === \"\" || (!rel.startsWith(\"..\") && !rel.startsWith(\"/\"));\n};\n\nconst readJsonFile = async (file: string): Promise<unknown> => {\n try {\n return JSON.parse(await readFile(file, \"utf-8\"));\n } catch (error) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_CONFIG_INVALID\",\n file,\n message: `Could not parse Mintlify config: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst resolveRefs = async (\n value: unknown,\n options: { file: string; root: string; seen: Set<string> }\n): Promise<unknown> => {\n if (Array.isArray(value)) {\n return Promise.all(\n value.map((item) => resolveRefs(item, options))\n ) as Promise<unknown[]>;\n }\n\n const object = asObject(value);\n if (!object) {\n return value;\n }\n\n const ref = asString(object.$ref);\n if (ref) {\n const refFile = resolve(dirname(options.file), ref);\n if (!isInsideRoot(options.root, refFile)) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_REF_OUTSIDE_ROOT\",\n file: options.file,\n message: `Mintlify $ref points outside the project root: ${ref}`,\n severity: \"error\",\n });\n }\n if (options.seen.has(refFile)) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_REF_CYCLE\",\n file: options.file,\n message: `Mintlify $ref cycle detected at ${ref}`,\n severity: \"error\",\n });\n }\n\n options.seen.add(refFile);\n const resolved = await resolveRefs(await readJsonFile(refFile), {\n file: refFile,\n root: options.root,\n seen: options.seen,\n });\n options.seen.delete(refFile);\n\n const siblings = Object.fromEntries(\n Object.entries(object).filter(([key]) => key !== \"$ref\")\n );\n if (asObject(resolved)) {\n return resolveRefs({ ...(resolved as JsonObject), ...siblings }, options);\n }\n return resolved;\n }\n\n return Object.fromEntries(\n await Promise.all(\n Object.entries(object).map(async ([key, item]) => [\n key,\n await resolveRefs(item, options),\n ])\n )\n );\n};\n\nconst normalizePageRef = (ref: string): string =>\n ref.replace(/\\.(?<ext>mdx?|mdoc)$/u, \"\");\n\nconst labelForNavItem = (item: JsonObject): string | undefined =>\n asString(item.group) ??\n asString(item.label) ??\n asString(item.anchor) ??\n asString(item.tab) ??\n asString(item.dropdown) ??\n asString(item.product) ??\n asString(item.version) ??\n asString(item.language) ??\n asString(item.item) ??\n asString(item.name) ??\n asString(item.title);\n\nconst childNavigationArrays = (item: JsonObject): unknown[][] => [\n asArray(item.pages),\n asArray(item.groups),\n asArray(item.menu),\n asArray(item.tabs),\n asArray(item.anchors),\n asArray(item.dropdowns),\n asArray(item.products),\n asArray(item.versions),\n asArray(item.languages),\n asArray(item.items),\n asArray(item.children),\n];\n\nconst childItemsFor = (item: JsonObject): unknown[] => {\n for (const items of childNavigationArrays(item)) {\n if (items.length > 0) {\n return items;\n }\n }\n return [];\n};\n\nconst mintlifyNavigationItems = (navigation: JsonObject): unknown[] => {\n const pages = asArray(navigation.pages);\n if (pages.length > 0) {\n return pages;\n }\n const groups = asArray(navigation.groups);\n if (groups.length > 0) {\n return groups;\n }\n return [\n ...asArray(navigation.tabs),\n ...asArray(navigation.anchors),\n ...asArray(navigation.dropdowns),\n ...asArray(navigation.products),\n ...asArray(navigation.versions),\n ...asArray(navigation.languages),\n ];\n};\n\nconst normalizeDirectory = (value: string): string =>\n normalizePageRef(value).replaceAll(/^\\/+|\\/+$/gu, \"\");\n\nconst tabPathFromRef = (ref: string): string => {\n const normalized = normalizeDirectory(ref).replaceAll(/\\/index$/gu, \"\");\n return normalized.length === 0 || normalized === \"index\"\n ? \"/\"\n : `/${normalized}`;\n};\n\nconst navItemPath = (item: unknown): string | undefined => {\n if (typeof item === \"string\") {\n return API_ENDPOINT_REF.test(item) ? undefined : tabPathFromRef(item);\n }\n\n const object = asObject(item);\n if (!object) {\n return undefined;\n }\n\n const href = asString(object.href);\n if (href) {\n return href;\n }\n\n const root = asString(object.root);\n if (root) {\n return tabPathFromRef(root);\n }\n\n for (const child of childItemsFor(object)) {\n const path = navItemPath(child);\n if (path) {\n return path;\n }\n }\n return undefined;\n};\n\nconst optionalBoolean = (value: unknown): boolean | undefined => {\n if (value === true) {\n return true;\n }\n if (value === false) {\n return false;\n }\n return undefined;\n};\n\nconst mintlifyBackgroundColor = (\n value: unknown\n): { dark?: string; light?: string } => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n const color = asObject(object.color);\n return {\n dark: asString(color?.dark),\n light: asString(color?.light),\n };\n};\n\nconst mintlifyBackgroundImage = (\n value: unknown\n): { dark?: string; light?: string } => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n if (typeof object.image === \"string\") {\n return { light: object.image };\n }\n const image = asObject(object.image);\n return {\n dark: asString(image?.dark),\n light: asString(image?.light),\n };\n};\n\nconst mintlifyBackgroundDecoration = (\n value: unknown\n): \"gradient\" | \"grid\" | \"windows\" | undefined => {\n const object = asObject(value);\n const decoration = asString(object?.decoration);\n if (\n decoration === \"gradient\" ||\n decoration === \"grid\" ||\n decoration === \"windows\"\n ) {\n return decoration;\n }\n return undefined;\n};\n\nconst collapsedFromExpanded = (value: unknown): boolean | undefined => {\n if (value === false) {\n return true;\n }\n if (value === true) {\n return false;\n }\n return undefined;\n};\n\ninterface SidebarOptions {\n directory?: DirectoryMode;\n}\n\ntype SidebarItemConverter = (\n items: unknown[],\n options: SidebarOptions\n) => Promise<SidebarItemConfig[]>;\n\nconst toSidebarObjectItems = async (\n object: JsonObject,\n options: SidebarOptions,\n convertItems: SidebarItemConverter\n): Promise<SidebarItemConfig[]> => {\n const label = labelForNavItem(object);\n const href = asString(object.href);\n const icon = asString(object.icon);\n const groupLabel = asString(object.group);\n const tag = groupLabel ? asString(object.tag) : undefined;\n const root = asString(object.root);\n const rootRef = root && groupLabel ? normalizePageRef(root) : undefined;\n const directory = asDirectoryMode(object.directory) ?? options.directory;\n const rootDirectory = rootRef && directory !== \"none\" ? directory : undefined;\n const children = childItemsFor(object);\n const nested = await convertItems(children, { ...options, directory });\n\n if (nested.length > 0) {\n return label\n ? [\n withoutUndefined({\n badge: tag,\n collapsed: collapsedFromExpanded(object.expanded),\n directory: rootDirectory,\n icon,\n items: nested,\n label,\n root: rootRef,\n }),\n ]\n : nested;\n }\n\n if (label && rootRef) {\n return [\n withoutUndefined({\n badge: tag,\n directory: rootDirectory,\n icon,\n label,\n root: rootRef,\n }),\n ];\n }\n\n if (label && href) {\n return [withoutUndefined({ badge: tag, href, icon, label })];\n }\n\n return [];\n};\n\nconst toSidebarItems = async (\n items: unknown[],\n options: SidebarOptions\n): Promise<SidebarItemConfig[]> => {\n const itemLists = await Promise.all(\n items.map((item): SidebarItemConfig[] | Promise<SidebarItemConfig[]> => {\n if (typeof item === \"string\") {\n return [normalizePageRef(item)];\n }\n\n const object = asObject(item);\n if (!object) {\n return [];\n }\n\n return toSidebarObjectItems(object, options, toSidebarItems);\n })\n );\n return itemLists.flat();\n};\n\nconst selectorItemsFor = (items: unknown[]): NavigationSelectorItem[] =>\n items.flatMap((item) => {\n const object = asObject(item);\n if (!object) {\n return [];\n }\n const label = labelForNavItem(object);\n const path = navItemPath(object);\n if (!label || !path) {\n return [];\n }\n return [\n withoutUndefined({\n description: asString(object.description),\n icon: asString(object.icon),\n label,\n path,\n tag: asString(object.tag),\n }),\n ];\n });\n\nconst isExternalRoute = (path: string): boolean =>\n path.startsWith(\"http://\") ||\n path.startsWith(\"https://\") ||\n path.startsWith(\"mailto:\") ||\n path.startsWith(\"tel:\");\n\nconst mintlifyTabs = (\n spec: JsonObject\n): NonNullable<BlumeConfig[\"navigation\"]>[\"tabs\"] => {\n const navigation = asObject(spec.navigation) ?? {};\n const global = asObject(navigation.global) ?? {};\n\n const items = [\n ...asArray(navigation.tabs),\n ...asArray(global.anchors),\n ].filter(Boolean);\n const seen = new Set<string>();\n\n return items.flatMap((item) => {\n const object = asObject(item);\n if (!object) {\n return [];\n }\n const label = labelForNavItem(object);\n const path = navItemPath(object);\n if (!label || !path) {\n return [];\n }\n const key = `${label}\\u0000${path}`;\n if (seen.has(key)) {\n return [];\n }\n seen.add(key);\n const menu = asArray(object.menu);\n const menuItems = selectorItemsFor(\n menu.length > 0 ? menu : childItemsFor(object)\n );\n return [\n withoutUndefined({\n icon: asString(object.icon),\n items: menuItems.length > 0 ? menuItems : undefined,\n label,\n path,\n }),\n ];\n });\n};\n\nconst mintlifySelectors = (spec: JsonObject): NavigationSelectors => {\n const navigation = asObject(spec.navigation) ?? {};\n return [\n {\n items: selectorItemsFor(asArray(navigation.dropdowns)),\n kind: \"dropdown\" as const,\n label: \"Dropdowns\",\n },\n {\n items: selectorItemsFor(asArray(navigation.products)),\n kind: \"product\" as const,\n label: \"Products\",\n },\n {\n items: selectorItemsFor(asArray(navigation.versions)),\n kind: \"version\" as const,\n label: \"Versions\",\n },\n {\n items: selectorItemsFor(asArray(navigation.languages)),\n kind: \"language\" as const,\n label: \"Languages\",\n },\n ].filter((selector) => selector.items.length > 0);\n};\n\nconst mintignorePatterns = async (root: string): Promise<string[]> => {\n try {\n const raw = await readFile(resolve(root, \".mintignore\"), \"utf-8\");\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith(\"#\"))\n .filter((line) => !line.startsWith(\"!\"))\n .map((line) => (line.endsWith(\"/\") ? `${line}**` : line));\n } catch {\n return [];\n }\n};\n\n// path-to-regexp param (:slug, :slug*, :id?) → Astro dynamic segment.\n// *,+ (repeatable) → spread [...name]; bare/? → single [name]. Name must start\n// with a letter/underscore so URL ports (:8080) and protocols (https:) are left alone.\nconst REDIRECT_PARAM = /:(?<name>[A-Za-z_]\\w*)(?<modifier>[*+?])?/gu;\n\nconst toAstroRedirectPath = (path: string): string =>\n path.replaceAll(REDIRECT_PARAM, (_match, name: string, modifier?: string) =>\n modifier === \"*\" || modifier === \"+\" ? `[...${name}]` : `[${name}]`\n );\n\n// A converted path is dynamic once it holds an Astro segment (`[id]`/`[...slug]`\n// from a `:param`). Blume redirects are static path-to-path: a dynamic segment\n// has no matching route, so Astro aborts the build (\"destination does not match\n// any existing route\"), and the platform redirect files emit the segment\n// verbatim, which no host understands. Such redirects are dropped, not emitted.\nconst isDynamicRedirectPath = (path: string): boolean => path.includes(\"[\");\n\nexport interface MintlifyRedirectPartition {\n /** Static redirects Blume can honor, translated to Blume's `from`/`to` shape. */\n kept: NonNullable<BlumeConfig[\"redirects\"]>;\n /** Source paths of dynamic redirects dropped because Blume can't model them. */\n dropped: string[];\n}\n\n/**\n * Split a spec's redirects into the static ones Blume emits and the dynamic\n * (wildcard/param) ones it drops. Keeping a dynamic redirect crashes the Astro\n * build, so the migrator surfaces the dropped sources as a warning instead.\n */\nexport const partitionMintlifyRedirects = (\n spec: JsonObject\n): MintlifyRedirectPartition => {\n const kept: NonNullable<BlumeConfig[\"redirects\"]> = [];\n const dropped: string[] = [];\n for (const redirect of asArray(spec.redirects)) {\n const object = asObject(redirect);\n if (!object) {\n continue;\n }\n const source = asString(object.source) ?? asString(object.from);\n const destination =\n asString(object.destination) ??\n asString(object.to) ??\n asString(object.redirect);\n if (!source || !destination) {\n continue;\n }\n const from = toAstroRedirectPath(source);\n const to = toAstroRedirectPath(destination);\n if (isDynamicRedirectPath(from) || isDynamicRedirectPath(to)) {\n dropped.push(source);\n } else {\n kept.push({ from, to });\n }\n }\n return { dropped, kept };\n};\n\ninterface OpenApiSourceDraft {\n label?: string;\n route?: string;\n spec: string;\n}\n\n// A Mintlify `{ source, directory }` object's `directory` is the URL path its\n// generated pages mount under; map it to a Blume per-source `route`.\nconst openapiRouteFromDirectory = (value: unknown): string | undefined => {\n const directory = normalizeDirectory(asString(value) ?? \"\");\n return directory.length > 0 ? `/${directory}` : undefined;\n};\n\n// Resolve a Mintlify `openapi` value (a spec string, an array, or a\n// `{ source, directory }` object) into spec sources. Endpoint refs (`GET /path`)\n// are skipped — Blume's native renderer generates those pages from the spec.\nconst openapiSourcesFromValue = (\n value: unknown,\n context: { label?: string; route?: string }\n): OpenApiSourceDraft[] => {\n if (typeof value === \"string\") {\n if (value.length === 0 || API_ENDPOINT_REF.test(value)) {\n return [];\n }\n return [\n withoutUndefined({\n label: context.label,\n route: context.route,\n spec: value,\n }),\n ];\n }\n if (Array.isArray(value)) {\n return value.flatMap((item) => openapiSourcesFromValue(item, context));\n }\n const object = asObject(value);\n if (!object) {\n return [];\n }\n return openapiSourcesFromValue(object.source ?? object.openapi, {\n label: context.label,\n route: openapiRouteFromDirectory(object.directory) ?? context.route,\n });\n};\n\n// Walk the navigation tree collecting every `openapi` source — a group or tab\n// can declare one alongside its pages — then fold in the top-level specs\n// (legacy `mint.json` `openapi`, newer `api.openapi`) and dedupe by spec so a\n// Mintlify API reference maps to Blume's native renderer instead of dropping.\nconst mintlifyOpenapi = (spec: JsonObject): BlumeConfig[\"openapi\"] => {\n const drafts: OpenApiSourceDraft[] = [];\n\n const visit = (node: unknown): void => {\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item);\n }\n return;\n }\n const object = asObject(node);\n if (!object) {\n return;\n }\n if (hasOwn(object, \"openapi\")) {\n drafts.push(\n ...openapiSourcesFromValue(object.openapi, {\n label: labelForNavItem(object),\n })\n );\n }\n for (const children of childNavigationArrays(object)) {\n visit(children);\n }\n };\n\n visit(spec.navigation);\n drafts.push(...openapiSourcesFromValue(spec.openapi, {}));\n drafts.push(...openapiSourcesFromValue(asObject(spec.api)?.openapi, {}));\n\n const seen = new Set<string>();\n const sources = drafts.flatMap((draft) => {\n if (seen.has(draft.spec)) {\n return [];\n }\n seen.add(draft.spec);\n return [draft];\n });\n\n return sources.length > 0 ? { enabled: true, sources } : undefined;\n};\n\nconst mintlifyLogo = (value: unknown): BlumeConfig[\"logo\"] => {\n if (typeof value === \"string\") {\n return value;\n }\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const dark = asString(object.dark);\n const light = asString(object.light);\n const href = asString(object.href);\n if (!dark && !light && !href) {\n return undefined;\n }\n return withoutUndefined({ dark, href, light });\n};\n\nconst mintlifyFavicon = (value: unknown): BlumeConfig[\"favicon\"] => {\n if (typeof value === \"string\") {\n return value;\n }\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const dark = asString(object.dark);\n const light = asString(object.light);\n if (!dark && !light) {\n return undefined;\n }\n return withoutUndefined({ dark, light });\n};\n\n// Mintlify defaults to Font Awesome, so a migrated site's bare `icon` names are\n// FA names unless it opted into Lucide/Tabler. Set the default library to match.\nconst mintlifyIcons = (value: unknown): BlumeConfig[\"icons\"] => {\n const library = asString(asObject(value)?.library);\n return {\n library:\n library === \"lucide\" || library === \"tabler\" ? library : \"fontawesome\",\n };\n};\n\nconst mintlifyBanner = (value: unknown): BlumeConfig[\"banner\"] => {\n const object = asObject(value);\n const content = object ? asString(object.content) : undefined;\n if (!object || !content) {\n return undefined;\n }\n\n const color = asObject(object.color);\n const dark = color ? asString(color.dark) : undefined;\n const light = color ? asString(color.light) : undefined;\n const rawType = asString(object.type);\n let type: \"info\" | \"warning\" | \"critical\" | undefined;\n if (rawType === \"warning\" || rawType === \"critical\" || rawType === \"info\") {\n type = rawType;\n }\n\n return withoutUndefined({\n color:\n dark || light\n ? withoutUndefined({\n dark,\n light,\n })\n : undefined,\n content,\n dismissible: object.dismissible === true ? true : undefined,\n type,\n });\n};\n\nconst mintlifyChromeVariants = (spec: JsonObject): NavigationChromeVariants => {\n const navigation = asObject(spec.navigation) ?? {};\n\n return asArray(navigation.languages).flatMap((item) => {\n const object = asObject(item);\n const path = navItemPath(item);\n if (!object || !path || isExternalRoute(path)) {\n return [];\n }\n\n const banner = hasOwn(object, \"banner\")\n ? mintlifyBanner(object.banner)\n : undefined;\n if (!banner) {\n return [];\n }\n\n return [\n withoutUndefined({\n banner,\n path,\n }),\n ];\n });\n};\n\nconst mintlifyVariables = (\n value: unknown\n): NonNullable<BlumeConfig[\"variables\"]> => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(object).flatMap(([key, item]) =>\n VARIABLE_NAME.test(key) && typeof item === \"string\" ? [[key, item]] : []\n )\n );\n};\n\nconst mintlifyCodeTheme = (\n value: unknown\n):\n | NonNullable<NonNullable<BlumeConfig[\"markdown\"]>[\"codeBlocks\"]>[\"theme\"]\n | undefined => {\n if (value === \"system\" || value === undefined) {\n return undefined;\n }\n if (value === \"dark\") {\n return { dark: \"github-dark\", light: \"github-dark\" };\n }\n const theme = asString(value);\n if (theme) {\n return { dark: theme, light: theme };\n }\n\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const light = asString(object.light);\n const dark = asString(object.dark);\n if (!light && !dark) {\n return undefined;\n }\n return {\n dark: dark ?? light ?? \"github-dark\",\n light: light ?? dark ?? \"github-light\",\n };\n};\n\nconst mintlifyCodeBlocks = (\n value: unknown\n): NonNullable<BlumeConfig[\"markdown\"]>[\"codeBlocks\"] | undefined => {\n const object = asObject(value);\n const theme = mintlifyCodeTheme(object ? object.theme : value);\n return theme ? { theme } : undefined;\n};\n\nconst mintlifyMarkdown = (\n value: unknown,\n styling: unknown\n): NonNullable<BlumeConfig[\"markdown\"]> => {\n const object = asObject(value);\n const stylingObject = asObject(styling);\n return withoutUndefined({\n codeBlocks: mintlifyCodeBlocks(stylingObject?.codeblocks),\n math: optionalBoolean(stylingObject?.latex),\n schema: object?.schema === false ? false : undefined,\n });\n};\n\ntype ThemeFonts = NonNullable<NonNullable<BlumeConfig[\"theme\"]>[\"fonts\"]>;\n\n// Blume's curated Google-font family names, indexed by lowercased family so a\n// Mintlify `fonts.family: \"Space Grotesk\"` resolves to the `space-grotesk` slug.\nconst FAMILY_TO_SLUG: Record<string, string> = Object.fromEntries(\n Object.entries(GOOGLE_FONTS).map(([slug, def]) => [\n def.family.toLowerCase(),\n slug,\n ])\n);\n\nconst fontSlugForFamily = (value: unknown): string | undefined => {\n const family = asString(value);\n return family ? FAMILY_TO_SLUG[family.toLowerCase()] : undefined;\n};\n\n/**\n * Map Mintlify `fonts` onto Blume `theme.fonts`. Mintlify sets one family for\n * everything (`fonts.family`) or splits heading/body (`fonts.heading.family`,\n * `fonts.body.family`); each maps to a curated Blume slug when one matches.\n * Families outside Blume's set are left unset (defaults) and warned about.\n */\nconst mintlifyFonts = (value: unknown): ThemeFonts | undefined => {\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const heading = asObject(object.heading);\n const body = asObject(object.body);\n const fonts = withoutUndefined({\n body: fontSlugForFamily(body?.family) ?? fontSlugForFamily(object.family),\n display:\n fontSlugForFamily(heading?.family) ?? fontSlugForFamily(object.family),\n });\n return Object.keys(fonts).length > 0 ? (fonts as ThemeFonts) : undefined;\n};\n\nconst mintlifySeo = (value: unknown): NonNullable<BlumeConfig[\"seo\"]> => {\n const object = asObject(value);\n const metatags = asObject(object?.metatags);\n return {\n metatags: metatags\n ? Object.fromEntries(\n Object.entries(metatags).flatMap(([key, item]) => {\n const content = asString(item);\n return content ? [[key, content]] : [];\n })\n )\n : {},\n };\n};\n\nexport const loadMintlifyConfig = async (\n root: string,\n file: string\n): Promise<BlumeConfig> => {\n const projectRoot = resolve(root);\n const configFile = resolve(file);\n const spec = asObject(\n await resolveRefs(await readJsonFile(configFile), {\n file: configFile,\n root: projectRoot,\n seen: new Set([configFile]),\n })\n );\n if (!spec) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_CONFIG_INVALID\",\n file: configFile,\n message: \"Mintlify config must be a JSON object.\",\n severity: \"error\",\n });\n }\n\n const navigation = asObject(spec.navigation) ?? {};\n const colors = asObject(spec.colors) ?? {};\n const appearance = asObject(spec.appearance) ?? {};\n const backgroundColor = mintlifyBackgroundColor(spec.background);\n const backgroundImage = mintlifyBackgroundImage(spec.background);\n const seo = asObject(spec.seo) ?? {};\n const search = asObject(spec.search) ?? {};\n const styling = asObject(spec.styling) ?? {};\n\n return {\n banner: mintlifyBanner(spec.banner),\n content: {\n exclude: [\n ...MINTLIFY_DEFAULT_IGNORES,\n ...(await mintignorePatterns(projectRoot)),\n ],\n root: \".\",\n },\n description: asString(spec.description),\n favicon: mintlifyFavicon(spec.favicon),\n icons: mintlifyIcons(spec.icons),\n logo: mintlifyLogo(spec.logo),\n markdown: mintlifyMarkdown(spec.markdown, styling),\n navigation: {\n chromeVariants: mintlifyChromeVariants(spec),\n selectors: mintlifySelectors(spec),\n sidebar: await toSidebarItems(mintlifyNavigationItems(navigation), {}),\n tabs: mintlifyTabs(spec),\n },\n openapi: mintlifyOpenapi(spec),\n redirects: partitionMintlifyRedirects(spec).kept,\n search: {\n indexing: {\n includeHiddenPages: seo.indexing === \"all\",\n },\n prompt: asString(search.prompt),\n },\n seo: mintlifySeo(seo),\n theme: {\n accent: asString(colors.primary) ?? \"blue\",\n accentDark: asString(colors.light),\n action: asString(colors.dark),\n background: backgroundColor.light,\n backgroundDark: backgroundColor.dark,\n backgroundDecoration: mintlifyBackgroundDecoration(spec.background),\n backgroundImage: backgroundImage.light,\n backgroundImageDark: backgroundImage.dark,\n fonts: mintlifyFonts(spec.fonts ?? spec.font),\n mode:\n appearance.default === \"light\" ||\n appearance.default === \"dark\" ||\n appearance.default === \"system\"\n ? appearance.default\n : \"system\",\n strict: appearance.strict === true,\n },\n title: asString(spec.name) ?? asString(spec.title) ?? \"Documentation\",\n variables: mintlifyVariables(spec.variables),\n };\n};\n",
106
+ "import { readFile } from \"node:fs/promises\";\n\nimport { dirname, resolve } from \"pathe\";\n\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport type {\n BlumeConfig,\n DirectoryMode,\n ResolvedConfig,\n SidebarItemConfig,\n} from \"../../core/schema.ts\";\nimport { GOOGLE_FONTS } from \"../../theme/fonts.ts\";\nimport { isInsideRoot } from \"../shared.ts\";\n\ntype JsonObject = Record<string, unknown>;\ntype NavigationSelectors = ResolvedConfig[\"navigation\"][\"selectors\"];\ntype NavigationSelectorItem = NavigationSelectors[number][\"items\"][number];\ntype NavigationChromeVariants = NonNullable<\n BlumeConfig[\"navigation\"]\n>[\"chromeVariants\"];\n\nconst MINTLIFY_DEFAULT_IGNORES = [\n \"**/_*\",\n \"**/.*\",\n \".git/**\",\n \".github/**\",\n \".claude/**\",\n \".agents/**\",\n \".mintlify/**\",\n \".idea/**\",\n \".vscode/**\",\n \".blume/**\",\n \"node_modules/**\",\n \"build/**\",\n \"dist/**\",\n \"coverage/**\",\n \".cache/**\",\n \"snippets/**\",\n \"tmp/**\",\n \"temp/**\",\n \"README.md\",\n \"README.mdx\",\n \"skill.md\",\n \"LICENSE.md\",\n \"CHANGELOG.md\",\n \"CONTRIBUTING.md\",\n];\nconst API_ENDPOINT_REF =\n /^(?<method>GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\s+(?<path>\\/.*)$/iu;\nconst VARIABLE_NAME = /^[A-Za-z0-9-]+$/u;\n\nconst asObject = (value: unknown): JsonObject | null =>\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as JsonObject)\n : null;\n\nconst asArray = (value: unknown): unknown[] =>\n Array.isArray(value) ? value : [];\n\nconst asString = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.length > 0 ? value : undefined;\n\nconst asDirectoryMode = (value: unknown): DirectoryMode | undefined =>\n value === \"accordion\" || value === \"card\" || value === \"none\"\n ? value\n : undefined;\n\nconst withoutUndefined = <T extends JsonObject>(value: T): T =>\n Object.fromEntries(\n Object.entries(value).filter(([, item]) => item !== undefined)\n ) as T;\n\nconst hasOwn = (object: JsonObject, key: string): boolean =>\n Object.hasOwn(object, key);\n\nconst readJsonFile = async (file: string): Promise<unknown> => {\n try {\n return JSON.parse(await readFile(file, \"utf-8\"));\n } catch (error) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_CONFIG_INVALID\",\n file,\n message: `Could not parse Mintlify config: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst resolveRefs = async (\n value: unknown,\n options: { file: string; root: string; seen: Set<string> }\n): Promise<unknown> => {\n if (Array.isArray(value)) {\n return Promise.all(\n value.map((item) => resolveRefs(item, options))\n ) as Promise<unknown[]>;\n }\n\n const object = asObject(value);\n if (!object) {\n return value;\n }\n\n const ref = asString(object.$ref);\n if (ref) {\n const refFile = resolve(dirname(options.file), ref);\n if (!isInsideRoot(options.root, refFile)) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_REF_OUTSIDE_ROOT\",\n file: options.file,\n message: `Mintlify $ref points outside the project root: ${ref}`,\n severity: \"error\",\n });\n }\n if (options.seen.has(refFile)) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_REF_CYCLE\",\n file: options.file,\n message: `Mintlify $ref cycle detected at ${ref}`,\n severity: \"error\",\n });\n }\n\n options.seen.add(refFile);\n const resolved = await resolveRefs(await readJsonFile(refFile), {\n file: refFile,\n root: options.root,\n seen: options.seen,\n });\n options.seen.delete(refFile);\n\n const siblings = Object.fromEntries(\n Object.entries(object).filter(([key]) => key !== \"$ref\")\n );\n if (asObject(resolved)) {\n return resolveRefs({ ...(resolved as JsonObject), ...siblings }, options);\n }\n return resolved;\n }\n\n return Object.fromEntries(\n await Promise.all(\n Object.entries(object).map(async ([key, item]) => [\n key,\n await resolveRefs(item, options),\n ])\n )\n );\n};\n\nconst normalizePageRef = (ref: string): string =>\n ref.replace(/\\.(?<ext>mdx?|mdoc)$/u, \"\");\n\nconst labelForNavItem = (item: JsonObject): string | undefined =>\n asString(item.group) ??\n asString(item.label) ??\n asString(item.anchor) ??\n asString(item.tab) ??\n asString(item.dropdown) ??\n asString(item.product) ??\n asString(item.version) ??\n asString(item.language) ??\n asString(item.item) ??\n asString(item.name) ??\n asString(item.title);\n\nconst childNavigationArrays = (item: JsonObject): unknown[][] => [\n asArray(item.pages),\n asArray(item.groups),\n asArray(item.menu),\n asArray(item.tabs),\n asArray(item.anchors),\n asArray(item.dropdowns),\n asArray(item.products),\n asArray(item.versions),\n asArray(item.languages),\n asArray(item.items),\n asArray(item.children),\n];\n\nconst childItemsFor = (item: JsonObject): unknown[] => {\n for (const items of childNavigationArrays(item)) {\n if (items.length > 0) {\n return items;\n }\n }\n return [];\n};\n\nconst mintlifyNavigationItems = (navigation: JsonObject): unknown[] => {\n const pages = asArray(navigation.pages);\n if (pages.length > 0) {\n return pages;\n }\n const groups = asArray(navigation.groups);\n if (groups.length > 0) {\n return groups;\n }\n return [\n ...asArray(navigation.tabs),\n ...asArray(navigation.anchors),\n ...asArray(navigation.dropdowns),\n ...asArray(navigation.products),\n ...asArray(navigation.versions),\n ...asArray(navigation.languages),\n ];\n};\n\nconst normalizeDirectory = (value: string): string =>\n normalizePageRef(value).replaceAll(/^\\/+|\\/+$/gu, \"\");\n\nconst tabPathFromRef = (ref: string): string => {\n const normalized = normalizeDirectory(ref).replaceAll(/\\/index$/gu, \"\");\n return normalized.length === 0 || normalized === \"index\"\n ? \"/\"\n : `/${normalized}`;\n};\n\nconst navItemPath = (item: unknown): string | undefined => {\n if (typeof item === \"string\") {\n return API_ENDPOINT_REF.test(item) ? undefined : tabPathFromRef(item);\n }\n\n const object = asObject(item);\n if (!object) {\n return undefined;\n }\n\n const href = asString(object.href);\n if (href) {\n return href;\n }\n\n const root = asString(object.root);\n if (root) {\n return tabPathFromRef(root);\n }\n\n for (const child of childItemsFor(object)) {\n const path = navItemPath(child);\n if (path) {\n return path;\n }\n }\n return undefined;\n};\n\nconst optionalBoolean = (value: unknown): boolean | undefined => {\n if (value === true) {\n return true;\n }\n if (value === false) {\n return false;\n }\n return undefined;\n};\n\nconst mintlifyBackgroundColor = (\n value: unknown\n): { dark?: string; light?: string } => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n const color = asObject(object.color);\n return {\n dark: asString(color?.dark),\n light: asString(color?.light),\n };\n};\n\nconst mintlifyBackgroundImage = (\n value: unknown\n): { dark?: string; light?: string } => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n if (typeof object.image === \"string\") {\n return { light: object.image };\n }\n const image = asObject(object.image);\n return {\n dark: asString(image?.dark),\n light: asString(image?.light),\n };\n};\n\nconst mintlifyBackgroundDecoration = (\n value: unknown\n): \"gradient\" | \"grid\" | \"windows\" | undefined => {\n const object = asObject(value);\n const decoration = asString(object?.decoration);\n if (\n decoration === \"gradient\" ||\n decoration === \"grid\" ||\n decoration === \"windows\"\n ) {\n return decoration;\n }\n return undefined;\n};\n\nconst collapsedFromExpanded = (value: unknown): boolean | undefined => {\n if (value === false) {\n return true;\n }\n if (value === true) {\n return false;\n }\n return undefined;\n};\n\ninterface SidebarOptions {\n directory?: DirectoryMode;\n}\n\ntype SidebarItemConverter = (\n items: unknown[],\n options: SidebarOptions\n) => Promise<SidebarItemConfig[]>;\n\nconst toSidebarObjectItems = async (\n object: JsonObject,\n options: SidebarOptions,\n convertItems: SidebarItemConverter\n): Promise<SidebarItemConfig[]> => {\n const label = labelForNavItem(object);\n const href = asString(object.href);\n const icon = asString(object.icon);\n const groupLabel = asString(object.group);\n const tag = groupLabel ? asString(object.tag) : undefined;\n const root = asString(object.root);\n const rootRef = root && groupLabel ? normalizePageRef(root) : undefined;\n const directory = asDirectoryMode(object.directory) ?? options.directory;\n const rootDirectory = rootRef && directory !== \"none\" ? directory : undefined;\n const children = childItemsFor(object);\n const nested = await convertItems(children, { ...options, directory });\n\n if (nested.length > 0) {\n return label\n ? [\n withoutUndefined({\n badge: tag,\n collapsed: collapsedFromExpanded(object.expanded),\n directory: rootDirectory,\n icon,\n items: nested,\n label,\n root: rootRef,\n }),\n ]\n : nested;\n }\n\n if (label && rootRef) {\n return [\n withoutUndefined({\n badge: tag,\n directory: rootDirectory,\n icon,\n label,\n root: rootRef,\n }),\n ];\n }\n\n if (label && href) {\n return [withoutUndefined({ badge: tag, href, icon, label })];\n }\n\n return [];\n};\n\nconst toSidebarItems = async (\n items: unknown[],\n options: SidebarOptions\n): Promise<SidebarItemConfig[]> => {\n const itemLists = await Promise.all(\n items.map((item): SidebarItemConfig[] | Promise<SidebarItemConfig[]> => {\n if (typeof item === \"string\") {\n return [normalizePageRef(item)];\n }\n\n const object = asObject(item);\n if (!object) {\n return [];\n }\n\n return toSidebarObjectItems(object, options, toSidebarItems);\n })\n );\n return itemLists.flat();\n};\n\nconst selectorItemsFor = (items: unknown[]): NavigationSelectorItem[] =>\n items.flatMap((item) => {\n const object = asObject(item);\n if (!object) {\n return [];\n }\n const label = labelForNavItem(object);\n const path = navItemPath(object);\n if (!label || !path) {\n return [];\n }\n return [\n withoutUndefined({\n description: asString(object.description),\n icon: asString(object.icon),\n label,\n path,\n tag: asString(object.tag),\n }),\n ];\n });\n\nconst isExternalRoute = (path: string): boolean =>\n path.startsWith(\"http://\") ||\n path.startsWith(\"https://\") ||\n path.startsWith(\"mailto:\") ||\n path.startsWith(\"tel:\");\n\nconst mintlifyTabs = (\n spec: JsonObject\n): NonNullable<BlumeConfig[\"navigation\"]>[\"tabs\"] => {\n const navigation = asObject(spec.navigation) ?? {};\n const global = asObject(navigation.global) ?? {};\n\n const items = [\n ...asArray(navigation.tabs),\n ...asArray(global.anchors),\n ].filter(Boolean);\n const seen = new Set<string>();\n\n return items.flatMap((item) => {\n const object = asObject(item);\n if (!object) {\n return [];\n }\n const label = labelForNavItem(object);\n const path = navItemPath(object);\n if (!label || !path) {\n return [];\n }\n const key = `${label}\\u0000${path}`;\n if (seen.has(key)) {\n return [];\n }\n seen.add(key);\n const menu = asArray(object.menu);\n const menuItems = selectorItemsFor(\n menu.length > 0 ? menu : childItemsFor(object)\n );\n return [\n withoutUndefined({\n icon: asString(object.icon),\n items: menuItems.length > 0 ? menuItems : undefined,\n label,\n path,\n }),\n ];\n });\n};\n\nconst mintlifySelectors = (spec: JsonObject): NavigationSelectors => {\n const navigation = asObject(spec.navigation) ?? {};\n return [\n {\n items: selectorItemsFor(asArray(navigation.dropdowns)),\n kind: \"dropdown\" as const,\n label: \"Dropdowns\",\n },\n {\n items: selectorItemsFor(asArray(navigation.products)),\n kind: \"product\" as const,\n label: \"Products\",\n },\n {\n items: selectorItemsFor(asArray(navigation.versions)),\n kind: \"version\" as const,\n label: \"Versions\",\n },\n {\n items: selectorItemsFor(asArray(navigation.languages)),\n kind: \"language\" as const,\n label: \"Languages\",\n },\n ].filter((selector) => selector.items.length > 0);\n};\n\nconst mintignorePatterns = async (root: string): Promise<string[]> => {\n try {\n const raw = await readFile(resolve(root, \".mintignore\"), \"utf-8\");\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith(\"#\"))\n .filter((line) => !line.startsWith(\"!\"))\n .map((line) => (line.endsWith(\"/\") ? `${line}**` : line));\n } catch {\n return [];\n }\n};\n\n// path-to-regexp param (:slug, :slug*, :id?) → Astro dynamic segment.\n// *,+ (repeatable) → spread [...name]; bare/? → single [name]. Name must start\n// with a letter/underscore so URL ports (:8080) and protocols (https:) are left alone.\nconst REDIRECT_PARAM = /:(?<name>[A-Za-z_]\\w*)(?<modifier>[*+?])?/gu;\n\nconst toAstroRedirectPath = (path: string): string =>\n path.replaceAll(REDIRECT_PARAM, (_match, name: string, modifier?: string) =>\n modifier === \"*\" || modifier === \"+\" ? `[...${name}]` : `[${name}]`\n );\n\n// A converted path is dynamic once it holds an Astro segment (`[id]`/`[...slug]`\n// from a `:param`). Blume redirects are static path-to-path: a dynamic segment\n// has no matching route, so Astro aborts the build (\"destination does not match\n// any existing route\"), and the platform redirect files emit the segment\n// verbatim, which no host understands. Such redirects are dropped, not emitted.\nconst isDynamicRedirectPath = (path: string): boolean => path.includes(\"[\");\n\nexport interface MintlifyRedirectPartition {\n /** Static redirects Blume can honor, translated to Blume's `from`/`to` shape. */\n kept: NonNullable<BlumeConfig[\"redirects\"]>;\n /** Source paths of dynamic redirects dropped because Blume can't model them. */\n dropped: string[];\n}\n\n/**\n * Split a spec's redirects into the static ones Blume emits and the dynamic\n * (wildcard/param) ones it drops. Keeping a dynamic redirect crashes the Astro\n * build, so the migrator surfaces the dropped sources as a warning instead.\n */\nexport const partitionMintlifyRedirects = (\n spec: JsonObject\n): MintlifyRedirectPartition => {\n const kept: NonNullable<BlumeConfig[\"redirects\"]> = [];\n const dropped: string[] = [];\n for (const redirect of asArray(spec.redirects)) {\n const object = asObject(redirect);\n if (!object) {\n continue;\n }\n const source = asString(object.source) ?? asString(object.from);\n const destination =\n asString(object.destination) ??\n asString(object.to) ??\n asString(object.redirect);\n if (!source || !destination) {\n continue;\n }\n const from = toAstroRedirectPath(source);\n const to = toAstroRedirectPath(destination);\n if (isDynamicRedirectPath(from) || isDynamicRedirectPath(to)) {\n dropped.push(source);\n } else {\n kept.push({ from, to });\n }\n }\n return { dropped, kept };\n};\n\ninterface OpenApiSourceDraft {\n label?: string;\n route?: string;\n spec: string;\n}\n\n// A Mintlify `{ source, directory }` object's `directory` is the URL path its\n// generated pages mount under; map it to a Blume per-source `route`.\nconst openapiRouteFromDirectory = (value: unknown): string | undefined => {\n const directory = normalizeDirectory(asString(value) ?? \"\");\n return directory.length > 0 ? `/${directory}` : undefined;\n};\n\n// Resolve a Mintlify `openapi` value (a spec string, an array, or a\n// `{ source, directory }` object) into spec sources. Endpoint refs (`GET /path`)\n// are skipped — Blume's native renderer generates those pages from the spec.\nconst openapiSourcesFromValue = (\n value: unknown,\n context: { label?: string; route?: string }\n): OpenApiSourceDraft[] => {\n if (typeof value === \"string\") {\n if (value.length === 0 || API_ENDPOINT_REF.test(value)) {\n return [];\n }\n return [\n withoutUndefined({\n label: context.label,\n route: context.route,\n spec: value,\n }),\n ];\n }\n if (Array.isArray(value)) {\n return value.flatMap((item) => openapiSourcesFromValue(item, context));\n }\n const object = asObject(value);\n if (!object) {\n return [];\n }\n return openapiSourcesFromValue(object.source ?? object.openapi, {\n label: context.label,\n route: openapiRouteFromDirectory(object.directory) ?? context.route,\n });\n};\n\n// Walk the navigation tree collecting every `openapi` source — a group or tab\n// can declare one alongside its pages — then fold in the top-level specs\n// (legacy `mint.json` `openapi`, newer `api.openapi`) and dedupe by spec so a\n// Mintlify API reference maps to Blume's native renderer instead of dropping.\nconst mintlifyOpenapi = (spec: JsonObject): BlumeConfig[\"openapi\"] => {\n const drafts: OpenApiSourceDraft[] = [];\n\n const visit = (node: unknown): void => {\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item);\n }\n return;\n }\n const object = asObject(node);\n if (!object) {\n return;\n }\n if (hasOwn(object, \"openapi\")) {\n drafts.push(\n ...openapiSourcesFromValue(object.openapi, {\n label: labelForNavItem(object),\n })\n );\n }\n for (const children of childNavigationArrays(object)) {\n visit(children);\n }\n };\n\n visit(spec.navigation);\n drafts.push(...openapiSourcesFromValue(spec.openapi, {}));\n drafts.push(...openapiSourcesFromValue(asObject(spec.api)?.openapi, {}));\n\n const seen = new Set<string>();\n const sources = drafts.flatMap((draft) => {\n if (seen.has(draft.spec)) {\n return [];\n }\n seen.add(draft.spec);\n return [draft];\n });\n\n return sources.length > 0 ? { enabled: true, sources } : undefined;\n};\n\nconst mintlifyLogo = (value: unknown): BlumeConfig[\"logo\"] => {\n if (typeof value === \"string\") {\n return value;\n }\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const dark = asString(object.dark);\n const light = asString(object.light);\n const href = asString(object.href);\n if (!dark && !light && !href) {\n return undefined;\n }\n return withoutUndefined({ dark, href, light });\n};\n\nconst mintlifyFavicon = (value: unknown): BlumeConfig[\"favicon\"] => {\n if (typeof value === \"string\") {\n return value;\n }\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const dark = asString(object.dark);\n const light = asString(object.light);\n if (!dark && !light) {\n return undefined;\n }\n return withoutUndefined({ dark, light });\n};\n\n// Mintlify defaults to Font Awesome, so a migrated site's bare `icon` names are\n// FA names unless it opted into Lucide/Tabler. Set the default library to match.\nconst mintlifyIcons = (value: unknown): BlumeConfig[\"icons\"] => {\n const library = asString(asObject(value)?.library);\n return {\n library:\n library === \"lucide\" || library === \"tabler\" ? library : \"fontawesome\",\n };\n};\n\nconst mintlifyBanner = (value: unknown): BlumeConfig[\"banner\"] => {\n const object = asObject(value);\n const content = object ? asString(object.content) : undefined;\n if (!object || !content) {\n return undefined;\n }\n\n const color = asObject(object.color);\n const dark = color ? asString(color.dark) : undefined;\n const light = color ? asString(color.light) : undefined;\n const rawType = asString(object.type);\n let type: \"info\" | \"warning\" | \"critical\" | undefined;\n if (rawType === \"warning\" || rawType === \"critical\" || rawType === \"info\") {\n type = rawType;\n }\n\n return withoutUndefined({\n color:\n dark || light\n ? withoutUndefined({\n dark,\n light,\n })\n : undefined,\n content,\n dismissible: object.dismissible === true ? true : undefined,\n type,\n });\n};\n\nconst mintlifyChromeVariants = (spec: JsonObject): NavigationChromeVariants => {\n const navigation = asObject(spec.navigation) ?? {};\n\n return asArray(navigation.languages).flatMap((item) => {\n const object = asObject(item);\n const path = navItemPath(item);\n if (!object || !path || isExternalRoute(path)) {\n return [];\n }\n\n const banner = hasOwn(object, \"banner\")\n ? mintlifyBanner(object.banner)\n : undefined;\n if (!banner) {\n return [];\n }\n\n return [\n withoutUndefined({\n banner,\n path,\n }),\n ];\n });\n};\n\nconst mintlifyVariables = (\n value: unknown\n): NonNullable<BlumeConfig[\"variables\"]> => {\n const object = asObject(value);\n if (!object) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(object).flatMap(([key, item]) =>\n VARIABLE_NAME.test(key) && typeof item === \"string\" ? [[key, item]] : []\n )\n );\n};\n\nconst mintlifyCodeTheme = (\n value: unknown\n):\n | NonNullable<NonNullable<BlumeConfig[\"markdown\"]>[\"codeBlocks\"]>[\"theme\"]\n | undefined => {\n if (value === \"system\" || value === undefined) {\n return undefined;\n }\n if (value === \"dark\") {\n return { dark: \"github-dark\", light: \"github-dark\" };\n }\n const theme = asString(value);\n if (theme) {\n return { dark: theme, light: theme };\n }\n\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const light = asString(object.light);\n const dark = asString(object.dark);\n if (!light && !dark) {\n return undefined;\n }\n return {\n dark: dark ?? light ?? \"github-dark\",\n light: light ?? dark ?? \"github-light\",\n };\n};\n\nconst mintlifyCodeBlocks = (\n value: unknown\n): NonNullable<BlumeConfig[\"markdown\"]>[\"codeBlocks\"] | undefined => {\n const object = asObject(value);\n const theme = mintlifyCodeTheme(object ? object.theme : value);\n return theme ? { theme } : undefined;\n};\n\nconst mintlifyMarkdown = (\n value: unknown,\n styling: unknown\n): NonNullable<BlumeConfig[\"markdown\"]> => {\n const object = asObject(value);\n const stylingObject = asObject(styling);\n return withoutUndefined({\n codeBlocks: mintlifyCodeBlocks(stylingObject?.codeblocks),\n math: optionalBoolean(stylingObject?.latex),\n schema: object?.schema === false ? false : undefined,\n });\n};\n\ntype ThemeFonts = NonNullable<NonNullable<BlumeConfig[\"theme\"]>[\"fonts\"]>;\n\n// Blume's curated Google-font family names, indexed by lowercased family so a\n// Mintlify `fonts.family: \"Space Grotesk\"` resolves to the `space-grotesk` slug.\nconst FAMILY_TO_SLUG: Record<string, string> = Object.fromEntries(\n Object.entries(GOOGLE_FONTS).map(([slug, def]) => [\n def.family.toLowerCase(),\n slug,\n ])\n);\n\nconst fontSlugForFamily = (value: unknown): string | undefined => {\n const family = asString(value);\n return family ? FAMILY_TO_SLUG[family.toLowerCase()] : undefined;\n};\n\n/**\n * Map Mintlify `fonts` onto Blume `theme.fonts`. Mintlify sets one family for\n * everything (`fonts.family`) or splits heading/body (`fonts.heading.family`,\n * `fonts.body.family`); each maps to a curated Blume slug when one matches.\n * Families outside Blume's set are left unset (defaults) and warned about.\n */\nconst mintlifyFonts = (value: unknown): ThemeFonts | undefined => {\n const object = asObject(value);\n if (!object) {\n return undefined;\n }\n const heading = asObject(object.heading);\n const body = asObject(object.body);\n const fonts = withoutUndefined({\n body: fontSlugForFamily(body?.family) ?? fontSlugForFamily(object.family),\n display:\n fontSlugForFamily(heading?.family) ?? fontSlugForFamily(object.family),\n });\n return Object.keys(fonts).length > 0 ? (fonts as ThemeFonts) : undefined;\n};\n\nconst mintlifySeo = (value: unknown): NonNullable<BlumeConfig[\"seo\"]> => {\n const object = asObject(value);\n const metatags = asObject(object?.metatags);\n return {\n metatags: metatags\n ? Object.fromEntries(\n Object.entries(metatags).flatMap(([key, item]) => {\n const content = asString(item);\n return content ? [[key, content]] : [];\n })\n )\n : {},\n };\n};\n\nexport const loadMintlifyConfig = async (\n root: string,\n file: string\n): Promise<BlumeConfig> => {\n const projectRoot = resolve(root);\n const configFile = resolve(file);\n const spec = asObject(\n await resolveRefs(await readJsonFile(configFile), {\n file: configFile,\n root: projectRoot,\n seen: new Set([configFile]),\n })\n );\n if (!spec) {\n throw new BlumeError({\n code: \"BLUME_MINTLIFY_CONFIG_INVALID\",\n file: configFile,\n message: \"Mintlify config must be a JSON object.\",\n severity: \"error\",\n });\n }\n\n const navigation = asObject(spec.navigation) ?? {};\n const colors = asObject(spec.colors) ?? {};\n const appearance = asObject(spec.appearance) ?? {};\n const backgroundColor = mintlifyBackgroundColor(spec.background);\n const backgroundImage = mintlifyBackgroundImage(spec.background);\n const seo = asObject(spec.seo) ?? {};\n const search = asObject(spec.search) ?? {};\n const styling = asObject(spec.styling) ?? {};\n\n return {\n banner: mintlifyBanner(spec.banner),\n content: {\n exclude: [\n ...MINTLIFY_DEFAULT_IGNORES,\n ...(await mintignorePatterns(projectRoot)),\n ],\n root: \".\",\n },\n description: asString(spec.description),\n favicon: mintlifyFavicon(spec.favicon),\n icons: mintlifyIcons(spec.icons),\n logo: mintlifyLogo(spec.logo),\n markdown: mintlifyMarkdown(spec.markdown, styling),\n navigation: {\n chromeVariants: mintlifyChromeVariants(spec),\n selectors: mintlifySelectors(spec),\n sidebar: await toSidebarItems(mintlifyNavigationItems(navigation), {}),\n tabs: mintlifyTabs(spec),\n },\n openapi: mintlifyOpenapi(spec),\n redirects: partitionMintlifyRedirects(spec).kept,\n search: {\n indexing: {\n includeHiddenPages: seo.indexing === \"all\",\n },\n prompt: asString(search.prompt),\n },\n seo: mintlifySeo(seo),\n theme: {\n accent: asString(colors.primary) ?? \"blue\",\n accentDark: asString(colors.light),\n action: asString(colors.dark),\n background: backgroundColor.light,\n backgroundDark: backgroundColor.dark,\n backgroundDecoration: mintlifyBackgroundDecoration(spec.background),\n backgroundImage: backgroundImage.light,\n backgroundImageDark: backgroundImage.dark,\n fonts: mintlifyFonts(spec.fonts ?? spec.font),\n mode:\n appearance.default === \"light\" ||\n appearance.default === \"dark\" ||\n appearance.default === \"system\"\n ? appearance.default\n : \"system\",\n strict: appearance.strict === true,\n },\n title: asString(spec.name) ?? asString(spec.title) ?? \"Documentation\",\n variables: mintlifyVariables(spec.variables),\n };\n};\n",
107
+ "import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { basename, isAbsolute, join, relative } from \"pathe\";\n\nimport { blumePackageJson, toPackageName } from \"../core/package-json.ts\";\nimport type { BlumeConfig } from \"../core/schema.ts\";\nimport { pageMetaSchema } from \"../core/schema.ts\";\n\n/**\n * Whether `candidate` resolves to a path inside `root` (or is `root` itself).\n * Guards migrators against `../` traversal in author-controlled source paths\n * (`pages` entries, `<include>` targets) that would otherwise read or move\n * files outside the docs tree.\n */\nexport const isInsideRoot = (root: string, candidate: string): boolean => {\n const rel = relative(root, candidate);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n};\n\n/**\n * Framework-agnostic helpers shared by more than one migrator. Each piece here\n * was generalized from a migrator-specific implementation so Mintlify, Nextra,\n * and future migrators converge on a single copy.\n */\n\n/** Serialize a `BlumeConfig` to a `blume.config.ts` at the project root. */\nexport const writeBlumeConfig = async (\n root: string,\n config: BlumeConfig\n): Promise<void> => {\n const body = `import { defineConfig } from \"blume\";\\n\\nexport default defineConfig(${JSON.stringify(config, null, 2)});\\n`;\n await writeFile(join(root, \"blume.config.ts\"), body, \"utf-8\");\n};\n\n// ---------------------------------------------------------------------------\n// Old-framework teardown\n// ---------------------------------------------------------------------------\n\n/** The Blume command each standard npm script maps to after a migration. */\nconst BLUME_SCRIPTS: Record<string, string> = {\n build: \"blume build\",\n dev: \"blume dev\",\n start: \"blume preview\",\n};\n\n/**\n * Rewrite a migrated project's npm scripts off the old framework's CLI. A\n * `dev`/`build`/`start` script whose command invokes `cli` (e.g. `/\\bnext\\b/`)\n * is repointed at the matching Blume command (`start` -> `blume preview`); a\n * script whose command matches `remove` (e.g. a `fumadocs-mdx` postinstall) is\n * dropped. Scripts that don't match either are left untouched, so custom tasks\n * survive. Returns true when `package.json` changed.\n */\nexport const rewriteFrameworkScripts = async (\n root: string,\n cli: RegExp,\n remove?: RegExp\n): Promise<boolean> => {\n const pkgPath = join(root, \"package.json\");\n if (!existsSync(pkgPath)) {\n return false;\n }\n let pkg: { scripts?: Record<string, unknown> };\n try {\n pkg = JSON.parse(await readFile(pkgPath, \"utf-8\"));\n } catch {\n return false;\n }\n const { scripts } = pkg;\n if (!scripts || typeof scripts !== \"object\") {\n return false;\n }\n\n const next: Record<string, unknown> = {};\n let changed = false;\n for (const [name, command] of Object.entries(scripts)) {\n const blume = BLUME_SCRIPTS[name];\n if (typeof command === \"string\" && remove?.test(command)) {\n changed = true;\n } else if (\n typeof command === \"string\" &&\n blume &&\n cli.test(command) &&\n command !== blume\n ) {\n next[name] = blume;\n changed = true;\n } else {\n next[name] = command;\n }\n }\n\n if (changed) {\n pkg.scripts = next;\n await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, \"utf-8\");\n }\n return changed;\n};\n\n/** Of the candidate project-relative paths, the ones that still exist — the old\n * framework files a migration leaves behind for the user to remove by hand. */\nexport const leftoverFiles = (root: string, candidates: string[]): string[] =>\n candidates.filter((candidate) => existsSync(join(root, candidate)));\n\n/**\n * Scaffold a minimal, runnable `package.json` when the migrated project has\n * none. Config-only sources (e.g. a Mintlify `docs.json`) ship no npm manifest,\n * so a fresh migration has nothing to run `blume dev` with; this writes a stub\n * with `blume` as a dependency and `dev`/`build`/`doctor` scripts, making\n * `npm install && npm run dev` work immediately. A pre-existing `package.json`\n * is left untouched — {@link rewriteFrameworkScripts} repoints those instead.\n * Returns true when a file was created.\n */\nexport const ensurePackageJson = async (root: string): Promise<boolean> => {\n const pkgPath = join(root, \"package.json\");\n if (existsSync(pkgPath)) {\n return false;\n }\n await writeFile(\n pkgPath,\n blumePackageJson(toPackageName(basename(root))),\n \"utf-8\"\n );\n return true;\n};\n\n// A marker no markdown document contains, planted where an import was removed\n// so the blank-gap collapse can target the seams alone.\nconst IMPORT_SEAM = \"\\u0000blume-import-seam\\u0000\";\n\n/**\n * Remove every match of an import pattern, collapsing the blank gap each\n * removal leaves behind — without touching blank runs elsewhere in the\n * document (double blank lines inside code fences are real content that a\n * whole-document `\\n{3,}` collapse used to corrupt).\n */\nexport const stripImports = (source: string, pattern: RegExp): string => {\n const marked = source.replaceAll(pattern, IMPORT_SEAM);\n if (marked === source) {\n return source;\n }\n return marked\n .replaceAll(new RegExp(String.raw`\\n*(?:${IMPORT_SEAM})+\\n*`, \"gu\"), \"\\n\\n\")\n .replace(/^\\n+/u, \"\")\n .replace(/\\n+$/u, \"\\n\");\n};\n\n// ---------------------------------------------------------------------------\n// Callout components -> Blume `:::` directives\n// ---------------------------------------------------------------------------\n\nexport interface CalloutRewriteOptions {\n /** Directive for a type-bearing tag with no `type` attribute (e.g. bare `<Callout>`). */\n defaultDirective: string;\n /** Tag names whose directive is fixed by the tag itself (e.g. `<Warning>`). */\n tagDirectives: Record<string, string>;\n /** Component tag names to convert. */\n tags: string[];\n /** `type=\"…\"` values mapped to Blume directive names. */\n typeDirectives: Record<string, string>;\n}\n\n/** Read a quoted string attribute (`name=\"…\"` or `name='…'`) from a tag. */\nexport const attribute = (attrs: string, name: string): string | undefined => {\n const match = attrs.match(\n new RegExp(`\\\\b${name}=(?:\"(?<dq>[^\"]*)\"|'(?<sq>[^']*)')`, \"u\")\n );\n return match?.groups?.dq ?? match?.groups?.sq;\n};\n\n/** Remove a shared leading indent and surrounding blank lines from a block. */\nconst dedent = (value: string): string => {\n const lines = value\n .replace(/^\\r?\\n/u, \"\")\n .replace(/\\s+$/u, \"\")\n .split(\"\\n\");\n const indents = lines\n .filter((line) => line.trim() !== \"\")\n .map((line) => line.match(/^\\s*/u)?.[0].length ?? 0);\n const common = indents.length > 0 ? Math.min(...indents) : 0;\n return lines.map((line) => line.slice(common)).join(\"\\n\");\n};\n\n/**\n * A colon fence one longer than any directive fence in the body — nested\n * container directives require the outer fence to be longer than the inner\n * ones, or the inner `:::` closes the outer block.\n */\nconst fenceOver = (body: string): string => {\n let max = 2;\n for (const match of body.matchAll(/^ {0,3}(?<colons>:{3,})/gmu)) {\n max = Math.max(max, match.groups?.colons?.length ?? 0);\n }\n return \":\".repeat(Math.max(3, max + 1));\n};\n\nconst directiveBlock = (\n directive: string,\n title: string | undefined,\n inner: string\n): string => {\n const body = dedent(inner);\n const fence = fenceOver(body);\n const head = title\n ? `${fence}${directive}[${title}]`\n : `${fence}${directive}`;\n return `${head}\\n${body}\\n${fence}`;\n};\n\n/**\n * Find the `>` that closes an opening JSX tag, honoring quotes and `{…}`\n * expression attributes (so a `>` inside `icon={\"<svg…>\"}` is not mistaken for\n * the tag end). Returns -1 if unterminated.\n */\nexport const findOpenTagEnd = (source: string, from: number): number => {\n let depth = 0;\n let quote: '\"' | \"'\" | \"`\" | null = null;\n for (let index = from; index < source.length; index += 1) {\n const char = source[index];\n if (quote) {\n if (char === quote && source[index - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n } else if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n } else if (char === \">\" && depth === 0) {\n return index;\n }\n }\n return -1;\n};\n\n/**\n * Find the close tag matching an open tag, honoring same-tag nesting\n * (`<Note>a<Note>b</Note>c</Note>` must close at the *outer* `</Note>`).\n * Returns the index of the matching `</Tag>`, or -1 when unterminated.\n */\nconst findMatchingClose = (\n source: string,\n tag: string,\n from: number\n): number => {\n const scanner = new RegExp(`<(?<closing>/)?${tag}(?=[\\\\s/>])`, \"gu\");\n scanner.lastIndex = from;\n let depth = 0;\n for (let match = scanner.exec(source); match; match = scanner.exec(source)) {\n if (match.groups?.closing) {\n if (depth === 0) {\n return match.index;\n }\n depth -= 1;\n continue;\n }\n // A nested open tag: skip its attributes; self-closing ones don't nest.\n const end = findOpenTagEnd(source, match.index + tag.length + 1);\n if (end === -1) {\n return -1;\n }\n if (source[end - 1] !== \"/\") {\n depth += 1;\n }\n scanner.lastIndex = end + 1;\n }\n return -1;\n};\n\nconst directiveFor = (\n tag: string,\n attrs: string,\n options: CalloutRewriteOptions\n): string | undefined => {\n if (tag in options.tagDirectives) {\n return options.tagDirectives[tag];\n }\n const type = attribute(attrs, \"type\")?.toLowerCase();\n return type ? options.typeDirectives[type] : options.defaultDirective;\n};\n\n/**\n * Convert callout-style JSX components into Blume `:::` directives. Uses a\n * quote/brace-aware tag scanner so callouts carrying JSX-expression attributes\n * (e.g. inline-SVG icons) convert cleanly; non-convertible attributes (icons,\n * colors, emoji) are dropped. A tag whose resolved directive is unknown is left\n * untouched.\n */\nexport const rewriteCallouts = (\n source: string,\n options: CalloutRewriteOptions\n): string => {\n const tagPattern = new RegExp(\n `<(?<tag>${options.tags.join(\"|\")})(?=[\\\\s/>])`,\n \"u\"\n );\n let output = \"\";\n let cursor = 0;\n\n while (cursor < source.length) {\n const match = tagPattern.exec(source.slice(cursor));\n if (!match?.groups) {\n output += source.slice(cursor);\n break;\n }\n\n const start = cursor + match.index;\n const { tag } = match.groups;\n if (!tag) {\n output += source.slice(cursor);\n break;\n }\n const openEnd = findOpenTagEnd(source, start + tag.length + 1);\n if (openEnd === -1) {\n output += source.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n\n const attrs = source.slice(start + tag.length + 1, openEnd);\n const directive = directiveFor(tag, attrs, options);\n const closeTag = `</${tag}>`;\n const selfClosing = attrs.trimEnd().endsWith(\"/\");\n const closeIndex = selfClosing\n ? openEnd\n : findMatchingClose(source, tag, openEnd + 1);\n\n if (!directive || (!selfClosing && closeIndex === -1)) {\n output += source.slice(cursor, openEnd + 1);\n cursor = openEnd + 1;\n continue;\n }\n\n output += source.slice(cursor, start);\n const title = attribute(attrs, \"title\");\n if (selfClosing) {\n output += title\n ? `:::${directive}[${title}]\\n:::`\n : `:::${directive}\\n:::`;\n cursor = openEnd + 1;\n } else {\n // Recurse so nested callouts (of any tag) convert too — they'd\n // otherwise survive as components Blume doesn't ship.\n output += directiveBlock(\n directive,\n title,\n rewriteCallouts(source.slice(openEnd + 1, closeIndex), options)\n );\n cursor = closeIndex + closeTag.length;\n }\n }\n\n return output;\n};\n\n// ---------------------------------------------------------------------------\n// Page frontmatter\n// ---------------------------------------------------------------------------\n\n/**\n * Remove frontmatter keys Blume's strict page schema would reject (e.g. stray\n * `og:*`/`twitter:*` metatags) so the migrated page validates, reporting what\n * was dropped. Validation errors other than stray keys are left for `blume dev`\n * to surface.\n */\nexport const stripUnknownPageMeta = (\n data: Record<string, unknown>\n): { data: Record<string, unknown>; removed: string[] } => {\n const result = pageMetaSchema.safeParse(data);\n if (result.success) {\n return { data, removed: [] };\n }\n\n const removed = new Set<string>();\n for (const issue of result.error.issues) {\n if (issue.code === \"unrecognized_keys\" && issue.path.length === 0) {\n for (const key of issue.keys) {\n removed.add(key);\n }\n }\n }\n if (removed.size === 0) {\n return { data, removed: [] };\n }\n\n const next: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!removed.has(key)) {\n next[key] = value;\n }\n }\n return { data: next, removed: [...removed] };\n};\n\n// ---------------------------------------------------------------------------\n// JSX tag renaming\n// ---------------------------------------------------------------------------\n\n/**\n * Rename a JSX tag (open and close) while preserving its attributes. The\n * trailing lookahead means a longer tag (e.g. `CardGrid`) is never matched by a\n * rule for its shorter prefix (`Card`), so prefix-sharing renames can be chained\n * — run the item-level rename before the container rename.\n */\nexport const renameTag = (source: string, from: string, to: string): string =>\n source.replaceAll(\n new RegExp(`<(?<close>/?)${from}(?=[\\\\s/>])`, \"gu\"),\n `<$<close>${to}`\n );\n\n// ---------------------------------------------------------------------------\n// JavaScript literal scanning\n// ---------------------------------------------------------------------------\n\n/**\n * Static readers for JS/TS config files (Nextra `_meta`, Starlight\n * `astro.config`). Config is parsed by walking the source as text — quote-,\n * comment-, and bracket-aware — rather than executing user code, matching the\n * other migrators (which never eval). Values that aren't pure literals (an\n * identifier, call, JSX, or interpolated template) are reported as `UNPARSEABLE`\n * so the caller can drop the field and warn.\n */\n\n/** Index of a string within a JS source: the close quote matching `s[open]`. */\nexport const findStringEnd = (s: string, open: number): number => {\n const quote = s[open];\n for (let index = open + 1; index < s.length; index += 1) {\n if (s[index] === \"\\\\\") {\n index += 1;\n continue;\n }\n if (s[index] === quote) {\n return index;\n }\n }\n return -1;\n};\n\nexport const unescapeString = (inner: string): string =>\n inner.replaceAll(/\\\\(?<ch>[\"'`\\\\nt])/gu, (_match, ch: string) => {\n if (ch === \"n\") {\n return \"\\n\";\n }\n if (ch === \"t\") {\n return \"\\t\";\n }\n return ch;\n });\n\n/** Index of the last char of a `//` or block comment at `index`, else `index`. */\nconst skipComment = (source: string, index: number): number => {\n if (source[index + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", index + 2);\n return newline === -1 ? source.length : newline;\n }\n if (source[index + 1] === \"*\") {\n const close = source.indexOf(\"*/\", index + 2);\n return close === -1 ? source.length : close + 1;\n }\n return index;\n};\n\nconst pushSlice = (\n parts: string[],\n source: string,\n start: number,\n end: number\n): void => {\n const raw = source.slice(start, end).trim();\n if (raw) {\n parts.push(raw);\n }\n};\n\nexport interface ObjectScanResult {\n end: number;\n entries: string[];\n}\n\n/**\n * Walk a `{…}` object literal starting at `openIndex`, returning the matching\n * close-brace index and the raw `key: value` text of each top-level entry.\n * Quote-, comment-, and bracket-aware so commas/braces nested in strings,\n * arrays, or child objects don't split entries. Returns null if unterminated.\n */\nexport const scanObject = (\n source: string,\n openIndex: number\n): ObjectScanResult | null => {\n let depth = 0;\n const entries: string[] = [];\n let entryStart = openIndex + 1;\n\n for (let index = openIndex; index < source.length; index += 1) {\n const char = source[index];\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n const end = findStringEnd(source, index);\n index = end === -1 ? source.length : end;\n continue;\n }\n if (char === \"/\") {\n const skipped = skipComment(source, index);\n if (skipped !== index) {\n index = skipped;\n continue;\n }\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n if (char === \"}\" && depth === 0) {\n pushSlice(entries, source, entryStart, index);\n return { end: index, entries };\n }\n continue;\n }\n if (char === \",\" && depth === 1) {\n pushSlice(entries, source, entryStart, index);\n entryStart = index + 1;\n }\n }\n\n return null;\n};\n\nexport interface ArrayScanResult {\n elements: string[];\n end: number;\n}\n\n/**\n * Walk a `[…]` array literal starting at `openIndex`, returning the matching\n * close-bracket index and the raw text of each top-level element. The sibling of\n * {@link scanObject}; a trailing comma yields no empty element.\n */\nexport const scanArray = (\n source: string,\n openIndex: number\n): ArrayScanResult | null => {\n let depth = 0;\n const elements: string[] = [];\n let elementStart = openIndex + 1;\n\n for (let index = openIndex; index < source.length; index += 1) {\n const char = source[index];\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n const end = findStringEnd(source, index);\n index = end === -1 ? source.length : end;\n continue;\n }\n if (char === \"/\") {\n const skipped = skipComment(source, index);\n if (skipped !== index) {\n index = skipped;\n continue;\n }\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n if (char === \"}\" || char === \")\") {\n depth -= 1;\n continue;\n }\n if (char === \"]\") {\n depth -= 1;\n if (depth === 0) {\n pushSlice(elements, source, elementStart, index);\n return { elements, end: index };\n }\n continue;\n }\n if (char === \",\" && depth === 1) {\n pushSlice(elements, source, elementStart, index);\n elementStart = index + 1;\n }\n }\n\n return null;\n};\n\n/**\n * Strip `//` and block comments so they don't leak into entry text (the scanner\n * splits on slices, so an inter-entry comment would otherwise attach to the next\n * entry). String literals are preserved verbatim.\n */\nexport const stripJsComments = (source: string): string => {\n let out = \"\";\n let quote: string | null = null;\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index];\n if (quote) {\n out += char;\n if (char === \"\\\\\") {\n out += source[index + 1] ?? \"\";\n index += 1;\n } else if (char === quote) {\n quote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n out += char;\n continue;\n }\n if (char === \"/\" && source[index + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", index + 2);\n index = newline === -1 ? source.length - 1 : newline - 1;\n continue;\n }\n if (char === \"/\" && source[index + 1] === \"*\") {\n const close = source.indexOf(\"*/\", index + 2);\n index = close === -1 ? source.length - 1 : close + 1;\n out += \" \";\n continue;\n }\n out += char;\n }\n return out;\n};\n\nexport interface KeyValue {\n key: string;\n value: string;\n}\n\n/** Split a raw `key: value` entry at its top-level colon. */\nexport const splitKeyValue = (entry: string): KeyValue | null => {\n let index = 0;\n while (index < entry.length && /\\s/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n const first = entry[index];\n if (first === \"[\") {\n // Computed key — not something we can resolve statically.\n return null;\n }\n\n let key: string;\n if (first === '\"' || first === \"'\" || first === \"`\") {\n const close = findStringEnd(entry, index);\n if (close === -1) {\n return null;\n }\n key = entry.slice(index, close + 1);\n index = close + 1;\n } else {\n const start = index;\n while (index < entry.length && !/[\\s:]/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n key = entry.slice(start, index);\n }\n\n while (index < entry.length && /\\s/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n if (entry[index] !== \":\") {\n return { key, value: \"\" };\n }\n return { key, value: entry.slice(index + 1).trim() };\n};\n\n/** Read an object key, unquoting it when it is a string literal. */\nexport const parseKey = (key: string): string => {\n const trimmed = key.trim();\n const [quote] = trimmed;\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n const end = findStringEnd(trimmed, 0);\n if (end !== -1) {\n return unescapeString(trimmed.slice(1, end));\n }\n }\n return trimmed;\n};\n\n/** Read a clean string literal value, or null if it's an expression. */\nexport const readString = (value: string): string | null => {\n const trimmed = value.trim();\n const [quote] = trimmed;\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") {\n return null;\n }\n if (quote === \"`\" && trimmed.includes(\"${\")) {\n return null;\n }\n const end = findStringEnd(trimmed, 0);\n if (end === -1 || trimmed.slice(end + 1).trim() !== \"\") {\n return null;\n }\n return unescapeString(trimmed.slice(1, end));\n};\n\n/** A value that isn't a pure literal (identifier, call, JSX, computed, …). */\nexport const UNPARSEABLE = Symbol(\"unparseable\");\n\nexport type LiteralValue =\n | LiteralValue[]\n | boolean\n | null\n | number\n | string\n | typeof UNPARSEABLE\n | { [key: string]: LiteralValue };\n\nconst NUMERIC = /^-?\\d/u;\n\nconst parseScalarLiteral = (trimmed: string): LiteralValue => {\n if (trimmed === \"true\") {\n return true;\n }\n if (trimmed === \"false\") {\n return false;\n }\n if (trimmed === \"null\") {\n return null;\n }\n if (NUMERIC.test(trimmed)) {\n const num = Number(trimmed);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return UNPARSEABLE;\n};\n\nconst parseObjectLiteral = (trimmed: string): LiteralValue => {\n const scan = scanObject(trimmed, 0);\n if (!scan || trimmed.slice(scan.end + 1).trim() !== \"\") {\n return UNPARSEABLE;\n }\n const out: Record<string, LiteralValue> = {};\n for (const entry of scan.entries) {\n const kv = splitKeyValue(entry);\n if (kv?.key && kv.value !== \"\") {\n // oxlint-disable-next-line no-use-before-define -- mutual recursion\n out[parseKey(kv.key)] = parseLiteral(kv.value);\n }\n }\n return out;\n};\n\nconst parseArrayLiteral = (trimmed: string): LiteralValue => {\n const scan = scanArray(trimmed, 0);\n if (!scan || trimmed.slice(scan.end + 1).trim() !== \"\") {\n return UNPARSEABLE;\n }\n // oxlint-disable-next-line no-use-before-define -- mutual recursion\n return scan.elements.map((element) => parseLiteral(element));\n};\n\n/**\n * Evaluate a JS literal expression (string / number / boolean / null / array /\n * object) into its value without executing it. Anything else resolves to\n * {@link UNPARSEABLE}; inside arrays the sentinel keeps the element's position,\n * inside objects it stays as the field's value so the caller can warn and drop.\n */\nexport const parseLiteral = (source: string): LiteralValue => {\n const trimmed = source.trim();\n if (trimmed === \"\") {\n return UNPARSEABLE;\n }\n const [first] = trimmed;\n if (first === '\"' || first === \"'\" || first === \"`\") {\n return readString(trimmed) ?? UNPARSEABLE;\n }\n if (first === \"{\") {\n return parseObjectLiteral(trimmed);\n }\n if (first === \"[\") {\n return parseArrayLiteral(trimmed);\n }\n return parseScalarLiteral(trimmed);\n};\n\n/** Narrow a parsed literal to a string. */\nexport const asLiteralString = (\n value: LiteralValue | undefined\n): string | undefined => (typeof value === \"string\" ? value : undefined);\n\n/** Narrow a parsed literal to a plain object (not an array or `UNPARSEABLE`). */\nexport const isLiteralObject = (\n value: LiteralValue | undefined\n): value is Record<string, LiteralValue> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** Narrow a parsed literal to an array. */\nexport const asLiteralArray = (\n value: LiteralValue | undefined\n): LiteralValue[] | undefined => (Array.isArray(value) ? value : undefined);\n",
108
+ "import { getBlumeVersion } from \"./version.ts\";\n\n/**\n * Derive a valid npm package name from a directory name, falling back to\n * `docs` when nothing usable remains.\n */\nexport const toPackageName = (raw: string): string =>\n raw\n .toLowerCase()\n .replaceAll(/[^a-z0-9._-]+/gu, \"-\")\n .replaceAll(/^[-_.]+|[-_.]+$/gu, \"\") || \"docs\";\n\n/**\n * A minimal, runnable `package.json` body for a Blume project: the `blume`\n * dependency pinned to the installed version plus `dev`/`build`/`doctor`\n * scripts, so `npm install && npm run dev` works immediately. Shared by\n * `blume init` and the migrators, which scaffold one when a project has none.\n */\nexport const blumePackageJson = (name: string): string => `{\n \"name\": ${JSON.stringify(name)},\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"blume dev\",\n \"build\": \"blume build\",\n \"doctor\": \"blume doctor\"\n },\n \"dependencies\": {\n \"blume\": \"^${getBlumeVersion()}\"\n }\n}\n`;\n",
109
+ "import { z } from \"zod\";\n\nimport { FONT_SLUGS, isFontSlug } from \"../theme/fonts.ts\";\nimport { uiLocaleOverridesSchema } from \"./i18n-ui.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\n\n/**\n * Public Blume schemas.\n *\n * These are exported from `blume/schema` so migration tools, editor\n * integrations, and the runtime share a single source of validation truth.\n */\n\n// ---------------------------------------------------------------------------\n// Shared primitives\n// ---------------------------------------------------------------------------\n\n/** Icon inputs in serializable contexts (frontmatter, meta files). */\nconst iconName = z.string().min(1);\n\nconst hydrationMode = z.enum([\"load\", \"idle\", \"visible\", \"media\", \"only\"]);\nexport type HydrationMode = z.infer<typeof hydrationMode>;\n\n/**\n * A publish date in frontmatter. YAML auto-parses an unquoted `2026-01-01` into\n * a `Date`, so accept either form and normalize to an ISO string.\n */\nconst dateSchema = z\n .union([z.string(), z.date()])\n .transform((value) => (value instanceof Date ? value.toISOString() : value));\n\n// ---------------------------------------------------------------------------\n// Page frontmatter\n// ---------------------------------------------------------------------------\n\nconst sidebarMetaSchema = z\n .object({\n badge: z.string().optional(),\n hidden: z.boolean().default(false),\n icon: iconName.optional(),\n label: z.string().optional(),\n order: z.number().optional(),\n })\n .strict();\n\nconst seoMetaSchema = z\n .object({\n canonical: z.string().url().optional(),\n description: z.string().optional(),\n image: z.string().optional(),\n noindex: z.boolean().default(false),\n title: z.string().optional(),\n })\n .strict();\n\nconst searchMetaSchema = z\n .object({\n boost: z.number().optional(),\n exclude: z.boolean().default(false),\n tags: z.array(z.string()).optional(),\n })\n .strict();\n\nconst changelogMetaSchema = z\n .object({\n category: z.string().optional(),\n date: dateSchema.optional(),\n version: z.string().optional(),\n })\n .strict();\n\n/**\n * A post author: a bare name/handle, or an object with a name plus optional\n * avatar/URL. The object is passthrough so richer author metadata (social\n * handles, roles) survives untouched — Blume doesn't render authors yet, so\n * this exists to preserve the field (common on blog/changelog pages) rather\n * than have a strict scan reject it.\n */\nconst authorSchema = z.union([\n z.string(),\n z\n .object({\n avatar: z.string().optional(),\n image: z.string().optional(),\n name: z.string(),\n url: z.string().optional(),\n })\n .passthrough(),\n]);\n\n/** Frontmatter accepted on any content page. */\nconst pageMetaBaseSchema = z\n .object({\n /** Post author(s) for blog/changelog content; preserved, not yet rendered. */\n authors: z.union([authorSchema, z.array(authorSchema)]).optional(),\n changelog: changelogMetaSchema.optional(),\n /** Publish date for feed-backed content like blog/changelog. */\n date: dateSchema.optional(),\n deprecated: z.boolean().default(false),\n description: z.string().optional(),\n draft: z.boolean().default(false),\n groups: z.union([z.string(), z.array(z.string())]).optional(),\n hidden: z.boolean().default(false),\n hideApiMarker: z.boolean().default(false),\n hideFooterPagination: z.boolean().optional(),\n icon: iconName.optional(),\n iconType: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n /** Overrides the git-derived last-modified date when `lastModified` is on. */\n lastModified: dateSchema.optional(),\n mode: z.string().optional(),\n noindex: z.boolean().default(false),\n public: z.boolean().optional(),\n rss: z.boolean().optional(),\n search: searchMetaSchema.default({}),\n seo: seoMetaSchema.default({}),\n sidebar: sidebarMetaSchema.default({}),\n sidebarTitle: z.string().optional(),\n slug: z.string().optional(),\n tag: z.string().optional(),\n title: z.string().optional(),\n type: z.string().default(\"doc\"),\n })\n .strict();\n\nexport const pageMetaSchema = pageMetaBaseSchema;\n\nexport type PageMeta = z.infer<typeof pageMetaBaseSchema>;\nexport type PageMetaInput = z.input<typeof pageMetaBaseSchema>;\n\n// ---------------------------------------------------------------------------\n// Folder meta (meta.ts)\n// ---------------------------------------------------------------------------\n\n/**\n * How a sidebar group renders:\n * - `flat`: a non-collapsible header with its items listed beneath (default).\n * - `group`: a collapsible `<details>` disclosure.\n * - `page`: a single row that drills into a sub-panel showing only this group's\n * items, with a back arrow at the top.\n */\nconst sidebarDisplaySchema = z.enum([\"flat\", \"group\", \"page\"]);\nexport type SidebarDisplay = z.infer<typeof sidebarDisplaySchema>;\n\nexport const folderMetaSchema = z\n .object({\n collapsed: z.boolean().optional(),\n display: sidebarDisplaySchema.optional(),\n icon: iconName.optional(),\n order: z.number().optional(),\n /** Explicit child ordering by slug segment (without numeric prefix). */\n pages: z.array(z.string()).optional(),\n title: z.string().optional(),\n })\n .strict();\n\nexport type FolderMeta = z.infer<typeof folderMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// Project config (blume.config.ts)\n// ---------------------------------------------------------------------------\n\nconst logoConfigSchema = z.union([\n z.string(),\n z\n .object({\n alt: z.string().optional(),\n dark: z.string().optional(),\n href: z.string().optional(),\n light: z.string().optional(),\n })\n .strict(),\n]);\n\nconst faviconConfigSchema = z.union([\n z.string(),\n z\n .object({\n dark: z.string().optional(),\n light: z.string().optional(),\n })\n .strict(),\n]);\n\nconst bannerColorSchema = z\n .object({\n dark: z.string().optional(),\n light: z.string().optional(),\n })\n .strict()\n .refine((value) => value.dark !== undefined || value.light !== undefined, {\n message: \"Banner color requires at least one of light or dark.\",\n });\n\n/** Site-wide announcement banner: a string, or text with an optional link. */\nconst bannerConfigSchema = z.union([\n z.string(),\n z\n .object({\n /** Background color override (Mintlify compatibility). */\n color: bannerColorSchema.optional(),\n content: z.string(),\n /** Show a dismiss button; the choice is remembered per visitor. */\n dismissible: z.boolean().default(false),\n /** Stable key for remembering dismissal; defaults to the content. */\n id: z.string().optional(),\n link: z\n .object({ href: z.string(), text: z.string() })\n .strict()\n .optional(),\n /** Tone (Mintlify compatibility). */\n type: z.enum([\"info\", \"warning\", \"critical\"]).optional(),\n })\n .strict(),\n]);\n\n/** A local filesystem content source. */\nconst filesystemSourceSchema = z\n .object({\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n root: z.string().default(\"docs\"),\n type: z.literal(\"filesystem\"),\n })\n .strict();\n\n/**\n * Remote Markdown/MDX fetched over HTTP. Enumerate files either explicitly\n * (`files` against a raw `url` base) or from a GitHub repo subtree (`github`).\n * The token, when needed, comes from `GITHUB_TOKEN` — never inlined here.\n */\nconst mdxRemoteSourceSchema = z\n .object({\n /** Explicit list of source-relative file paths to fetch from `url`. */\n files: z.array(z.string()).optional(),\n /** Enumerate a GitHub repo subtree via the git-trees API. */\n github: z\n .object({\n owner: z.string(),\n path: z.string().default(\"\"),\n ref: z.string().default(\"main\"),\n repo: z.string(),\n })\n .strict()\n .optional(),\n /** Glob patterns applied to enumerated refs. */\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n type: z.literal(\"mdx-remote\"),\n /** Raw base URL, e.g. `https://raw.githubusercontent.com/acme/sdk/main/docs`. */\n url: z.string().optional(),\n })\n .strict();\n\n/** A Sanity dataset queried with GROQ; Portable Text bodies become Markdown. */\nconst sanitySourceSchema = z.object({\n /** Sanity API version (a date); default `2024-01-01`. */\n apiVersion: z.string().optional(),\n dataset: z.string(),\n /** Field paths mapping a document onto Blume meta + body. */\n fields: z\n .object({\n body: z.string().optional(),\n description: z.string().optional(),\n lastModified: z.string().optional(),\n slug: z.string().optional(),\n title: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n prefix: z.string().optional(),\n projectId: z.string(),\n /** GROQ query selecting the documents to import. */\n query: z.string(),\n type: z.literal(\"sanity\"),\n});\n\n/** A Notion database; pages become entries, blocks become MDX. */\nconst notionSourceSchema = z.object({\n database: z.string(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n prefix: z.string().optional(),\n /** Notion property names mapped onto Blume meta. */\n properties: z\n .object({\n description: z.string().optional(),\n order: z.string().optional(),\n slug: z.string().optional(),\n status: z.string().optional(),\n title: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Status value treated as published; others map to `draft`. Default `Published`. */\n publishedValue: z.string().optional(),\n type: z.literal(\"notion\"),\n});\n\n/**\n * A repo's GitHub Releases, materialized as `type: changelog` entries — release\n * notes become the changelog with no files to maintain. A private repo reads a\n * token from `GITHUB_TOKEN`; it is never inlined here.\n */\nconst githubReleasesSourceSchema = z\n .object({\n /** Include draft releases (needs a token with repo write access). */\n drafts: z.boolean().optional(),\n /** Cap the number of releases materialized, newest-first. Default 100. */\n limit: z.number().positive().optional(),\n /** Repository owner (user or org). */\n owner: z.string(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n /** Namespaces the source's routes under `/<prefix>/`; e.g. `changelog`. */\n prefix: z.string().optional(),\n /** Include prereleases. */\n prereleases: z.boolean().optional(),\n /** Repository name. */\n repo: z.string(),\n type: z.literal(\"github-releases\"),\n })\n .strict();\n\n/**\n * In-place Mintlify content (`docs.json` + MDX). Powers \"bridge mode\": Blume\n * reads an unconverted Mintlify project, transforming each page to Blume MDX at\n * scan time. Injected automatically by `loadConfig` when a `docs.json` is found\n * and no `blume.config.*` exists; can also be configured explicitly.\n */\nconst mintlifySourceSchema = z\n .object({\n /** Absolute path of the `docs.json`/`mint.json`, watched for changes in dev. */\n configFile: z.string().optional(),\n /** Patterns excluded from page discovery (Mintlify defaults are merged in). */\n exclude: z.array(z.string()).default([]),\n /** Glob patterns for Mintlify content files. */\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n /** Content root, absolute or relative to the project root (Mintlify: `.`). */\n root: z.string().default(\".\"),\n type: z.literal(\"mintlify\"),\n /** `docs.json` variables, inlined into content (`{{name}}`) at scan time. */\n variables: z.record(z.string(), z.string()).default({}),\n })\n .strict();\n\n/**\n * A user-provided `ContentSource` instance, passed straight through from\n * `blume.config.ts`. This is the extension point that lets adapters with custom\n * serializers (or any backend) ship without their SDKs touching core.\n */\nconst customSourceSchema = z.object({\n source: z.custom<ContentSource>(\n (val) =>\n typeof val === \"object\" &&\n val !== null &&\n typeof (val as { load?: unknown }).load === \"function\" &&\n typeof (val as { name?: unknown }).name === \"string\",\n { message: \"custom source must be a ContentSource (with name + load)\" }\n ),\n type: z.literal(\"custom\"),\n});\n\n/** A single configured content source. */\nconst contentSourceSchema = z.discriminatedUnion(\"type\", [\n filesystemSourceSchema,\n mdxRemoteSourceSchema,\n githubReleasesSourceSchema,\n sanitySourceSchema,\n notionSourceSchema,\n mintlifySourceSchema,\n customSourceSchema,\n]);\n\n/** A resolved content-source config entry (post-defaults). */\nexport type ContentSourceConfig = z.infer<typeof contentSourceSchema>;\n\nconst contentConfigSchema = z\n .object({\n /**\n * Extra top-level directories (relative to the project root) served as\n * static assets at the site root, alongside `public/`. Lets projects keep\n * root-served asset folders in place — e.g. a Mintlify migration keeps\n * `images/` where it is instead of relocating it under `public/`.\n */\n assets: z.array(z.string()).default([]),\n defaultType: z.string().default(\"doc\"),\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n pages: z.string().default(\"pages\"),\n root: z.string().default(\"docs\"),\n /**\n * Pluggable content sources. When omitted, the top-level\n * `root`/`include`/`exclude` desugar to one implicit filesystem source, so\n * existing projects are unchanged.\n */\n sources: z.array(contentSourceSchema).optional(),\n })\n .strict();\n\nconst navTabSchema = z\n .object({\n icon: iconName.optional(),\n items: z\n .array(\n z\n .object({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n .strict()\n )\n .optional(),\n label: z.string(),\n path: z.string(),\n })\n .strict();\n\nconst navSelectorItemSchema = z\n .object({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n .strict();\n\nconst navSelectorSchema = z\n .object({\n items: z.array(navSelectorItemSchema).default([]),\n kind: z.enum([\"dropdown\", \"language\", \"product\", \"version\"]),\n label: z.string(),\n })\n .strict();\n\nconst directoryModeSchema = z.enum([\"accordion\", \"card\", \"none\"]);\nexport type DirectoryMode = z.infer<typeof directoryModeSchema>;\n\n/** A node in an explicit sidebar config: a page reference or a group/link. */\nexport type SidebarItemConfig =\n | string\n | {\n label: string;\n badge?: string;\n directory?: DirectoryMode;\n display?: SidebarDisplay;\n href?: string;\n icon?: string;\n collapsed?: boolean;\n items?: SidebarItemConfig[];\n root?: string;\n };\n\nconst sidebarItemSchema: z.ZodType<SidebarItemConfig> = z.lazy(() =>\n z.union([\n z.string(),\n z\n .object({\n badge: z.string().optional(),\n collapsed: z.boolean().optional(),\n directory: directoryModeSchema.optional(),\n display: sidebarDisplaySchema.optional(),\n href: z.string().optional(),\n icon: iconName.optional(),\n items: z.array(sidebarItemSchema).optional(),\n label: z.string(),\n root: z.string().optional(),\n })\n .strict(),\n ])\n);\n\nconst variablesConfigSchema = z\n .record(z.string().regex(/^[A-Za-z0-9-]+$/u), z.string())\n .default({});\n\n/** A curated Google Font slug (see `theme/fonts.ts`). */\nconst fontSlug = z.string().refine(isFontSlug, (value) => ({\n message: `Unknown font \"${value}\". Supported fonts: ${FONT_SLUGS.join(\", \")}.`,\n}));\n\nconst themeConfigSchema = z\n .object({\n accent: z.string().default(\"blue\"),\n accentDark: z.string().optional(),\n action: z.string().optional(),\n background: z.string().optional(),\n backgroundDark: z.string().optional(),\n backgroundDecoration: z.enum([\"gradient\", \"grid\", \"windows\"]).optional(),\n backgroundImage: z.string().optional(),\n backgroundImageDark: z.string().optional(),\n fonts: z\n .object({\n body: fontSlug.default(\"inter\"),\n display: fontSlug.default(\"inter-tight\"),\n mono: fontSlug.default(\"ibm-plex-mono\"),\n })\n .strict()\n .default({}),\n layout: z.enum([\"sidebar\"]).default(\"sidebar\"),\n mode: z.enum([\"system\", \"light\", \"dark\"]).default(\"system\"),\n radius: z.enum([\"none\", \"sm\", \"md\", \"lg\"]).default(\"md\"),\n strict: z.boolean().default(false),\n })\n .strict();\n\n/** Public credentials for the Algolia search backend (sync key is an env var). */\nconst algoliaSearchSchema = z\n .object({\n appId: z.string(),\n indexName: z.string(),\n searchApiKey: z.string(),\n })\n .strict();\n\n/** Public credentials for the Orama Cloud search backend. */\nconst oramaCloudSearchSchema = z\n .object({\n apiKey: z.string(),\n endpoint: z.string(),\n /** Index id used by the build-time sync (with `ORAMA_PRIVATE_API_KEY`). */\n indexId: z.string().optional(),\n })\n .strict();\n\n/** Public credentials for a (self-hosted or cloud) Typesense backend. */\nconst typesenseSearchSchema = z\n .object({\n collection: z.string(),\n host: z.string(),\n port: z.number().int().positive().optional(),\n protocol: z.enum([\"http\", \"https\"]).optional(),\n searchApiKey: z.string(),\n })\n .strict();\n\n/** Mixedbread semantic search: the store the server endpoint queries. */\nconst mixedbreadSearchSchema = z\n .object({\n storeId: z.string(),\n })\n .strict();\n\nexport const searchProviders = [\n \"orama\",\n \"pagefind\",\n \"flexsearch\",\n \"algolia\",\n \"orama-cloud\",\n \"typesense\",\n \"mixedbread\",\n \"none\",\n] as const;\n\n/** Providers that need a config block, mapped to its `search.*` key. */\nconst PROVIDER_CONFIG_KEY = {\n algolia: \"algolia\",\n mixedbread: \"mixedbread\",\n \"orama-cloud\": \"oramaCloud\",\n typesense: \"typesense\",\n} as const;\n\nconst searchConfigSchema = z\n .object({\n algolia: algoliaSearchSchema.optional(),\n indexing: z\n .object({\n includeHiddenPages: z.boolean().default(false),\n })\n .strict()\n .default({}),\n mixedbread: mixedbreadSearchSchema.optional(),\n oramaCloud: oramaCloudSearchSchema.optional(),\n prompt: z.string().optional(),\n provider: z.enum(searchProviders).default(\"orama\"),\n typesense: typesenseSearchSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n // Hosted providers can't work without their credentials; flag a missing\n // block with a path so the diagnostic points at `search.<provider>`.\n const field =\n PROVIDER_CONFIG_KEY[value.provider as keyof typeof PROVIDER_CONFIG_KEY];\n if (field && !value[field]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `search.${field} is required when provider is \"${value.provider}\".`,\n path: [field],\n });\n }\n });\n\n/** Ask AI backends. `gateway` (default) routes through the Vercel AI Gateway. */\nexport const askAiProviders = [\n \"gateway\",\n \"openrouter\",\n \"llmgateway\",\n \"inkeep\",\n \"openai-compatible\",\n] as const;\n\nconst aiConfigSchema = z\n .object({\n ask: z\n .object({\n // Name of the env var holding the provider's API key; each provider has\n // a sensible default, so this only needs setting to override it.\n apiKeyEnv: z.string().optional(),\n // Base URL of the backend. Required for `openai-compatible`; for the\n // named providers it overrides the built-in preset.\n baseUrl: z.string().url().optional(),\n enabled: z.boolean().default(false),\n model: z.string().default(\"openai/gpt-5.5\"),\n provider: z.enum(askAiProviders).default(\"gateway\"),\n })\n .strict()\n .superRefine((value, ctx) => {\n // A generic OpenAI-compatible backend has no preset URL, so the user\n // must supply one; the named providers fall back to their preset.\n if (value.provider === \"openai-compatible\" && !value.baseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n 'ai.ask.baseUrl is required when provider is \"openai-compatible\".',\n path: [\"baseUrl\"],\n });\n }\n })\n .optional(),\n llmsTxt: z.boolean().default(false),\n })\n .strict();\n\nconst chromeVariantSchema = z\n .object({\n banner: bannerConfigSchema.optional(),\n path: z.string(),\n })\n .strict();\n\nconst navigationConfigSchema = z\n .object({\n chromeVariants: z.array(chromeVariantSchema).default([]),\n /** Show a GitHub repo link in the header (requires `github` configured). */\n repo: z.boolean().default(true),\n selectors: z.array(navSelectorSchema).default([]),\n /** Explicit sidebar override; when omitted the sidebar is generated. */\n sidebar: z.array(sidebarItemSchema).optional(),\n tabs: z.array(navTabSchema).optional(),\n })\n .strict();\n\nexport type AskAiProvider = (typeof askAiProviders)[number];\nexport type AskAiConfig = NonNullable<z.infer<typeof aiConfigSchema>[\"ask\"]>;\n\n// Reader-facing \"Export\" page action (PDF via print, EPUB via client-side\n// generation). Off by default. Accepts a shorthand boolean to toggle both\n// formats, or an object to enable them individually; both normalize to\n// `{ epub, pdf }` so consumers read plain booleans.\nconst exportConfigSchema = z\n .union([\n z.boolean(),\n z\n .object({\n epub: z.boolean().default(false),\n pdf: z.boolean().default(false),\n })\n .strict(),\n ])\n .transform((value) =>\n typeof value === \"boolean\" ? { epub: value, pdf: value } : value\n );\n\nconst mcpConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n /** Optional system hint passed to connecting agents. */\n instructions: z.string().optional(),\n /** Server name shown to clients; defaults to the site title. */\n name: z.string().optional(),\n route: z.string().default(\"/mcp\"),\n })\n .strict();\n\n/** A configured locale: ISO-ish code plus display metadata for the switcher. */\nconst localeSchema = z\n .object({\n code: z.string().min(1),\n /** Text direction; drives `<html dir>` and a future RTL pass. */\n dir: z.enum([\"ltr\", \"rtl\"]).default(\"ltr\"),\n label: z.string(),\n })\n .strict();\n\n/**\n * Internationalization. Opt-in: when absent, Blume is single-locale and behaves\n * exactly as before. The default locale lives at the content root; other locales\n * are top-level directories named by `code` (the `dir` parser).\n */\nconst i18nConfigSchema = z\n .object({\n defaultLocale: z.string().default(\"en\"),\n /** Locale rendered for a missing translation; `null` disables fallback. */\n fallbackLocale: z.string().nullable().optional(),\n /** Drop the URL prefix for the default locale (`/`, `/fr/…`). Static-safe. */\n hideDefaultLocalePrefix: z.boolean().default(true),\n locales: z.array(localeSchema).min(1),\n /** `\"dir\"`: locale directories (`fr/page.mdx`). `\"dot\"`: filename suffix (`page.fr.mdx`). */\n parser: z.enum([\"dir\", \"dot\"]).default(\"dir\"),\n /** Per-locale UI string overrides: `{ fr: { search: { button: \"…\" } } }`. */\n ui: uiLocaleOverridesSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const codes = new Set(value.locales.map((locale) => locale.code));\n if (!codes.has(value.defaultLocale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `i18n.defaultLocale \"${value.defaultLocale}\" must match one of i18n.locales.`,\n path: [\"defaultLocale\"],\n });\n }\n if (\n value.fallbackLocale !== null &&\n value.fallbackLocale !== undefined &&\n !codes.has(value.fallbackLocale)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `i18n.fallbackLocale \"${value.fallbackLocale}\" must match one of i18n.locales.`,\n path: [\"fallbackLocale\"],\n });\n }\n });\n\nconst analyticsScriptSchema = z\n .object({\n // Extra attributes (e.g. `data-domain`, `id`) spread onto the <script>.\n attributes: z.record(z.string(), z.string()).optional(),\n // Inline script body, mutually exclusive with `src`.\n content: z.string().optional(),\n // External script URL, mutually exclusive with `content`.\n src: z.string().optional(),\n // Load strategy for an external script.\n strategy: z.enum([\"async\", \"defer\"]).optional(),\n })\n .strict()\n .refine((value) => Boolean(value.src) !== Boolean(value.content), {\n message: \"An analytics script must set exactly one of `src` or `content`.\",\n });\n\nconst analyticsConfigSchema = z\n .object({\n posthog: z\n .object({\n host: z.string().optional(),\n key: z.string(),\n })\n .strict()\n .optional(),\n // Escape hatch for any other provider (Plausible, Fathom, GA, Umami, …).\n scripts: z.array(analyticsScriptSchema).optional(),\n vercel: z.boolean().optional(),\n })\n .strict();\n\nconst deploymentConfigSchema = z\n .object({\n adapter: z\n .enum([\"vercel\", \"node\", \"netlify\", \"cloudflare\"])\n .nullable()\n .default(null),\n base: z.string().optional(),\n output: z.enum([\"static\", \"server\"]).default(\"static\"),\n site: z.string().url().optional(),\n })\n .strict();\n\nconst redirectSchema = z\n .object({\n from: z.string(),\n status: z\n .union([z.literal(301), z.literal(302), z.literal(307), z.literal(308)])\n .default(301),\n to: z.string(),\n })\n .strict();\n\nconst ogConfigSchema = z\n .object({\n /**\n * Generate a per-page Open Graph image. Defaults to on once a deployment\n * site URL is known (set or auto-detected) and off otherwise, since\n * `og:image` must be absolute to be useful to crawlers — resolved in\n * `loadConfig`. An explicit value here always wins.\n */\n enabled: z.boolean().optional(),\n })\n .strict();\n\nconst rssConfigSchema = z\n .object({\n enabled: z.boolean().default(true),\n /** Max items per feed, newest first. */\n limit: z.number().int().positive().default(50),\n /** Content types that each get a feed at `/<type>/rss.xml`. */\n types: z.array(z.string()).default([\"blog\", \"changelog\"]),\n })\n .strict();\n\n/** Discoverability features: OG images, feeds, sitemap, structured data. */\nconst seoConfigSchema = z\n .object({\n metatags: z.record(z.string(), z.string()).default({}),\n og: ogConfigSchema.default({}),\n /** Generate robots.txt (with a Sitemap reference when available). */\n robots: z.boolean().default(true),\n rss: rssConfigSchema.default({}),\n /** Generate sitemap.xml (requires deployment.site). */\n sitemap: z.boolean().default(true),\n /** Emit schema.org JSON-LD in each page's <head>. */\n structuredData: z.boolean().default(true),\n })\n .strict();\n\nconst githubConfigSchema = z\n .object({\n branch: z.string().default(\"main\"),\n /** Path from the repo root to the project root (for monorepos). */\n dir: z.string().optional(),\n owner: z.string(),\n repo: z.string(),\n })\n .strict();\n\nconst codeBlockThemeSchema = z\n .object({\n dark: z.string().default(\"github-dark\"),\n light: z.string().default(\"github-light\"),\n })\n .strict();\n\nconst codeBlocksConfigSchema = z\n .object({\n theme: codeBlockThemeSchema.default({}),\n })\n .strict();\n\n/**\n * \"Last updated\" timestamps for content pages. `false` (default) disables the\n * feature; `true` derives each page's date from git history; an object selects\n * the source explicitly. A page's `lastModified` frontmatter always wins.\n */\nconst lastModifiedConfigSchema = z.union([\n z.boolean(),\n z.object({ type: z.enum([\"git\", \"frontmatter\"]).default(\"git\") }).strict(),\n]);\n\n/** Code-block rendering options (`markdown.code`). */\nconst codeConfigSchema = z\n .object({\n /**\n * Show a brand language icon in the code-block header (TypeScript, Python,\n * …). On by default; recognized languages only.\n */\n icons: z.boolean().default(true),\n /**\n * Syntax-highlight inline `` `code{:lang}` `` snippets. Off by default — most\n * inline code (flags, file names) reads better plain; opt a snippet in with\n * a trailing `{:lang}` marker.\n */\n inline: z.boolean().default(false),\n /**\n * Wrap long lines instead of scrolling horizontally. Off by default, so\n * code keeps its original line breaks and overflows into a scroll area.\n */\n wrap: z.boolean().default(false),\n })\n .strict();\n\nconst markdownConfigSchema = z\n .object({\n /** Code-block rendering: language icons and line wrapping. */\n code: codeConfigSchema.default({}),\n codeBlocks: codeBlocksConfigSchema.default({}),\n /**\n * Wrap each `##`–`######` heading in a link to its own anchor so readers can\n * click to copy, bookmark, or share a permalink to that section. On by\n * default; set to `false` to render plain headings.\n */\n headingAnchors: z.boolean().default(true),\n /**\n * Make content images click-to-zoom (open in a lightbox). On by default;\n * opt a single image out with `data-no-zoom`.\n */\n imageZoom: z.boolean().default(true),\n /**\n * Enable LaTeX math (`$…$` inline, `$$…$$` block) rendered with KaTeX.\n * Off by default since `$` is common in prose, shell, and code. MDX only.\n */\n math: z.boolean().default(false),\n })\n .strict();\n\n/**\n * A single spec rendered by the API reference. `spec` is a local path or an\n * `http(s)` URL (OpenAPI for the Blume renderer; OpenAPI or AsyncAPI for Scalar).\n */\nconst openapiSourceSchema = z\n .object({\n /** Nav/section label for this source. */\n label: z.string().optional(),\n /** Per-source route; defaults to the block's `route` (or a derived path). */\n route: z.string().optional(),\n /** Local path or `http(s)` URL to the spec. */\n spec: z.string(),\n })\n .strict();\n\nexport type OpenApiSource = z.infer<typeof openapiSourceSchema>;\n\n/**\n * OpenAPI reference. By default (`renderer: \"blume\"`) Blume parses the spec with\n * Scalar's parser and renders its own UI: one real page per operation, grouped\n * by tag in the sidebar and included in site search, llms.txt, and OG. Set\n * `renderer: \"scalar\"` to fall back to the embedded Scalar SPA (a single\n * self-contained route that doesn't weave into the sidebar or search).\n */\nconst openapiConfigSchema = z\n .object({\n /** Code-sample languages shown per operation (Blume renderer). */\n codeSamples: z.array(z.string()).default([\"curl\", \"js\", \"python\"]),\n enabled: z.boolean().default(false),\n /** Start nested schema rows expanded rather than collapsed (Blume renderer). */\n expandSchemas: z.boolean().default(false),\n /** Who renders the reference: Blume's own UI, or the embedded Scalar SPA. */\n renderer: z.enum([\"blume\", \"scalar\"]).default(\"blume\"),\n /** Where the reference mounts. */\n route: z.string().default(\"/reference\"),\n /** One or more specs; each renders on its own route by default. */\n sources: z.array(openapiSourceSchema).default([]),\n /** Shorthand for a single source: `sources: [{ spec }]`. */\n spec: z.string().optional(),\n /** Scalar theme name (Scalar renderer only). */\n theme: z.string().optional(),\n })\n .strict();\n\n/**\n * AsyncAPI reference. Same shape and Scalar pipeline as {@link openapiConfigSchema}\n * (Scalar auto-detects the document type); only the default `route` differs.\n */\nconst asyncapiConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n route: z.string().default(\"/events\"),\n sources: z.array(openapiSourceSchema).default([]),\n spec: z.string().optional(),\n theme: z.string().optional(),\n })\n .strict();\n\n/** Full user-facing config schema. All fields optional with defaults. */\n/**\n * Table-of-contents config. `true`/`false` toggles it; an object narrows the\n * heading range. Normalized to `{ enabled, minLevel, maxLevel }` (default: on,\n * H2–H3, matching the historical hardcoded range).\n */\nconst tocConfigSchema = z\n .union([\n z.boolean(),\n z\n .object({\n maxHeadingLevel: z.number().int().min(1).max(6).optional(),\n minHeadingLevel: z.number().int().min(1).max(6).optional(),\n })\n .strict(),\n ])\n .default(true)\n .transform((value) => {\n if (typeof value === \"boolean\") {\n return { enabled: value, maxLevel: 3, minLevel: 2 };\n }\n return {\n enabled: true,\n maxLevel: value.maxHeadingLevel ?? 3,\n minLevel: value.minHeadingLevel ?? 2,\n };\n });\n\n/**\n * Which icon library bare `icon` names resolve against (mirrors Mintlify's\n * `icons.library`). Names can always opt into a specific set with an explicit\n * `prefix:name` (`lucide:rocket`, `fa6-brands:github`) regardless of this.\n */\nconst iconsConfigSchema = z\n .object({\n library: z.enum([\"lucide\", \"fontawesome\", \"tabler\"]).default(\"lucide\"),\n })\n .strict();\n\nexport const blumeConfigSchema = z\n .object({\n ai: aiConfigSchema.default({}),\n analytics: analyticsConfigSchema.optional(),\n asyncapi: asyncapiConfigSchema.default({}),\n banner: bannerConfigSchema.optional(),\n content: contentConfigSchema.default({}),\n deployment: deploymentConfigSchema.default({}),\n description: z.string().optional(),\n /**\n * Where `<Component path>` resolves live previews and their source from,\n * relative to the project root. Defaults to the `examples` directory; point\n * it elsewhere when examples live outside a top-level `examples/`.\n *\n * May be a glob (anything with `*`/`?`/`[]`/`{}`/`!`), in which case only\n * matching files are discovered and a `<Component path>` key is relative to\n * the glob's static prefix. Use this for a registry layout that colocates\n * component sources with their examples — `registry/<pkg>/**\\/examples/*`\n * targets just the examples, leaving the sources (which have no default\n * export to wrap) out, so the registry needn't be forked into its own\n * examples directory.\n */\n examples: z.string().default(\"examples\"),\n export: exportConfigSchema.default(false),\n favicon: faviconConfigSchema.optional(),\n feedback: z.boolean().default(true),\n github: githubConfigSchema.optional(),\n i18n: i18nConfigSchema.optional(),\n icons: iconsConfigSchema.default({}),\n lastModified: lastModifiedConfigSchema.default(false),\n logo: logoConfigSchema.optional(),\n markdown: markdownConfigSchema.default({}),\n mcp: mcpConfigSchema.default({}),\n navigation: navigationConfigSchema.default({}),\n openapi: openapiConfigSchema.default({}),\n redirects: z.array(redirectSchema).default([]),\n search: searchConfigSchema.default({}),\n seo: seoConfigSchema.default({}),\n theme: themeConfigSchema.default({}),\n title: z.string().default(\"Documentation\"),\n toc: tocConfigSchema,\n variables: variablesConfigSchema,\n })\n .strict();\n\n/** Resolved config: every field present after defaults are applied. */\nexport type ResolvedConfig = z.infer<typeof blumeConfigSchema>;\n/** Resolved i18n block (present only when the project opts into i18n). */\nexport type ResolvedI18nConfig = z.infer<typeof i18nConfigSchema>;\n/** A configured locale with display metadata. */\nexport type LocaleConfig = z.infer<typeof localeSchema>;\n/** User-authored config: the shape accepted by `defineConfig`. */\nexport type BlumeConfig = z.input<typeof blumeConfigSchema>;\n/** A configured search backend. */\nexport type SearchProvider = (typeof searchProviders)[number];\n",
107
110
  "import type { BlumeConfig } from \"../../core/schema.ts\";\n\n/** A Mintlify `navigation.languages[]` entry. */\ninterface MintlifyLanguage {\n language: string;\n default?: boolean;\n}\n\n/**\n * A display label for a locale code — the language's native name when the\n * runtime knows it (`fr` -> `Français`), else the code itself.\n */\nconst localeLabel = (code: string): string => {\n try {\n const native = new Intl.DisplayNames([code], { type: \"language\" }).of(code);\n if (native && native !== code) {\n return native.charAt(0).toUpperCase() + native.slice(1);\n }\n } catch {\n // Unknown code or no ICU data; fall through to the code.\n }\n return code;\n};\n\n/**\n * Map a Mintlify `navigation.languages[]` array to a Blume `i18n` config. The\n * entry marked `default: true` becomes `defaultLocale`; translated content\n * already lives in ISO-code directories, which match Blume's `dir` parser.\n */\nexport const mintlifyI18n = (\n spec: Record<string, unknown>\n): BlumeConfig[\"i18n\"] | null => {\n const navigation = spec.navigation as\n | { languages?: MintlifyLanguage[] }\n | undefined;\n const languages = navigation?.languages;\n if (!Array.isArray(languages) || languages.length < 2) {\n return null;\n }\n const defaultLocale =\n languages.find((entry) => entry.default)?.language ??\n languages[0]?.language ??\n \"en\";\n return {\n defaultLocale,\n locales: languages.map((entry) => ({\n code: entry.language,\n label: localeLabel(entry.language),\n })),\n };\n};\n",
108
111
  "import type { ResolvedConfig } from \"./schema.ts\";\n\n/** The deployment platforms Blume can infer from runtime/CI env vars. */\ntype DeploymentAdapter = NonNullable<ResolvedConfig[\"deployment\"][\"adapter\"]>;\n\ninterface Platform {\n /** Astro adapter to use when building for server output on this platform. */\n adapter: DeploymentAdapter;\n /** True when the env indicates the build is running on this platform. */\n detect: (env: NodeJS.ProcessEnv) => boolean;\n /** Resolve the canonical site URL from the platform's env vars, or null. */\n site: (env: NodeJS.ProcessEnv) => string | null;\n}\n\n/** Prefix a bare host with `https://`; pass values that are already absolute. */\nconst toUrl = (value: string | undefined): string | null => {\n const trimmed = value?.trim();\n if (!trimmed) {\n return null;\n }\n return /^https?:\\/\\//u.test(trimmed) ? trimmed : `https://${trimmed}`;\n};\n\n/**\n * Platforms checked in order; the first whose `detect` matches wins. Site URLs\n * prefer the stable production domain over per-deployment preview URLs so the\n * inferred origin (sitemap, OG, RSS) stays put across deploys.\n */\nconst PLATFORMS: Platform[] = [\n {\n adapter: \"vercel\",\n detect: (env) => Boolean(env.VERCEL),\n site: (env) => toUrl(env.VERCEL_PROJECT_PRODUCTION_URL ?? env.VERCEL_URL),\n },\n {\n adapter: \"netlify\",\n detect: (env) => Boolean(env.NETLIFY),\n site: (env) => toUrl(env.URL ?? env.DEPLOY_PRIME_URL ?? env.DEPLOY_URL),\n },\n {\n adapter: \"cloudflare\",\n detect: (env) => Boolean(env.CF_PAGES),\n site: (env) => toUrl(env.CF_PAGES_URL),\n },\n];\n\n/**\n * Fill in `deployment.adapter` and `deployment.site` from platform env vars\n * (Vercel, Netlify, Cloudflare Pages) when the user hasn't set them. Explicit\n * config always wins, and the adapter is only inferred for server output (it\n * has no effect on static builds). Mirrors Astro's platform auto-detection so a\n * project deployed to a known host gets a working canonical origin for free.\n */\nexport const applyDeploymentEnv = (\n config: ResolvedConfig,\n env: NodeJS.ProcessEnv = process.env\n): ResolvedConfig => {\n const platform = PLATFORMS.find((candidate) => candidate.detect(env));\n if (!platform) {\n return config;\n }\n\n const { deployment } = config;\n const adapter =\n deployment.adapter ??\n (deployment.output === \"server\" ? platform.adapter : null);\n const site = deployment.site ?? platform.site(env) ?? undefined;\n\n if (adapter === deployment.adapter && site === deployment.site) {\n return config;\n }\n return { ...config, deployment: { ...deployment, adapter, site } };\n};\n",
109
112
  "import { createJiti } from \"jiti\";\n\n/**\n * Create a loader for user-authored ESM/TS modules (`blume.config.ts`,\n * `meta.ts`). One jiti instance is reused across every file the returned loader\n * is called with. `moduleCache: false` ensures edits are picked up on each load,\n * which is what makes dev-server regeneration reflect config/meta changes.\n */\nexport const createModuleLoader = (): ((file: string) => Promise<unknown>) => {\n const jiti = createJiti(import.meta.url, { moduleCache: false });\n return async (file: string) => {\n const loaded = await jiti.import<{ default?: unknown }>(file);\n return loaded?.default ?? loaded;\n };\n};\n",
110
- "import { z } from \"zod\";\n\nimport { FONT_SLUGS, isFontSlug } from \"../theme/fonts.ts\";\nimport { uiLocaleOverridesSchema } from \"./i18n-ui.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\n\n/**\n * Public Blume schemas.\n *\n * These are exported from `blume/schema` so migration tools, editor\n * integrations, and the runtime share a single source of validation truth.\n */\n\n// ---------------------------------------------------------------------------\n// Shared primitives\n// ---------------------------------------------------------------------------\n\n/** Icon inputs in serializable contexts (frontmatter, meta files). */\nconst iconName = z.string().min(1);\n\nconst hydrationMode = z.enum([\"load\", \"idle\", \"visible\", \"media\", \"only\"]);\nexport type HydrationMode = z.infer<typeof hydrationMode>;\n\n/**\n * A publish date in frontmatter. YAML auto-parses an unquoted `2026-01-01` into\n * a `Date`, so accept either form and normalize to an ISO string.\n */\nconst dateSchema = z\n .union([z.string(), z.date()])\n .transform((value) => (value instanceof Date ? value.toISOString() : value));\n\n// ---------------------------------------------------------------------------\n// Page frontmatter\n// ---------------------------------------------------------------------------\n\nconst sidebarMetaSchema = z\n .object({\n badge: z.string().optional(),\n hidden: z.boolean().default(false),\n icon: iconName.optional(),\n label: z.string().optional(),\n order: z.number().optional(),\n })\n .strict();\n\nconst seoMetaSchema = z\n .object({\n canonical: z.string().url().optional(),\n description: z.string().optional(),\n image: z.string().optional(),\n noindex: z.boolean().default(false),\n title: z.string().optional(),\n })\n .strict();\n\nconst searchMetaSchema = z\n .object({\n boost: z.number().optional(),\n exclude: z.boolean().default(false),\n tags: z.array(z.string()).optional(),\n })\n .strict();\n\nconst changelogMetaSchema = z\n .object({\n category: z.string().optional(),\n date: dateSchema.optional(),\n version: z.string().optional(),\n })\n .strict();\n\n/**\n * A post author: a bare name/handle, or an object with a name plus optional\n * avatar/URL. The object is passthrough so richer author metadata (social\n * handles, roles) survives untouched — Blume doesn't render authors yet, so\n * this exists to preserve the field (common on blog/changelog pages) rather\n * than have a strict scan reject it.\n */\nconst authorSchema = z.union([\n z.string(),\n z\n .object({\n avatar: z.string().optional(),\n image: z.string().optional(),\n name: z.string(),\n url: z.string().optional(),\n })\n .passthrough(),\n]);\n\n/** Frontmatter accepted on any content page. */\nconst pageMetaBaseSchema = z\n .object({\n /** Post author(s) for blog/changelog content; preserved, not yet rendered. */\n authors: z.union([authorSchema, z.array(authorSchema)]).optional(),\n changelog: changelogMetaSchema.optional(),\n /** Publish date for feed-backed content like blog/changelog. */\n date: dateSchema.optional(),\n deprecated: z.boolean().default(false),\n description: z.string().optional(),\n draft: z.boolean().default(false),\n groups: z.union([z.string(), z.array(z.string())]).optional(),\n hidden: z.boolean().default(false),\n hideApiMarker: z.boolean().default(false),\n hideFooterPagination: z.boolean().optional(),\n icon: iconName.optional(),\n iconType: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n /** Overrides the git-derived last-modified date when `lastModified` is on. */\n lastModified: dateSchema.optional(),\n mode: z.string().optional(),\n noindex: z.boolean().default(false),\n public: z.boolean().optional(),\n rss: z.boolean().optional(),\n search: searchMetaSchema.default({}),\n seo: seoMetaSchema.default({}),\n sidebar: sidebarMetaSchema.default({}),\n sidebarTitle: z.string().optional(),\n slug: z.string().optional(),\n tag: z.string().optional(),\n title: z.string().optional(),\n type: z.string().default(\"doc\"),\n })\n .strict();\n\nexport const pageMetaSchema = pageMetaBaseSchema;\n\nexport type PageMeta = z.infer<typeof pageMetaBaseSchema>;\nexport type PageMetaInput = z.input<typeof pageMetaBaseSchema>;\n\n// ---------------------------------------------------------------------------\n// Folder meta (meta.ts)\n// ---------------------------------------------------------------------------\n\n/**\n * How a sidebar group renders:\n * - `flat`: a non-collapsible header with its items listed beneath (default).\n * - `group`: a collapsible `<details>` disclosure.\n * - `page`: a single row that drills into a sub-panel showing only this group's\n * items, with a back arrow at the top.\n */\nconst sidebarDisplaySchema = z.enum([\"flat\", \"group\", \"page\"]);\nexport type SidebarDisplay = z.infer<typeof sidebarDisplaySchema>;\n\nexport const folderMetaSchema = z\n .object({\n collapsed: z.boolean().optional(),\n display: sidebarDisplaySchema.optional(),\n icon: iconName.optional(),\n order: z.number().optional(),\n /** Explicit child ordering by slug segment (without numeric prefix). */\n pages: z.array(z.string()).optional(),\n title: z.string().optional(),\n })\n .strict();\n\nexport type FolderMeta = z.infer<typeof folderMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// Project config (blume.config.ts)\n// ---------------------------------------------------------------------------\n\nconst logoConfigSchema = z.union([\n z.string(),\n z\n .object({\n alt: z.string().optional(),\n dark: z.string().optional(),\n href: z.string().optional(),\n light: z.string().optional(),\n })\n .strict(),\n]);\n\nconst faviconConfigSchema = z.union([\n z.string(),\n z\n .object({\n dark: z.string().optional(),\n light: z.string().optional(),\n })\n .strict(),\n]);\n\nconst bannerColorSchema = z\n .object({\n dark: z.string().optional(),\n light: z.string().optional(),\n })\n .strict()\n .refine((value) => value.dark !== undefined || value.light !== undefined, {\n message: \"Banner color requires at least one of light or dark.\",\n });\n\n/** Site-wide announcement banner: a string, or text with an optional link. */\nconst bannerConfigSchema = z.union([\n z.string(),\n z\n .object({\n /** Background color override (Mintlify compatibility). */\n color: bannerColorSchema.optional(),\n content: z.string(),\n /** Show a dismiss button; the choice is remembered per visitor. */\n dismissible: z.boolean().default(false),\n /** Stable key for remembering dismissal; defaults to the content. */\n id: z.string().optional(),\n link: z\n .object({ href: z.string(), text: z.string() })\n .strict()\n .optional(),\n /** Tone (Mintlify compatibility). */\n type: z.enum([\"info\", \"warning\", \"critical\"]).optional(),\n })\n .strict(),\n]);\n\n/** A local filesystem content source. */\nconst filesystemSourceSchema = z\n .object({\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n root: z.string().default(\"docs\"),\n type: z.literal(\"filesystem\"),\n })\n .strict();\n\n/**\n * Remote Markdown/MDX fetched over HTTP. Enumerate files either explicitly\n * (`files` against a raw `url` base) or from a GitHub repo subtree (`github`).\n * The token, when needed, comes from `GITHUB_TOKEN` — never inlined here.\n */\nconst mdxRemoteSourceSchema = z\n .object({\n /** Explicit list of source-relative file paths to fetch from `url`. */\n files: z.array(z.string()).optional(),\n /** Enumerate a GitHub repo subtree via the git-trees API. */\n github: z\n .object({\n owner: z.string(),\n path: z.string().default(\"\"),\n ref: z.string().default(\"main\"),\n repo: z.string(),\n })\n .strict()\n .optional(),\n /** Glob patterns applied to enumerated refs. */\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n type: z.literal(\"mdx-remote\"),\n /** Raw base URL, e.g. `https://raw.githubusercontent.com/acme/sdk/main/docs`. */\n url: z.string().optional(),\n })\n .strict();\n\n/** A Sanity dataset queried with GROQ; Portable Text bodies become Markdown. */\nconst sanitySourceSchema = z.object({\n /** Sanity API version (a date); default `2024-01-01`. */\n apiVersion: z.string().optional(),\n dataset: z.string(),\n /** Field paths mapping a document onto Blume meta + body. */\n fields: z\n .object({\n body: z.string().optional(),\n description: z.string().optional(),\n lastModified: z.string().optional(),\n slug: z.string().optional(),\n title: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n prefix: z.string().optional(),\n projectId: z.string(),\n /** GROQ query selecting the documents to import. */\n query: z.string(),\n type: z.literal(\"sanity\"),\n});\n\n/** A Notion database; pages become entries, blocks become MDX. */\nconst notionSourceSchema = z.object({\n database: z.string(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n prefix: z.string().optional(),\n /** Notion property names mapped onto Blume meta. */\n properties: z\n .object({\n description: z.string().optional(),\n order: z.string().optional(),\n slug: z.string().optional(),\n status: z.string().optional(),\n title: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Status value treated as published; others map to `draft`. Default `Published`. */\n publishedValue: z.string().optional(),\n type: z.literal(\"notion\"),\n});\n\n/**\n * A repo's GitHub Releases, materialized as `type: changelog` entries — release\n * notes become the changelog with no files to maintain. A private repo reads a\n * token from `GITHUB_TOKEN`; it is never inlined here.\n */\nconst githubReleasesSourceSchema = z\n .object({\n /** Include draft releases (needs a token with repo write access). */\n drafts: z.boolean().optional(),\n /** Cap the number of releases materialized, newest-first. Default 100. */\n limit: z.number().positive().optional(),\n /** Repository owner (user or org). */\n owner: z.string(),\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval: z.number().positive().optional(),\n /** Namespaces the source's routes under `/<prefix>/`; e.g. `changelog`. */\n prefix: z.string().optional(),\n /** Include prereleases. */\n prereleases: z.boolean().optional(),\n /** Repository name. */\n repo: z.string(),\n type: z.literal(\"github-releases\"),\n })\n .strict();\n\n/**\n * In-place Mintlify content (`docs.json` + MDX). Powers \"bridge mode\": Blume\n * reads an unconverted Mintlify project, transforming each page to Blume MDX at\n * scan time. Injected automatically by `loadConfig` when a `docs.json` is found\n * and no `blume.config.*` exists; can also be configured explicitly.\n */\nconst mintlifySourceSchema = z\n .object({\n /** Absolute path of the `docs.json`/`mint.json`, watched for changes in dev. */\n configFile: z.string().optional(),\n /** Patterns excluded from page discovery (Mintlify defaults are merged in). */\n exclude: z.array(z.string()).default([]),\n /** Glob patterns for Mintlify content files. */\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n /** Namespaces the source's routes under `/<prefix>/`. */\n prefix: z.string().optional(),\n /** Content root, absolute or relative to the project root (Mintlify: `.`). */\n root: z.string().default(\".\"),\n type: z.literal(\"mintlify\"),\n /** `docs.json` variables, inlined into content (`{{name}}`) at scan time. */\n variables: z.record(z.string(), z.string()).default({}),\n })\n .strict();\n\n/**\n * A user-provided `ContentSource` instance, passed straight through from\n * `blume.config.ts`. This is the extension point that lets adapters with custom\n * serializers (or any backend) ship without their SDKs touching core.\n */\nconst customSourceSchema = z.object({\n source: z.custom<ContentSource>(\n (val) =>\n typeof val === \"object\" &&\n val !== null &&\n typeof (val as { load?: unknown }).load === \"function\" &&\n typeof (val as { name?: unknown }).name === \"string\",\n { message: \"custom source must be a ContentSource (with name + load)\" }\n ),\n type: z.literal(\"custom\"),\n});\n\n/** A single configured content source. */\nconst contentSourceSchema = z.discriminatedUnion(\"type\", [\n filesystemSourceSchema,\n mdxRemoteSourceSchema,\n githubReleasesSourceSchema,\n sanitySourceSchema,\n notionSourceSchema,\n mintlifySourceSchema,\n customSourceSchema,\n]);\n\n/** A resolved content-source config entry (post-defaults). */\nexport type ContentSourceConfig = z.infer<typeof contentSourceSchema>;\n\nconst contentConfigSchema = z\n .object({\n /**\n * Extra top-level directories (relative to the project root) served as\n * static assets at the site root, alongside `public/`. Lets projects keep\n * root-served asset folders in place — e.g. a Mintlify migration keeps\n * `images/` where it is instead of relocating it under `public/`.\n */\n assets: z.array(z.string()).default([]),\n defaultType: z.string().default(\"doc\"),\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([\"**/*.{md,mdx}\"]),\n pages: z.string().default(\"pages\"),\n root: z.string().default(\"docs\"),\n /**\n * Pluggable content sources. When omitted, the top-level\n * `root`/`include`/`exclude` desugar to one implicit filesystem source, so\n * existing projects are unchanged.\n */\n sources: z.array(contentSourceSchema).optional(),\n })\n .strict();\n\nconst navTabSchema = z\n .object({\n icon: iconName.optional(),\n items: z\n .array(\n z\n .object({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n .strict()\n )\n .optional(),\n label: z.string(),\n path: z.string(),\n })\n .strict();\n\nconst navSelectorItemSchema = z\n .object({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n .strict();\n\nconst navSelectorSchema = z\n .object({\n items: z.array(navSelectorItemSchema).default([]),\n kind: z.enum([\"dropdown\", \"language\", \"product\", \"version\"]),\n label: z.string(),\n })\n .strict();\n\nconst directoryModeSchema = z.enum([\"accordion\", \"card\", \"none\"]);\nexport type DirectoryMode = z.infer<typeof directoryModeSchema>;\n\n/** A node in an explicit sidebar config: a page reference or a group/link. */\nexport type SidebarItemConfig =\n | string\n | {\n label: string;\n badge?: string;\n directory?: DirectoryMode;\n display?: SidebarDisplay;\n href?: string;\n icon?: string;\n collapsed?: boolean;\n items?: SidebarItemConfig[];\n root?: string;\n };\n\nconst sidebarItemSchema: z.ZodType<SidebarItemConfig> = z.lazy(() =>\n z.union([\n z.string(),\n z\n .object({\n badge: z.string().optional(),\n collapsed: z.boolean().optional(),\n directory: directoryModeSchema.optional(),\n display: sidebarDisplaySchema.optional(),\n href: z.string().optional(),\n icon: iconName.optional(),\n items: z.array(sidebarItemSchema).optional(),\n label: z.string(),\n root: z.string().optional(),\n })\n .strict(),\n ])\n);\n\nconst variablesConfigSchema = z\n .record(z.string().regex(/^[A-Za-z0-9-]+$/u), z.string())\n .default({});\n\n/** A curated Google Font slug (see `theme/fonts.ts`). */\nconst fontSlug = z.string().refine(isFontSlug, (value) => ({\n message: `Unknown font \"${value}\". Supported fonts: ${FONT_SLUGS.join(\", \")}.`,\n}));\n\nconst themeConfigSchema = z\n .object({\n accent: z.string().default(\"blue\"),\n accentDark: z.string().optional(),\n action: z.string().optional(),\n background: z.string().optional(),\n backgroundDark: z.string().optional(),\n backgroundDecoration: z.enum([\"gradient\", \"grid\", \"windows\"]).optional(),\n backgroundImage: z.string().optional(),\n backgroundImageDark: z.string().optional(),\n fonts: z\n .object({\n body: fontSlug.default(\"inter\"),\n display: fontSlug.default(\"inter-tight\"),\n mono: fontSlug.default(\"ibm-plex-mono\"),\n })\n .strict()\n .default({}),\n layout: z.enum([\"sidebar\"]).default(\"sidebar\"),\n mode: z.enum([\"system\", \"light\", \"dark\"]).default(\"system\"),\n radius: z.enum([\"none\", \"sm\", \"md\", \"lg\"]).default(\"md\"),\n strict: z.boolean().default(false),\n })\n .strict();\n\n/** Public credentials for the Algolia search backend (sync key is an env var). */\nconst algoliaSearchSchema = z\n .object({\n appId: z.string(),\n indexName: z.string(),\n searchApiKey: z.string(),\n })\n .strict();\n\n/** Public credentials for the Orama Cloud search backend. */\nconst oramaCloudSearchSchema = z\n .object({\n apiKey: z.string(),\n endpoint: z.string(),\n /** Index id used by the build-time sync (with `ORAMA_PRIVATE_API_KEY`). */\n indexId: z.string().optional(),\n })\n .strict();\n\n/** Public credentials for a (self-hosted or cloud) Typesense backend. */\nconst typesenseSearchSchema = z\n .object({\n collection: z.string(),\n host: z.string(),\n port: z.number().int().positive().optional(),\n protocol: z.enum([\"http\", \"https\"]).optional(),\n searchApiKey: z.string(),\n })\n .strict();\n\n/** Mixedbread semantic search: the store the server endpoint queries. */\nconst mixedbreadSearchSchema = z\n .object({\n storeId: z.string(),\n })\n .strict();\n\nexport const searchProviders = [\n \"orama\",\n \"pagefind\",\n \"flexsearch\",\n \"algolia\",\n \"orama-cloud\",\n \"typesense\",\n \"mixedbread\",\n \"none\",\n] as const;\n\n/** Providers that need a config block, mapped to its `search.*` key. */\nconst PROVIDER_CONFIG_KEY = {\n algolia: \"algolia\",\n mixedbread: \"mixedbread\",\n \"orama-cloud\": \"oramaCloud\",\n typesense: \"typesense\",\n} as const;\n\nconst searchConfigSchema = z\n .object({\n algolia: algoliaSearchSchema.optional(),\n indexing: z\n .object({\n includeHiddenPages: z.boolean().default(false),\n })\n .strict()\n .default({}),\n mixedbread: mixedbreadSearchSchema.optional(),\n oramaCloud: oramaCloudSearchSchema.optional(),\n prompt: z.string().optional(),\n provider: z.enum(searchProviders).default(\"orama\"),\n typesense: typesenseSearchSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n // Hosted providers can't work without their credentials; flag a missing\n // block with a path so the diagnostic points at `search.<provider>`.\n const field =\n PROVIDER_CONFIG_KEY[value.provider as keyof typeof PROVIDER_CONFIG_KEY];\n if (field && !value[field]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `search.${field} is required when provider is \"${value.provider}\".`,\n path: [field],\n });\n }\n });\n\n/** Ask AI backends. `gateway` (default) routes through the Vercel AI Gateway. */\nexport const askAiProviders = [\n \"gateway\",\n \"openrouter\",\n \"llmgateway\",\n \"inkeep\",\n \"openai-compatible\",\n] as const;\n\nconst aiConfigSchema = z\n .object({\n ask: z\n .object({\n // Name of the env var holding the provider's API key; each provider has\n // a sensible default, so this only needs setting to override it.\n apiKeyEnv: z.string().optional(),\n // Base URL of the backend. Required for `openai-compatible`; for the\n // named providers it overrides the built-in preset.\n baseUrl: z.string().url().optional(),\n enabled: z.boolean().default(false),\n model: z.string().default(\"openai/gpt-5.5\"),\n provider: z.enum(askAiProviders).default(\"gateway\"),\n })\n .strict()\n .superRefine((value, ctx) => {\n // A generic OpenAI-compatible backend has no preset URL, so the user\n // must supply one; the named providers fall back to their preset.\n if (value.provider === \"openai-compatible\" && !value.baseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n 'ai.ask.baseUrl is required when provider is \"openai-compatible\".',\n path: [\"baseUrl\"],\n });\n }\n })\n .optional(),\n llmsTxt: z.boolean().default(false),\n })\n .strict();\n\nconst chromeVariantSchema = z\n .object({\n banner: bannerConfigSchema.optional(),\n path: z.string(),\n })\n .strict();\n\nconst navigationConfigSchema = z\n .object({\n chromeVariants: z.array(chromeVariantSchema).default([]),\n /** Show a GitHub repo link in the header (requires `github` configured). */\n repo: z.boolean().default(true),\n selectors: z.array(navSelectorSchema).default([]),\n /** Explicit sidebar override; when omitted the sidebar is generated. */\n sidebar: z.array(sidebarItemSchema).optional(),\n tabs: z.array(navTabSchema).optional(),\n })\n .strict();\n\nexport type AskAiProvider = (typeof askAiProviders)[number];\nexport type AskAiConfig = NonNullable<z.infer<typeof aiConfigSchema>[\"ask\"]>;\n\n// Reader-facing \"Export\" page action (PDF via print, EPUB via client-side\n// generation). Off by default. Accepts a shorthand boolean to toggle both\n// formats, or an object to enable them individually; both normalize to\n// `{ epub, pdf }` so consumers read plain booleans.\nconst exportConfigSchema = z\n .union([\n z.boolean(),\n z\n .object({\n epub: z.boolean().default(false),\n pdf: z.boolean().default(false),\n })\n .strict(),\n ])\n .transform((value) =>\n typeof value === \"boolean\" ? { epub: value, pdf: value } : value\n );\n\nconst mcpConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n /** Optional system hint passed to connecting agents. */\n instructions: z.string().optional(),\n /** Server name shown to clients; defaults to the site title. */\n name: z.string().optional(),\n route: z.string().default(\"/mcp\"),\n })\n .strict();\n\n/** A configured locale: ISO-ish code plus display metadata for the switcher. */\nconst localeSchema = z\n .object({\n code: z.string().min(1),\n /** Text direction; drives `<html dir>` and a future RTL pass. */\n dir: z.enum([\"ltr\", \"rtl\"]).default(\"ltr\"),\n label: z.string(),\n })\n .strict();\n\n/**\n * Internationalization. Opt-in: when absent, Blume is single-locale and behaves\n * exactly as before. The default locale lives at the content root; other locales\n * are top-level directories named by `code` (the `dir` parser).\n */\nconst i18nConfigSchema = z\n .object({\n defaultLocale: z.string().default(\"en\"),\n /** Locale rendered for a missing translation; `null` disables fallback. */\n fallbackLocale: z.string().nullable().optional(),\n /** Drop the URL prefix for the default locale (`/`, `/fr/…`). Static-safe. */\n hideDefaultLocalePrefix: z.boolean().default(true),\n locales: z.array(localeSchema).min(1),\n /** `\"dir\"`: locale directories (`fr/page.mdx`). `\"dot\"`: filename suffix (`page.fr.mdx`). */\n parser: z.enum([\"dir\", \"dot\"]).default(\"dir\"),\n /** Per-locale UI string overrides: `{ fr: { search: { button: \"…\" } } }`. */\n ui: uiLocaleOverridesSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const codes = new Set(value.locales.map((locale) => locale.code));\n if (!codes.has(value.defaultLocale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `i18n.defaultLocale \"${value.defaultLocale}\" must match one of i18n.locales.`,\n path: [\"defaultLocale\"],\n });\n }\n if (\n value.fallbackLocale !== null &&\n value.fallbackLocale !== undefined &&\n !codes.has(value.fallbackLocale)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `i18n.fallbackLocale \"${value.fallbackLocale}\" must match one of i18n.locales.`,\n path: [\"fallbackLocale\"],\n });\n }\n });\n\nconst analyticsScriptSchema = z\n .object({\n // Extra attributes (e.g. `data-domain`, `id`) spread onto the <script>.\n attributes: z.record(z.string(), z.string()).optional(),\n // Inline script body, mutually exclusive with `src`.\n content: z.string().optional(),\n // External script URL, mutually exclusive with `content`.\n src: z.string().optional(),\n // Load strategy for an external script.\n strategy: z.enum([\"async\", \"defer\"]).optional(),\n })\n .strict()\n .refine((value) => Boolean(value.src) !== Boolean(value.content), {\n message: \"An analytics script must set exactly one of `src` or `content`.\",\n });\n\nconst analyticsConfigSchema = z\n .object({\n posthog: z\n .object({\n host: z.string().optional(),\n key: z.string(),\n })\n .strict()\n .optional(),\n // Escape hatch for any other provider (Plausible, Fathom, GA, Umami, …).\n scripts: z.array(analyticsScriptSchema).optional(),\n vercel: z.boolean().optional(),\n })\n .strict();\n\nconst deploymentConfigSchema = z\n .object({\n adapter: z\n .enum([\"vercel\", \"node\", \"netlify\", \"cloudflare\"])\n .nullable()\n .default(null),\n base: z.string().optional(),\n output: z.enum([\"static\", \"server\"]).default(\"static\"),\n site: z.string().url().optional(),\n })\n .strict();\n\nconst redirectSchema = z\n .object({\n from: z.string(),\n status: z\n .union([z.literal(301), z.literal(302), z.literal(307), z.literal(308)])\n .default(301),\n to: z.string(),\n })\n .strict();\n\nconst ogConfigSchema = z\n .object({\n /**\n * Generate a per-page Open Graph image. Defaults to on once a deployment\n * site URL is known (set or auto-detected) and off otherwise, since\n * `og:image` must be absolute to be useful to crawlers — resolved in\n * `loadConfig`. An explicit value here always wins.\n */\n enabled: z.boolean().optional(),\n })\n .strict();\n\nconst rssConfigSchema = z\n .object({\n enabled: z.boolean().default(true),\n /** Max items per feed, newest first. */\n limit: z.number().int().positive().default(50),\n /** Content types that each get a feed at `/<type>/rss.xml`. */\n types: z.array(z.string()).default([\"blog\", \"changelog\"]),\n })\n .strict();\n\n/** Discoverability features: OG images, feeds, sitemap, structured data. */\nconst seoConfigSchema = z\n .object({\n metatags: z.record(z.string(), z.string()).default({}),\n og: ogConfigSchema.default({}),\n /** Generate robots.txt (with a Sitemap reference when available). */\n robots: z.boolean().default(true),\n rss: rssConfigSchema.default({}),\n /** Generate sitemap.xml (requires deployment.site). */\n sitemap: z.boolean().default(true),\n /** Emit schema.org JSON-LD in each page's <head>. */\n structuredData: z.boolean().default(true),\n })\n .strict();\n\nconst githubConfigSchema = z\n .object({\n branch: z.string().default(\"main\"),\n /** Path from the repo root to the project root (for monorepos). */\n dir: z.string().optional(),\n owner: z.string(),\n repo: z.string(),\n })\n .strict();\n\nconst codeBlockThemeSchema = z\n .object({\n dark: z.string().default(\"github-dark\"),\n light: z.string().default(\"github-light\"),\n })\n .strict();\n\nconst codeBlocksConfigSchema = z\n .object({\n theme: codeBlockThemeSchema.default({}),\n })\n .strict();\n\n/**\n * \"Last updated\" timestamps for content pages. `false` (default) disables the\n * feature; `true` derives each page's date from git history; an object selects\n * the source explicitly. A page's `lastModified` frontmatter always wins.\n */\nconst lastModifiedConfigSchema = z.union([\n z.boolean(),\n z.object({ type: z.enum([\"git\", \"frontmatter\"]).default(\"git\") }).strict(),\n]);\n\n/** Code-block rendering options (`markdown.code`). */\nconst codeConfigSchema = z\n .object({\n /**\n * Show a brand language icon in the code-block header (TypeScript, Python,\n * …). On by default; recognized languages only.\n */\n icons: z.boolean().default(true),\n /**\n * Syntax-highlight inline `` `code{:lang}` `` snippets. Off by default — most\n * inline code (flags, file names) reads better plain; opt a snippet in with\n * a trailing `{:lang}` marker.\n */\n inline: z.boolean().default(false),\n /**\n * Wrap long lines instead of scrolling horizontally. Off by default, so\n * code keeps its original line breaks and overflows into a scroll area.\n */\n wrap: z.boolean().default(false),\n })\n .strict();\n\nconst markdownConfigSchema = z\n .object({\n /** Code-block rendering: language icons and line wrapping. */\n code: codeConfigSchema.default({}),\n codeBlocks: codeBlocksConfigSchema.default({}),\n /**\n * Wrap each `##`–`######` heading in a link to its own anchor so readers can\n * click to copy, bookmark, or share a permalink to that section. On by\n * default; set to `false` to render plain headings.\n */\n headingAnchors: z.boolean().default(true),\n /**\n * Make content images click-to-zoom (open in a lightbox). On by default;\n * opt a single image out with `data-no-zoom`.\n */\n imageZoom: z.boolean().default(true),\n /**\n * Enable LaTeX math (`$…$` inline, `$$…$$` block) rendered with KaTeX.\n * Off by default since `$` is common in prose, shell, and code. MDX only.\n */\n math: z.boolean().default(false),\n })\n .strict();\n\n/**\n * A single spec rendered by the API reference. `spec` is a local path or an\n * `http(s)` URL (OpenAPI for the Blume renderer; OpenAPI or AsyncAPI for Scalar).\n */\nconst openapiSourceSchema = z\n .object({\n /** Nav/section label for this source. */\n label: z.string().optional(),\n /** Per-source route; defaults to the block's `route` (or a derived path). */\n route: z.string().optional(),\n /** Local path or `http(s)` URL to the spec. */\n spec: z.string(),\n })\n .strict();\n\nexport type OpenApiSource = z.infer<typeof openapiSourceSchema>;\n\n/**\n * OpenAPI reference. By default (`renderer: \"blume\"`) Blume parses the spec with\n * Scalar's parser and renders its own UI: one real page per operation, grouped\n * by tag in the sidebar and included in site search, llms.txt, and OG. Set\n * `renderer: \"scalar\"` to fall back to the embedded Scalar SPA (a single\n * self-contained route that doesn't weave into the sidebar or search).\n */\nconst openapiConfigSchema = z\n .object({\n /** Code-sample languages shown per operation (Blume renderer). */\n codeSamples: z.array(z.string()).default([\"curl\", \"js\", \"python\"]),\n enabled: z.boolean().default(false),\n /** Start nested schema rows expanded rather than collapsed (Blume renderer). */\n expandSchemas: z.boolean().default(false),\n /** Who renders the reference: Blume's own UI, or the embedded Scalar SPA. */\n renderer: z.enum([\"blume\", \"scalar\"]).default(\"blume\"),\n /** Where the reference mounts. */\n route: z.string().default(\"/reference\"),\n /** One or more specs; each renders on its own route by default. */\n sources: z.array(openapiSourceSchema).default([]),\n /** Shorthand for a single source: `sources: [{ spec }]`. */\n spec: z.string().optional(),\n /** Scalar theme name (Scalar renderer only). */\n theme: z.string().optional(),\n })\n .strict();\n\n/**\n * AsyncAPI reference. Same shape and Scalar pipeline as {@link openapiConfigSchema}\n * (Scalar auto-detects the document type); only the default `route` differs.\n */\nconst asyncapiConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n route: z.string().default(\"/events\"),\n sources: z.array(openapiSourceSchema).default([]),\n spec: z.string().optional(),\n theme: z.string().optional(),\n })\n .strict();\n\n/** Full user-facing config schema. All fields optional with defaults. */\n/**\n * Table-of-contents config. `true`/`false` toggles it; an object narrows the\n * heading range. Normalized to `{ enabled, minLevel, maxLevel }` (default: on,\n * H2–H3, matching the historical hardcoded range).\n */\nconst tocConfigSchema = z\n .union([\n z.boolean(),\n z\n .object({\n maxHeadingLevel: z.number().int().min(1).max(6).optional(),\n minHeadingLevel: z.number().int().min(1).max(6).optional(),\n })\n .strict(),\n ])\n .default(true)\n .transform((value) => {\n if (typeof value === \"boolean\") {\n return { enabled: value, maxLevel: 3, minLevel: 2 };\n }\n return {\n enabled: true,\n maxLevel: value.maxHeadingLevel ?? 3,\n minLevel: value.minHeadingLevel ?? 2,\n };\n });\n\n/**\n * Which icon library bare `icon` names resolve against (mirrors Mintlify's\n * `icons.library`). Names can always opt into a specific set with an explicit\n * `prefix:name` (`lucide:rocket`, `fa6-brands:github`) regardless of this.\n */\nconst iconsConfigSchema = z\n .object({\n library: z.enum([\"lucide\", \"fontawesome\", \"tabler\"]).default(\"lucide\"),\n })\n .strict();\n\nexport const blumeConfigSchema = z\n .object({\n ai: aiConfigSchema.default({}),\n analytics: analyticsConfigSchema.optional(),\n asyncapi: asyncapiConfigSchema.default({}),\n banner: bannerConfigSchema.optional(),\n content: contentConfigSchema.default({}),\n deployment: deploymentConfigSchema.default({}),\n description: z.string().optional(),\n /**\n * Where `<Component path>` resolves live previews and their source from,\n * relative to the project root. Defaults to the `examples` directory; point\n * it elsewhere when examples live outside a top-level `examples/`.\n *\n * May be a glob (anything with `*`/`?`/`[]`/`{}`/`!`), in which case only\n * matching files are discovered and a `<Component path>` key is relative to\n * the glob's static prefix. Use this for a registry layout that colocates\n * component sources with their examples — `registry/<pkg>/**\\/examples/*`\n * targets just the examples, leaving the sources (which have no default\n * export to wrap) out, so the registry needn't be forked into its own\n * examples directory.\n */\n examples: z.string().default(\"examples\"),\n export: exportConfigSchema.default(false),\n favicon: faviconConfigSchema.optional(),\n feedback: z.boolean().default(true),\n github: githubConfigSchema.optional(),\n i18n: i18nConfigSchema.optional(),\n icons: iconsConfigSchema.default({}),\n lastModified: lastModifiedConfigSchema.default(false),\n logo: logoConfigSchema.optional(),\n markdown: markdownConfigSchema.default({}),\n mcp: mcpConfigSchema.default({}),\n navigation: navigationConfigSchema.default({}),\n openapi: openapiConfigSchema.default({}),\n redirects: z.array(redirectSchema).default([]),\n search: searchConfigSchema.default({}),\n seo: seoConfigSchema.default({}),\n theme: themeConfigSchema.default({}),\n title: z.string().default(\"Documentation\"),\n toc: tocConfigSchema,\n variables: variablesConfigSchema,\n })\n .strict();\n\n/** Resolved config: every field present after defaults are applied. */\nexport type ResolvedConfig = z.infer<typeof blumeConfigSchema>;\n/** Resolved i18n block (present only when the project opts into i18n). */\nexport type ResolvedI18nConfig = z.infer<typeof i18nConfigSchema>;\n/** A configured locale with display metadata. */\nexport type LocaleConfig = z.infer<typeof localeSchema>;\n/** User-authored config: the shape accepted by `defineConfig`. */\nexport type BlumeConfig = z.input<typeof blumeConfigSchema>;\n/** A configured search backend. */\nexport type SearchProvider = (typeof searchProviders)[number];\n",
111
- "import { extname } from \"pathe\";\n\nimport type {\n FolderMeta,\n SidebarDisplay,\n SidebarItemConfig,\n} from \"./schema.ts\";\nimport type {\n NavChromeVariant,\n NavNode,\n Navigation,\n NavSelector,\n NavTab,\n PageRecord,\n} from \"./types.ts\";\n\nconst NUMERIC_PREFIX = /^(?<order>\\d+)[-_.]/u;\nconst GROUP_FOLDER = /^\\((?<label>.+)\\)$/u;\nconst WORD_SPLIT = /[-_]/u;\n\nconst humanize = (segment: string): string =>\n segment\n .replace(NUMERIC_PREFIX, \"\")\n .split(WORD_SPLIT)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\nconst numericOrder = (segment: string): number => {\n const value = segment.match(NUMERIC_PREFIX)?.groups?.order;\n return value ? Number.parseInt(value, 10) : Number.POSITIVE_INFINITY;\n};\n\n/** The nav key of a raw path segment: group label or numeric-stripped name. */\nconst segmentKey = (raw: string): string => {\n const group = raw.match(GROUP_FOLDER)?.groups?.label;\n return (group ?? raw).replace(NUMERIC_PREFIX, \"\");\n};\n\ninterface MutablePage {\n kind: \"page\";\n key: string;\n label: string;\n route: string;\n description?: string;\n icon?: string;\n badge?: string;\n deprecated?: boolean;\n pageId: string;\n order: number;\n}\n\ninterface MutableGroup {\n kind: \"group\";\n key: string;\n path: string;\n /** The group's URL path (folder route prefix); set as pages are inserted. */\n routePath?: string;\n label: string;\n icon?: string;\n collapsed?: boolean;\n display?: SidebarDisplay;\n order: number;\n children: MutableNode[];\n index: Map<string, MutableGroup>;\n}\n\ntype MutableNode = MutablePage | MutableGroup;\n\nconst createGroup = (\n key: string,\n path: string,\n label: string,\n order: number\n): MutableGroup => ({\n children: [],\n index: new Map(),\n key,\n kind: \"group\",\n label,\n order,\n path,\n});\n\nconst ensureGroup = (\n parent: MutableGroup,\n rawSegment: string\n): MutableGroup => {\n const existing = parent.index.get(rawSegment);\n if (existing) {\n return existing;\n }\n const path = parent.path ? `${parent.path}/${rawSegment}` : rawSegment;\n const group = createGroup(\n segmentKey(rawSegment),\n path,\n humanize(rawSegment.match(GROUP_FOLDER)?.groups?.label ?? rawSegment),\n numericOrder(rawSegment)\n );\n parent.index.set(rawSegment, group);\n parent.children.push(group);\n return group;\n};\n\nconst pageOrder = (page: PageRecord, filename: string): number => {\n if (page.meta.sidebar.order !== undefined) {\n return page.meta.sidebar.order;\n }\n if (filename.replace(extname(filename), \"\") === \"index\") {\n return Number.NEGATIVE_INFINITY;\n }\n return numericOrder(filename);\n};\n\n/**\n * Folder-meta lookup key for a group path. Under i18n the meta files live in\n * the locale directory (`fr/guides/meta.ts` -> key `fr/guides`) while the\n * nav group path is locale-stripped (`guides`), so prepend the locale prefix.\n */\nconst metaKey = (path: string, metaPrefix: string): string => {\n if (!metaPrefix) {\n return path;\n }\n return path ? `${metaPrefix}/${path}` : metaPrefix;\n};\n\n/** Apply folder meta (title/order/icon/collapsed and explicit page order). */\nconst applyFolderMeta = (\n group: MutableGroup,\n folderMeta: Map<string, FolderMeta>,\n sharedMeta: Map<string, FolderMeta>,\n metaPrefix: string\n): void => {\n // Locale-specific meta wins; a shared `meta.$.*` (keyed by the locale-stripped\n // group path) applies to every locale otherwise.\n const meta =\n folderMeta.get(metaKey(group.path, metaPrefix)) ??\n sharedMeta.get(group.path);\n if (meta) {\n group.label = meta.title ?? group.label;\n group.icon = meta.icon ?? group.icon;\n group.order = meta.order ?? group.order;\n group.collapsed = meta.collapsed ?? group.collapsed;\n group.display = meta.display ?? group.display;\n\n if (meta.pages) {\n const rank = new Map(meta.pages.map((key, i) => [key, i]));\n for (const child of group.children) {\n const position = rank.get(child.key);\n if (position !== undefined) {\n child.order = position;\n }\n }\n }\n }\n\n for (const child of group.children) {\n if (child.kind === \"group\") {\n applyFolderMeta(child, folderMeta, sharedMeta, metaPrefix);\n }\n }\n};\n\nconst sortNodes = (nodes: MutableNode[]): void => {\n nodes.sort((a, b) => {\n if (a.order !== b.order) {\n return a.order - b.order;\n }\n return a.label.localeCompare(b.label);\n });\n for (const node of nodes) {\n if (node.kind === \"group\") {\n sortNodes(node.children);\n }\n }\n};\n\nconst toNavNode = (node: MutableNode): NavNode => {\n if (node.kind === \"page\") {\n return {\n badge: node.badge,\n deprecated: node.deprecated || undefined,\n description: node.description,\n icon: node.icon,\n kind: \"page\",\n label: node.label,\n pageId: node.pageId,\n route: node.route,\n };\n }\n return {\n children: node.children.map(toNavNode),\n collapsed: node.collapsed,\n display: node.display,\n icon: node.icon,\n kind: \"group\",\n label: node.label,\n path: node.routePath,\n };\n};\n\n/** Build the sidebar tree from the file system and folder meta. */\nconst buildFileSystemSidebar = (\n pages: PageRecord[],\n folderMeta: Map<string, FolderMeta>,\n sharedMeta: Map<string, FolderMeta>,\n metaPrefix: string\n): NavNode[] => {\n const root = createGroup(\"\", \"\", \"\", 0);\n\n for (const page of pages) {\n if (page.meta.sidebar.hidden) {\n continue;\n }\n // Group by the locale-stripped path so the locale dir is not a nav group.\n const parts = page.navPath.split(\"/\");\n const filename = parts.at(-1) ?? page.navPath;\n const dirs = parts.slice(0, -1);\n\n // Each group's URL path is the matching prefix of the page's route. navPath\n // is locale-stripped while the route may carry a locale/base prefix, so\n // align the folder segments from the right (the extra leading segments are\n // that prefix). Under such a prefix the path won't match a logical tab path,\n // so tab-scoping simply no-ops — same as the header's active-tab logic.\n const folderParts = page.route.split(\"/\").filter(Boolean).slice(0, -1);\n const offset = Math.max(0, folderParts.length - dirs.length);\n\n let parent = root;\n for (const [index, dir] of dirs.entries()) {\n parent = ensureGroup(parent, dir);\n parent.routePath ??= `/${folderParts.slice(0, offset + index + 1).join(\"/\")}`;\n }\n\n parent.children.push({\n badge: page.meta.sidebar.badge,\n deprecated: page.meta.deprecated || undefined,\n description: page.description,\n icon: page.meta.sidebar.icon,\n key: segmentKey(filename.replace(extname(filename), \"\")),\n kind: \"page\",\n label: page.meta.sidebar.label ?? page.title,\n order: pageOrder(page, filename),\n pageId: page.id,\n route: page.route,\n });\n }\n\n applyFolderMeta(root, folderMeta, sharedMeta, metaPrefix);\n sortNodes(root.children);\n return root.children.map(toNavNode);\n};\n\nconst normalizeRef = (ref: string): string => {\n if (ref === \"index\") {\n return \"/\";\n }\n const withSlash = ref.startsWith(\"/\") ? ref : `/${ref}`;\n return withSlash.endsWith(\"/index\") ? withSlash.slice(0, -6) : withSlash;\n};\n\nconst routeForRef = (\n ref: string | undefined,\n byRoute: Map<string, PageRecord>\n): string | undefined => {\n if (!ref) {\n return undefined;\n }\n const normalized = normalizeRef(ref);\n return byRoute.get(normalized)?.route ?? normalized;\n};\n\n/** Build the sidebar tree from an explicit config spec. */\nconst buildConfigSidebar = (\n items: SidebarItemConfig[],\n byRoute: Map<string, PageRecord>\n): NavNode[] => {\n const nodes: NavNode[] = [];\n\n for (const item of items) {\n if (typeof item === \"string\") {\n const page = byRoute.get(normalizeRef(item));\n if (page) {\n nodes.push({\n badge: page.meta.sidebar.badge,\n deprecated: page.meta.deprecated || undefined,\n description: page.description,\n icon: page.meta.sidebar.icon,\n kind: \"page\",\n label: page.meta.sidebar.label ?? page.title,\n pageId: page.id,\n route: page.route,\n });\n }\n continue;\n }\n\n if (item.items) {\n nodes.push({\n badge: item.badge,\n children: buildConfigSidebar(item.items, byRoute),\n collapsed: item.collapsed,\n directory: item.directory,\n display: item.display,\n icon: item.icon,\n kind: \"group\",\n label: item.label,\n route: routeForRef(item.root, byRoute),\n });\n continue;\n }\n\n if (item.root) {\n const page = byRoute.get(normalizeRef(item.root));\n nodes.push({\n badge: item.badge,\n deprecated: page?.meta.deprecated || undefined,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: page?.id ?? \"\",\n route: page?.route ?? normalizeRef(item.root),\n });\n continue;\n }\n\n if (item.href) {\n nodes.push({\n badge: item.badge,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: \"\",\n route: item.href,\n });\n }\n }\n\n return nodes;\n};\n\n/** Build the complete navigation model from pages, meta, and config. */\nexport const buildNavigation = (\n pages: PageRecord[],\n options: {\n chromeVariants?: NavChromeVariant[];\n folderMeta: Map<string, FolderMeta>;\n selectors?: NavSelector[];\n tabs?: NavTab[];\n sidebar?: SidebarItemConfig[];\n /** Locale dir prefix for folder-meta lookup (`\"\"` for the default locale). */\n metaPrefix?: string;\n /**\n * Resolve explicit-sidebar references against each page's locale-agnostic\n * `translationKey` instead of its localized `route`. Used under i18n so a\n * single authored sidebar maps onto every locale's pages.\n */\n refByLogical?: boolean;\n /** Shared `meta.$.*` meta, keyed by locale-stripped dir path. */\n sharedFolderMeta?: Map<string, FolderMeta>;\n }\n): Navigation => {\n const chromeVariants = options.chromeVariants ?? [];\n const selectors = options.selectors ?? [];\n const tabs = options.tabs ?? [];\n const metaPrefix = options.metaPrefix ?? \"\";\n const sharedFolderMeta = options.sharedFolderMeta ?? new Map();\n const byRoute = new Map(\n pages.map((page) => [\n options.refByLogical ? page.translationKey : page.route,\n page,\n ])\n );\n\n if (options.sidebar) {\n return {\n chromeVariants,\n selectors,\n sidebar: buildConfigSidebar(options.sidebar, byRoute),\n tabs,\n };\n }\n\n return {\n chromeVariants,\n selectors,\n sidebar: buildFileSystemSidebar(\n pages,\n options.folderMeta,\n sharedFolderMeta,\n metaPrefix\n ),\n tabs,\n };\n};\n",
112
- "import { localizeRoute, resolveFallbackLocale } from \"./i18n.ts\";\nimport { validateNavIcons, validateNavStructure } from \"./nav-diagnostics.ts\";\nimport { buildNavigation } from \"./navigation.ts\";\nimport type {\n FolderMeta,\n ResolvedConfig,\n ResolvedI18nConfig,\n} from \"./schema.ts\";\nimport type {\n ContentGraph,\n Diagnostic,\n Navigation,\n PageRecord,\n} from \"./types.ts\";\n\n/** Assemble the content graph: routes map, nav, and duplicate diagnostics. */\nexport const buildContentGraph = (\n pages: PageRecord[],\n options: {\n folderMeta: Map<string, FolderMeta>;\n sharedFolderMeta?: Map<string, FolderMeta>;\n navigation: ResolvedConfig[\"navigation\"];\n i18n?: ResolvedI18nConfig;\n }\n): ContentGraph => {\n const routes = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n\n for (const page of pages) {\n const existing = routes.get(page.route);\n if (existing) {\n diagnostics.push({\n code: \"BLUME_DUPLICATE_ROUTE\",\n file: page.sourcePath ?? page.id,\n message: `Two files resolve to ${page.route}: ${existing} and ${page.id}`,\n severity: \"error\",\n suggestion: \"Rename or move one of the files so each route is unique.\",\n });\n continue;\n }\n routes.set(page.route, page.id);\n }\n\n const { i18n } = options;\n const navigationByLocale: Record<string, Navigation> = {};\n let navigation: Navigation;\n\n if (i18n) {\n // Pages of the fallback locale, by translation key — used to fill in a\n // locale's sidebar for pages it hasn't translated yet, so navigation mirrors\n // the default structure instead of showing an empty (or partial) tree.\n const fallback = resolveFallbackLocale(i18n);\n const fallbackByKey = new Map<string, PageRecord>();\n if (fallback) {\n for (const page of pages) {\n if (page.locale === fallback) {\n fallbackByKey.set(page.translationKey, page);\n }\n }\n }\n\n // Each locale gets an independent tree from its own pages and folder meta,\n // so navigation may diverge per language (Mintlify-style).\n for (const { code } of i18n.locales) {\n // Localize internal tab paths so a header tab points to its in-locale\n // route (e.g. `/docs` -> `/fr/docs`); external paths pass through.\n const tabs = options.navigation.tabs?.map((tab) => ({\n ...tab,\n path: tab.path.startsWith(\"/\")\n ? localizeRoute(tab.path, code, i18n)\n : tab.path,\n }));\n\n const real = pages.filter((page) => page.locale === code);\n let localePages = real;\n if (fallback && code !== fallback) {\n const present = new Set(real.map((page) => page.translationKey));\n const filled: PageRecord[] = [];\n for (const [key, source] of fallbackByKey) {\n if (!present.has(key)) {\n filled.push({\n ...source,\n locale: code,\n route: localizeRoute(key, code, i18n),\n });\n }\n }\n localePages = [...real, ...filled];\n }\n\n navigationByLocale[code] = buildNavigation(localePages, {\n chromeVariants: options.navigation.chromeVariants,\n folderMeta: options.folderMeta,\n metaPrefix: code === i18n.defaultLocale ? \"\" : code,\n refByLogical: true,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar,\n tabs,\n });\n }\n navigation = navigationByLocale[i18n.defaultLocale] ?? {\n chromeVariants: [],\n selectors: [],\n sidebar: [],\n tabs: [],\n };\n } else {\n navigation = buildNavigation(pages, {\n chromeVariants: options.navigation.chromeVariants,\n folderMeta: options.folderMeta,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar,\n tabs: options.navigation.tabs,\n });\n }\n\n // Icon typos, duplicate labels, and hidden-page-in-sidebar are validated on\n // the built navigation. Missing-target detection needs the full route set\n // (incl. custom + generated pages), so it runs later in generateRuntime.\n diagnostics.push(...validateNavIcons(navigation));\n diagnostics.push(...validateNavStructure(navigation, pages));\n\n return {\n diagnostics,\n navigation,\n navigationByLocale,\n pages,\n routes,\n };\n};\n",
113
+ "import { extname } from \"pathe\";\n\nimport type {\n FolderMeta,\n SidebarDisplay,\n SidebarItemConfig,\n} from \"./schema.ts\";\nimport type {\n NavChromeVariant,\n NavNode,\n Navigation,\n NavSelector,\n NavTab,\n PageRecord,\n} from \"./types.ts\";\n\nconst NUMERIC_PREFIX = /^(?<order>\\d+)[-_.]/u;\nconst GROUP_FOLDER = /^\\((?<label>.+)\\)$/u;\nconst WORD_SPLIT = /[-_]/u;\n\nconst humanize = (segment: string): string =>\n segment\n .replace(NUMERIC_PREFIX, \"\")\n .split(WORD_SPLIT)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\nconst numericOrder = (segment: string): number => {\n const value = segment.match(NUMERIC_PREFIX)?.groups?.order;\n return value ? Number.parseInt(value, 10) : Number.POSITIVE_INFINITY;\n};\n\n/** The nav key of a raw path segment: group label or numeric-stripped name. */\nconst segmentKey = (raw: string): string => {\n const group = raw.match(GROUP_FOLDER)?.groups?.label;\n return (group ?? raw).replace(NUMERIC_PREFIX, \"\");\n};\n\ninterface MutablePage {\n kind: \"page\";\n key: string;\n label: string;\n route: string;\n description?: string;\n icon?: string;\n badge?: string;\n deprecated?: boolean;\n pageId: string;\n order: number;\n}\n\ninterface MutableGroup {\n kind: \"group\";\n key: string;\n path: string;\n /** The group's URL path (folder route prefix); set as pages are inserted. */\n routePath?: string;\n label: string;\n icon?: string;\n collapsed?: boolean;\n display?: SidebarDisplay;\n order: number;\n children: MutableNode[];\n index: Map<string, MutableGroup>;\n}\n\ntype MutableNode = MutablePage | MutableGroup;\n\nconst createGroup = (\n key: string,\n path: string,\n label: string,\n order: number\n): MutableGroup => ({\n children: [],\n index: new Map(),\n key,\n kind: \"group\",\n label,\n order,\n path,\n});\n\nconst ensureGroup = (\n parent: MutableGroup,\n rawSegment: string\n): MutableGroup => {\n const existing = parent.index.get(rawSegment);\n if (existing) {\n return existing;\n }\n const path = parent.path ? `${parent.path}/${rawSegment}` : rawSegment;\n const group = createGroup(\n segmentKey(rawSegment),\n path,\n humanize(rawSegment.match(GROUP_FOLDER)?.groups?.label ?? rawSegment),\n numericOrder(rawSegment)\n );\n parent.index.set(rawSegment, group);\n parent.children.push(group);\n return group;\n};\n\nconst pageOrder = (page: PageRecord, filename: string): number => {\n if (page.meta.sidebar.order !== undefined) {\n return page.meta.sidebar.order;\n }\n if (filename.replace(extname(filename), \"\") === \"index\") {\n return Number.NEGATIVE_INFINITY;\n }\n return numericOrder(filename);\n};\n\n/**\n * Folder-meta lookup key for a group path. Under i18n the meta files live in\n * the locale directory (`fr/guides/meta.ts` -> key `fr/guides`) while the\n * nav group path is locale-stripped (`guides`), so prepend the locale prefix.\n */\nconst metaKey = (path: string, metaPrefix: string): string => {\n if (!metaPrefix) {\n return path;\n }\n return path ? `${metaPrefix}/${path}` : metaPrefix;\n};\n\n/** Apply folder meta (title/order/icon/collapsed and explicit page order). */\nconst applyFolderMeta = (\n group: MutableGroup,\n folderMeta: Map<string, FolderMeta>,\n sharedMeta: Map<string, FolderMeta>,\n metaPrefix: string\n): void => {\n // Locale-specific meta wins; a shared `meta.$.*` (keyed by the locale-stripped\n // group path) applies to every locale otherwise.\n const meta =\n folderMeta.get(metaKey(group.path, metaPrefix)) ??\n sharedMeta.get(group.path);\n if (meta) {\n group.label = meta.title ?? group.label;\n group.icon = meta.icon ?? group.icon;\n group.order = meta.order ?? group.order;\n group.collapsed = meta.collapsed ?? group.collapsed;\n group.display = meta.display ?? group.display;\n\n if (meta.pages) {\n const rank = new Map(meta.pages.map((key, i) => [key, i]));\n for (const child of group.children) {\n const position = rank.get(child.key);\n if (position !== undefined) {\n child.order = position;\n }\n }\n }\n }\n\n for (const child of group.children) {\n if (child.kind === \"group\") {\n applyFolderMeta(child, folderMeta, sharedMeta, metaPrefix);\n }\n }\n};\n\nconst sortNodes = (nodes: MutableNode[]): void => {\n nodes.sort((a, b) => {\n if (a.order !== b.order) {\n return a.order - b.order;\n }\n return a.label.localeCompare(b.label);\n });\n for (const node of nodes) {\n if (node.kind === \"group\") {\n sortNodes(node.children);\n }\n }\n};\n\nconst toNavNode = (node: MutableNode): NavNode => {\n if (node.kind === \"page\") {\n return {\n badge: node.badge,\n deprecated: node.deprecated || undefined,\n description: node.description,\n icon: node.icon,\n kind: \"page\",\n label: node.label,\n pageId: node.pageId,\n route: node.route,\n };\n }\n return {\n children: node.children.map(toNavNode),\n collapsed: node.collapsed,\n display: node.display,\n icon: node.icon,\n kind: \"group\",\n label: node.label,\n path: node.routePath,\n };\n};\n\n/** Build the sidebar tree from the file system and folder meta. */\nconst buildFileSystemSidebar = (\n pages: PageRecord[],\n folderMeta: Map<string, FolderMeta>,\n sharedMeta: Map<string, FolderMeta>,\n metaPrefix: string\n): NavNode[] => {\n const root = createGroup(\"\", \"\", \"\", 0);\n\n for (const page of pages) {\n if (page.meta.sidebar.hidden) {\n continue;\n }\n // Group by the locale-stripped path so the locale dir is not a nav group.\n const parts = page.navPath.split(\"/\");\n const filename = parts.at(-1) ?? page.navPath;\n const dirs = parts.slice(0, -1);\n\n // Each group's URL path is the matching prefix of the page's route. navPath\n // is locale-stripped while the route may carry a locale/base prefix, so\n // align the folder segments from the right (the extra leading segments are\n // that prefix). Under such a prefix the path won't match a logical tab path,\n // so tab-scoping simply no-ops — same as the header's active-tab logic.\n const folderParts = page.route.split(\"/\").filter(Boolean).slice(0, -1);\n const offset = Math.max(0, folderParts.length - dirs.length);\n\n let parent = root;\n for (const [index, dir] of dirs.entries()) {\n parent = ensureGroup(parent, dir);\n parent.routePath ??= `/${folderParts.slice(0, offset + index + 1).join(\"/\")}`;\n }\n\n parent.children.push({\n badge: page.meta.sidebar.badge,\n deprecated: page.meta.deprecated || undefined,\n description: page.description,\n icon: page.meta.sidebar.icon,\n key: segmentKey(filename.replace(extname(filename), \"\")),\n kind: \"page\",\n label: page.meta.sidebar.label ?? page.title,\n order: pageOrder(page, filename),\n pageId: page.id,\n route: page.route,\n });\n }\n\n applyFolderMeta(root, folderMeta, sharedMeta, metaPrefix);\n sortNodes(root.children);\n return root.children.map(toNavNode);\n};\n\nconst normalizeRef = (ref: string): string => {\n if (ref === \"index\") {\n return \"/\";\n }\n const withSlash = ref.startsWith(\"/\") ? ref : `/${ref}`;\n const trimmed = withSlash.endsWith(\"/index\")\n ? withSlash.slice(0, -\"/index\".length)\n : withSlash;\n // \"/index\" trims to \"\" — that's the root, not an empty route.\n return trimmed === \"\" ? \"/\" : trimmed;\n};\n\nconst routeForRef = (\n ref: string | undefined,\n byRoute: Map<string, PageRecord>\n): string | undefined => {\n if (!ref) {\n return undefined;\n }\n const normalized = normalizeRef(ref);\n return byRoute.get(normalized)?.route ?? normalized;\n};\n\n/** Build the sidebar tree from an explicit config spec. */\nconst buildConfigSidebar = (\n items: SidebarItemConfig[],\n byRoute: Map<string, PageRecord>\n): NavNode[] => {\n const nodes: NavNode[] = [];\n\n for (const item of items) {\n if (typeof item === \"string\") {\n const page = byRoute.get(normalizeRef(item));\n if (page) {\n nodes.push({\n badge: page.meta.sidebar.badge,\n deprecated: page.meta.deprecated || undefined,\n description: page.description,\n icon: page.meta.sidebar.icon,\n kind: \"page\",\n label: page.meta.sidebar.label ?? page.title,\n pageId: page.id,\n route: page.route,\n });\n }\n continue;\n }\n\n if (item.items) {\n nodes.push({\n badge: item.badge,\n children: buildConfigSidebar(item.items, byRoute),\n collapsed: item.collapsed,\n directory: item.directory,\n display: item.display,\n icon: item.icon,\n kind: \"group\",\n label: item.label,\n route: routeForRef(item.root, byRoute),\n });\n continue;\n }\n\n if (item.root) {\n const page = byRoute.get(normalizeRef(item.root));\n nodes.push({\n badge: item.badge,\n deprecated: page?.meta.deprecated || undefined,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: page?.id ?? \"\",\n route: page?.route ?? normalizeRef(item.root),\n });\n continue;\n }\n\n if (item.href) {\n nodes.push({\n badge: item.badge,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: \"\",\n route: item.href,\n });\n }\n }\n\n return nodes;\n};\n\n/** Build the complete navigation model from pages, meta, and config. */\nexport const buildNavigation = (\n pages: PageRecord[],\n options: {\n chromeVariants?: NavChromeVariant[];\n folderMeta: Map<string, FolderMeta>;\n selectors?: NavSelector[];\n tabs?: NavTab[];\n sidebar?: SidebarItemConfig[];\n /** Locale dir prefix for folder-meta lookup (`\"\"` for the default locale). */\n metaPrefix?: string;\n /**\n * Resolve explicit-sidebar references against each page's locale-agnostic\n * `translationKey` instead of its localized `route`. Used under i18n so a\n * single authored sidebar maps onto every locale's pages.\n */\n refByLogical?: boolean;\n /** Shared `meta.$.*` meta, keyed by locale-stripped dir path. */\n sharedFolderMeta?: Map<string, FolderMeta>;\n }\n): Navigation => {\n const chromeVariants = options.chromeVariants ?? [];\n const selectors = options.selectors ?? [];\n const tabs = options.tabs ?? [];\n const metaPrefix = options.metaPrefix ?? \"\";\n const sharedFolderMeta = options.sharedFolderMeta ?? new Map();\n const byRoute = new Map(\n pages.map((page) => [\n options.refByLogical ? page.translationKey : page.route,\n page,\n ])\n );\n\n if (options.sidebar) {\n return {\n chromeVariants,\n selectors,\n sidebar: buildConfigSidebar(options.sidebar, byRoute),\n tabs,\n };\n }\n\n return {\n chromeVariants,\n selectors,\n sidebar: buildFileSystemSidebar(\n pages,\n options.folderMeta,\n sharedFolderMeta,\n metaPrefix\n ),\n tabs,\n };\n};\n",
114
+ "import { localizeRoute, resolveFallbackLocale } from \"./i18n.ts\";\nimport { validateNavIcons, validateNavStructure } from \"./nav-diagnostics.ts\";\nimport { buildNavigation } from \"./navigation.ts\";\nimport type {\n FolderMeta,\n ResolvedConfig,\n ResolvedI18nConfig,\n} from \"./schema.ts\";\nimport type {\n ContentGraph,\n Diagnostic,\n Navigation,\n PageRecord,\n} from \"./types.ts\";\n\n/** Assemble the content graph: routes map, nav, and duplicate diagnostics. */\nexport const buildContentGraph = (\n pages: PageRecord[],\n options: {\n folderMeta: Map<string, FolderMeta>;\n sharedFolderMeta?: Map<string, FolderMeta>;\n navigation: ResolvedConfig[\"navigation\"];\n i18n?: ResolvedI18nConfig;\n }\n): ContentGraph => {\n const routes = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n\n for (const page of pages) {\n const existing = routes.get(page.route);\n if (existing) {\n diagnostics.push({\n code: \"BLUME_DUPLICATE_ROUTE\",\n file: page.sourcePath ?? page.id,\n message: `Two files resolve to ${page.route}: ${existing} and ${page.id}`,\n severity: \"error\",\n suggestion: \"Rename or move one of the files so each route is unique.\",\n });\n continue;\n }\n routes.set(page.route, page.id);\n }\n\n const { i18n } = options;\n const navigationByLocale: Record<string, Navigation> = {};\n let navigation: Navigation;\n\n if (i18n) {\n // Pages of the fallback locale, by translation key — used to fill in a\n // locale's sidebar for pages it hasn't translated yet, so navigation mirrors\n // the default structure instead of showing an empty (or partial) tree.\n const fallback = resolveFallbackLocale(i18n);\n const fallbackByKey = new Map<string, PageRecord>();\n if (fallback) {\n for (const page of pages) {\n if (page.locale === fallback) {\n fallbackByKey.set(page.translationKey, page);\n }\n }\n }\n\n // Each locale gets an independent tree from its own pages and folder meta,\n // so navigation may diverge per language (Mintlify-style).\n for (const { code } of i18n.locales) {\n // Localize internal tab paths so a header tab points to its in-locale\n // route (e.g. `/docs` -> `/fr/docs`); external paths pass through.\n const tabs = options.navigation.tabs?.map((tab) => ({\n ...tab,\n path: tab.path.startsWith(\"/\")\n ? localizeRoute(tab.path, code, i18n)\n : tab.path,\n }));\n\n const real = pages.filter((page) => page.locale === code);\n let localePages = real;\n if (fallback && code !== fallback) {\n const present = new Set(real.map((page) => page.translationKey));\n const filled: PageRecord[] = [];\n for (const [key, source] of fallbackByKey) {\n if (!present.has(key)) {\n filled.push({\n ...source,\n locale: code,\n route: localizeRoute(key, code, i18n),\n });\n }\n }\n localePages = [...real, ...filled];\n }\n\n navigationByLocale[code] = buildNavigation(localePages, {\n chromeVariants: options.navigation.chromeVariants,\n folderMeta: options.folderMeta,\n // Meta files live in locale directories only under the `dir` parser\n // (`fr/guides/meta.ts` -> key `fr/guides`). Under `dot`, translations\n // sit next to the originals and `guides/meta.ts` applies to every\n // locale — prefixing would look up keys that can never exist.\n metaPrefix:\n i18n.parser === \"dir\" && code !== i18n.defaultLocale ? code : \"\",\n refByLogical: true,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar,\n tabs,\n });\n }\n navigation = navigationByLocale[i18n.defaultLocale] ?? {\n chromeVariants: [],\n selectors: [],\n sidebar: [],\n tabs: [],\n };\n } else {\n navigation = buildNavigation(pages, {\n chromeVariants: options.navigation.chromeVariants,\n folderMeta: options.folderMeta,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar,\n tabs: options.navigation.tabs,\n });\n }\n\n // Icon typos, duplicate labels, and hidden-page-in-sidebar are validated on\n // the built navigation. Missing-target detection needs the full route set\n // (incl. custom + generated pages), so it runs later in generateRuntime.\n diagnostics.push(...validateNavIcons(navigation));\n diagnostics.push(...validateNavStructure(navigation, pages));\n\n return {\n diagnostics,\n navigation,\n navigationByLocale,\n pages,\n routes,\n };\n};\n",
113
115
  "import { execFileSync } from \"node:child_process\";\n\nimport { relative } from \"pathe\";\n\n/** Normalized form of the `lastModified` config. */\nexport interface ResolvedLastModified {\n enabled: boolean;\n source: \"git\" | \"frontmatter\";\n}\n\n/** Normalize the `lastModified` config union into `{ enabled, source }`. */\nexport const resolveLastModifiedConfig = (\n value: boolean | { type: \"git\" | \"frontmatter\" }\n): ResolvedLastModified => {\n if (value === false) {\n return { enabled: false, source: \"git\" };\n }\n if (value === true) {\n return { enabled: true, source: \"git\" };\n }\n return { enabled: true, source: value.type };\n};\n\n/**\n * Parse `git log --format=%x00%cI --name-only` output into a map of\n * repo-root-relative path → most recent committer ISO date. Each commit emits a\n * NUL-prefixed date line followed by the paths it touched; since git logs\n * newest-first, the first date seen for a path wins. Blank lines are ignored.\n */\nexport const parseGitLog = (output: string): Map<string, string> => {\n const times = new Map<string, string>();\n let current: string | null = null;\n for (const line of output.split(\"\\n\")) {\n if (line.startsWith(\"\\0\")) {\n current = line.slice(1);\n } else if (line && current && !times.has(line)) {\n times.set(line, current);\n }\n }\n return times;\n};\n\n/**\n * Resolve each source file's last-modified date from git history, keyed by\n * absolute source path. Runs a single `git log` over the content tree and maps\n * repo-root-relative paths back to the given absolute paths (monorepo-safe via\n * `rev-parse --show-toplevel`). Returns an empty map if git is unavailable or\n * the project isn't a repo — the feature then simply shows no dates.\n */\nexport const gitLastModifiedTimes = (\n root: string,\n contentRoot: string,\n sourcePaths: string[]\n): Map<string, string> => {\n try {\n const gitRoot = execFileSync(\n \"git\",\n [\"-C\", root, \"rev-parse\", \"--show-toplevel\"],\n { encoding: \"utf-8\" }\n ).trim();\n const output = execFileSync(\n \"git\",\n [\n \"-C\",\n root,\n \"-c\",\n \"core.quotePath=false\",\n \"log\",\n \"--format=%x00%cI\",\n \"--name-only\",\n \"--\",\n contentRoot,\n ],\n { encoding: \"utf-8\", maxBuffer: 256 * 1024 * 1024 }\n );\n const byRepoPath = parseGitLog(output);\n const result = new Map<string, string>();\n for (const sourcePath of sourcePaths) {\n const iso = byRepoPath.get(relative(gitRoot, sourcePath));\n if (iso) {\n result.set(sourcePath, iso);\n }\n }\n return result;\n } catch {\n return new Map();\n }\n};\n",
114
116
  "import { basename, dirname, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { diagnosticsFromZod } from \"./diagnostics.ts\";\nimport { createModuleLoader } from \"./load-module.ts\";\nimport { folderMetaSchema } from \"./schema.ts\";\nimport type { FolderMeta } from \"./schema.ts\";\nimport type { Diagnostic } from \"./types.ts\";\n\nconst META_FILES = [\n \"**/meta.ts\",\n \"**/meta.js\",\n \"**/meta.mjs\",\n // Shared, locale-agnostic folder meta (applies to every locale).\n \"**/meta.$.ts\",\n \"**/meta.$.js\",\n \"**/meta.$.mjs\",\n];\n\n/** Resolve a meta module's default export, calling it if it is a factory. */\nconst resolveMeta = async (mod: unknown): Promise<unknown> =>\n typeof mod === \"function\" ? await (mod as () => unknown)() : mod;\n\n/**\n * Discover `meta.{ts,js,mjs}` files under the content root. Keys are the\n * directory path relative to the content root (`\"\"` for the root directory).\n * `meta.$.*` files are returned in `shared` — folder meta that applies to that\n * directory in every locale (a locale-specific `meta.*` overrides it). Each file\n * default-exports an object or a (sync/async) function returning one.\n */\nexport const discoverFolderMeta = async (\n contentRoot: string\n): Promise<{\n meta: Map<string, FolderMeta>;\n shared: Map<string, FolderMeta>;\n diagnostics: Diagnostic[];\n}> => {\n const files = await glob(META_FILES, {\n absolute: true,\n cwd: contentRoot,\n // Never descend into dependencies or build output — relevant when the\n // content root is the project root (e.g. a migrated Mintlify project).\n ignore: [\"**/node_modules/**\", \"**/.blume/**\", \"**/dist/**\"],\n onlyFiles: true,\n });\n\n const load = createModuleLoader();\n const loaded = await Promise.all(\n files.map(\n async (\n file\n ): Promise<\n | { ok: true; file: string; value: unknown }\n | { ok: false; file: string; error: Error }\n > => {\n try {\n return { file, ok: true, value: await resolveMeta(await load(file)) };\n } catch (error) {\n return { error: error as Error, file, ok: false };\n }\n }\n )\n );\n\n const meta = new Map<string, FolderMeta>();\n const shared = new Map<string, FolderMeta>();\n const diagnostics: Diagnostic[] = [];\n\n for (const entry of loaded) {\n const dir = relative(contentRoot, dirname(entry.file));\n\n if (!entry.ok) {\n diagnostics.push({\n code: \"BLUME_META_LOAD_FAILED\",\n file: entry.file,\n message: `Could not load meta file: ${entry.error.message}`,\n severity: \"error\",\n });\n continue;\n }\n\n const result = folderMetaSchema.safeParse(entry.value);\n if (result.success) {\n const target = basename(entry.file).startsWith(\"meta.$.\") ? shared : meta;\n target.set(dir, result.data);\n } else {\n diagnostics.push(\n ...diagnosticsFromZod(result.error, {\n code: \"BLUME_META_INVALID\",\n file: entry.file,\n })\n );\n }\n }\n\n return { diagnostics, meta, shared };\n};\n",
115
- "import { existsSync, readFileSync } from \"node:fs\";\n\nimport GithubSlugger from \"github-slugger\";\nimport { extname } from \"pathe\";\n\nimport { diagnosticsFromZod } from \"../diagnostics.ts\";\nimport { localePlacement, localizeRoute } from \"../i18n.ts\";\nimport { pageMetaSchema } from \"../schema.ts\";\nimport type { PageMeta } from \"../schema.ts\";\nimport type { Diagnostic, Heading, PageLink, PageRecord } from \"../types.ts\";\nimport type { NormalizeContext, SourceEntry } from \"./types.ts\";\n\nconst NUMERIC_PREFIX = /^\\d+[-_.]/u;\nconst GROUP_FOLDER = /^\\((?<label>.+)\\)$/u;\nconst WORD_SPLIT = /[-_]/u;\n\n/** Strip a leading numeric ordering prefix (`01-intro` -> `intro`). */\nconst stripNumericPrefix = (segment: string): string =>\n segment.replace(NUMERIC_PREFIX, \"\");\n\n/** Detect a group folder `(name)` and return its label, else null. */\nconst groupLabel = (segment: string): string | null =>\n segment.match(GROUP_FOLDER)?.groups?.label ?? null;\n\n/**\n * Slugify a content/route slug (Sanity, Notion, frontmatter `slug`). Heading\n * anchor ids are *not* slugged here — they use a `github-slugger` in\n * {@link extractHeadings}, matching the renderer (see `markdown/heading-anchors`)\n * so `blume validate` checks anchors against the exact rendered heading ids.\n */\nexport const slugify = (text: string): string =>\n text\n .toLowerCase()\n .trim()\n .replaceAll(/[^\\w\\s-]/gu, \"\")\n .replaceAll(/[\\s_]+/gu, \"-\")\n .replaceAll(/-+/gu, \"-\")\n .replaceAll(/^-|-$/gu, \"\");\n\n/** Title-case a slug segment for display. */\nconst titleCase = (value: string): string =>\n value\n .split(WORD_SPLIT)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n/** Convert a content-root-relative path into URL + nav metadata. */\nconst mapRoute = (\n relativePath: string\n): { segments: string[]; groups: string[]; route: string } => {\n const withoutExt = relativePath.slice(\n 0,\n relativePath.length - extname(relativePath).length\n );\n const rawParts = withoutExt.split(\"/\");\n\n const segments: string[] = [];\n const groups: string[] = [];\n\n for (const part of rawParts) {\n const group = groupLabel(part);\n if (group !== null) {\n groups.push(group);\n continue;\n }\n const clean = stripNumericPrefix(part);\n if (clean === \"index\") {\n continue;\n }\n segments.push(clean);\n }\n\n const route = segments.length === 0 ? \"/\" : `/${segments.join(\"/\")}`;\n return { groups, route, segments };\n};\n\nconst CODE_FENCE = /^```/u;\nconst ATX_HEADING = /^(?<hashes>#{1,6})\\s+(?<text>.+?)\\s*#*$/u;\n\n/**\n * Extract ATX headings from a markdown body, skipping fenced code blocks. Each\n * heading's anchor slug comes from a per-document `github-slugger` — the exact\n * slugger the renderer uses (`markdown/heading-anchors`) — advanced over every\n * `#`–`######` in document order. Matching it (rather than a hand-rolled\n * slugify) keeps the manifest's anchor ids identical to the rendered ones, so\n * `blume validate` stops false-flagging links like `#the-read--write-fallback`\n * (a hand slugify collapses `--`; github-slugger keeps it) and resolves repeated\n * headings the same way (`setup`, `setup-1`).\n */\nexport const extractHeadings = (body: string): Heading[] => {\n const headings: Heading[] = [];\n const slugger = new GithubSlugger();\n let inFence = false;\n\n for (const line of body.split(\"\\n\")) {\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n const match = line.match(ATX_HEADING);\n if (match?.groups) {\n const depth = match.groups.hashes?.length ?? 1;\n const text = (match.groups.text ?? \"\").trim();\n headings.push({ depth, slug: slugger.slug(text), text });\n }\n }\n\n return headings;\n};\n\nconst MD_LINK = /\\[[^\\]]*\\]\\((?<target>[^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/gu;\n\n/**\n * Extract link targets from a markdown body for later validation, recording the\n * 1-based line/column of each target. Skips fenced code blocks.\n */\nexport const extractLinks = (body: string): PageLink[] => {\n const links: PageLink[] = [];\n let inFence = false;\n let lineNumber = 0;\n\n for (const line of body.split(\"\\n\")) {\n lineNumber += 1;\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n for (const match of line.matchAll(MD_LINK)) {\n const target = match.groups?.target;\n if (target === undefined || match.index === undefined) {\n continue;\n }\n // Locate the target from the `](` boundary rather than searching for the\n // target text from the match start — otherwise a label that contains the\n // same text (e.g. `[/a/b](/a/b)`) reports the column inside the label. The\n // label can't contain `]`, so `](` is unambiguous.\n const targetOffset = match.index + match[0].indexOf(\"](\") + \"](\".length;\n links.push({\n column: targetOffset + 1,\n line: lineNumber,\n target,\n });\n }\n }\n\n return links;\n};\n\nconst INLINE_CODE = /`[^`]*`/gu;\n// Double-quoted strings hold JSX attribute values and JSON in `{...}` props; a\n// `<Tag>` written inside prose there (e.g. an \"Astro <Font> integration\" note)\n// isn't a real usage. Single quotes are left alone so prose apostrophes don't\n// swallow a real tag between two words.\nconst DOUBLE_QUOTED = /\"[^\"]*\"/gu;\nconst JSX_OPEN = /<(?<tag>[A-Z][A-Za-z0-9]*)/gu;\n\n/**\n * Capitalized JSX component tags used in an `.mdx` body (`<Callout>`,\n * `<Tree.File>` → `Tree`). Skips fenced code, inline code, and double-quoted\n * strings so code samples and prose don't count. Powers the missing-component\n * diagnostic.\n */\nexport const extractComponentTags = (body: string): string[] => {\n const tags = new Set<string>();\n let inFence = false;\n for (const line of body.split(\"\\n\")) {\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n const clean = line\n .replaceAll(INLINE_CODE, \"\")\n .replaceAll(DOUBLE_QUOTED, \"\");\n for (const match of clean.matchAll(JSX_OPEN)) {\n const tag = match.groups?.tag;\n if (tag) {\n tags.add(tag);\n }\n }\n }\n return [...tags];\n};\n\nconst deriveTitle = (\n meta: PageMeta,\n headings: Heading[],\n id: string\n): string => {\n if (meta.title) {\n return meta.title;\n }\n const firstHeading = headings.find((h) => h.depth === 1) ?? headings[0];\n if (firstHeading) {\n return firstHeading.text;\n }\n const base = id.split(\"/\").pop() ?? id;\n return titleCase(stripNumericPrefix(base.replace(extname(base), \"\")));\n};\n\nconst withPrefix = (prefix: string | undefined, path: string): string =>\n prefix ? `${prefix}/${path}` : path;\n\n/**\n * Normalize one source entry into per-locale `PageRecord`s. This is the single\n * funnel every adapter's entries pass through, so route mapping, heading/link\n * extraction, and meta validation are identical regardless of origin.\n */\nexport const normalizeEntry = (\n entry: SourceEntry,\n ctx: NormalizeContext\n): { pages: PageRecord[]; diagnostics: Diagnostic[] } => {\n const { format } = entry.body;\n const ext = format === \"mdx\" ? \".mdx\" : \".md\";\n\n const result = pageMetaSchema.safeParse(entry.data);\n if (!result.success) {\n // Source text lets the error carry a line/column into the frontmatter block:\n // `entry.raw` for non-filesystem sources, else the file itself (read only on\n // this rare error path, so filesystem entries stay cheap in the happy path).\n const source =\n entry.raw ??\n (entry.sourcePath && existsSync(entry.sourcePath)\n ? readFileSync(entry.sourcePath, \"utf-8\")\n : undefined);\n return {\n diagnostics: diagnosticsFromZod(result.error, {\n code: \"BLUME_FRONTMATTER_INVALID\",\n file: entry.sourcePath ?? `${ctx.source.name}:${entry.ref}`,\n source,\n }),\n pages: [],\n };\n }\n\n const meta = result.data;\n\n // Locale and the locale-stripped nav path come from the entry's ref (a leading\n // dir, or a filename suffix under the `dot` parser), not the slug — the slug is\n // the logical, locale-agnostic path within a locale. A shared `$` file maps to\n // every locale. Remote/CMS sources without i18n placement map to one locale.\n const { i18n } = ctx;\n const { navPath: rawNavPath, locales } = i18n\n ? localePlacement(entry.ref, ext, i18n)\n : { locales: [\"\"], navPath: entry.ref };\n\n const navPath = withPrefix(ctx.source.prefix, rawNavPath);\n const routeInput = withPrefix(\n ctx.source.prefix,\n meta.slug ? `${meta.slug}${ext}` : rawNavPath\n );\n\n const { segments, groups, route: logicalRoute } = mapRoute(routeInput);\n const headings = extractHeadings(entry.body.text);\n const { staged } = ctx.source;\n\n const base = {\n body: staged ? { format, text: entry.raw ?? entry.body.text } : undefined,\n collection: staged ? \"staged\" : undefined,\n componentsUsed:\n format === \"mdx\" ? extractComponentTags(entry.body.text) : undefined,\n contentType: meta.type ?? ctx.defaultType,\n description: meta.description,\n editUrl: entry.editUrl,\n entryId: staged ? `${ctx.source.name}/${entry.ref}` : undefined,\n format,\n groups,\n headings,\n id: `${ctx.source.name}:${entry.ref}`,\n lastModified: meta.lastModified ?? entry.lastModified,\n links: extractLinks(entry.body.text),\n meta,\n navPath,\n segments,\n source: { name: ctx.source.name, ref: entry.ref },\n sourcePath: entry.sourcePath,\n title: deriveTitle(meta, headings, navPath),\n translationKey: logicalRoute,\n } satisfies Omit<PageRecord, \"locale\" | \"route\">;\n\n // One record per locale this entry maps to (one normally; every locale for a\n // shared `$` file). All share the same id, source ref, and translation key.\n const pages = locales.map((locale) => ({\n ...base,\n locale,\n route: i18n ? localizeRoute(logicalRoute, locale, i18n) : logicalRoute,\n }));\n\n return { diagnostics: [], pages };\n};\n",
117
+ "import { existsSync, readFileSync } from \"node:fs\";\n\nimport GithubSlugger from \"github-slugger\";\nimport { extname } from \"pathe\";\n\nimport { diagnosticsFromZod } from \"../diagnostics.ts\";\nimport { localePlacement, localizeRoute } from \"../i18n.ts\";\nimport { pageMetaSchema } from \"../schema.ts\";\nimport type { PageMeta } from \"../schema.ts\";\nimport type { Diagnostic, Heading, PageLink, PageRecord } from \"../types.ts\";\nimport type { NormalizeContext, SourceEntry } from \"./types.ts\";\n\nconst NUMERIC_PREFIX = /^\\d+[-_.]/u;\nconst GROUP_FOLDER = /^\\((?<label>.+)\\)$/u;\nconst WORD_SPLIT = /[-_]/u;\n\n/** Strip a leading numeric ordering prefix (`01-intro` -> `intro`). */\nconst stripNumericPrefix = (segment: string): string =>\n segment.replace(NUMERIC_PREFIX, \"\");\n\n/** Detect a group folder `(name)` and return its label, else null. */\nconst groupLabel = (segment: string): string | null =>\n segment.match(GROUP_FOLDER)?.groups?.label ?? null;\n\n/**\n * Slugify a content/route slug (Sanity, Notion, frontmatter `slug`). Heading\n * anchor ids are *not* slugged here — they use a `github-slugger` in\n * {@link extractHeadings}, matching the renderer (see `markdown/heading-anchors`)\n * so `blume validate` checks anchors against the exact rendered heading ids.\n */\nexport const slugify = (text: string): string =>\n text\n .toLowerCase()\n .trim()\n .replaceAll(/[^\\w\\s-]/gu, \"\")\n .replaceAll(/[\\s_]+/gu, \"-\")\n .replaceAll(/-+/gu, \"-\")\n .replaceAll(/^-|-$/gu, \"\");\n\n/** Title-case a slug segment for display. */\nconst titleCase = (value: string): string =>\n value\n .split(WORD_SPLIT)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n/** Convert a content-root-relative path into URL + nav metadata. */\nconst mapRoute = (\n relativePath: string\n): { segments: string[]; groups: string[]; route: string } => {\n const withoutExt = relativePath.slice(\n 0,\n relativePath.length - extname(relativePath).length\n );\n const rawParts = withoutExt.split(\"/\");\n\n const segments: string[] = [];\n const groups: string[] = [];\n\n for (const part of rawParts) {\n // A leading/trailing/double slash yields an empty part; keeping it would\n // produce a malformed route (`//foo`, `/foo/`) that nothing can link to.\n if (part === \"\") {\n continue;\n }\n const group = groupLabel(part);\n if (group !== null) {\n groups.push(group);\n continue;\n }\n const clean = stripNumericPrefix(part);\n if (clean === \"index\") {\n continue;\n }\n segments.push(clean);\n }\n\n const route = segments.length === 0 ? \"/\" : `/${segments.join(\"/\")}`;\n return { groups, route, segments };\n};\n\nconst CODE_FENCE = /^```/u;\nconst ATX_HEADING = /^(?<hashes>#{1,6})\\s+(?<text>.+?)\\s*#*$/u;\n\n/**\n * Extract ATX headings from a markdown body, skipping fenced code blocks. Each\n * heading's anchor slug comes from a per-document `github-slugger` — the exact\n * slugger the renderer uses (`markdown/heading-anchors`) — advanced over every\n * `#`–`######` in document order. Matching it (rather than a hand-rolled\n * slugify) keeps the manifest's anchor ids identical to the rendered ones, so\n * `blume validate` stops false-flagging links like `#the-read--write-fallback`\n * (a hand slugify collapses `--`; github-slugger keeps it) and resolves repeated\n * headings the same way (`setup`, `setup-1`).\n */\nexport const extractHeadings = (body: string): Heading[] => {\n const headings: Heading[] = [];\n const slugger = new GithubSlugger();\n let inFence = false;\n\n for (const line of body.split(\"\\n\")) {\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n const match = line.match(ATX_HEADING);\n if (match?.groups) {\n const depth = match.groups.hashes?.length ?? 1;\n const text = (match.groups.text ?? \"\").trim();\n headings.push({ depth, slug: slugger.slug(text), text });\n }\n }\n\n return headings;\n};\n\nconst MD_LINK = /\\[[^\\]]*\\]\\((?<target>[^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/gu;\nconst INLINE_CODE = /`[^`]*`/gu;\n\n/**\n * Extract link targets from a markdown body for later validation, recording the\n * 1-based line/column of each target. Skips fenced code blocks and inline code.\n */\nexport const extractLinks = (body: string): PageLink[] => {\n const links: PageLink[] = [];\n let inFence = false;\n let lineNumber = 0;\n\n for (const line of body.split(\"\\n\")) {\n lineNumber += 1;\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n // Blank out inline code spans (`[label](/x)` shown as syntax, not a link)\n // with same-length padding so recorded columns stay accurate.\n const masked = line.replaceAll(INLINE_CODE, (span) =>\n \" \".repeat(span.length)\n );\n for (const match of masked.matchAll(MD_LINK)) {\n const target = match.groups?.target;\n if (target === undefined || match.index === undefined) {\n continue;\n }\n // Locate the target from the `](` boundary rather than searching for the\n // target text from the match start — otherwise a label that contains the\n // same text (e.g. `[/a/b](/a/b)`) reports the column inside the label. The\n // label can't contain `]`, so `](` is unambiguous.\n const targetOffset = match.index + match[0].indexOf(\"](\") + \"](\".length;\n links.push({\n column: targetOffset + 1,\n line: lineNumber,\n target,\n });\n }\n }\n\n return links;\n};\n\n// Double-quoted strings hold JSX attribute values and JSON in `{...}` props; a\n// `<Tag>` written inside prose there (e.g. an \"Astro <Font> integration\" note)\n// isn't a real usage. Single quotes are left alone so prose apostrophes don't\n// swallow a real tag between two words.\nconst DOUBLE_QUOTED = /\"[^\"]*\"/gu;\nconst JSX_OPEN = /<(?<tag>[A-Z][A-Za-z0-9]*)/gu;\n\n/**\n * Capitalized JSX component tags used in an `.mdx` body (`<Callout>`,\n * `<Tree.File>` → `Tree`). Skips fenced code, inline code, and double-quoted\n * strings so code samples and prose don't count. Powers the missing-component\n * diagnostic.\n */\nexport const extractComponentTags = (body: string): string[] => {\n const tags = new Set<string>();\n let inFence = false;\n for (const line of body.split(\"\\n\")) {\n if (CODE_FENCE.test(line.trimStart())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) {\n continue;\n }\n const clean = line\n .replaceAll(INLINE_CODE, \"\")\n .replaceAll(DOUBLE_QUOTED, \"\");\n for (const match of clean.matchAll(JSX_OPEN)) {\n const tag = match.groups?.tag;\n if (tag) {\n tags.add(tag);\n }\n }\n }\n return [...tags];\n};\n\nconst deriveTitle = (\n meta: PageMeta,\n headings: Heading[],\n id: string\n): string => {\n if (meta.title) {\n return meta.title;\n }\n const firstHeading = headings.find((h) => h.depth === 1) ?? headings[0];\n if (firstHeading) {\n return firstHeading.text;\n }\n const base = id.split(\"/\").pop() ?? id;\n return titleCase(stripNumericPrefix(base.replace(extname(base), \"\")));\n};\n\n/** Strip habitual leading/trailing slashes (`/getting-started`, `guides/`). */\nconst trimSlashes = (value: string): string =>\n value.replaceAll(/^\\/+|\\/+$/gu, \"\");\n\nconst withPrefix = (prefix: string | undefined, path: string): string => {\n const clean = prefix ? trimSlashes(prefix) : \"\";\n return clean ? `${clean}/${path}` : path;\n};\n\n/**\n * Normalize one source entry into per-locale `PageRecord`s. This is the single\n * funnel every adapter's entries pass through, so route mapping, heading/link\n * extraction, and meta validation are identical regardless of origin.\n */\nexport const normalizeEntry = (\n entry: SourceEntry,\n ctx: NormalizeContext\n): { pages: PageRecord[]; diagnostics: Diagnostic[] } => {\n const { format } = entry.body;\n const ext = format === \"mdx\" ? \".mdx\" : \".md\";\n\n const result = pageMetaSchema.safeParse(entry.data);\n if (!result.success) {\n // Source text lets the error carry a line/column into the frontmatter block:\n // `entry.raw` for non-filesystem sources, else the file itself (read only on\n // this rare error path, so filesystem entries stay cheap in the happy path).\n const source =\n entry.raw ??\n (entry.sourcePath && existsSync(entry.sourcePath)\n ? readFileSync(entry.sourcePath, \"utf-8\")\n : undefined);\n return {\n diagnostics: diagnosticsFromZod(result.error, {\n code: \"BLUME_FRONTMATTER_INVALID\",\n file: entry.sourcePath ?? `${ctx.source.name}:${entry.ref}`,\n source,\n }),\n pages: [],\n };\n }\n\n const meta = result.data;\n\n // Locale and the locale-stripped nav path come from the entry's ref (a leading\n // dir, or a filename suffix under the `dot` parser), not the slug — the slug is\n // the logical, locale-agnostic path within a locale. A shared `$` file maps to\n // every locale. Remote/CMS sources without i18n placement map to one locale.\n const { i18n } = ctx;\n const { navPath: rawNavPath, locales } = i18n\n ? localePlacement(entry.ref, ext, i18n)\n : { locales: [\"\"], navPath: entry.ref };\n\n const navPath = withPrefix(ctx.source.prefix, rawNavPath);\n // Frontmatter `slug` wins, then the adapter-supplied `entry.slug` (the typed\n // SPI's \"logical route input; defaults to ref if omitted\"), then the ref.\n // The extension is re-appended so mapRoute's extname strip can't eat a\n // dotted slug segment (`v1.2`). A slug that trims to nothing falls back.\n const slugInput = meta.slug ?? entry.slug;\n const slug = slugInput ? trimSlashes(slugInput) : \"\";\n const routeInput = withPrefix(\n ctx.source.prefix,\n slug ? `${slug}${ext}` : rawNavPath\n );\n\n const { segments, groups, route: logicalRoute } = mapRoute(routeInput);\n const headings = extractHeadings(entry.body.text);\n const { staged } = ctx.source;\n\n const base = {\n body: staged ? { format, text: entry.raw ?? entry.body.text } : undefined,\n collection: staged ? \"staged\" : undefined,\n componentsUsed:\n format === \"mdx\" ? extractComponentTags(entry.body.text) : undefined,\n contentType: meta.type ?? ctx.defaultType,\n description: meta.description,\n editUrl: entry.editUrl,\n entryId: staged ? `${ctx.source.name}/${entry.ref}` : undefined,\n format,\n groups,\n headings,\n id: `${ctx.source.name}:${entry.ref}`,\n lastModified: meta.lastModified ?? entry.lastModified,\n links: extractLinks(entry.body.text),\n meta,\n navPath,\n segments,\n source: { name: ctx.source.name, ref: entry.ref },\n sourcePath: entry.sourcePath,\n title: deriveTitle(meta, headings, navPath),\n translationKey: logicalRoute,\n } satisfies Omit<PageRecord, \"locale\" | \"route\">;\n\n // One record per locale this entry maps to (one normally; every locale for a\n // shared `$` file). All share the same id, source ref, and translation key.\n const pages = locales.map((locale) => ({\n ...base,\n locale,\n route: i18n ? localizeRoute(logicalRoute, locale, i18n) : logicalRoute,\n }));\n\n return { diagnostics: [], pages };\n};\n",
116
118
  "import { join } from \"pathe\";\n\nimport { blumeReferences } from \"../../openapi/references.ts\";\nimport { openApiSource } from \"../../openapi/source.ts\";\nimport type { ContentSourceConfig, ResolvedConfig } from \"../schema.ts\";\nimport type { ProjectContext } from \"../types.ts\";\nimport { filesystemSource } from \"./filesystem.ts\";\nimport { githubReleasesSource } from \"./github-releases.ts\";\nimport { mdxRemoteSource } from \"./mdx-remote.ts\";\nimport { mintlifySource } from \"./mintlify.ts\";\nimport { notionSource } from \"./notion.ts\";\nimport { sanitySource } from \"./sanity.ts\";\nimport type { ContentSource, SourceContext } from \"./types.ts\";\n\n/** Allocate a unique, stable source name from a base (prefix or type). */\nconst uniqueNamer = (): ((base: string) => string) => {\n const used = new Set<string>();\n return (base) => {\n let name = base;\n let n = 2;\n while (used.has(name)) {\n name = `${base}-${n}`;\n n += 1;\n }\n used.add(name);\n return name;\n };\n};\n\n/** Runtime knobs for a scan: dev/build mode, preview, and cache refresh. */\nexport interface SourceRuntime {\n mode: \"dev\" | \"build\";\n preview?: boolean;\n refresh?: boolean;\n}\n\nconst sourceContext = (\n context: ProjectContext,\n name: string,\n runtime: SourceRuntime\n): SourceContext => ({\n assetsBaseUrl: `/blume-assets/${name}`,\n assetsDir: join(context.outDir, \"public\", \"blume-assets\", name),\n cacheDir: join(context.outDir, \"cache\", name),\n mode: runtime.mode,\n preview: runtime.preview,\n projectRoot: context.root,\n refresh: runtime.refresh ?? runtime.mode === \"build\",\n});\n\nconst buildSource = (\n def: ContentSourceConfig,\n name: string,\n context: ProjectContext,\n runtime: SourceRuntime\n): ContentSource => {\n if (def.type === \"filesystem\") {\n return filesystemSource({\n exclude: def.exclude,\n include: def.include,\n name,\n prefix: def.prefix,\n projectRoot: context.root,\n root: def.root,\n });\n }\n if (def.type === \"mintlify\") {\n return mintlifySource({\n configFile: def.configFile,\n exclude: def.exclude,\n include: def.include,\n name,\n prefix: def.prefix,\n projectRoot: context.root,\n root: def.root,\n variables: def.variables,\n });\n }\n if (def.type === \"custom\") {\n // A user-provided instance manages its own context/caching; we only ensure\n // its name is unique across the project for id namespacing.\n return def.source.name === name ? def.source : { ...def.source, name };\n }\n if (def.type === \"sanity\") {\n return sanitySource(\n {\n apiVersion: def.apiVersion,\n dataset: def.dataset,\n fields: def.fields,\n name,\n pollInterval: def.pollInterval,\n prefix: def.prefix,\n projectId: def.projectId,\n query: def.query,\n },\n sourceContext(context, name, runtime)\n );\n }\n if (def.type === \"notion\") {\n return notionSource(\n {\n database: def.database,\n name,\n pollInterval: def.pollInterval,\n prefix: def.prefix,\n properties: def.properties,\n publishedValue: def.publishedValue,\n },\n sourceContext(context, name, runtime)\n );\n }\n if (def.type === \"github-releases\") {\n return githubReleasesSource(\n {\n drafts: def.drafts,\n limit: def.limit,\n name,\n owner: def.owner,\n pollInterval: def.pollInterval,\n prefix: def.prefix,\n prereleases: def.prereleases,\n repo: def.repo,\n },\n sourceContext(context, name, runtime)\n );\n }\n return mdxRemoteSource(\n {\n files: def.files,\n github: def.github,\n include: def.include,\n name,\n pollInterval: def.pollInterval,\n prefix: def.prefix,\n url: def.url,\n },\n sourceContext(context, name, runtime)\n );\n};\n\n/** The base name to allocate for a source config (before deduplication). */\nconst baseName = (def: ContentSourceConfig): string => {\n if (def.type === \"custom\") {\n return def.source.name;\n }\n return def.prefix ?? def.type;\n};\n\n/** The content sources declared by config (implicit filesystem when none). */\nconst contentSources = (\n config: ResolvedConfig,\n context: ProjectContext,\n runtime: SourceRuntime\n): ContentSource[] => {\n const defs = config.content.sources;\n if (!defs || defs.length === 0) {\n return [\n filesystemSource({\n exclude: config.content.exclude,\n include: config.content.include,\n name: \"filesystem\",\n projectRoot: context.root,\n root: config.content.root,\n }),\n ];\n }\n\n const nameFor = uniqueNamer();\n return defs.map((def) =>\n buildSource(def, nameFor(baseName(def)), context, runtime)\n );\n};\n\n/**\n * Build the ordered list of content sources for a project. With no\n * `content.sources` configured, the top-level `root`/`include`/`exclude` desugar\n * to a single implicit filesystem source, so existing projects are untouched.\n * A Blume-rendered OpenAPI reference contributes an internal staged source that\n * lowers each operation into a real content page (routing/nav/search/OG).\n */\nexport const resolveSources = (\n config: ResolvedConfig,\n context: ProjectContext,\n runtime: SourceRuntime\n): ContentSource[] => {\n const sources = contentSources(config, context, runtime);\n\n const references = blumeReferences(config);\n if (references.length > 0) {\n sources.push(\n openApiSource(references, sourceContext(context, \"openapi\", runtime))\n );\n }\n\n return sources;\n};\n",
117
- "import { existsSync, watch as fsWatch } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { extname, isAbsolute, join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { ContentSource, SourceEntry, SourceLoadResult } from \"./types.ts\";\n\n/** Options for the built-in filesystem source. */\nexport interface FilesystemSourceOptions {\n /** Stable source name; namespaces ids and diagnostics. */\n name: string;\n /** Optional route prefix. */\n prefix?: string;\n /** Content root, absolute or relative to `projectRoot`. */\n root: string;\n include: string[];\n exclude: string[];\n /** Absolute project root, used to resolve a relative `root`. */\n projectRoot: string;\n /** When set, a missing root throws this code instead of the generic one. */\n missingCode?: string;\n}\n\n/**\n * The built-in content source: discover and read `.md`/`.mdx` files under a\n * content root. This is the extraction of the original `discoverContent()` scan\n * into a `ContentSource`; every other adapter follows the same contract.\n */\nexport const filesystemSource = (\n options: FilesystemSourceOptions\n): ContentSource & { readonly contentRoot: string } => {\n const contentRoot = isAbsolute(options.root)\n ? options.root\n : join(resolve(options.projectRoot), options.root);\n\n const load = async (): Promise<SourceLoadResult> => {\n const files = await glob(options.include, {\n absolute: true,\n cwd: contentRoot,\n ignore: options.exclude,\n onlyFiles: true,\n });\n files.sort();\n\n const entries = await Promise.all(\n files.map(async (file): Promise<SourceEntry> => {\n const source = await readFile(file, \"utf-8\");\n const ext = extname(file).toLowerCase();\n const format = ext === \".mdx\" ? \"mdx\" : \"md\";\n const parsed = matter(source);\n return {\n body: { format, text: parsed.content },\n data: parsed.data,\n ref: relative(contentRoot, file),\n sourcePath: file,\n };\n })\n );\n\n return { diagnostics: [], entries };\n };\n\n const validate = (): void => {\n if (!existsSync(contentRoot)) {\n throw new BlumeError({\n code: options.missingCode ?? \"BLUME_CONTENT_ROOT_MISSING\",\n file: contentRoot,\n message: `Content root not found: ${options.root}`,\n severity: \"error\",\n suggestion: `Create a \"${options.root}\" folder with at least one .md or .mdx file, or set content.root in blume.config.ts.`,\n });\n }\n };\n\n const watch = (onChange: () => void): (() => void) => {\n if (!existsSync(contentRoot)) {\n return () => {\n // Nothing to dispose when the root doesn't exist yet.\n };\n }\n const watcher = fsWatch(contentRoot, { recursive: true }, onChange);\n return () => watcher.close();\n };\n\n return {\n contentRoot,\n load,\n name: options.name,\n prefix: options.prefix,\n read: (ref: string): Promise<string> =>\n readFile(join(contentRoot, ref), \"utf-8\"),\n staged: false,\n validate,\n watch,\n };\n};\n",
119
+ "import { existsSync, watch as fsWatch } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { extname, isAbsolute, join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { ContentSource, SourceEntry, SourceLoadResult } from \"./types.ts\";\nimport {\n BLUME_WATCH_IGNORE_DIRS,\n excludeDirSegments,\n ignoringWatchListener,\n} from \"./watch.ts\";\n\n/** Options for the built-in filesystem source. */\nexport interface FilesystemSourceOptions {\n /** Stable source name; namespaces ids and diagnostics. */\n name: string;\n /** Optional route prefix. */\n prefix?: string;\n /** Content root, absolute or relative to `projectRoot`. */\n root: string;\n include: string[];\n exclude: string[];\n /** Absolute project root, used to resolve a relative `root`. */\n projectRoot: string;\n /** When set, a missing root throws this code instead of the generic one. */\n missingCode?: string;\n}\n\n/**\n * The built-in content source: discover and read `.md`/`.mdx` files under a\n * content root. This is the extraction of the original `discoverContent()` scan\n * into a `ContentSource`; every other adapter follows the same contract.\n */\nexport const filesystemSource = (\n options: FilesystemSourceOptions\n): ContentSource & { readonly contentRoot: string } => {\n const contentRoot = isAbsolute(options.root)\n ? options.root\n : join(resolve(options.projectRoot), options.root);\n\n const load = async (): Promise<SourceLoadResult> => {\n const files = await glob(options.include, {\n absolute: true,\n cwd: contentRoot,\n ignore: options.exclude,\n onlyFiles: true,\n });\n files.sort();\n\n const entries = await Promise.all(\n files.map(async (file): Promise<SourceEntry> => {\n const source = await readFile(file, \"utf-8\");\n const ext = extname(file).toLowerCase();\n const format = ext === \".mdx\" ? \"mdx\" : \"md\";\n const parsed = matter(source);\n return {\n body: { format, text: parsed.content },\n data: parsed.data,\n ref: relative(contentRoot, file),\n sourcePath: file,\n };\n })\n );\n\n return { diagnostics: [], entries };\n };\n\n const validate = (): void => {\n if (!existsSync(contentRoot)) {\n throw new BlumeError({\n code: options.missingCode ?? \"BLUME_CONTENT_ROOT_MISSING\",\n file: contentRoot,\n message: `Content root not found: ${options.root}`,\n severity: \"error\",\n suggestion: `Create a \"${options.root}\" folder with at least one .md or .mdx file, or set content.root in blume.config.ts.`,\n });\n }\n };\n\n // When `content.root` is the project root (a migrated `.`-rooted project),\n // the recursive dev watcher would otherwise see Blume's own `.blume/` output\n // and loop; skip it, VCS/dependency trees, and every excluded dir so the\n // watcher stays in sync with what `load()` globs. See {@link ignoringWatchListener}.\n const watchIgnoreDirs = new Set([\n ...BLUME_WATCH_IGNORE_DIRS,\n ...excludeDirSegments(options.exclude),\n ]);\n\n const watch = (onChange: () => void): (() => void) => {\n if (!existsSync(contentRoot)) {\n return () => {\n // Nothing to dispose when the root doesn't exist yet.\n };\n }\n const watcher = fsWatch(\n contentRoot,\n { recursive: true },\n ignoringWatchListener(onChange, watchIgnoreDirs)\n );\n return () => watcher.close();\n };\n\n return {\n contentRoot,\n load,\n name: options.name,\n prefix: options.prefix,\n read: (ref: string): Promise<string> =>\n readFile(join(contentRoot, ref), \"utf-8\"),\n staged: false,\n validate,\n watch,\n };\n};\n",
120
+ "import type { WatchListener } from \"node:fs\";\n\n/**\n * Directory segments a recursive dev watcher must never react to. When a\n * source's content root is the project root — a migrated `.`-rooted project or a\n * Mintlify bridge — a naive recursive `fs.watch` also sees Blume's own `.blume/`\n * output, which the dev server rewrites on every render (e.g.\n * `.blume/.astro/data-store.json`). Left unfiltered, each such write re-triggers\n * a rescan + runtime regeneration whose writes land back under `.blume/` and\n * fire the watcher again: a self-sustaining loop that stalls page renders and\n * floods the console (and, mid-render, corrupts Astro's dev module graph so\n * `astro:server-app.js` fails to load). `.git`/`node_modules` are here for the\n * same reason — churn that is never page content. `fs.watch` has no ignore\n * option, so we filter by the changed path in the callback.\n */\nexport const BLUME_WATCH_IGNORE_DIRS = [\".blume\", \".git\", \"node_modules\"];\n\n/** Extract single-segment ignore dirs (`foo`) from `foo/**`-style excludes. */\nexport const excludeDirSegments = (patterns: readonly string[]): string[] =>\n patterns\n .map((pattern) => /^(?<dir>[^*/]+)\\/\\*\\*$/u.exec(pattern)?.groups?.dir)\n .filter((dir): dir is string => dir !== undefined);\n\n/**\n * Build a recursive-watch listener that fires `onChange` for content changes but\n * ignores events whose path crosses an ignored directory segment. A missing\n * `filename` — rare; the platform couldn't name the changed path — falls through\n * to `onChange` rather than silently dropping a real edit. Exported for testing.\n */\nexport const ignoringWatchListener = (\n onChange: () => void,\n ignoreDirs: Iterable<string> = BLUME_WATCH_IGNORE_DIRS\n): WatchListener<string> => {\n const ignore = new Set(ignoreDirs);\n return (_event, filename) => {\n if (\n typeof filename === \"string\" &&\n filename.split(/[/\\\\]/u).some((segment) => ignore.has(segment))\n ) {\n return;\n }\n onChange();\n };\n};\n",
118
121
  "import matter from \"../frontmatter.ts\";\nimport {\n hashText,\n loadWithCache,\n pollingWatch,\n snapshotCache,\n} from \"./cache.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"./types.ts\";\n\n/** Options for the built-in GitHub Releases changelog source. */\nexport interface GithubReleasesSourceOptions {\n /** GitHub REST API base; overridable for GitHub Enterprise / tests. */\n baseUrl?: string;\n /** Include draft releases (needs a token with repo write access). Default off. */\n drafts?: boolean;\n /** Injected for tests; defaults to the global `fetch`. */\n fetchImpl?: typeof fetch;\n /** Cap the number of releases materialized, newest-first. Default 100. */\n limit?: number;\n name: string;\n /** Repository owner (user or org). */\n owner: string;\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval?: number;\n /** Namespaces the source's routes under `/<prefix>/`; e.g. `changelog`. */\n prefix?: string;\n /** Include prereleases. Default off. */\n prereleases?: boolean;\n /** Repository name. */\n repo: string;\n}\n\n/** The subset of the GitHub release payload the adapter reads. */\ninterface GithubRelease {\n body: string | null;\n created_at: string;\n draft: boolean;\n html_url: string;\n id: number;\n name: string | null;\n prerelease: boolean;\n published_at: string | null;\n tag_name: string;\n}\n\nconst DEFAULT_BASE_URL = \"https://api.github.com\";\nconst DEFAULT_LIMIT = 100;\nconst PER_PAGE = 100;\n\nconst LEADING_V = /^v/iu;\nconst NON_SLUG = /[^a-z0-9]+/gu;\nconst EDGE_DASHES = /^-+|-+$/gu;\n\n/** Slugify a tag into a stable, URL-safe source ref (`v1.2.0` -> `v1-2-0`). */\nconst slugifyTag = (tag: string): string =>\n tag.toLowerCase().replaceAll(NON_SLUG, \"-\").replaceAll(EDGE_DASHES, \"\");\n\n/** Build request headers, reading `GITHUB_TOKEN` fresh at call time. */\nconst githubHeaders = (): Headers => {\n const headers = new Headers({ Accept: \"application/vnd.github+json\" });\n const token = process.env.GITHUB_TOKEN;\n if (token) {\n headers.set(\"Authorization\", `Bearer ${token}`);\n }\n return headers;\n};\n\n/**\n * Lower one release to a staged Markdown entry: the notes become the body and\n * `type: changelog` frontmatter (title/date/version/category) drives the\n * generated `/changelog` timeline and RSS feed.\n */\nconst releaseToEntry = (release: GithubRelease): SourceEntry => {\n const version = release.tag_name.replace(LEADING_V, \"\");\n const title = release.name?.trim() || release.tag_name;\n const date = release.published_at ?? release.created_at;\n const category = release.prerelease ? \"Prerelease\" : \"Release\";\n const body = (release.body ?? \"\").replaceAll(\"\\r\\n\", \"\\n\").trim();\n const data = {\n changelog: { category, version },\n date,\n title,\n type: \"changelog\",\n };\n const raw = matter.stringify(`${body}\\n`, data);\n const ref = `${slugifyTag(release.tag_name) || `release-${release.id}`}.md`;\n return {\n body: { format: \"md\", text: body },\n data,\n editUrl: release.html_url,\n hash: hashText(raw),\n lastModified: date,\n raw,\n ref,\n };\n};\n\n/**\n * GitHub Releases content source. Pulls a repo's releases from the REST API and\n * materializes each as a `type: changelog` entry, so a project's release notes\n * become its changelog with no files to maintain. A private repo authenticates\n * with `GITHUB_TOKEN`. A snapshot under `.blume/cache/<source>/` keeps rebuilds\n * offline-tolerant.\n */\nexport const githubReleasesSource = (\n options: GithubReleasesSourceOptions,\n ctx: SourceContext\n): ContentSource => {\n const doFetch = options.fetchImpl ?? globalThis.fetch;\n const base = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/u, \"\");\n const max = options.limit ?? DEFAULT_LIMIT;\n const cache = snapshotCache(ctx.cacheDir);\n let snapshot = new Map<string, SourceEntry>();\n\n const include = (release: GithubRelease): boolean =>\n (options.drafts || !release.draft) &&\n (options.prereleases || !release.prerelease);\n\n const fetchPage = async (page: number): Promise<GithubRelease[]> => {\n const url = `${base}/repos/${options.owner}/${options.repo}/releases?per_page=${PER_PAGE}&page=${page}`;\n const res = await doFetch(url, { headers: githubHeaders() });\n if (!res.ok) {\n throw new Error(`${url} -> ${res.status}`);\n }\n return (await res.json()) as GithubRelease[];\n };\n\n const fetchReleases = async (): Promise<GithubRelease[]> => {\n const collected: GithubRelease[] = [];\n let page = 1;\n while (collected.length < max) {\n // oxlint-disable-next-line no-await-in-loop -- pages are sequential: each page's length decides whether another exists.\n const batch = await fetchPage(page);\n collected.push(...batch.filter(include));\n if (batch.length < PER_PAGE) {\n break;\n }\n page += 1;\n }\n return collected.slice(0, max);\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n try {\n const result = await loadWithCache(\n options.name,\n cache,\n async () => {\n const releases = await fetchReleases();\n return releases.map(releaseToEntry);\n },\n ctx.refresh ?? true\n );\n snapshot = new Map(result.entries.map((entry) => [entry.ref, entry]));\n return result;\n } catch (error) {\n // A changelog is supplementary. When releases can't be fetched and nothing\n // is cached (e.g. CI or a deploy without a `GITHUB_TOKEN` for a private\n // repo), degrade to an empty changelog with a warning rather than failing\n // the whole build.\n snapshot = new Map();\n return {\n diagnostics: [\n {\n code: \"BLUME_SOURCE_UNAVAILABLE\",\n message: `Source \"${options.name}\" could not fetch GitHub releases (${(error as Error).message}); the changelog will be empty. Set GITHUB_TOKEN to include it (required for a private repository).`,\n severity: \"warning\",\n },\n ],\n entries: [],\n };\n }\n };\n\n const read = async (ref: string): Promise<string> => {\n const cached = snapshot.get(ref);\n if (cached) {\n return cached.raw ?? cached.body.text;\n }\n const all = await cache.read();\n const entry = all.find((e) => e.ref === ref);\n return entry?.raw ?? entry?.body.text ?? \"\";\n };\n\n return {\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n watch: options.pollInterval\n ? pollingWatch(load, options.pollInterval)\n : undefined,\n };\n};\n",
119
- "import { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport {\n hashText,\n loadWithCache,\n pollingWatch,\n snapshotCache,\n} from \"./cache.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"./types.ts\";\n\n/** Options for the built-in remote Markdown/MDX source. */\nexport interface MdxRemoteSourceOptions {\n name: string;\n prefix?: string;\n /** Raw base URL for `files`, e.g. `https://raw.githubusercontent.com/o/r/main/docs`. */\n url?: string;\n /** Explicit source-relative file paths to fetch from `url`. */\n files?: string[];\n /** Enumerate a GitHub repo subtree via the git-trees API. */\n github?: { owner: string; repo: string; ref: string; path: string };\n include: string[];\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval?: number;\n /** Injected for tests; defaults to the global `fetch`. */\n fetchImpl?: typeof fetch;\n}\n\nconst REGEX_SPECIAL = /[.*+?^${}()|[\\]\\\\]/u;\n\n/** Escape a literal character for embedding in a RegExp. */\nconst escapeChar = (char: string): string =>\n REGEX_SPECIAL.test(char) ? `\\\\${char}` : char;\n\n/** Compile a glob (`**`, `*`, `?`, `{a,b}`) into an anchored RegExp. */\nconst globToRegExp = (pattern: string): RegExp => {\n let source = \"\";\n let i = 0;\n while (i < pattern.length) {\n const char = pattern[i] ?? \"\";\n if (char === \"*\") {\n if (pattern[i + 1] === \"*\") {\n source += \".*\";\n i += 2;\n if (pattern[i] === \"/\") {\n i += 1;\n }\n continue;\n }\n source += \"[^/]*\";\n i += 1;\n continue;\n }\n if (char === \"?\") {\n source += \"[^/]\";\n i += 1;\n continue;\n }\n if (char === \"{\") {\n const end = pattern.indexOf(\"}\", i);\n if (end !== -1) {\n const options = pattern\n .slice(i + 1, end)\n .split(\",\")\n .map((part) => [...part].map(escapeChar).join(\"\"))\n .join(\"|\");\n source += `(?:${options})`;\n i = end + 1;\n continue;\n }\n }\n source += escapeChar(char);\n i += 1;\n }\n return new RegExp(`^${source}$`, \"u\");\n};\n\n/** Whether a ref matches any of the include globs. */\nconst matchesInclude = (ref: string, patterns: string[]): boolean =>\n patterns.some((pattern) => globToRegExp(pattern).test(ref));\n\n/** A file to fetch: its source-local ref plus where to read it from. */\ninterface RemoteRef {\n ref: string;\n fetchUrl: string;\n editUrl?: string;\n}\n\nconst githubHeaders = (): Record<string, string> => {\n const token = process.env.GITHUB_TOKEN;\n return token ? { authorization: `Bearer ${token}` } : {};\n};\n\ninterface GithubTreeEntry {\n path: string;\n type: string;\n}\n\n/** Enumerate a GitHub repo subtree, mapping blobs to remote refs. */\nconst enumerateGithub = async (\n github: { owner: string; repo: string; ref: string; path: string },\n include: string[],\n doFetch: typeof fetch\n): Promise<{ refs: RemoteRef[]; truncated: boolean }> => {\n const { owner, repo, ref } = github;\n const base = github.path.replaceAll(/^\\/|\\/$/gu, \"\");\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${ref}?recursive=1`;\n const res = await doFetch(treeUrl, { headers: githubHeaders() });\n if (!res.ok) {\n throw new Error(`${treeUrl} -> ${res.status}`);\n }\n const body = (await res.json()) as {\n tree?: GithubTreeEntry[];\n truncated?: boolean;\n };\n const prefix = base ? `${base}/` : \"\";\n const refs = (body.tree ?? [])\n .filter((node) => node.type === \"blob\" && node.path.startsWith(prefix))\n .map((node) => node.path.slice(prefix.length))\n .filter((rel) => matchesInclude(rel, include))\n .map((rel) => ({\n editUrl: `https://github.com/${owner}/${repo}/edit/${ref}/${prefix}${rel}`,\n fetchUrl: `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${prefix}${rel}`,\n ref: rel,\n }));\n // GitHub caps the recursive tree response (~100k entries / 7MB) and flags it\n // with `truncated`; ignoring it would silently import only part of the repo.\n return { refs, truncated: body.truncated === true };\n};\n\n/**\n * Remote Markdown/MDX content source. Fetches raw `.md`/`.mdx` over HTTP and\n * passes the text straight through `normalizeEntry`. A snapshot under\n * `.blume/cache/<source>/` makes rebuilds offline-tolerant.\n */\nexport const mdxRemoteSource = (\n options: MdxRemoteSourceOptions,\n ctx: SourceContext\n): ContentSource => {\n const doFetch = options.fetchImpl ?? globalThis.fetch;\n const cache = snapshotCache(ctx.cacheDir);\n let snapshot = new Map<string, SourceEntry>();\n\n const enumerate = async (): Promise<{\n refs: RemoteRef[];\n truncated: boolean;\n }> => {\n if (options.github) {\n return await enumerateGithub(options.github, options.include, doFetch);\n }\n if (options.files && options.url) {\n const base = options.url.replace(/\\/$/u, \"\");\n const refs = options.files\n .filter((ref) => matchesInclude(ref, options.include))\n .map((ref) => ({\n editUrl: `${base}/${ref}`,\n fetchUrl: `${base}/${ref}`,\n ref,\n }));\n return { refs, truncated: false };\n }\n throw new BlumeError({\n code: \"BLUME_SOURCE_MISCONFIGURED\",\n message: `Source \"${options.name}\" needs either { github } or { url, files }.`,\n severity: \"error\",\n });\n };\n\n const fetchEntry = async (item: RemoteRef): Promise<SourceEntry> => {\n const res = await doFetch(item.fetchUrl, { headers: githubHeaders() });\n if (!res.ok) {\n throw new Error(`${item.fetchUrl} -> ${res.status}`);\n }\n const text = await res.text();\n const parsed = matter(text);\n const format = item.ref.toLowerCase().endsWith(\".mdx\") ? \"mdx\" : \"md\";\n return {\n body: { format, text: parsed.content },\n data: parsed.data,\n editUrl: item.editUrl,\n hash: hashText(text),\n raw: text,\n ref: item.ref,\n };\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n const skipped: Diagnostic[] = [];\n const result = await loadWithCache(\n options.name,\n cache,\n async () => {\n const { refs, truncated } = await enumerate();\n if (truncated) {\n skipped.push({\n code: \"BLUME_SOURCE_TRUNCATED\",\n message: `Source \"${options.name}\" hit GitHub's tree listing limit; some files were not enumerated. Narrow the source path or split the repo.`,\n severity: \"warning\",\n });\n }\n const settled = await Promise.all(\n refs.map(async (ref) => {\n try {\n return await fetchEntry(ref);\n } catch (error) {\n skipped.push({\n code: \"BLUME_SOURCE_FETCH_FAILED\",\n message: `Source \"${options.name}\" skipped \"${ref.ref}\" (${(error as Error).message}); the rest were imported.`,\n severity: \"warning\",\n });\n return null;\n }\n })\n );\n const entries = settled.filter(\n (entry): entry is SourceEntry => entry !== null\n );\n // Only a total wipeout is a hard failure — let loadWithCache fall back\n // to cache or fail loudly rather than silently importing nothing. A\n // partial failure keeps the healthy pages and warns about the rest.\n if (refs.length > 0 && entries.length === 0) {\n skipped.length = 0;\n throw new Error(`all ${refs.length} remote file(s) failed to fetch`);\n }\n return entries;\n },\n ctx.refresh ?? true\n );\n snapshot = new Map(result.entries.map((entry) => [entry.ref, entry]));\n return {\n ...result,\n diagnostics: [...result.diagnostics, ...skipped],\n };\n };\n\n const read = async (ref: string): Promise<string> => {\n const cached = snapshot.get(ref);\n if (cached) {\n return cached.raw ?? cached.body.text;\n }\n const all = await cache.read();\n const entry = all.find((e) => e.ref === ref);\n return entry?.raw ?? entry?.body.text ?? \"\";\n };\n\n return {\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n watch: options.pollInterval\n ? pollingWatch(load, options.pollInterval)\n : undefined,\n };\n};\n",
120
- "import { existsSync, watch as fsWatch } from \"node:fs\";\nimport type { WatchListener } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { isAbsolute, join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { transformMintlifyContent } from \"../../migrate/mintlify/transform.ts\";\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport type { ContentSource, SourceEntry, SourceLoadResult } from \"./types.ts\";\n\n/** Options for the Mintlify bridge content source. */\nexport interface MintlifySourceOptions {\n /** Stable source name; namespaces ids and diagnostics. */\n name: string;\n /** Optional route prefix. */\n prefix?: string;\n /** Content root, absolute or relative to `projectRoot` (Mintlify: `.`). */\n root: string;\n include: string[];\n exclude: string[];\n /** `docs.json` variables, inlined into content (`{{name}}`) at scan time. */\n variables: Record<string, string>;\n /** Absolute path of the `docs.json`/`mint.json`, watched for changes in dev. */\n configFile?: string;\n /** Absolute project root, used to resolve a relative `root`. */\n projectRoot: string;\n}\n\n/**\n * Folders Mintlify projects keep alongside content that are never pages:\n * snippets are inlined as includes, and build/tooling dirs are noise. Merged\n * with the user's `exclude` so bridge mode behaves like the one-shot migrator.\n */\nconst MINTLIFY_SOURCE_IGNORES = [\n \"node_modules/**\",\n \".blume/**\",\n \"dist/**\",\n \"build/**\",\n \"public/**\",\n \"snippets/**\",\n];\n\n/**\n * Directory names the recursive dev watcher must ignore. In bridge mode the\n * content root is the project root, so a naive recursive `fs.watch` also sees\n * Blume's own `.blume/` output — which the dev server rewrites on every request\n * (`.blume/.astro/data-store.json`). Left unfiltered, each such write re-triggers\n * a full rescan + runtime regeneration, whose writes land back under `.blume/`\n * and fire the watcher again: a self-sustaining storm that stalls page renders\n * and floods the console. `fs.watch` has no ignore option, so we filter by the\n * changed path in the callback. Derived from {@link MINTLIFY_SOURCE_IGNORES}\n * (dir prefixes) plus VCS metadata.\n */\nconst WATCH_IGNORE_DIRS = new Set([\n ...MINTLIFY_SOURCE_IGNORES.map((pattern) => pattern.replace(/\\/\\*\\*$/u, \"\")),\n \".git\",\n]);\n\n/**\n * Build the recursive-watch listener: fire `onChange` for content changes but\n * ignore events whose path crosses a {@link WATCH_IGNORE_DIRS} segment (Blume's\n * own `.blume/` output, `node_modules`, VCS metadata, …). A missing `filename`\n * — rare; the platform couldn't name the changed path — falls through to\n * regenerate rather than silently dropping a real edit. Exported for testing.\n */\nexport const mintlifyWatchListener =\n (onChange: () => void): WatchListener<string> =>\n (_event, filename) => {\n if (\n typeof filename === \"string\" &&\n filename.split(/[/\\\\]/u).some((segment) => WATCH_IGNORE_DIRS.has(segment))\n ) {\n return;\n }\n onChange();\n };\n\n/**\n * The Mintlify bridge content source. Reads an unconverted Mintlify project in\n * place and transforms each page to Blume MDX at scan time (callouts → `:::`\n * directives, snippet/variable inlining, etc.) via `transformMintlifyContent`.\n * Staged: the transformed bodies are materialized under `.blume/content` and\n * rendered through Astro's `staged` collection, so the rewrites actually reach\n * the output. Components Blume already ships (Card, Tabs, Steps, …) render as-is.\n */\nexport const mintlifySource = (\n options: MintlifySourceOptions\n): ContentSource & { readonly contentRoot: string } => {\n const contentRoot = isAbsolute(options.root)\n ? options.root\n : join(resolve(options.projectRoot), options.root);\n const ignore = [...new Set([...options.exclude, ...MINTLIFY_SOURCE_IGNORES])];\n\n const transform = (\n raw: string,\n file: string\n ): ReturnType<typeof transformMintlifyContent> =>\n transformMintlifyContent(raw, {\n filePath: file,\n root: resolve(options.projectRoot),\n variables: options.variables,\n });\n\n const load = async (): Promise<SourceLoadResult> => {\n const files = await glob(options.include, {\n absolute: true,\n cwd: contentRoot,\n ignore,\n onlyFiles: true,\n });\n files.sort();\n\n const unsupported = new Set<string>();\n const entries = await Promise.all(\n files.map(async (file): Promise<SourceEntry> => {\n const result = await transform(await readFile(file, \"utf-8\"), file);\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n const parsed = matter(result.content);\n // Force MDX: Mintlify pages are MDX-authored and the rewrites emit `:::`\n // directives + JSX, neither of which the plain `.md` processor expands.\n return {\n body: { format: \"mdx\", text: parsed.content },\n data: parsed.data,\n raw: result.content,\n ref: relative(contentRoot, file),\n sourcePath: file,\n };\n })\n );\n\n const diagnostics: Diagnostic[] =\n unsupported.size > 0\n ? [\n {\n code: \"BLUME_MINTLIFY_UNSUPPORTED\",\n message: `Mintlify components without a Blume equivalent were left as-is: ${[...unsupported].toSorted().join(\", \")}. Replace them by hand or provide a matching component.`,\n severity: \"warning\",\n },\n ]\n : [];\n\n return { diagnostics, entries };\n };\n\n const validate = (): void => {\n if (!existsSync(contentRoot)) {\n throw new BlumeError({\n code: \"BLUME_CONTENT_ROOT_MISSING\",\n file: contentRoot,\n message: `Content root not found: ${options.root}`,\n severity: \"error\",\n suggestion: `Run \"blume dev\" from the directory that contains docs.json.`,\n });\n }\n };\n\n const watch = (onChange: () => void): (() => void) => {\n const disposers: (() => void)[] = [];\n if (existsSync(contentRoot)) {\n // Recursively watch the content root, but skip Blume's own output and\n // other non-content trees so the dev server's `.blume/` writes don't feed\n // a regeneration loop (`fs.watch` has no ignore option, so filter here).\n const watcher = fsWatch(\n contentRoot,\n { recursive: true },\n mintlifyWatchListener(onChange)\n );\n disposers.push(() => watcher.close());\n }\n // Watch docs.json directly: it lives at the content root but a non-recursive\n // single-file watch fires reliably on edits that recursive dir-watch can miss.\n if (options.configFile && existsSync(options.configFile)) {\n const watcher = fsWatch(options.configFile, onChange);\n disposers.push(() => watcher.close());\n }\n return () => {\n for (const dispose of disposers) {\n dispose();\n }\n };\n };\n\n const read = async (ref: string): Promise<string> => {\n const file = join(contentRoot, ref);\n const result = await transform(await readFile(file, \"utf-8\"), file);\n return result.content;\n };\n\n return {\n contentRoot,\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n validate,\n watch,\n };\n};\n",
121
- "import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { basename, isAbsolute, join, relative } from \"pathe\";\n\nimport { blumePackageJson, toPackageName } from \"../core/package-json.ts\";\nimport type { BlumeConfig } from \"../core/schema.ts\";\nimport { pageMetaSchema } from \"../core/schema.ts\";\n\n/**\n * Whether `candidate` resolves to a path inside `root` (or is `root` itself).\n * Guards migrators against `../` traversal in author-controlled source paths\n * (`pages` entries, `<include>` targets) that would otherwise read or move\n * files outside the docs tree.\n */\nexport const isInsideRoot = (root: string, candidate: string): boolean => {\n const rel = relative(root, candidate);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n};\n\n/**\n * Framework-agnostic helpers shared by more than one migrator. Each piece here\n * was generalized from a migrator-specific implementation so Mintlify, Nextra,\n * and future migrators converge on a single copy.\n */\n\n/** Serialize a `BlumeConfig` to a `blume.config.ts` at the project root. */\nexport const writeBlumeConfig = async (\n root: string,\n config: BlumeConfig\n): Promise<void> => {\n const body = `import { defineConfig } from \"blume\";\\n\\nexport default defineConfig(${JSON.stringify(config, null, 2)});\\n`;\n await writeFile(join(root, \"blume.config.ts\"), body, \"utf-8\");\n};\n\n// ---------------------------------------------------------------------------\n// Old-framework teardown\n// ---------------------------------------------------------------------------\n\n/** The Blume command each standard npm script maps to after a migration. */\nconst BLUME_SCRIPTS: Record<string, string> = {\n build: \"blume build\",\n dev: \"blume dev\",\n start: \"blume preview\",\n};\n\n/**\n * Rewrite a migrated project's npm scripts off the old framework's CLI. A\n * `dev`/`build`/`start` script whose command invokes `cli` (e.g. `/\\bnext\\b/`)\n * is repointed at the matching Blume command (`start` -> `blume preview`); a\n * script whose command matches `remove` (e.g. a `fumadocs-mdx` postinstall) is\n * dropped. Scripts that don't match either are left untouched, so custom tasks\n * survive. Returns true when `package.json` changed.\n */\nexport const rewriteFrameworkScripts = async (\n root: string,\n cli: RegExp,\n remove?: RegExp\n): Promise<boolean> => {\n const pkgPath = join(root, \"package.json\");\n if (!existsSync(pkgPath)) {\n return false;\n }\n let pkg: { scripts?: Record<string, unknown> };\n try {\n pkg = JSON.parse(await readFile(pkgPath, \"utf-8\"));\n } catch {\n return false;\n }\n const { scripts } = pkg;\n if (!scripts || typeof scripts !== \"object\") {\n return false;\n }\n\n const next: Record<string, unknown> = {};\n let changed = false;\n for (const [name, command] of Object.entries(scripts)) {\n const blume = BLUME_SCRIPTS[name];\n if (typeof command === \"string\" && remove?.test(command)) {\n changed = true;\n } else if (\n typeof command === \"string\" &&\n blume &&\n cli.test(command) &&\n command !== blume\n ) {\n next[name] = blume;\n changed = true;\n } else {\n next[name] = command;\n }\n }\n\n if (changed) {\n pkg.scripts = next;\n await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, \"utf-8\");\n }\n return changed;\n};\n\n/** Of the candidate project-relative paths, the ones that still exist — the old\n * framework files a migration leaves behind for the user to remove by hand. */\nexport const leftoverFiles = (root: string, candidates: string[]): string[] =>\n candidates.filter((candidate) => existsSync(join(root, candidate)));\n\n/**\n * Scaffold a minimal, runnable `package.json` when the migrated project has\n * none. Config-only sources (e.g. a Mintlify `docs.json`) ship no npm manifest,\n * so a fresh migration has nothing to run `blume dev` with; this writes a stub\n * with `blume` as a dependency and `dev`/`build`/`doctor` scripts, making\n * `npm install && npm run dev` work immediately. A pre-existing `package.json`\n * is left untouched — {@link rewriteFrameworkScripts} repoints those instead.\n * Returns true when a file was created.\n */\nexport const ensurePackageJson = async (root: string): Promise<boolean> => {\n const pkgPath = join(root, \"package.json\");\n if (existsSync(pkgPath)) {\n return false;\n }\n await writeFile(\n pkgPath,\n blumePackageJson(toPackageName(basename(root))),\n \"utf-8\"\n );\n return true;\n};\n\n// ---------------------------------------------------------------------------\n// Callout components -> Blume `:::` directives\n// ---------------------------------------------------------------------------\n\nexport interface CalloutRewriteOptions {\n /** Directive for a type-bearing tag with no `type` attribute (e.g. bare `<Callout>`). */\n defaultDirective: string;\n /** Tag names whose directive is fixed by the tag itself (e.g. `<Warning>`). */\n tagDirectives: Record<string, string>;\n /** Component tag names to convert. */\n tags: string[];\n /** `type=\"…\"` values mapped to Blume directive names. */\n typeDirectives: Record<string, string>;\n}\n\n/** Read a quoted string attribute (`name=\"…\"` or `name='…'`) from a tag. */\nexport const attribute = (attrs: string, name: string): string | undefined => {\n const match = attrs.match(\n new RegExp(`\\\\b${name}=(?:\"(?<dq>[^\"]*)\"|'(?<sq>[^']*)')`, \"u\")\n );\n return match?.groups?.dq ?? match?.groups?.sq;\n};\n\n/** Remove a shared leading indent and surrounding blank lines from a block. */\nconst dedent = (value: string): string => {\n const lines = value\n .replace(/^\\r?\\n/u, \"\")\n .replace(/\\s+$/u, \"\")\n .split(\"\\n\");\n const indents = lines\n .filter((line) => line.trim() !== \"\")\n .map((line) => line.match(/^\\s*/u)?.[0].length ?? 0);\n const common = indents.length > 0 ? Math.min(...indents) : 0;\n return lines.map((line) => line.slice(common)).join(\"\\n\");\n};\n\nconst directiveBlock = (\n directive: string,\n title: string | undefined,\n inner: string\n): string => {\n const head = title ? `:::${directive}[${title}]` : `:::${directive}`;\n const body = dedent(inner);\n return `${head}\\n${body}\\n:::`;\n};\n\n/**\n * Find the `>` that closes an opening JSX tag, honoring quotes and `{…}`\n * expression attributes (so a `>` inside `icon={\"<svg…>\"}` is not mistaken for\n * the tag end). Returns -1 if unterminated.\n */\nexport const findOpenTagEnd = (source: string, from: number): number => {\n let depth = 0;\n let quote: '\"' | \"'\" | \"`\" | null = null;\n for (let index = from; index < source.length; index += 1) {\n const char = source[index];\n if (quote) {\n if (char === quote && source[index - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n } else if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n } else if (char === \">\" && depth === 0) {\n return index;\n }\n }\n return -1;\n};\n\nconst directiveFor = (\n tag: string,\n attrs: string,\n options: CalloutRewriteOptions\n): string | undefined => {\n if (tag in options.tagDirectives) {\n return options.tagDirectives[tag];\n }\n const type = attribute(attrs, \"type\")?.toLowerCase();\n return type ? options.typeDirectives[type] : options.defaultDirective;\n};\n\n/**\n * Convert callout-style JSX components into Blume `:::` directives. Uses a\n * quote/brace-aware tag scanner so callouts carrying JSX-expression attributes\n * (e.g. inline-SVG icons) convert cleanly; non-convertible attributes (icons,\n * colors, emoji) are dropped. A tag whose resolved directive is unknown is left\n * untouched.\n */\nexport const rewriteCallouts = (\n source: string,\n options: CalloutRewriteOptions\n): string => {\n const tagPattern = new RegExp(\n `<(?<tag>${options.tags.join(\"|\")})(?=[\\\\s/>])`,\n \"u\"\n );\n let output = \"\";\n let cursor = 0;\n\n while (cursor < source.length) {\n const match = tagPattern.exec(source.slice(cursor));\n if (!match?.groups) {\n output += source.slice(cursor);\n break;\n }\n\n const start = cursor + match.index;\n const { tag } = match.groups;\n if (!tag) {\n output += source.slice(cursor);\n break;\n }\n const openEnd = findOpenTagEnd(source, start + tag.length + 1);\n if (openEnd === -1) {\n output += source.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n\n const attrs = source.slice(start + tag.length + 1, openEnd);\n const directive = directiveFor(tag, attrs, options);\n const closeTag = `</${tag}>`;\n const selfClosing = attrs.trimEnd().endsWith(\"/\");\n const closeIndex = selfClosing\n ? openEnd\n : source.indexOf(closeTag, openEnd + 1);\n\n if (!directive || (!selfClosing && closeIndex === -1)) {\n output += source.slice(cursor, openEnd + 1);\n cursor = openEnd + 1;\n continue;\n }\n\n output += source.slice(cursor, start);\n const title = attribute(attrs, \"title\");\n if (selfClosing) {\n output += title\n ? `:::${directive}[${title}]\\n:::`\n : `:::${directive}\\n:::`;\n cursor = openEnd + 1;\n } else {\n output += directiveBlock(\n directive,\n title,\n source.slice(openEnd + 1, closeIndex)\n );\n cursor = closeIndex + closeTag.length;\n }\n }\n\n return output;\n};\n\n// ---------------------------------------------------------------------------\n// Page frontmatter\n// ---------------------------------------------------------------------------\n\n/**\n * Remove frontmatter keys Blume's strict page schema would reject (e.g. stray\n * `og:*`/`twitter:*` metatags) so the migrated page validates, reporting what\n * was dropped. Validation errors other than stray keys are left for `blume dev`\n * to surface.\n */\nexport const stripUnknownPageMeta = (\n data: Record<string, unknown>\n): { data: Record<string, unknown>; removed: string[] } => {\n const result = pageMetaSchema.safeParse(data);\n if (result.success) {\n return { data, removed: [] };\n }\n\n const removed = new Set<string>();\n for (const issue of result.error.issues) {\n if (issue.code === \"unrecognized_keys\" && issue.path.length === 0) {\n for (const key of issue.keys) {\n removed.add(key);\n }\n }\n }\n if (removed.size === 0) {\n return { data, removed: [] };\n }\n\n const next: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!removed.has(key)) {\n next[key] = value;\n }\n }\n return { data: next, removed: [...removed] };\n};\n\n// ---------------------------------------------------------------------------\n// JSX tag renaming\n// ---------------------------------------------------------------------------\n\n/**\n * Rename a JSX tag (open and close) while preserving its attributes. The\n * trailing lookahead means a longer tag (e.g. `CardGrid`) is never matched by a\n * rule for its shorter prefix (`Card`), so prefix-sharing renames can be chained\n * — run the item-level rename before the container rename.\n */\nexport const renameTag = (source: string, from: string, to: string): string =>\n source.replaceAll(\n new RegExp(`<(?<close>/?)${from}(?=[\\\\s/>])`, \"gu\"),\n `<$<close>${to}`\n );\n\n// ---------------------------------------------------------------------------\n// JavaScript literal scanning\n// ---------------------------------------------------------------------------\n\n/**\n * Static readers for JS/TS config files (Nextra `_meta`, Starlight\n * `astro.config`). Config is parsed by walking the source as text — quote-,\n * comment-, and bracket-aware — rather than executing user code, matching the\n * other migrators (which never eval). Values that aren't pure literals (an\n * identifier, call, JSX, or interpolated template) are reported as `UNPARSEABLE`\n * so the caller can drop the field and warn.\n */\n\n/** Index of a string within a JS source: the close quote matching `s[open]`. */\nexport const findStringEnd = (s: string, open: number): number => {\n const quote = s[open];\n for (let index = open + 1; index < s.length; index += 1) {\n if (s[index] === \"\\\\\") {\n index += 1;\n continue;\n }\n if (s[index] === quote) {\n return index;\n }\n }\n return -1;\n};\n\nexport const unescapeString = (inner: string): string =>\n inner.replaceAll(/\\\\(?<ch>[\"'`\\\\nt])/gu, (_match, ch: string) => {\n if (ch === \"n\") {\n return \"\\n\";\n }\n if (ch === \"t\") {\n return \"\\t\";\n }\n return ch;\n });\n\n/** Index of the last char of a `//` or block comment at `index`, else `index`. */\nconst skipComment = (source: string, index: number): number => {\n if (source[index + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", index + 2);\n return newline === -1 ? source.length : newline;\n }\n if (source[index + 1] === \"*\") {\n const close = source.indexOf(\"*/\", index + 2);\n return close === -1 ? source.length : close + 1;\n }\n return index;\n};\n\nconst pushSlice = (\n parts: string[],\n source: string,\n start: number,\n end: number\n): void => {\n const raw = source.slice(start, end).trim();\n if (raw) {\n parts.push(raw);\n }\n};\n\nexport interface ObjectScanResult {\n end: number;\n entries: string[];\n}\n\n/**\n * Walk a `{…}` object literal starting at `openIndex`, returning the matching\n * close-brace index and the raw `key: value` text of each top-level entry.\n * Quote-, comment-, and bracket-aware so commas/braces nested in strings,\n * arrays, or child objects don't split entries. Returns null if unterminated.\n */\nexport const scanObject = (\n source: string,\n openIndex: number\n): ObjectScanResult | null => {\n let depth = 0;\n const entries: string[] = [];\n let entryStart = openIndex + 1;\n\n for (let index = openIndex; index < source.length; index += 1) {\n const char = source[index];\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n const end = findStringEnd(source, index);\n index = end === -1 ? source.length : end;\n continue;\n }\n if (char === \"/\") {\n const skipped = skipComment(source, index);\n if (skipped !== index) {\n index = skipped;\n continue;\n }\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n if (char === \"}\" && depth === 0) {\n pushSlice(entries, source, entryStart, index);\n return { end: index, entries };\n }\n continue;\n }\n if (char === \",\" && depth === 1) {\n pushSlice(entries, source, entryStart, index);\n entryStart = index + 1;\n }\n }\n\n return null;\n};\n\nexport interface ArrayScanResult {\n elements: string[];\n end: number;\n}\n\n/**\n * Walk a `[…]` array literal starting at `openIndex`, returning the matching\n * close-bracket index and the raw text of each top-level element. The sibling of\n * {@link scanObject}; a trailing comma yields no empty element.\n */\nexport const scanArray = (\n source: string,\n openIndex: number\n): ArrayScanResult | null => {\n let depth = 0;\n const elements: string[] = [];\n let elementStart = openIndex + 1;\n\n for (let index = openIndex; index < source.length; index += 1) {\n const char = source[index];\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n const end = findStringEnd(source, index);\n index = end === -1 ? source.length : end;\n continue;\n }\n if (char === \"/\") {\n const skipped = skipComment(source, index);\n if (skipped !== index) {\n index = skipped;\n continue;\n }\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n if (char === \"}\" || char === \")\") {\n depth -= 1;\n continue;\n }\n if (char === \"]\") {\n depth -= 1;\n if (depth === 0) {\n pushSlice(elements, source, elementStart, index);\n return { elements, end: index };\n }\n continue;\n }\n if (char === \",\" && depth === 1) {\n pushSlice(elements, source, elementStart, index);\n elementStart = index + 1;\n }\n }\n\n return null;\n};\n\n/**\n * Strip `//` and block comments so they don't leak into entry text (the scanner\n * splits on slices, so an inter-entry comment would otherwise attach to the next\n * entry). String literals are preserved verbatim.\n */\nexport const stripJsComments = (source: string): string => {\n let out = \"\";\n let quote: string | null = null;\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index];\n if (quote) {\n out += char;\n if (char === \"\\\\\") {\n out += source[index + 1] ?? \"\";\n index += 1;\n } else if (char === quote) {\n quote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n out += char;\n continue;\n }\n if (char === \"/\" && source[index + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", index + 2);\n index = newline === -1 ? source.length - 1 : newline - 1;\n continue;\n }\n if (char === \"/\" && source[index + 1] === \"*\") {\n const close = source.indexOf(\"*/\", index + 2);\n index = close === -1 ? source.length - 1 : close + 1;\n out += \" \";\n continue;\n }\n out += char;\n }\n return out;\n};\n\nexport interface KeyValue {\n key: string;\n value: string;\n}\n\n/** Split a raw `key: value` entry at its top-level colon. */\nexport const splitKeyValue = (entry: string): KeyValue | null => {\n let index = 0;\n while (index < entry.length && /\\s/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n const first = entry[index];\n if (first === \"[\") {\n // Computed key — not something we can resolve statically.\n return null;\n }\n\n let key: string;\n if (first === '\"' || first === \"'\" || first === \"`\") {\n const close = findStringEnd(entry, index);\n if (close === -1) {\n return null;\n }\n key = entry.slice(index, close + 1);\n index = close + 1;\n } else {\n const start = index;\n while (index < entry.length && !/[\\s:]/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n key = entry.slice(start, index);\n }\n\n while (index < entry.length && /\\s/u.test(entry[index] ?? \"\")) {\n index += 1;\n }\n if (entry[index] !== \":\") {\n return { key, value: \"\" };\n }\n return { key, value: entry.slice(index + 1).trim() };\n};\n\n/** Read an object key, unquoting it when it is a string literal. */\nexport const parseKey = (key: string): string => {\n const trimmed = key.trim();\n const [quote] = trimmed;\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n const end = findStringEnd(trimmed, 0);\n if (end !== -1) {\n return unescapeString(trimmed.slice(1, end));\n }\n }\n return trimmed;\n};\n\n/** Read a clean string literal value, or null if it's an expression. */\nexport const readString = (value: string): string | null => {\n const trimmed = value.trim();\n const [quote] = trimmed;\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") {\n return null;\n }\n if (quote === \"`\" && trimmed.includes(\"${\")) {\n return null;\n }\n const end = findStringEnd(trimmed, 0);\n if (end === -1 || trimmed.slice(end + 1).trim() !== \"\") {\n return null;\n }\n return unescapeString(trimmed.slice(1, end));\n};\n\n/** A value that isn't a pure literal (identifier, call, JSX, computed, …). */\nexport const UNPARSEABLE = Symbol(\"unparseable\");\n\nexport type LiteralValue =\n | LiteralValue[]\n | boolean\n | null\n | number\n | string\n | typeof UNPARSEABLE\n | { [key: string]: LiteralValue };\n\nconst NUMERIC = /^-?\\d/u;\n\nconst parseScalarLiteral = (trimmed: string): LiteralValue => {\n if (trimmed === \"true\") {\n return true;\n }\n if (trimmed === \"false\") {\n return false;\n }\n if (trimmed === \"null\") {\n return null;\n }\n if (NUMERIC.test(trimmed)) {\n const num = Number(trimmed);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return UNPARSEABLE;\n};\n\nconst parseObjectLiteral = (trimmed: string): LiteralValue => {\n const scan = scanObject(trimmed, 0);\n if (!scan || trimmed.slice(scan.end + 1).trim() !== \"\") {\n return UNPARSEABLE;\n }\n const out: Record<string, LiteralValue> = {};\n for (const entry of scan.entries) {\n const kv = splitKeyValue(entry);\n if (kv?.key && kv.value !== \"\") {\n // oxlint-disable-next-line no-use-before-define -- mutual recursion\n out[parseKey(kv.key)] = parseLiteral(kv.value);\n }\n }\n return out;\n};\n\nconst parseArrayLiteral = (trimmed: string): LiteralValue => {\n const scan = scanArray(trimmed, 0);\n if (!scan || trimmed.slice(scan.end + 1).trim() !== \"\") {\n return UNPARSEABLE;\n }\n // oxlint-disable-next-line no-use-before-define -- mutual recursion\n return scan.elements.map((element) => parseLiteral(element));\n};\n\n/**\n * Evaluate a JS literal expression (string / number / boolean / null / array /\n * object) into its value without executing it. Anything else resolves to\n * {@link UNPARSEABLE}; inside arrays the sentinel keeps the element's position,\n * inside objects it stays as the field's value so the caller can warn and drop.\n */\nexport const parseLiteral = (source: string): LiteralValue => {\n const trimmed = source.trim();\n if (trimmed === \"\") {\n return UNPARSEABLE;\n }\n const [first] = trimmed;\n if (first === '\"' || first === \"'\" || first === \"`\") {\n return readString(trimmed) ?? UNPARSEABLE;\n }\n if (first === \"{\") {\n return parseObjectLiteral(trimmed);\n }\n if (first === \"[\") {\n return parseArrayLiteral(trimmed);\n }\n return parseScalarLiteral(trimmed);\n};\n\n/** Narrow a parsed literal to a string. */\nexport const asLiteralString = (\n value: LiteralValue | undefined\n): string | undefined => (typeof value === \"string\" ? value : undefined);\n\n/** Narrow a parsed literal to a plain object (not an array or `UNPARSEABLE`). */\nexport const isLiteralObject = (\n value: LiteralValue | undefined\n): value is Record<string, LiteralValue> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** Narrow a parsed literal to an array. */\nexport const asLiteralArray = (\n value: LiteralValue | undefined\n): LiteralValue[] | undefined => (Array.isArray(value) ? value : undefined);\n",
122
- "import { getBlumeVersion } from \"./version.ts\";\n\n/**\n * Derive a valid npm package name from a directory name, falling back to\n * `docs` when nothing usable remains.\n */\nexport const toPackageName = (raw: string): string =>\n raw\n .toLowerCase()\n .replaceAll(/[^a-z0-9._-]+/gu, \"-\")\n .replaceAll(/^[-_.]+|[-_.]+$/gu, \"\") || \"docs\";\n\n/**\n * A minimal, runnable `package.json` body for a Blume project: the `blume`\n * dependency pinned to the installed version plus `dev`/`build`/`doctor`\n * scripts, so `npm install && npm run dev` works immediately. Shared by\n * `blume init` and the migrators, which scaffold one when a project has none.\n */\nexport const blumePackageJson = (name: string): string => `{\n \"name\": ${JSON.stringify(name)},\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"blume dev\",\n \"build\": \"blume build\",\n \"doctor\": \"blume doctor\"\n },\n \"dependencies\": {\n \"blume\": \"^${getBlumeVersion()}\"\n }\n}\n`;\n",
122
+ "import { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport {\n hashText,\n loadWithCache,\n pollingWatch,\n snapshotCache,\n} from \"./cache.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"./types.ts\";\n\n/** Options for the built-in remote Markdown/MDX source. */\nexport interface MdxRemoteSourceOptions {\n name: string;\n prefix?: string;\n /** Raw base URL for `files`, e.g. `https://raw.githubusercontent.com/o/r/main/docs`. */\n url?: string;\n /** Explicit source-relative file paths to fetch from `url`. */\n files?: string[];\n /** Enumerate a GitHub repo subtree via the git-trees API. */\n github?: { owner: string; repo: string; ref: string; path: string };\n include: string[];\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval?: number;\n /** Injected for tests; defaults to the global `fetch`. */\n fetchImpl?: typeof fetch;\n}\n\nconst REGEX_SPECIAL = /[.*+?^${}()|[\\]\\\\]/u;\n\n/** Escape a literal character for embedding in a RegExp. */\nconst escapeChar = (char: string): string =>\n REGEX_SPECIAL.test(char) ? `\\\\${char}` : char;\n\n/** Compile a glob (`**`, `*`, `?`, `{a,b}`) into an anchored RegExp. */\nconst globToRegExp = (pattern: string): RegExp => {\n let source = \"\";\n let i = 0;\n while (i < pattern.length) {\n const char = pattern[i] ?? \"\";\n if (char === \"*\") {\n if (pattern[i + 1] === \"*\") {\n source += \".*\";\n i += 2;\n if (pattern[i] === \"/\") {\n i += 1;\n }\n continue;\n }\n source += \"[^/]*\";\n i += 1;\n continue;\n }\n if (char === \"?\") {\n source += \"[^/]\";\n i += 1;\n continue;\n }\n if (char === \"{\") {\n const end = pattern.indexOf(\"}\", i);\n if (end !== -1) {\n const options = pattern\n .slice(i + 1, end)\n .split(\",\")\n .map((part) => [...part].map(escapeChar).join(\"\"))\n .join(\"|\");\n source += `(?:${options})`;\n i = end + 1;\n continue;\n }\n }\n source += escapeChar(char);\n i += 1;\n }\n return new RegExp(`^${source}$`, \"u\");\n};\n\n/** Whether a ref matches any of the include globs. */\nconst matchesInclude = (ref: string, patterns: string[]): boolean =>\n patterns.some((pattern) => globToRegExp(pattern).test(ref));\n\n/** A file to fetch: its source-local ref plus where to read it from. */\ninterface RemoteRef {\n ref: string;\n fetchUrl: string;\n editUrl?: string;\n}\n\n// Hosts the GITHUB_TOKEN may be sent to. A configured `url` base can point at\n// any server, and leaking the token there would hand a repo credential to an\n// arbitrary third party.\nconst GITHUB_HOSTS = new Set([\"api.github.com\", \"raw.githubusercontent.com\"]);\n\nconst githubHeaders = (url: string): Record<string, string> => {\n const token = process.env.GITHUB_TOKEN;\n if (!token) {\n return {};\n }\n let host = \"\";\n try {\n host = new URL(url).hostname;\n } catch {\n return {};\n }\n return GITHUB_HOSTS.has(host) ? { authorization: `Bearer ${token}` } : {};\n};\n\ninterface GithubTreeEntry {\n path: string;\n type: string;\n}\n\n/** Enumerate a GitHub repo subtree, mapping blobs to remote refs. */\nconst enumerateGithub = async (\n github: { owner: string; repo: string; ref: string; path: string },\n include: string[],\n doFetch: typeof fetch\n): Promise<{ refs: RemoteRef[]; truncated: boolean }> => {\n const { owner, repo, ref } = github;\n const base = github.path.replaceAll(/^\\/|\\/$/gu, \"\");\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${ref}?recursive=1`;\n const res = await doFetch(treeUrl, { headers: githubHeaders(treeUrl) });\n if (!res.ok) {\n throw new Error(`${treeUrl} -> ${res.status}`);\n }\n const body = (await res.json()) as {\n tree?: GithubTreeEntry[];\n truncated?: boolean;\n };\n const prefix = base ? `${base}/` : \"\";\n const refs = (body.tree ?? [])\n .filter((node) => node.type === \"blob\" && node.path.startsWith(prefix))\n .map((node) => node.path.slice(prefix.length))\n .filter((rel) => matchesInclude(rel, include))\n .map((rel) => ({\n editUrl: `https://github.com/${owner}/${repo}/edit/${ref}/${prefix}${rel}`,\n fetchUrl: `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${prefix}${rel}`,\n ref: rel,\n }));\n // GitHub caps the recursive tree response (~100k entries / 7MB) and flags it\n // with `truncated`; ignoring it would silently import only part of the repo.\n return { refs, truncated: body.truncated === true };\n};\n\n/**\n * Remote Markdown/MDX content source. Fetches raw `.md`/`.mdx` over HTTP and\n * passes the text straight through `normalizeEntry`. A snapshot under\n * `.blume/cache/<source>/` makes rebuilds offline-tolerant.\n */\nexport const mdxRemoteSource = (\n options: MdxRemoteSourceOptions,\n ctx: SourceContext\n): ContentSource => {\n const doFetch = options.fetchImpl ?? globalThis.fetch;\n const cache = snapshotCache(ctx.cacheDir);\n let snapshot = new Map<string, SourceEntry>();\n\n const enumerate = async (): Promise<{\n refs: RemoteRef[];\n truncated: boolean;\n }> => {\n if (options.github) {\n return await enumerateGithub(options.github, options.include, doFetch);\n }\n if (options.files && options.url) {\n const base = options.url.replace(/\\/$/u, \"\");\n const refs = options.files\n .filter((ref) => matchesInclude(ref, options.include))\n .map((ref) => ({\n editUrl: `${base}/${ref}`,\n fetchUrl: `${base}/${ref}`,\n ref,\n }));\n return { refs, truncated: false };\n }\n throw new BlumeError({\n code: \"BLUME_SOURCE_MISCONFIGURED\",\n message: `Source \"${options.name}\" needs either { github } or { url, files }.`,\n severity: \"error\",\n });\n };\n\n const fetchEntry = async (item: RemoteRef): Promise<SourceEntry> => {\n const res = await doFetch(item.fetchUrl, {\n headers: githubHeaders(item.fetchUrl),\n });\n if (!res.ok) {\n throw new Error(`${item.fetchUrl} -> ${res.status}`);\n }\n const text = await res.text();\n const parsed = matter(text);\n const format = item.ref.toLowerCase().endsWith(\".mdx\") ? \"mdx\" : \"md\";\n return {\n body: { format, text: parsed.content },\n data: parsed.data,\n editUrl: item.editUrl,\n hash: hashText(text),\n raw: text,\n ref: item.ref,\n };\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n const skipped: Diagnostic[] = [];\n const result = await loadWithCache(\n options.name,\n cache,\n async () => {\n const { refs, truncated } = await enumerate();\n if (truncated) {\n skipped.push({\n code: \"BLUME_SOURCE_TRUNCATED\",\n message: `Source \"${options.name}\" hit GitHub's tree listing limit; some files were not enumerated. Narrow the source path or split the repo.`,\n severity: \"warning\",\n });\n }\n const settled = await Promise.all(\n refs.map(async (ref) => {\n try {\n return await fetchEntry(ref);\n } catch (error) {\n skipped.push({\n code: \"BLUME_SOURCE_FETCH_FAILED\",\n message: `Source \"${options.name}\" skipped \"${ref.ref}\" (${(error as Error).message}); the rest were imported.`,\n severity: \"warning\",\n });\n return null;\n }\n })\n );\n const entries = settled.filter(\n (entry): entry is SourceEntry => entry !== null\n );\n // Only a total wipeout is a hard failure — let loadWithCache fall back\n // to cache or fail loudly rather than silently importing nothing. A\n // partial failure keeps the healthy pages and warns about the rest.\n if (refs.length > 0 && entries.length === 0) {\n skipped.length = 0;\n throw new Error(`all ${refs.length} remote file(s) failed to fetch`);\n }\n return entries;\n },\n ctx.refresh ?? true\n );\n snapshot = new Map(result.entries.map((entry) => [entry.ref, entry]));\n return {\n ...result,\n diagnostics: [...result.diagnostics, ...skipped],\n };\n };\n\n const read = async (ref: string): Promise<string> => {\n const cached = snapshot.get(ref);\n if (cached) {\n return cached.raw ?? cached.body.text;\n }\n const all = await cache.read();\n const entry = all.find((e) => e.ref === ref);\n return entry?.raw ?? entry?.body.text ?? \"\";\n };\n\n return {\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n watch: options.pollInterval\n ? pollingWatch(load, options.pollInterval)\n : undefined,\n };\n};\n",
123
+ "import { existsSync, watch as fsWatch } from \"node:fs\";\nimport type { WatchListener } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { isAbsolute, join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { transformMintlifyContent } from \"../../migrate/mintlify/transform.ts\";\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport type { ContentSource, SourceEntry, SourceLoadResult } from \"./types.ts\";\nimport { BLUME_WATCH_IGNORE_DIRS, ignoringWatchListener } from \"./watch.ts\";\n\n/** Options for the Mintlify bridge content source. */\nexport interface MintlifySourceOptions {\n /** Stable source name; namespaces ids and diagnostics. */\n name: string;\n /** Optional route prefix. */\n prefix?: string;\n /** Content root, absolute or relative to `projectRoot` (Mintlify: `.`). */\n root: string;\n include: string[];\n exclude: string[];\n /** `docs.json` variables, inlined into content (`{{name}}`) at scan time. */\n variables: Record<string, string>;\n /** Absolute path of the `docs.json`/`mint.json`, watched for changes in dev. */\n configFile?: string;\n /** Absolute project root, used to resolve a relative `root`. */\n projectRoot: string;\n}\n\n/**\n * Folders Mintlify projects keep alongside content that are never pages:\n * snippets are inlined as includes, and build/tooling dirs are noise. Merged\n * with the user's `exclude` so bridge mode behaves like the one-shot migrator.\n */\nconst MINTLIFY_SOURCE_IGNORES = [\n \"node_modules/**\",\n \".blume/**\",\n \"dist/**\",\n \"build/**\",\n \"public/**\",\n \"snippets/**\",\n];\n\n/**\n * Directory names the recursive dev watcher must ignore, on top of the shared\n * {@link BLUME_WATCH_IGNORE_DIRS} (Blume's own `.blume/` output, VCS,\n * dependencies). Derived from {@link MINTLIFY_SOURCE_IGNORES} so bridge mode's\n * watcher stays in sync with what its scan skips (snippets, build output, …).\n */\nconst WATCH_IGNORE_DIRS = [\n ...BLUME_WATCH_IGNORE_DIRS,\n ...MINTLIFY_SOURCE_IGNORES.map((pattern) => pattern.replace(/\\/\\*\\*$/u, \"\")),\n];\n\n/**\n * Build the recursive-watch listener for the bridge source: ignore events under\n * {@link WATCH_IGNORE_DIRS} so the dev server's `.blume/` writes don't feed a\n * regeneration loop. Exported for testing.\n */\nexport const mintlifyWatchListener = (\n onChange: () => void\n): WatchListener<string> => ignoringWatchListener(onChange, WATCH_IGNORE_DIRS);\n\n/**\n * The Mintlify bridge content source. Reads an unconverted Mintlify project in\n * place and transforms each page to Blume MDX at scan time (callouts → `:::`\n * directives, snippet/variable inlining, etc.) via `transformMintlifyContent`.\n * Staged: the transformed bodies are materialized under `.blume/content` and\n * rendered through Astro's `staged` collection, so the rewrites actually reach\n * the output. Components Blume already ships (Card, Tabs, Steps, …) render as-is.\n */\nexport const mintlifySource = (\n options: MintlifySourceOptions\n): ContentSource & { readonly contentRoot: string } => {\n const contentRoot = isAbsolute(options.root)\n ? options.root\n : join(resolve(options.projectRoot), options.root);\n const ignore = [...new Set([...options.exclude, ...MINTLIFY_SOURCE_IGNORES])];\n\n const transform = (\n raw: string,\n file: string\n ): ReturnType<typeof transformMintlifyContent> =>\n transformMintlifyContent(raw, {\n filePath: file,\n root: resolve(options.projectRoot),\n variables: options.variables,\n });\n\n const load = async (): Promise<SourceLoadResult> => {\n const files = await glob(options.include, {\n absolute: true,\n cwd: contentRoot,\n ignore,\n onlyFiles: true,\n });\n files.sort();\n\n const unsupported = new Set<string>();\n const entries = await Promise.all(\n files.map(async (file): Promise<SourceEntry> => {\n const result = await transform(await readFile(file, \"utf-8\"), file);\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n const parsed = matter(result.content);\n // Force MDX: Mintlify pages are MDX-authored and the rewrites emit `:::`\n // directives + JSX, neither of which the plain `.md` processor expands.\n return {\n body: { format: \"mdx\", text: parsed.content },\n data: parsed.data,\n raw: result.content,\n ref: relative(contentRoot, file),\n sourcePath: file,\n };\n })\n );\n\n const diagnostics: Diagnostic[] =\n unsupported.size > 0\n ? [\n {\n code: \"BLUME_MINTLIFY_UNSUPPORTED\",\n message: `Mintlify components without a Blume equivalent were left as-is: ${[...unsupported].toSorted().join(\", \")}. Replace them by hand or provide a matching component.`,\n severity: \"warning\",\n },\n ]\n : [];\n\n return { diagnostics, entries };\n };\n\n const validate = (): void => {\n if (!existsSync(contentRoot)) {\n throw new BlumeError({\n code: \"BLUME_CONTENT_ROOT_MISSING\",\n file: contentRoot,\n message: `Content root not found: ${options.root}`,\n severity: \"error\",\n suggestion: `Run \"blume dev\" from the directory that contains docs.json.`,\n });\n }\n };\n\n const watch = (onChange: () => void): (() => void) => {\n const disposers: (() => void)[] = [];\n if (existsSync(contentRoot)) {\n // Recursively watch the content root, but skip Blume's own output and\n // other non-content trees so the dev server's `.blume/` writes don't feed\n // a regeneration loop (`fs.watch` has no ignore option, so filter here).\n const watcher = fsWatch(\n contentRoot,\n { recursive: true },\n mintlifyWatchListener(onChange)\n );\n disposers.push(() => watcher.close());\n }\n // Watch docs.json directly: it lives at the content root but a non-recursive\n // single-file watch fires reliably on edits that recursive dir-watch can miss.\n if (options.configFile && existsSync(options.configFile)) {\n const watcher = fsWatch(options.configFile, onChange);\n disposers.push(() => watcher.close());\n }\n return () => {\n for (const dispose of disposers) {\n dispose();\n }\n };\n };\n\n const read = async (ref: string): Promise<string> => {\n const file = join(contentRoot, ref);\n const result = await transform(await readFile(file, \"utf-8\"), file);\n return result.content;\n };\n\n return {\n contentRoot,\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n validate,\n watch,\n };\n};\n",
123
124
  "import { dirname, join, relative } from \"pathe\";\n\nimport { rewriteCallouts } from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Mintlify-only MDX component syntax into\n * idiomatic Blume markup. Runs once at migration time — no Mintlify-aware\n * plugins remain in the Blume runtime.\n */\n\n/** Mintlify callout components mapped to Blume directive names. */\nconst CALLOUT_DIRECTIVES: Record<string, string> = {\n Check: \"success\",\n Danger: \"danger\",\n Error: \"danger\",\n Info: \"info\",\n Note: \"note\",\n Success: \"success\",\n Tip: \"tip\",\n Warning: \"warning\",\n};\n\n/** `<Callout type=\"X\">` values mapped to Blume directive names. */\nconst CALLOUT_TYPE_DIRECTIVES: Record<string, string> = {\n caution: \"warning\",\n check: \"success\",\n danger: \"danger\",\n error: \"danger\",\n info: \"info\",\n note: \"note\",\n success: \"success\",\n tip: \"tip\",\n warning: \"warning\",\n};\n\n/**\n * Convert Mintlify callout components (`<Note>`, `<Warning>`, `<Callout\n * type=\"…\">`, …) into Blume `:::` directives.\n */\nexport const rewriteMintlifyCallouts = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: CALLOUT_DIRECTIVES,\n tags: [\"Callout\", ...Object.keys(CALLOUT_DIRECTIVES)],\n typeDirectives: CALLOUT_TYPE_DIRECTIVES,\n });\n\n/**\n * Mintlify's `<RequestExample>`/`<ResponseExample>` are tab-style code wrappers\n * with no Blume equivalent; rename them to `<CodeGroup>`, which renders the\n * same titled-fence tabs.\n */\nexport const rewriteMintlifyExampleBlocks = (source: string): string =>\n source.replaceAll(\n /<(?<close>\\/?)(?:Request|Response)Example\\b/gu,\n \"<$<close>CodeGroup\"\n );\n\n/**\n * Mintlify nests `<Accordion title=\"…\">` items inside an `<AccordionGroup>`.\n * Blume inverts that: `<Accordion>` is the container and each item is an\n * `<AccordionItem title=\"…\">`. Rewrite both in a single pass — the `\\b` after\n * `Accordion` keeps `<AccordionGroup>` (the `Group` branch) distinct from an\n * item, so open/close tags of either map correctly regardless of order. Without\n * this, migrated pages keep `<AccordionGroup>`, which Blume doesn't ship and the\n * MDX build rejects with \"Expected component AccordionGroup to be defined\".\n */\nexport const rewriteMintlifyAccordions = (source: string): string =>\n source.replaceAll(\n /<(?<close>\\/?)Accordion(?<group>Group)?\\b/gu,\n (_match, close: string, group: string | undefined) =>\n group ? `<${close}Accordion` : `<${close}AccordionItem`\n );\n\nconst SNIPPET_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"'](?<source>\\/snippets\\/[^\"']+)[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * After snippets are inlined, clean up leftover `/snippets/*` imports: drop the\n * now-dead markdown imports, and rewrite component imports (`.jsx`/`.tsx`/…) to\n * a path relative to the page so they still resolve once `/snippets` content is\n * gone. Returns the rewritten source and the component files still referenced.\n */\nexport const rewriteSnippetImports = (\n source: string,\n options: { filePath: string; root: string }\n): { components: string[]; source: string } => {\n const components: string[] = [];\n const next = source.replaceAll(\n SNIPPET_IMPORT,\n (match, importSource: string) => {\n if (/\\.mdx?$/u.test(importSource)) {\n return \"\";\n }\n const target = join(options.root, importSource.replace(/^\\/+/u, \"\"));\n components.push(importSource.replace(/^\\/+/u, \"\"));\n let rel = relative(dirname(options.filePath), target);\n if (!rel.startsWith(\".\")) {\n rel = `./${rel}`;\n }\n return match.replace(importSource, rel);\n }\n );\n return { components, source: next };\n};\n\n/**\n * Component tags Blume has no equivalent for — reported for manual review.\n * `<ParamField>`/`<ResponseField>`/`<RequestField>` are no longer here: Blume\n * ships compat components for them, so migrated docs render as-is. Mintlify's\n * `<Update>` changelog entry has no component form in Blume (changelog is\n * frontmatter-driven via `type: changelog`), so it stays flagged.\n */\nconst UNSUPPORTED_COMPONENTS = [\"Update\"];\n\n/** Names of Mintlify components in `source` that need manual attention. */\nexport const unsupportedMintlifyComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n",
124
125
  "import { z } from \"zod\";\n\n/**\n * One-time translation of Mintlify page frontmatter into Blume's shape. This\n * runs at migration time only — Blume's runtime page schema stays\n * Mintlify-free and strict. `sidebarTitle`/`icon`/`tag`/`hidden` fold into\n * `sidebar`, `hidden` implies `noindex`, `canonical`/`og:image` move under\n * `seo`, and OpenAPI/AsyncAPI pages become `type: \"api\"`.\n */\n\nconst mintlifySidebarMetaSchema = z\n .object({\n badge: z.string().optional(),\n hidden: z.boolean().optional(),\n icon: z.string().optional(),\n label: z.string().optional(),\n order: z.number().optional(),\n })\n .passthrough();\n\nconst mintlifyPageMetaInputSchema = z\n .object({\n api: z.unknown().optional(),\n asyncapi: z.string().optional(),\n canonical: z.string().optional(),\n hidden: z.boolean().optional(),\n icon: z.string().optional(),\n noindex: z.boolean().optional(),\n \"og:image\": z.string().optional(),\n openapi: z.string().optional(),\n sidebar: mintlifySidebarMetaSchema.optional(),\n sidebarTitle: z.string().optional(),\n tag: z.string().optional(),\n type: z.string().optional(),\n })\n .passthrough();\n\ntype MintlifyPageMetaInput = z.infer<typeof mintlifyPageMetaInputSchema>;\n\nconst normalizedMintlifySidebar = (meta: MintlifyPageMetaInput) => ({\n ...meta.sidebar,\n ...(meta.sidebarTitle !== undefined && meta.sidebar?.label === undefined\n ? { label: meta.sidebarTitle }\n : {}),\n ...(meta.icon !== undefined && meta.sidebar?.icon === undefined\n ? { icon: meta.icon }\n : {}),\n ...(meta.tag !== undefined && meta.sidebar?.badge === undefined\n ? { badge: meta.tag }\n : {}),\n ...(meta.hidden === true && meta.sidebar?.hidden === undefined\n ? { hidden: true }\n : {}),\n});\n\nconst mintlifyPageType = (meta: MintlifyPageMetaInput): string | undefined =>\n meta.type ??\n (meta.openapi !== undefined ||\n meta.asyncapi !== undefined ||\n meta.api !== undefined\n ? \"api\"\n : undefined);\n\nconst mintlifyNoindex = (meta: MintlifyPageMetaInput): boolean | undefined =>\n meta.hidden === true && meta.noindex === undefined ? true : meta.noindex;\n\n/** Top-level Mintlify keys folded elsewhere — removed from the output. */\nconst CONSUMED_KEYS = new Set([\n \"canonical\",\n \"hidden\",\n \"icon\",\n \"og:image\",\n \"sidebarTitle\",\n \"tag\",\n]);\n\n/** Map Mintlify page frontmatter onto Blume's frontmatter shape. */\nexport const normalizeMintlifyPageMeta = (\n value: unknown\n): Record<string, unknown> => {\n const parsed = mintlifyPageMetaInputSchema.safeParse(value);\n if (!parsed.success || typeof value !== \"object\" || value === null) {\n return (value ?? {}) as Record<string, unknown>;\n }\n\n const meta = parsed.data;\n const source = value as Record<string, unknown>;\n const data: Record<string, unknown> = { ...source };\n\n const sidebar = normalizedMintlifySidebar(meta);\n if (Object.keys(sidebar).length > 0) {\n data.sidebar = sidebar;\n }\n\n const seo: Record<string, unknown> = {\n ...(typeof source.seo === \"object\" && source.seo !== null\n ? (source.seo as Record<string, unknown>)\n : {}),\n };\n if (meta.canonical !== undefined && seo.canonical === undefined) {\n seo.canonical = meta.canonical;\n }\n if (meta[\"og:image\"] !== undefined && seo.image === undefined) {\n seo.image = meta[\"og:image\"];\n }\n if (Object.keys(seo).length > 0) {\n data.seo = seo;\n }\n\n const noindex = mintlifyNoindex(meta);\n if (noindex !== undefined) {\n data.noindex = noindex;\n }\n const type = mintlifyPageType(meta);\n if (type !== undefined) {\n data.type = type;\n }\n\n const cleaned: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(data)) {\n if (!CONSUMED_KEYS.has(key)) {\n cleaned[key] = raw;\n }\n }\n return cleaned;\n};\n",
125
126
  "const JSX_ATTRIBUTE_ALIASES: Record<string, string> = {\n className: \"class\",\n clipPath: \"clip-path\",\n clipRule: \"clip-rule\",\n fillOpacity: \"fill-opacity\",\n fillRule: \"fill-rule\",\n strokeDasharray: \"stroke-dasharray\",\n strokeDashoffset: \"stroke-dashoffset\",\n strokeLinecap: \"stroke-linecap\",\n strokeLinejoin: \"stroke-linejoin\",\n strokeMiterlimit: \"stroke-miterlimit\",\n strokeOpacity: \"stroke-opacity\",\n strokeWidth: \"stroke-width\",\n};\n\nconst SVG_EXPRESSION = /^\\s*\\(?\\s*<svg[\\s\\S]*<\\/svg>\\s*\\)?\\s*;?\\s*$/u;\n\nconst escapeAttribute = (value: string): string =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\");\n\nconst stripExpressionWrapper = (value: string): string => {\n let next = value.trim().replaceAll(/;$/gu, \"\").trim();\n if (next.startsWith(\"(\") && next.endsWith(\")\")) {\n next = next.slice(1, -1).trim();\n }\n return next;\n};\n\nconst jsxExpressionAttribute = (\n value: string,\n quoted: string | undefined,\n single: string | undefined,\n template: string | undefined,\n scalar: string | undefined\n): string => {\n const literal = quoted ?? single ?? template ?? scalar;\n return literal === undefined ? value : `=\"${escapeAttribute(literal)}\"`;\n};\n\nconst normalizeJsxSvg = (value: string): string | null => {\n const stripped = stripExpressionWrapper(value);\n if (!SVG_EXPRESSION.test(stripped)) {\n return null;\n }\n\n let svg = stripped.replaceAll(\n /[=]\\{\\s*(?:\"(?<quoted>[^\"]*)\"|'(?<single>[^']*)'|`(?<template>[^`]*)`|(?<scalar>-?\\d+(?:\\.\\d+)?|true|false))\\s*\\}/gu,\n jsxExpressionAttribute\n );\n for (const [jsxName, htmlName] of Object.entries(JSX_ATTRIBUTE_ALIASES)) {\n svg = svg.replaceAll(new RegExp(`\\\\b${jsxName}=`, \"gu\"), `${htmlName}=`);\n }\n return svg;\n};\n\nconst findExpressionEnd = (source: string, start: number): number => {\n let depth = 1;\n let quote: '\"' | \"'\" | \"`\" | null = null;\n for (let index = start; index < source.length; index += 1) {\n const char = source[index];\n const previous = source[index - 1];\n if (quote) {\n if (char === quote && previous !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === \"{\") {\n depth += 1;\n continue;\n }\n if (char === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n }\n }\n return -1;\n};\n\nconst startsWithSvgExpression = (value: string): boolean => {\n const trimmed = value.trimStart();\n return trimmed.startsWith(\"<svg\") || trimmed.startsWith(\"(<svg\");\n};\n\n/**\n * Rewrite Mintlify inline-SVG icon JSX props (`icon={<svg .../>}`) to plain\n * string props so the migrated MDX compiles under Astro. Runs once at\n * migration time; non-SVG `icon={...}` expressions are left untouched.\n */\nexport const rewriteMintlifySvgIconProps = (source: string): string => {\n let output = \"\";\n let cursor = 0;\n while (cursor < source.length) {\n const start = source.indexOf(\"icon={\", cursor);\n if (start === -1) {\n output += source.slice(cursor);\n break;\n }\n\n const expressionStart = start + \"icon={\".length;\n const end = findExpressionEnd(source, expressionStart);\n if (end === -1) {\n output += source.slice(cursor);\n break;\n }\n\n const expression = source.slice(expressionStart, end);\n const svg = startsWithSvgExpression(expression)\n ? normalizeJsxSvg(expression)\n : null;\n output += source.slice(cursor, start);\n output += svg\n ? `icon={${JSON.stringify(svg)}}`\n : source.slice(start, end + 1);\n cursor = end + 1;\n }\n return output;\n};\n",
126
- "import { readFile as readFileFromDisk } from \"node:fs/promises\";\n\nimport { dirname, relative, resolve } from \"pathe\";\n\nimport matter from \"../../core/frontmatter.ts\";\n\nconst MARKDOWN_SNIPPET_IMPORT =\n /^import\\s+(?<name>[$A-Z_a-z][$\\w]*)\\s+from\\s+[\"'](?<source>[^\"']+\\.mdx?)[\"'];?\\s*$/gmu;\nconst NAMED_SNIPPET_IMPORT =\n /^import\\s+\\{(?<names>[^}]+)\\}\\s+from\\s+[\"'](?<source>[^\"']+\\.mdx?)[\"'];?\\s*$/gmu;\nconst EXPORTED_STRING_CONST =\n /^export\\s+const\\s+(?<name>[$A-Z_a-z][$\\w]*)\\s*=\\s*(?:\"(?<double>(?:\\\\.|[^\"\\\\])*)\"|'(?<single>(?:\\\\.|[^'\\\\])*)'|`(?<template>(?:\\\\.|[^`\\\\])*)`)\\s*;?\\s*$/gmu;\nconst ATTRIBUTE =\n /\\s+(?<name>[$A-Z_a-z][$\\w:-]*)(?:=(?:\"(?<quoted>[^\"]*)\"|'(?<single>[^']*)'|\\{(?<expression>[^}]*)\\}))?/gu;\nconst PLACEHOLDER = /\\{(?<name>[$A-Z_a-z][$\\w]*)\\}/gu;\nconst GLOBAL_VARIABLE = /\\{\\{\\s*(?<name>[A-Za-z0-9-]+)\\s*\\}\\}/gu;\nconst FRONTMATTER_BLOCK = /^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/u;\nconst USER_EXPORT =\n /^(?:export\\s+)?(?:const|let|var)\\s+user\\s*=|^import\\s+\\{\\s*user\\s*\\}/mu;\n\ninterface SnippetImport {\n importText: string;\n name: string;\n source: string;\n}\n\ninterface SnippetVariableImport {\n names: { imported: string; local: string }[];\n source: string;\n}\n\ninterface SnippetTransformOptions {\n filePath: string;\n root: string;\n readFile?: (file: string) => Promise<string>;\n seen?: Set<string>;\n trail?: string[];\n}\n\nconst isInsideRoot = (root: string, candidate: string): boolean => {\n const rel = relative(root, candidate);\n return rel === \"\" || (!rel.startsWith(\"..\") && !rel.startsWith(\"/\"));\n};\n\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n\nconst snippetSelfClosingTagPattern = (name: string): RegExp =>\n new RegExp(`<${escapeRegExp(name)}(?<attrs>[^>]*?)\\\\s*/>`, \"gu\");\n\nconst snippetPairedTagPattern = (name: string): RegExp =>\n new RegExp(\n `<${escapeRegExp(name)}(?<attrs>[^>]*?)>[\\\\s\\\\S]*?</${escapeRegExp(name)}>`,\n \"gu\"\n );\n\nconst rootRelativePath = (root: string, file: string): string => {\n const rel = relative(root, file);\n return rel ? `/${rel}` : \"/\";\n};\n\nconst snippetCycleMessage = (\n root: string,\n file: string,\n trail: string[]\n): string => {\n const cycleStart = trail.indexOf(file);\n const cycle = [...(cycleStart === -1 ? trail : trail.slice(cycleStart)), file]\n .map((entry) => rootRelativePath(root, entry))\n .join(\" -> \");\n return `Circular Mintlify snippet import detected: ${cycle}`;\n};\n\nconst resolveSnippetPath = (options: {\n filePath: string;\n root: string;\n source: string;\n}): string | null => {\n const target = options.source.startsWith(\"/\")\n ? resolve(options.root, options.source.slice(1))\n : resolve(dirname(options.filePath), options.source);\n return isInsideRoot(options.root, target) ? target : null;\n};\n\nconst collectImports = (source: string): SnippetImport[] =>\n [...source.matchAll(MARKDOWN_SNIPPET_IMPORT)].flatMap((match) => {\n const name = match.groups?.name;\n const importSource = match.groups?.source;\n if (!(name && importSource)) {\n return [];\n }\n return [{ importText: match[0], name, source: importSource }];\n });\n\nconst collectVariableImports = (source: string): SnippetVariableImport[] =>\n [...source.matchAll(NAMED_SNIPPET_IMPORT)].flatMap((match) => {\n const names = match.groups?.names;\n const importSource = match.groups?.source;\n if (!(names && importSource)) {\n return [];\n }\n const parsedNames = names.split(\",\").flatMap((entry) => {\n const [imported, local] = entry.trim().split(/\\s+as\\s+/u);\n return imported ? [{ imported, local: local ?? imported }] : [];\n });\n return parsedNames.length\n ? [{ names: parsedNames, source: importSource }]\n : [];\n });\n\nconst decodeStringLiteral = (value: string): string =>\n value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\")\n .replaceAll(/\\\\(?<escaped>[\\\\'\"`])/gu, \"$<escaped>\");\n\nconst collectStringExports = (source: string): Map<string, string> => {\n const exports = new Map<string, string>();\n for (const match of source.matchAll(EXPORTED_STRING_CONST)) {\n const name = match.groups?.name;\n const value =\n match.groups?.double ?? match.groups?.single ?? match.groups?.template;\n if (name && value !== undefined) {\n exports.set(name, decodeStringLiteral(value));\n }\n }\n return exports;\n};\n\nconst parseAttributes = (source: string): Record<string, string> => {\n const props: Record<string, string> = {};\n for (const match of source.matchAll(ATTRIBUTE)) {\n const name = match.groups?.name;\n if (!name) {\n continue;\n }\n props[name] =\n match.groups?.quoted ??\n match.groups?.single ??\n match.groups?.expression?.trim() ??\n \"true\";\n }\n return props;\n};\n\nconst interpolateProps = (\n source: string,\n props: Record<string, string>\n): string =>\n source.replaceAll(PLACEHOLDER, (value, name: string) => props[name] ?? value);\n\nconst stripImport = (source: string, importText: string): string =>\n source.replace(importText, \"\").replaceAll(/\\n{3,}/gu, \"\\n\\n\");\n\nconst replacePlaceholder = (\n source: string,\n name: string,\n value: string\n): string =>\n source.replaceAll(new RegExp(`\\\\{${escapeRegExp(name)}\\\\}`, \"gu\"), value);\n\nconst inlineSnippetTags = (options: {\n name: string;\n snippet: string;\n source: string;\n}): string => {\n const inline = (_value: string, attrs: string): string =>\n interpolateProps(options.snippet, parseAttributes(attrs));\n return options.source\n .replaceAll(snippetSelfClosingTagPattern(options.name), inline)\n .replaceAll(snippetPairedTagPattern(options.name), inline);\n};\n\n/**\n * Mintlify markdown snippets are source-level includes, not standalone pages.\n * Inline markdown snippets before Astro MDX compiles so `.md` imports, nested\n * markdown snippets, and `{prop}` interpolation inside prose or code fences work.\n */\nexport const rewriteMintlifyMarkdownSnippets = async (\n source: string,\n options: SnippetTransformOptions\n): Promise<string> => {\n const loadSnippet = async (file: string): Promise<string> => {\n const seen = options.seen ?? new Set<string>();\n if (seen.has(file)) {\n throw new Error(\n snippetCycleMessage(options.root, file, options.trail ?? [])\n );\n }\n seen.add(file);\n const readFile = options.readFile ?? readFileFromDisk;\n try {\n const raw = await readFile(file);\n const content = matter(raw).content.trim();\n const transformed = await rewriteMintlifyMarkdownSnippets(content, {\n ...options,\n filePath: file,\n seen,\n trail: [...(options.trail ?? []), file],\n });\n return transformed.trim();\n } finally {\n seen.delete(file);\n }\n };\n\n const inlineImport = async (\n current: string,\n snippetImport: SnippetImport\n ): Promise<string> => {\n const file = resolveSnippetPath({\n filePath: options.filePath,\n root: options.root,\n source: snippetImport.source,\n });\n if (!file) {\n return current;\n }\n\n const snippet = await loadSnippet(file);\n const next = inlineSnippetTags({\n name: snippetImport.name,\n snippet,\n source: current,\n });\n return next === current\n ? current\n : stripImport(next, snippetImport.importText);\n };\n\n const imports = collectImports(source);\n const inlineAt = async (index: number, current: string): Promise<string> => {\n const snippetImport = imports[index];\n if (!snippetImport) {\n return current;\n }\n return inlineAt(index + 1, await inlineImport(current, snippetImport));\n };\n\n return await inlineAt(0, source);\n};\n\n/** Resolve imported string constants from Mintlify snippets for generated text. */\nexport const rewriteMintlifySnippetVariables = async (\n source: string,\n options: SnippetTransformOptions\n): Promise<string> => {\n const readFile = options.readFile ?? readFileFromDisk;\n const inlineImport = async (\n current: string,\n variableImport: SnippetVariableImport\n ): Promise<string> => {\n const file = resolveSnippetPath({\n filePath: options.filePath,\n root: options.root,\n source: variableImport.source,\n });\n if (!file) {\n return current;\n }\n\n const exports = collectStringExports(matter(await readFile(file)).content);\n let next = current;\n for (const name of variableImport.names) {\n const value = exports.get(name.imported);\n if (value !== undefined) {\n next = replacePlaceholder(next, name.local, value);\n }\n }\n return next;\n };\n\n const imports = collectVariableImports(source);\n const inlineAt = async (index: number, current: string): Promise<string> => {\n const variableImport = imports[index];\n if (!variableImport) {\n return current;\n }\n return inlineAt(index + 1, await inlineImport(current, variableImport));\n };\n\n return await inlineAt(0, source);\n};\n\n/** Replace docs.json Mintlify globals such as `{{product-name}}`. */\nexport const rewriteMintlifyGlobalVariables = (\n source: string,\n variables: Record<string, string>\n): string =>\n source.replaceAll(GLOBAL_VARIABLE, (value, name: string) =>\n Object.hasOwn(variables, name) ? (variables[name] ?? value) : value\n );\n\n/** Mintlify exposes a logged-out `user` object to MDX personalization code. */\nexport const rewriteMintlifyUserVariable = (source: string): string => {\n if (USER_EXPORT.test(source)) {\n return source;\n }\n\n const frontmatter = source.match(FRONTMATTER_BLOCK)?.[0] ?? \"\";\n const body = (\n frontmatter ? source.slice(frontmatter.length) : source\n ).replace(/^\\r?\\n/u, \"\");\n return `${frontmatter}export const user = {};\\n\\n${body}`;\n};\n",
127
+ "import { readFile as readFileFromDisk } from \"node:fs/promises\";\n\nimport { dirname, relative, resolve } from \"pathe\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport { isInsideRoot, stripImports } from \"../shared.ts\";\n\nconst MARKDOWN_SNIPPET_IMPORT =\n /^import\\s+(?<name>[$A-Z_a-z][$\\w]*)\\s+from\\s+[\"'](?<source>[^\"']+\\.mdx?)[\"'];?\\s*$/gmu;\nconst NAMED_SNIPPET_IMPORT =\n /^import\\s+\\{(?<names>[^}]+)\\}\\s+from\\s+[\"'](?<source>[^\"']+\\.mdx?)[\"'];?\\s*$/gmu;\nconst EXPORTED_STRING_CONST =\n /^export\\s+const\\s+(?<name>[$A-Z_a-z][$\\w]*)\\s*=\\s*(?:\"(?<double>(?:\\\\.|[^\"\\\\])*)\"|'(?<single>(?:\\\\.|[^'\\\\])*)'|`(?<template>(?:\\\\.|[^`\\\\])*)`)\\s*;?\\s*$/gmu;\nconst ATTRIBUTE =\n /\\s+(?<name>[$A-Z_a-z][$\\w:-]*)(?:=(?:\"(?<quoted>[^\"]*)\"|'(?<single>[^']*)'|\\{(?<expression>[^}]*)\\}))?/gu;\nconst PLACEHOLDER = /\\{(?<name>[$A-Z_a-z][$\\w]*)\\}/gu;\nconst GLOBAL_VARIABLE = /\\{\\{\\s*(?<name>[A-Za-z0-9-]+)\\s*\\}\\}/gu;\nconst FRONTMATTER_BLOCK = /^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/u;\nconst USER_EXPORT =\n /^(?:export\\s+)?(?:const|let|var)\\s+user\\s*=|^import\\s+\\{\\s*user\\s*\\}/mu;\n\ninterface SnippetImport {\n importText: string;\n name: string;\n source: string;\n}\n\ninterface SnippetVariableImport {\n names: { imported: string; local: string }[];\n source: string;\n}\n\ninterface SnippetTransformOptions {\n filePath: string;\n root: string;\n readFile?: (file: string) => Promise<string>;\n seen?: Set<string>;\n trail?: string[];\n}\n\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n\nconst snippetSelfClosingTagPattern = (name: string): RegExp =>\n new RegExp(`<${escapeRegExp(name)}(?<attrs>[^>]*?)\\\\s*/>`, \"gu\");\n\nconst snippetPairedTagPattern = (name: string): RegExp =>\n new RegExp(\n `<${escapeRegExp(name)}(?<attrs>[^>]*?)>[\\\\s\\\\S]*?</${escapeRegExp(name)}>`,\n \"gu\"\n );\n\nconst rootRelativePath = (root: string, file: string): string => {\n const rel = relative(root, file);\n return rel ? `/${rel}` : \"/\";\n};\n\nconst snippetCycleMessage = (\n root: string,\n file: string,\n trail: string[]\n): string => {\n const cycleStart = trail.indexOf(file);\n const cycle = [...(cycleStart === -1 ? trail : trail.slice(cycleStart)), file]\n .map((entry) => rootRelativePath(root, entry))\n .join(\" -> \");\n return `Circular Mintlify snippet import detected: ${cycle}`;\n};\n\nconst resolveSnippetPath = (options: {\n filePath: string;\n root: string;\n source: string;\n}): string | null => {\n const target = options.source.startsWith(\"/\")\n ? resolve(options.root, options.source.slice(1))\n : resolve(dirname(options.filePath), options.source);\n return isInsideRoot(options.root, target) ? target : null;\n};\n\nconst collectImports = (source: string): SnippetImport[] =>\n [...source.matchAll(MARKDOWN_SNIPPET_IMPORT)].flatMap((match) => {\n const name = match.groups?.name;\n const importSource = match.groups?.source;\n if (!(name && importSource)) {\n return [];\n }\n return [{ importText: match[0], name, source: importSource }];\n });\n\nconst collectVariableImports = (source: string): SnippetVariableImport[] =>\n [...source.matchAll(NAMED_SNIPPET_IMPORT)].flatMap((match) => {\n const names = match.groups?.names;\n const importSource = match.groups?.source;\n if (!(names && importSource)) {\n return [];\n }\n const parsedNames = names.split(\",\").flatMap((entry) => {\n const [imported, local] = entry.trim().split(/\\s+as\\s+/u);\n return imported ? [{ imported, local: local ?? imported }] : [];\n });\n return parsedNames.length\n ? [{ names: parsedNames, source: importSource }]\n : [];\n });\n\nconst decodeStringLiteral = (value: string): string =>\n value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\")\n .replaceAll(/\\\\(?<escaped>[\\\\'\"`])/gu, \"$<escaped>\");\n\nconst collectStringExports = (source: string): Map<string, string> => {\n const exports = new Map<string, string>();\n for (const match of source.matchAll(EXPORTED_STRING_CONST)) {\n const name = match.groups?.name;\n const value =\n match.groups?.double ?? match.groups?.single ?? match.groups?.template;\n if (name && value !== undefined) {\n exports.set(name, decodeStringLiteral(value));\n }\n }\n return exports;\n};\n\nconst parseAttributes = (source: string): Record<string, string> => {\n const props: Record<string, string> = {};\n for (const match of source.matchAll(ATTRIBUTE)) {\n const name = match.groups?.name;\n if (!name) {\n continue;\n }\n props[name] =\n match.groups?.quoted ??\n match.groups?.single ??\n match.groups?.expression?.trim() ??\n \"true\";\n }\n return props;\n};\n\nconst interpolateProps = (\n source: string,\n props: Record<string, string>\n): string =>\n source.replaceAll(PLACEHOLDER, (value, name: string) => props[name] ?? value);\n\nconst stripImport = (source: string, importText: string): string =>\n // Seam-targeted removal: a whole-document `\\n{3,}` collapse would rewrite\n // real double blank lines inside the page's code fences.\n stripImports(source, new RegExp(escapeRegExp(importText), \"gu\"));\n\nconst replacePlaceholder = (\n source: string,\n name: string,\n value: string\n): string =>\n source.replaceAll(new RegExp(`\\\\{${escapeRegExp(name)}\\\\}`, \"gu\"), value);\n\nconst inlineSnippetTags = (options: {\n name: string;\n snippet: string;\n source: string;\n}): string => {\n const inline = (_value: string, attrs: string): string =>\n interpolateProps(options.snippet, parseAttributes(attrs));\n return options.source\n .replaceAll(snippetSelfClosingTagPattern(options.name), inline)\n .replaceAll(snippetPairedTagPattern(options.name), inline);\n};\n\n/**\n * Mintlify markdown snippets are source-level includes, not standalone pages.\n * Inline markdown snippets before Astro MDX compiles so `.md` imports, nested\n * markdown snippets, and `{prop}` interpolation inside prose or code fences work.\n */\nexport const rewriteMintlifyMarkdownSnippets = async (\n source: string,\n options: SnippetTransformOptions\n): Promise<string> => {\n const loadSnippet = async (file: string): Promise<string> => {\n const seen = options.seen ?? new Set<string>();\n if (seen.has(file)) {\n throw new Error(\n snippetCycleMessage(options.root, file, options.trail ?? [])\n );\n }\n seen.add(file);\n const readFile =\n options.readFile ??\n ((path: string): Promise<string> => readFileFromDisk(path, \"utf-8\"));\n try {\n let raw: string;\n try {\n raw = await readFile(file);\n } catch {\n // A dangling import must fail with a message that names both ends —\n // the caller downgrades it to a per-page warning and moves on.\n throw new Error(\n `snippet ${rootRelativePath(options.root, file)} (imported by ${rootRelativePath(options.root, options.filePath)}) does not exist`\n );\n }\n const content = matter(raw).content.trim();\n const transformed = await rewriteMintlifyMarkdownSnippets(content, {\n ...options,\n filePath: file,\n seen,\n trail: [...(options.trail ?? []), file],\n });\n return transformed.trim();\n } finally {\n seen.delete(file);\n }\n };\n\n const inlineImport = async (\n current: string,\n snippetImport: SnippetImport\n ): Promise<string> => {\n const file = resolveSnippetPath({\n filePath: options.filePath,\n root: options.root,\n source: snippetImport.source,\n });\n if (!file) {\n return current;\n }\n\n const snippet = await loadSnippet(file);\n const next = inlineSnippetTags({\n name: snippetImport.name,\n snippet,\n source: current,\n });\n return next === current\n ? current\n : stripImport(next, snippetImport.importText);\n };\n\n const imports = collectImports(source);\n const inlineAt = async (index: number, current: string): Promise<string> => {\n const snippetImport = imports[index];\n if (!snippetImport) {\n return current;\n }\n return inlineAt(index + 1, await inlineImport(current, snippetImport));\n };\n\n return await inlineAt(0, source);\n};\n\n/** Resolve imported string constants from Mintlify snippets for generated text. */\nexport const rewriteMintlifySnippetVariables = async (\n source: string,\n options: SnippetTransformOptions\n): Promise<string> => {\n const readFile = options.readFile ?? readFileFromDisk;\n const inlineImport = async (\n current: string,\n variableImport: SnippetVariableImport\n ): Promise<string> => {\n const file = resolveSnippetPath({\n filePath: options.filePath,\n root: options.root,\n source: variableImport.source,\n });\n if (!file) {\n return current;\n }\n\n const exports = collectStringExports(matter(await readFile(file)).content);\n let next = current;\n for (const name of variableImport.names) {\n const value = exports.get(name.imported);\n if (value !== undefined) {\n next = replacePlaceholder(next, name.local, value);\n }\n }\n return next;\n };\n\n const imports = collectVariableImports(source);\n const inlineAt = async (index: number, current: string): Promise<string> => {\n const variableImport = imports[index];\n if (!variableImport) {\n return current;\n }\n return inlineAt(index + 1, await inlineImport(current, variableImport));\n };\n\n return await inlineAt(0, source);\n};\n\n/** Replace docs.json Mintlify globals such as `{{product-name}}`. */\nexport const rewriteMintlifyGlobalVariables = (\n source: string,\n variables: Record<string, string>\n): string =>\n source.replaceAll(GLOBAL_VARIABLE, (value, name: string) =>\n Object.hasOwn(variables, name) ? (variables[name] ?? value) : value\n );\n\n/** Mintlify exposes a logged-out `user` object to MDX personalization code. */\nexport const rewriteMintlifyUserVariable = (source: string): string => {\n if (USER_EXPORT.test(source)) {\n return source;\n }\n\n const frontmatter = source.match(FRONTMATTER_BLOCK)?.[0] ?? \"\";\n const body = (\n frontmatter ? source.slice(frontmatter.length) : source\n ).replace(/^\\r?\\n/u, \"\");\n return `${frontmatter}export const user = {};\\n\\n${body}`;\n};\n",
127
128
  "import matter from \"../../core/frontmatter.ts\";\nimport { stripUnknownPageMeta } from \"../shared.ts\";\nimport {\n rewriteMintlifyAccordions,\n rewriteMintlifyCallouts,\n rewriteMintlifyExampleBlocks,\n rewriteSnippetImports,\n unsupportedMintlifyComponents,\n} from \"./content.ts\";\nimport { normalizeMintlifyPageMeta } from \"./frontmatter.ts\";\nimport { rewriteMintlifySvgIconProps } from \"./icons.ts\";\nimport {\n rewriteMintlifyGlobalVariables,\n rewriteMintlifyMarkdownSnippets,\n rewriteMintlifySnippetVariables,\n rewriteMintlifyUserVariable,\n} from \"./snippets.ts\";\n\nconst USER_REFERENCE = /\\{[^{}]*\\buser\\b/u;\n\n/** The outcome of transforming a single Mintlify page to Blume MDX. */\nexport interface MintlifyTransformResult {\n /** Component snippet imports kept (rewritten to relative paths). */\n components: string[];\n /** The rewritten file text, including normalized frontmatter. */\n content: string;\n /** Frontmatter keys dropped because Blume has no equivalent. */\n removed: string[];\n /** Components encountered that have no Blume equivalent. */\n unsupported: string[];\n}\n\n/**\n * Apply the per-file source transforms that turn Mintlify MDX into Blume MDX:\n * inline snippets and variables, rewrite callouts (`<Note>` → `:::note`),\n * example blocks, and inline-SVG icon props, then normalize frontmatter. Pure\n * text-in/text-out (snippets read from disk relative to `root`), so both the\n * one-shot migrator and the live bridge source share identical behavior.\n */\nexport const transformMintlifyContent = async (\n raw: string,\n options: { filePath: string; root: string; variables: Record<string, string> }\n): Promise<MintlifyTransformResult> => {\n let text = await rewriteMintlifyMarkdownSnippets(raw, {\n filePath: options.filePath,\n root: options.root,\n });\n text = await rewriteMintlifySnippetVariables(text, {\n filePath: options.filePath,\n root: options.root,\n });\n text = rewriteMintlifyGlobalVariables(text, options.variables);\n if (USER_REFERENCE.test(text)) {\n text = rewriteMintlifyUserVariable(text);\n }\n const snippetImports = rewriteSnippetImports(text, {\n filePath: options.filePath,\n root: options.root,\n });\n text = snippetImports.source;\n text = rewriteMintlifySvgIconProps(text);\n text = rewriteMintlifyExampleBlocks(text);\n text = rewriteMintlifyAccordions(text);\n text = rewriteMintlifyCallouts(text);\n\n const unsupported = unsupportedMintlifyComponents(text);\n\n const parsed = matter(text);\n const mapped = normalizeMintlifyPageMeta(parsed.data);\n const { data, removed } = stripUnknownPageMeta(mapped);\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n\n return {\n components: snippetImports.components,\n content,\n removed,\n unsupported,\n };\n};\n",
128
129
  "import { setTimeout as sleep } from \"node:timers/promises\";\n\nimport { join } from \"pathe\";\n\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport type { Diagnostic } from \"../types.ts\";\nimport { materializeAssets } from \"./assets.ts\";\nimport {\n hashText,\n loadWithCache,\n pollingWatch,\n snapshotCache,\n} from \"./cache.ts\";\nimport { slugify } from \"./normalize.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"./types.ts\";\n\ninterface NotionRichText {\n plain_text: string;\n href?: string | null;\n annotations?: {\n bold?: boolean;\n italic?: boolean;\n code?: boolean;\n strikethrough?: boolean;\n };\n}\n\ninterface NotionProperty {\n type: string;\n title?: NotionRichText[];\n rich_text?: NotionRichText[];\n select?: { name: string } | null;\n status?: { name: string } | null;\n number?: number | null;\n}\n\ninterface NotionPage {\n id: string;\n properties: Record<string, NotionProperty>;\n last_edited_time?: string;\n}\n\ninterface NotionBlock {\n id: string;\n type: string;\n has_children?: boolean;\n [key: string]: unknown;\n}\n\ninterface NotionList<T> {\n results: T[];\n has_more: boolean;\n next_cursor: string | null;\n}\n\n/** The slice of `@notionhq/client` this adapter relies on (so it's mockable). */\nexport interface NotionClientLike {\n databases: {\n query: (args: {\n database_id: string;\n start_cursor?: string;\n }) => Promise<NotionList<NotionPage>>;\n };\n blocks: {\n children: {\n list: (args: {\n block_id: string;\n start_cursor?: string;\n }) => Promise<NotionList<NotionBlock>>;\n };\n };\n}\n\n/** Notion property names mapped onto Blume meta. */\nexport interface NotionPropertyMap {\n /** Title property name; defaults to the database's `title`-typed property. */\n title?: string;\n /** Description property (rich_text); default `Description`. */\n description?: string;\n /** Slug property (rich_text); default `Slug`, else the slugified title. */\n slug?: string;\n /** Status property (select/status); default `Status`. */\n status?: string;\n /** Sidebar order property (number); default `Order`. */\n order?: string;\n}\n\nexport interface NotionSourceOptions {\n name: string;\n prefix?: string;\n /** The Notion database id. */\n database: string;\n /** Integration token; defaults to `NOTION_TOKEN`. */\n token?: string;\n properties?: NotionPropertyMap;\n /**\n * When set, the `Status` property is treated as a publish signal: any value\n * other than this maps to `draft: true`. Omit to import every page regardless\n * of status (the safe default for databases that use Status for an editorial\n * workflow rather than publishing).\n */\n publishedValue?: string;\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval?: number;\n /** Injected for tests; otherwise built from `@notionhq/client`. */\n client?: NotionClientLike;\n /** Injected for tests; used to download images. */\n fetchImpl?: typeof fetch;\n}\n\nconst richToMarkdown = (rich: NotionRichText[] = []): string =>\n rich\n .map((node) => {\n let text = node.plain_text;\n if (node.annotations?.code) {\n text = `\\`${text}\\``;\n }\n if (node.annotations?.bold) {\n text = `**${text}**`;\n }\n if (node.annotations?.italic) {\n text = `*${text}*`;\n }\n if (node.annotations?.strikethrough) {\n text = `~~${text}~~`;\n }\n return node.href ? `[${text}](${node.href})` : text;\n })\n .join(\"\");\n\nconst blockField = (block: NotionBlock): NotionRichText[] =>\n ((block[block.type] as { rich_text?: NotionRichText[] })?.rich_text ??\n []) as NotionRichText[];\n\nconst RATE_LIMITED = 429;\nconst MAX_RETRIES = 4;\nconst BASE_DELAY_MS = 500;\nconst SECOND_MS = 1000;\n\n/**\n * Retry a Notion API call on a `429 rate_limited`, honoring the `Retry-After`\n * header and otherwise backing off exponentially. A large workspace fans out\n * many concurrent block-children requests, so without this a single 429 would\n * reject the batch and abort the whole import.\n */\nconst withNotionRetry = async <T>(call: () => Promise<T>): Promise<T> => {\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n try {\n // oxlint-disable-next-line no-await-in-loop -- sequential retry attempts\n return await call();\n } catch (error) {\n lastError = error;\n const { status } = error as { status?: number };\n if (status !== RATE_LIMITED || attempt === MAX_RETRIES) {\n throw error;\n }\n const retryAfter = Number(\n (error as { headers?: Record<string, string> }).headers?.[\"retry-after\"]\n );\n const wait =\n retryAfter > 0 ? retryAfter * SECOND_MS : BASE_DELAY_MS * 2 ** attempt;\n // oxlint-disable-next-line no-await-in-loop -- back off before retrying\n await sleep(wait);\n }\n }\n // Unreachable — the loop always returns or rethrows — but keeps types honest.\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Notion request failed after retries.\");\n};\n\n/** Paginate a Notion list endpoint via recursion (no await-in-loop). */\nconst collectAll = async <T>(\n page: (cursor?: string) => Promise<NotionList<T>>,\n cursor?: string,\n acc: T[] = []\n): Promise<T[]> => {\n const res = await page(cursor);\n const all = [...acc, ...res.results];\n return res.has_more && res.next_cursor\n ? collectAll(page, res.next_cursor, all)\n : all;\n};\n\nconst LIST_BLOCKS = new Set([\n \"bulleted_list_item\",\n \"numbered_list_item\",\n \"to_do\",\n]);\n\n/** Whether a block is a list item (so consecutive ones render as a tight list). */\nconst isListItem = (block: NotionBlock | undefined): boolean =>\n block !== undefined && LIST_BLOCKS.has(block.type);\n\n/** Render a leaf (non-container) block to Markdown, or null for containers. */\nconst renderLeaf = (block: NotionBlock): string | null => {\n const data = (block[block.type] ?? {}) as Record<string, unknown>;\n const text = richToMarkdown(blockField(block));\n switch (block.type) {\n case \"paragraph\": {\n return text;\n }\n case \"heading_1\": {\n return `# ${text}`;\n }\n case \"heading_2\": {\n return `## ${text}`;\n }\n case \"heading_3\": {\n return `### ${text}`;\n }\n case \"bulleted_list_item\": {\n return `- ${text}`;\n }\n case \"numbered_list_item\": {\n return `1. ${text}`;\n }\n case \"to_do\": {\n return `- [${data.checked ? \"x\" : \" \"}] ${text}`;\n }\n case \"quote\": {\n return `> ${text}`;\n }\n case \"divider\": {\n return \"---\";\n }\n case \"code\": {\n return `\\`\\`\\`${(data.language as string) ?? \"\"}\\n${text}\\n\\`\\`\\``;\n }\n case \"image\": {\n const media = data as {\n external?: { url: string };\n file?: { url: string };\n caption?: NotionRichText[];\n };\n const url = media.external?.url ?? media.file?.url;\n return url ? `![${richToMarkdown(media.caption)}](${url})` : \"\";\n }\n default: {\n return null;\n }\n }\n};\n\n/**\n * Notion content source. Maps a database to a collection: each page becomes an\n * entry, its properties become frontmatter, and its block tree is converted to\n * MDX with Blume components. Images are materialized so signed URLs don't rot.\n */\nexport const notionSource = (\n options: NotionSourceOptions,\n ctx?: SourceContext\n): ContentSource => {\n const props = options.properties ?? {};\n const cache = snapshotCache(\n ctx?.cacheDir ?? join(\".blume\", \"cache\", options.name)\n );\n const assetsDir =\n ctx?.assetsDir ?? join(\".blume\", \"public\", \"blume-assets\", options.name);\n const assetsBaseUrl = ctx?.assetsBaseUrl ?? `/blume-assets/${options.name}`;\n let snapshot = new Map<string, SourceEntry>();\n\n const resolveClient = async (): Promise<NotionClientLike> => {\n if (options.client) {\n return options.client;\n }\n let Client: new (config: { auth?: string }) => NotionClientLike;\n try {\n ({ Client } = (await import(\"@notionhq/client\")) as {\n Client: new (config: { auth?: string }) => NotionClientLike;\n });\n } catch {\n throw new BlumeError({\n code: \"BLUME_SOURCE_SDK_MISSING\",\n message: `Source \"${options.name}\" needs \"@notionhq/client\". Install it (e.g. \\`npm install @notionhq/client\\`).`,\n severity: \"error\",\n });\n }\n return new Client({ auth: options.token ?? process.env.NOTION_TOKEN });\n };\n\n const childrenOf = (\n client: NotionClientLike,\n blockId: string\n ): Promise<NotionBlock[]> =>\n collectAll((cursor) =>\n withNotionRetry(() =>\n client.blocks.children.list({ block_id: blockId, start_cursor: cursor })\n )\n );\n\n // `render` is injected (rather than referenced) so this stays a forward-free\n // definition; `renderBlocks` passes itself, the way `collectAll` recurses.\n const renderContainer = async (\n client: NotionClientLike,\n block: NotionBlock,\n render: (c: NotionClientLike, b: NotionBlock[]) => Promise<string>\n ): Promise<string> => {\n const children = async (target: NotionBlock): Promise<string> => {\n if (!target.has_children) {\n return \"\";\n }\n return render(client, await childrenOf(client, target.id));\n };\n\n if (block.type === \"callout\") {\n const body = [richToMarkdown(blockField(block)), await children(block)]\n .filter(Boolean)\n .join(\"\\n\\n\");\n return `<Callout>\\n${body}\\n</Callout>`;\n }\n if (block.type === \"toggle\") {\n const title = JSON.stringify(richToMarkdown(blockField(block)));\n return `<Accordion>\\n<AccordionItem title=${title}>\\n${await children(block)}\\n</AccordionItem>\\n</Accordion>`;\n }\n if (block.type === \"column_list\") {\n const cols = await childrenOf(client, block.id);\n const rendered = await Promise.all(\n cols.map(async (col) => `<Column>\\n${await children(col)}\\n</Column>`)\n );\n return `<Columns>\\n${rendered.join(\"\\n\")}\\n</Columns>`;\n }\n return `{/* unsupported Notion block: ${block.type} */}`;\n };\n\n const renderBlocks = async (\n client: NotionClientLike,\n blocks: NotionBlock[]\n ): Promise<string> => {\n const parts = await Promise.all(\n blocks.map(\n (block) =>\n renderLeaf(block) ?? renderContainer(client, block, renderBlocks)\n )\n );\n // Join with a blank line, except between consecutive list items, which stay\n // tight so they render as a single list rather than separate loose ones.\n const pairs = blocks\n .map((block, i) => ({ block, text: parts[i] ?? \"\" }))\n .filter((pair) => pair.text);\n return pairs\n .map((pair, i) => {\n if (i === 0) {\n return pair.text;\n }\n const tight = isListItem(pairs[i - 1]?.block) && isListItem(pair.block);\n return `${tight ? \"\\n\" : \"\\n\\n\"}${pair.text}`;\n })\n .join(\"\");\n };\n\n const titleProperty = (page: NotionPage): NotionProperty | undefined => {\n if (props.title) {\n return page.properties[props.title];\n }\n return Object.values(page.properties).find((p) => p.type === \"title\");\n };\n\n const isDraft = (page: NotionPage): boolean => {\n if (!options.publishedValue) {\n return false;\n }\n const prop = page.properties[props.status ?? \"Status\"];\n const status = prop?.status?.name ?? prop?.select?.name;\n return Boolean(status && status !== options.publishedValue);\n };\n\n const orderOf = (page: NotionPage): number | undefined => {\n const order = page.properties[props.order ?? \"Order\"]?.number;\n return typeof order === \"number\" ? order : undefined;\n };\n\n const frontmatter = (\n page: NotionPage\n ): { data: Record<string, unknown>; slug: string } => {\n const data: Record<string, unknown> = {};\n const title = richToMarkdown(titleProperty(page)?.title);\n if (title) {\n data.title = title;\n }\n const description = richToMarkdown(\n page.properties[props.description ?? \"Description\"]?.rich_text\n );\n if (description) {\n data.description = description;\n }\n if (isDraft(page)) {\n data.draft = true;\n }\n const order = orderOf(page);\n if (order !== undefined) {\n data.sidebar = { order };\n }\n const slugProp = richToMarkdown(\n page.properties[props.slug ?? \"Slug\"]?.rich_text\n );\n const slug = slugify(slugProp || title) || page.id;\n return { data, slug };\n };\n\n const toEntry = async (\n client: NotionClientLike,\n page: NotionPage\n ): Promise<{ entry: SourceEntry; diagnostics: Diagnostic[] }> => {\n const { data, slug } = frontmatter(page);\n const mdx = await renderBlocks(client, await childrenOf(client, page.id));\n const assets = await materializeAssets(mdx, {\n assetsBaseUrl,\n assetsDir,\n fetchImpl: options.fetchImpl,\n });\n const raw = matter.stringify(assets.markdown, data);\n return {\n diagnostics: assets.diagnostics,\n entry: {\n body: { format: \"mdx\", text: assets.markdown },\n data,\n hash: hashText(raw),\n lastModified: page.last_edited_time,\n raw,\n ref: `${slug}.mdx`,\n },\n };\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n const assetDiagnostics: Diagnostic[] = [];\n const result = await loadWithCache(\n options.name,\n cache,\n async () => {\n const client = await resolveClient();\n const pages = await collectAll((cursor) =>\n withNotionRetry(() =>\n client.databases.query({\n database_id: options.database,\n start_cursor: cursor,\n })\n )\n );\n const built = await Promise.all(\n pages.map((page) => toEntry(client, page))\n );\n for (const item of built) {\n assetDiagnostics.push(...item.diagnostics);\n }\n return built.map((item) => item.entry);\n },\n ctx?.refresh ?? true\n );\n snapshot = new Map(result.entries.map((entry) => [entry.ref, entry]));\n return {\n diagnostics: [...result.diagnostics, ...assetDiagnostics],\n entries: result.entries,\n };\n };\n\n const read = async (ref: string): Promise<string> => {\n const cached = snapshot.get(ref);\n if (cached) {\n return cached.raw ?? cached.body.text;\n }\n const all = await cache.read();\n return all.find((e) => e.ref === ref)?.raw ?? \"\";\n };\n\n return {\n load,\n name: options.name,\n prefix: options.prefix,\n read,\n staged: true,\n watch: options.pollInterval\n ? pollingWatch(load, options.pollInterval)\n : undefined,\n };\n};\n",
129
130
  "import { mkdir, writeFile } from \"node:fs/promises\";\n\nimport { extname, join } from \"pathe\";\n\nimport type { Diagnostic } from \"../types.ts\";\nimport { hashText } from \"./cache.ts\";\n\nconst MD_IMAGE = /!\\[(?<alt>[^\\]]*)\\]\\((?<url>[^)\\s]+)\\)/gu;\nconst REMOTE = /^https?:\\/\\//u;\nconst SAFE_EXT = /^\\.[a-z0-9]+$/iu;\n\n/** Where to write downloaded assets and how to reference them publicly. */\nexport interface AssetContext {\n assetsDir: string;\n assetsBaseUrl: string;\n /** Injected for tests; defaults to the global `fetch`. */\n fetchImpl?: typeof fetch;\n}\n\n/** Pick a file extension from a URL, defaulting to `.png`. */\nconst extFor = (url: string): string => {\n const clean = url.split(\"?\")[0] ?? url;\n const ext = extname(clean);\n return SAFE_EXT.test(ext) ? ext.toLowerCase() : \".png\";\n};\n\n/**\n * Download remote images referenced in a Markdown body into the asset dir and\n * rewrite their `src` to the local public path. Remote CMS URLs (notably\n * Notion's signed, expiring links) would otherwise rot a static build. Assets\n * are content-addressed by URL hash, so repeated builds are stable and deduped.\n */\nexport const materializeAssets = async (\n markdown: string,\n ctx: AssetContext\n): Promise<{ markdown: string; diagnostics: Diagnostic[] }> => {\n const doFetch = ctx.fetchImpl ?? globalThis.fetch;\n const diagnostics: Diagnostic[] = [];\n\n const urls = new Set<string>();\n for (const match of markdown.matchAll(MD_IMAGE)) {\n const url = match.groups?.url;\n if (url && REMOTE.test(url)) {\n urls.add(url);\n }\n }\n\n const rewrites = new Map<string, string>();\n await Promise.all(\n [...urls].map(async (url) => {\n try {\n const res = await doFetch(url);\n if (!res.ok) {\n throw new Error(`${res.status}`);\n }\n const bytes = new Uint8Array(await res.arrayBuffer());\n const file = `${hashText(url)}${extFor(url)}`;\n await mkdir(ctx.assetsDir, { recursive: true });\n await writeFile(join(ctx.assetsDir, file), bytes);\n rewrites.set(url, `${ctx.assetsBaseUrl}/${file}`);\n } catch (error) {\n diagnostics.push({\n code: \"BLUME_ASSET_FETCH_FAILED\",\n message: `Failed to download asset ${url}: ${(error as Error).message}`,\n severity: \"warning\",\n });\n }\n })\n );\n\n const rewritten = markdown.replaceAll(MD_IMAGE, (match, alt, url) => {\n const local = rewrites.get(url);\n return local ? `![${alt}](${local})` : match;\n });\n\n return { diagnostics, markdown: rewritten };\n};\n",
@@ -135,29 +136,30 @@
135
136
  "import { resolveAskBackend } from \"../ai/ask.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/**\n * Warn early when an enabled feature needs a secret env var that isn't set, so\n * the failure surfaces at `blume dev`/`build` instead of at the first request in\n * production. These are runtime secrets (the endpoint reads them on the server),\n * so this warns rather than hard-fails — the value may live only in the deploy\n * environment. Build-time secrets (search-index sync) already warn during sync.\n */\nexport const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const requireSecret = (feature: string, env: string, note?: string): void => {\n if (process.env[env]) {\n return;\n }\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${note ? ` (${note})` : \"\"}.`,\n severity: \"warning\",\n suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`,\n });\n };\n\n if (config.ai.ask?.enabled) {\n const backend = resolveAskBackend(config.ai.ask);\n if (backend.kind === \"gateway\") {\n requireSecret(\n \"Ask AI (AI Gateway)\",\n \"AI_GATEWAY_API_KEY\",\n \"on Vercel the gateway can also authenticate via OIDC\"\n );\n } else {\n requireSecret(\"Ask AI\", backend.apiKeyEnv);\n }\n }\n\n if (config.search.provider === \"mixedbread\") {\n requireSecret(\"Mixedbread search\", \"MIXEDBREAD_API_KEY\");\n }\n\n return diagnostics;\n};\n",
136
137
  "import { generateRuntime } from \"../astro/generate.ts\";\nimport { BlumeError, hasErrors } from \"../core/diagnostics.ts\";\nimport { scanProject } from \"../core/project-graph.ts\";\nimport type {\n BlumeProject,\n BuildMode,\n ConfigOverrides,\n} from \"../core/project-graph.ts\";\nimport { serverFeatures } from \"../core/server-features.ts\";\nimport { loadEnvFiles } from \"./env.ts\";\nimport { reportInternalError } from \"./internal-error.ts\";\nimport { logger, reportDiagnostics } from \"./log.ts\";\nimport { checkRequiredSecrets } from \"./required-secrets.ts\";\n\nexport interface PrepareOptions {\n root: string;\n mode?: BuildMode;\n strict?: boolean;\n /** Local dev server URL, used as the `deployment.site` fallback (dev only). */\n devServerUrl?: string;\n /** Render drafts and fetch unpublished CMS content. */\n preview?: boolean;\n /** Force remote sources to re-fetch instead of serving the cached snapshot. */\n refresh?: boolean;\n /** CLI config overrides (e.g. `--output`, `--content-dir`). */\n overrides?: ConfigOverrides;\n /** Relocate the generated runtime (e.g. `.blume-verify` for `--isolated`). */\n runtimeDir?: string;\n}\n\n/**\n * Scan the project, surface diagnostics, and (re)generate the `.blume` runtime.\n * In strict mode, any error aborts. Returns the resolved project.\n */\nexport const prepareProject = async (\n options: PrepareOptions\n): Promise<BlumeProject> => {\n // Honor a `--root` that differs from cwd: remote sources read env during the\n // scan below, and `loadEnvFiles` is a no-op for vars already set (cwd load).\n loadEnvFiles(options.root);\n\n let project: BlumeProject;\n try {\n project = await scanProject(options.root, {\n devServerUrl: options.devServerUrl,\n mode: options.mode,\n overrides: options.overrides,\n preview: options.preview,\n refresh: options.refresh,\n runtimeDir: options.runtimeDir,\n });\n } catch (error) {\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], options.root);\n } else {\n reportInternalError(error);\n }\n process.exit(1);\n }\n\n // Hard gate: server-only features cannot ship in a static build.\n if (\n options.mode === \"build\" &&\n project.config.deployment.output === \"static\"\n ) {\n const features = serverFeatures(project.config);\n if (features.length > 0) {\n reportDiagnostics(\n [\n {\n code: \"BLUME_SERVER_FEATURE_REQUIRED\",\n message: `${features.join(\", \")} require server output, but deployment.output is \"static\".`,\n severity: \"error\",\n suggestion:\n 'Set deployment: { output: \"server\", adapter: \"vercel\" } in blume.config.ts.',\n },\n ],\n options.root\n );\n process.exit(1);\n }\n }\n\n const hadErrors = reportDiagnostics(project.diagnostics, options.root);\n if (hadErrors && options.strict) {\n logger.error(\"Aborting due to errors (strict mode).\");\n process.exit(1);\n }\n if (hasErrors(project.diagnostics) && !options.strict) {\n logger.warn(\"Continuing despite errors. Use --strict to fail the build.\");\n }\n\n const { warnings } = await generateRuntime(project);\n for (const warning of warnings) {\n logger.warn(warning);\n }\n\n // Fail-fast on missing runtime secrets: warn now, not at the first request.\n reportDiagnostics(checkRequiredSecrets(project.config), options.root);\n\n return project;\n};\n",
137
138
  "import { existsSync } from \"node:fs\";\n\nimport { check } from \"@astrojs/check\";\nimport { sync } from \"astro\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nexport const checkCommand = defineCommand({\n args: {\n isolated: {\n description:\n \"Type-check in an isolated .blume-verify runtime so a running dev server is untouched. For verifying changes while `blume dev` runs.\",\n type: \"boolean\",\n },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: {\n description: \"Fail on content diagnostics as well as type errors.\",\n type: \"boolean\",\n },\n },\n meta: {\n description: \"Type-check the docs site with astro check.\",\n name: \"check\",\n },\n async run({ args }) {\n const root = process.cwd();\n\n // `blume check` regenerates `.blume` just like `build`, so it must refuse a\n // live dev server unless isolated. `--isolated` (or BLUME_RUNTIME_DIR)\n // relocates the runtime to `.blume-verify`, which dev never locks.\n const runtimeDir = args.isolated\n ? \".blume-verify\"\n : process.env.BLUME_RUNTIME_DIR;\n refuseIfDevRunning(root, \"checking\", runtimeDir);\n if (args.isolated) {\n await ensureGitignore(root, [\".blume-verify/\"]);\n }\n\n const project = await prepareProject({\n mode: \"build\",\n preview: args.preview,\n root,\n runtimeDir,\n strict: args.strict,\n });\n\n const { outDir } = project.context;\n\n // Generate Astro's content/collection and font types into `.blume/.astro`\n // so `astro:*` virtual modules resolve during the check.\n await sync({ logLevel: \"warn\", root: outDir });\n\n // The project-root tsconfig is what covers the authored `pages/` and config;\n // without it astro check only sees the generated `.blume` project. Falls back\n // to the generated project's own tsconfig when the project has none.\n const tsconfig = join(root, \"tsconfig.json\");\n\n logger.start(`Type-checking ${project.graph.pages.length} page(s)`);\n const failed = await check({\n minimumFailingSeverity: \"error\",\n minimumSeverity: \"hint\",\n root: outDir,\n tsconfig: existsSync(tsconfig) ? tsconfig : undefined,\n watch: false,\n });\n\n if (failed) {\n logger.error(\"Type check failed.\");\n process.exit(1);\n }\n\n logger.success(\"No type errors.\");\n },\n});\n",
138
- "import { watch } from \"node:fs\";\n\nimport { dev } from \"astro\";\nimport { defineCommand } from \"citty\";\n\nimport { generateRuntime } from \"../../astro/generate.ts\";\nimport { showBlumeErrorOverlay } from \"../../astro/integration.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport { parsePort } from \"../args.ts\";\nimport { acquireDevLock } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nexport const devCommand = defineCommand({\n args: {\n \"content-dir\": {\n description: \"Content folder to scan, overriding config (content.root).\",\n type: \"string\",\n },\n debug: {\n description: \"Verbose Astro/Vite logging for troubleshooting.\",\n type: \"boolean\",\n },\n host: { description: \"Network host to bind.\", type: \"string\" },\n open: { description: \"Open the browser on start.\", type: \"boolean\" },\n port: { description: \"Port to listen on.\", type: \"string\" },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: { description: \"Fail on diagnostics.\", type: \"boolean\" },\n },\n meta: {\n description: \"Start the Blume development server.\",\n name: \"dev\",\n },\n async run({ args }) {\n const root = process.cwd();\n const preview = args.preview ?? false;\n const overrides = args[\"content-dir\"]\n ? { contentRoot: args[\"content-dir\"] }\n : undefined;\n // Astro's dev server defaults to 4321 when no port is passed. Feeding the\n // resolved URL in as the `deployment.site` fallback lets site-gated features\n // (OG images, canonicals, sitemap) work locally without configuring a site.\n const explicitPort = parsePort(args.port);\n const port = explicitPort ?? 4321;\n const devServerUrl = `http://localhost:${port}`;\n const project = await prepareProject({\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n root,\n strict: args.strict,\n });\n\n if (project.bridge) {\n logger.info(\n 'Detected docs.json — running in Mintlify bridge mode (no migration). Run \"blume migrate mintlify\" to convert permanently.'\n );\n }\n\n // Claim the shared `.blume` dir so a concurrent build/eject/sync refuses\n // rather than regenerating or deleting it out from under this server.\n const releaseLock = acquireDevLock(project.context.outDir);\n process.on(\"exit\", releaseLock);\n\n const server = await dev({\n logLevel: args.debug ? \"debug\" : \"info\",\n root: project.context.outDir,\n server: {\n host: args.host ?? false,\n open: args.open ?? false,\n port: explicitPort,\n },\n });\n\n // Mirror any initial diagnostics into the browser overlay now the server\n // (and its HMR channel) is up.\n showBlumeErrorOverlay(project.diagnostics);\n\n // Watch user inputs and regenerate the runtime data on change. Astro/Vite\n // hot-reloads the generated data module so nav and routes stay in sync.\n let timer: ReturnType<typeof setTimeout> | null = null;\n const regenerate = () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(async () => {\n try {\n const next = await scanProject(root, {\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n });\n await generateRuntime(next);\n // Surface any content/config errors in the browser overlay too.\n showBlumeErrorOverlay(next.diagnostics);\n } catch (error) {\n logger.error(`Regeneration failed: ${(error as Error).message}`);\n }\n }, 80);\n };\n\n // Content is watched per source (filesystem uses fs.watch; remote sources\n // are frozen for the session). The remaining project inputs — user pages,\n // config, theme, and component overrides — are watched directly.\n const fileTargets = [\n project.context.pagesRoot,\n project.context.configFile,\n project.context.themeFile,\n project.context.componentsFile,\n ].filter((target) => target !== null);\n\n const disposers = [\n ...project.sources.map((source) => source.watch?.(regenerate)),\n ...fileTargets.map((target) => {\n const watcher = watch(target, { recursive: true }, regenerate);\n return () => watcher.close();\n }),\n ].filter((dispose) => dispose !== undefined);\n\n const shutdown = async () => {\n for (const dispose of disposers) {\n dispose();\n }\n releaseLock();\n await server.stop();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n },\n});\n",
139
- "import { createReadStream, existsSync, statSync } from \"node:fs\";\nimport type { Stats } from \"node:fs\";\nimport { cp } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport { extname, join, relative, resolve, sep } from \"pathe\";\n\nimport type { AssetMount } from \"../core/assets.ts\";\n\n/** Content types for the asset extensions a docs project commonly serves. */\nconst MIME_TYPES: Record<string, string> = {\n \".avif\": \"image/avif\",\n \".css\": \"text/css; charset=utf-8\",\n \".gif\": \"image/gif\",\n \".ico\": \"image/x-icon\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".mp4\": \"video/mp4\",\n \".otf\": \"font/otf\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".ttf\": \"font/ttf\",\n \".txt\": \"text/plain; charset=utf-8\",\n \".webm\": \"video/webm\",\n \".webp\": \"image/webp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n};\n\nconst mimeType = (file: string): string =>\n MIME_TYPES[extname(file).toLowerCase()] ?? \"application/octet-stream\";\n\n/** Whether `child` is `parent` itself or a path nested under it. */\nconst isContained = (parent: string, child: string): boolean => {\n const rel = relative(parent, child);\n return rel === \"\" || (!rel.startsWith(\"..\") && !rel.startsWith(sep));\n};\n\n/** Resolve a request URL to an on-disk file within one of the mounts, if any. */\nconst resolveRequest = (url: string, mounts: AssetMount[]): string | null => {\n const pathname = decodeURIComponent(\n (url.split(\"?\")[0] ?? \"\").split(\"#\")[0] ?? \"\"\n );\n for (const mount of mounts) {\n if (pathname !== mount.url && !pathname.startsWith(`${mount.url}/`)) {\n continue;\n }\n // `.` + rel keeps the join relative so an absolute-looking suffix can't\n // escape the mount; the containment check rejects `..` traversal outright.\n const file = resolve(mount.dir, `.${pathname.slice(mount.url.length)}`);\n if (isContained(mount.dir, file)) {\n return file;\n }\n }\n return null;\n};\n\n/** `statSync` that returns null instead of throwing on a missing file. */\nconst statFile = (file: string): Stats | null => {\n try {\n return statSync(file);\n } catch {\n return null;\n }\n};\n\n/**\n * A dev-server middleware that serves `content.assets` mounts (top-level dirs\n * kept in place, e.g. a migrated `images/`) at their site URL. Astro only serves\n * `publicDir` in dev, so without this those references would 404. Non-matching\n * requests, and any path that isn't a real file, fall through to Astro. Stat is\n * synchronous — this is dev-only middleware and mirrors how sirv serves statics.\n */\nexport const serveAssetMounts =\n (mounts: AssetMount[]) =>\n (req: IncomingMessage, res: ServerResponse, next: () => void): void => {\n if ((req.method !== \"GET\" && req.method !== \"HEAD\") || !req.url) {\n next();\n return;\n }\n const file = resolveRequest(req.url, mounts);\n const stats = file ? statFile(file) : null;\n if (!(file && stats?.isFile())) {\n next();\n return;\n }\n res.setHeader(\"Content-Type\", mimeType(file));\n res.setHeader(\"Content-Length\", String(stats.size));\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n createReadStream(file).pipe(res);\n };\n\n/**\n * Copy every asset mount into the build output, mirroring what Astro does with\n * `publicDir`. Runs on `astro:build:done` so in-place asset dirs ship in the\n * final `dist/`. A missing source dir is skipped (it may be referenced but\n * absent); `cp` handles both directories and single files.\n */\nexport const copyAssetMounts = async (\n mounts: AssetMount[],\n outDir: string\n): Promise<void> => {\n for (const mount of mounts) {\n if (!existsSync(mount.dir)) {\n continue;\n }\n const dest = join(outDir, mount.url.replace(/^\\/+/u, \"\"));\n // oxlint-disable-next-line no-await-in-loop -- sequential fs copies\n await cp(mount.dir, dest, { recursive: true });\n }\n};\n",
139
+ "import { watch } from \"node:fs\";\n\nimport { dev } from \"astro\";\nimport { defineCommand } from \"citty\";\n\nimport { generateRuntime } from \"../../astro/generate.ts\";\nimport { showBlumeErrorOverlay } from \"../../astro/integration.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport { parsePort } from \"../args.ts\";\nimport { coalescedRunner } from \"../coalesce.ts\";\nimport { acquireDevLock, isDevLocked } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nexport const devCommand = defineCommand({\n args: {\n \"content-dir\": {\n description: \"Content folder to scan, overriding config (content.root).\",\n type: \"string\",\n },\n debug: {\n description: \"Verbose Astro/Vite logging for troubleshooting.\",\n type: \"boolean\",\n },\n host: { description: \"Network host to bind.\", type: \"string\" },\n open: { description: \"Open the browser on start.\", type: \"boolean\" },\n port: { description: \"Port to listen on.\", type: \"string\" },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: { description: \"Fail on diagnostics.\", type: \"boolean\" },\n },\n meta: {\n description: \"Start the Blume development server.\",\n name: \"dev\",\n },\n async run({ args }) {\n const root = process.cwd();\n const preview = args.preview ?? false;\n const overrides = args[\"content-dir\"]\n ? { contentRoot: args[\"content-dir\"] }\n : undefined;\n // Astro's dev server defaults to 4321 when no port is passed. Feeding the\n // resolved URL in as the `deployment.site` fallback lets site-gated features\n // (OG images, canonicals, sitemap) work locally without configuring a site.\n const explicitPort = parsePort(args.port);\n const port = explicitPort ?? 4321;\n const devServerUrl = `http://localhost:${port}`;\n const project = await prepareProject({\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n root,\n strict: args.strict,\n });\n\n if (project.bridge) {\n logger.info(\n 'Detected docs.json — running in Mintlify bridge mode (no migration). Run \"blume migrate mintlify\" to convert permanently.'\n );\n }\n\n // Claim the shared `.blume` dir so a concurrent build/eject/sync refuses\n // rather than regenerating or deleting it out from under this server. A\n // second dev server would fight over the same generated tree the same\n // way, so it must refuse too instead of silently clobbering the lock.\n if (isDevLocked(project.context.outDir)) {\n logger.error(\n \"Another `blume dev` is already running in this project; two dev servers would corrupt the shared .blume dir. Stop the other one first (or delete .blume/dev.lock if it crashed).\"\n );\n process.exit(1);\n }\n const releaseLock = acquireDevLock(project.context.outDir);\n process.on(\"exit\", releaseLock);\n\n const server = await dev({\n logLevel: args.debug ? \"debug\" : \"info\",\n root: project.context.outDir,\n server: {\n host: args.host ?? false,\n open: args.open ?? false,\n port: explicitPort,\n },\n });\n\n // Mirror any initial diagnostics into the browser overlay now the server\n // (and its HMR channel) is up.\n showBlumeErrorOverlay(project.diagnostics);\n\n // Watch user inputs and regenerate the runtime data on change. Astro/Vite\n // hot-reloads the generated data module so nav and routes stay in sync.\n // `coalescedRunner` single-flights the scan so a burst of watch events can\n // never stack overlapping regenerations (a large project's scan can outlast\n // the debounce; piled-up scans exhaust the heap).\n const runRegenerate = coalescedRunner(async () => {\n try {\n const next = await scanProject(root, {\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n });\n await generateRuntime(next);\n // Surface any content/config errors in the browser overlay too.\n showBlumeErrorOverlay(next.diagnostics);\n } catch (error) {\n logger.error(`Regeneration failed: ${(error as Error).message}`);\n }\n });\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n const regenerate = () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(runRegenerate, 80);\n };\n\n // Content is watched per source (filesystem uses fs.watch; remote sources\n // are frozen for the session). The remaining project inputs — user pages,\n // config, theme, and component overrides — are watched directly.\n const fileTargets = [\n project.context.pagesRoot,\n project.context.configFile,\n project.context.themeFile,\n project.context.componentsFile,\n ].filter((target) => target !== null);\n\n const disposers = [\n ...project.sources.map((source) => source.watch?.(regenerate)),\n ...fileTargets.map((target) => {\n const watcher = watch(target, { recursive: true }, regenerate);\n return () => watcher.close();\n }),\n ].filter((dispose) => dispose !== undefined);\n\n const shutdown = async () => {\n for (const dispose of disposers) {\n dispose();\n }\n releaseLock();\n await server.stop();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n },\n});\n",
140
+ "import { createReadStream, existsSync, statSync } from \"node:fs\";\nimport type { Stats } from \"node:fs\";\nimport { cp } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport { extname, join, relative, resolve, sep } from \"pathe\";\n\nimport type { AssetMount } from \"../core/assets.ts\";\n\n/** Content types for the asset extensions a docs project commonly serves. */\nconst MIME_TYPES: Record<string, string> = {\n \".avif\": \"image/avif\",\n \".css\": \"text/css; charset=utf-8\",\n \".gif\": \"image/gif\",\n \".ico\": \"image/x-icon\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".mp4\": \"video/mp4\",\n \".otf\": \"font/otf\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".ttf\": \"font/ttf\",\n \".txt\": \"text/plain; charset=utf-8\",\n \".webm\": \"video/webm\",\n \".webp\": \"image/webp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n};\n\nconst mimeType = (file: string): string =>\n MIME_TYPES[extname(file).toLowerCase()] ?? \"application/octet-stream\";\n\n/** Whether `child` is `parent` itself or a path nested under it. */\nconst isContained = (parent: string, child: string): boolean => {\n const rel = relative(parent, child);\n return rel === \"\" || (!rel.startsWith(\"..\") && !rel.startsWith(sep));\n};\n\n/** Resolve a request URL to an on-disk file within one of the mounts, if any. */\nconst resolveRequest = (url: string, mounts: AssetMount[]): string | null => {\n let pathname: string;\n try {\n pathname = decodeURIComponent(\n (url.split(\"?\")[0] ?? \"\").split(\"#\")[0] ?? \"\"\n );\n } catch {\n // Malformed percent-encoding (`/images/%zz`) throws URIError; treat it as\n // a plain miss (404) rather than a middleware exception.\n return null;\n }\n for (const mount of mounts) {\n if (pathname !== mount.url && !pathname.startsWith(`${mount.url}/`)) {\n continue;\n }\n // `.` + rel keeps the join relative so an absolute-looking suffix can't\n // escape the mount; the containment check rejects `..` traversal outright.\n const file = resolve(mount.dir, `.${pathname.slice(mount.url.length)}`);\n if (isContained(mount.dir, file)) {\n return file;\n }\n }\n return null;\n};\n\n/** `statSync` that returns null instead of throwing on a missing file. */\nconst statFile = (file: string): Stats | null => {\n try {\n return statSync(file);\n } catch {\n return null;\n }\n};\n\n/**\n * A dev-server middleware that serves `content.assets` mounts (top-level dirs\n * kept in place, e.g. a migrated `images/`) at their site URL. Astro only serves\n * `publicDir` in dev, so without this those references would 404. Non-matching\n * requests, and any path that isn't a real file, fall through to Astro. Stat is\n * synchronous — this is dev-only middleware and mirrors how sirv serves statics.\n */\nexport const serveAssetMounts =\n (mounts: AssetMount[]) =>\n (req: IncomingMessage, res: ServerResponse, next: () => void): void => {\n if ((req.method !== \"GET\" && req.method !== \"HEAD\") || !req.url) {\n next();\n return;\n }\n const file = resolveRequest(req.url, mounts);\n const stats = file ? statFile(file) : null;\n if (!(file && stats?.isFile())) {\n next();\n return;\n }\n res.setHeader(\"Content-Type\", mimeType(file));\n res.setHeader(\"Content-Length\", String(stats.size));\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n createReadStream(file).pipe(res);\n };\n\n/**\n * Copy every asset mount into the build output, mirroring what Astro does with\n * `publicDir`. Runs on `astro:build:done` so in-place asset dirs ship in the\n * final `dist/`. A missing source dir is skipped (it may be referenced but\n * absent); `cp` handles both directories and single files.\n */\nexport const copyAssetMounts = async (\n mounts: AssetMount[],\n outDir: string\n): Promise<void> => {\n for (const mount of mounts) {\n if (!existsSync(mount.dir)) {\n continue;\n }\n const dest = join(outDir, mount.url.replace(/^\\/+/u, \"\"));\n // oxlint-disable-next-line no-await-in-loop -- sequential fs copies\n await cp(mount.dir, dest, { recursive: true });\n }\n};\n",
140
141
  "import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type { AstroIntegration } from \"astro\";\n\nimport type { AssetMount } from \"../core/assets.ts\";\nimport { enrichDiagnostic } from \"../core/diagnostics.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport { markdownVariantUrl, prefersMarkdown } from \"./markdown-negotiation.ts\";\nimport { copyAssetMounts, serveAssetMounts } from \"./static-assets.ts\";\n\n/** The dev server's HMR channel — either `.ws` (Vite ≤5) or `.hot` (Vite 6+). */\ninterface OverlayChannel {\n send: (payload: unknown) => void;\n}\ninterface OverlayServer {\n hot?: OverlayChannel;\n ws?: OverlayChannel;\n}\n\n// Set on `astro:server:setup`; read by `showBlumeErrorOverlay` so the CLI's\n// regeneration can push Blume diagnostics into Vite's browser error overlay.\n// Same-process module singleton (dev and the integration share the instance).\nlet overlayServer: OverlayServer | null = null;\n\nconst overlayChannel = (): OverlayChannel | undefined =>\n overlayServer?.ws ?? overlayServer?.hot;\n\n/**\n * Surface Blume's own diagnostics (config/frontmatter/content errors) in the\n * Vite/Astro browser error overlay during `blume dev`, so they don't hide in the\n * terminal. A no-op when there are no errors or the dev server isn't up. The\n * overlay clears itself on the next successful HMR update.\n */\nexport const showBlumeErrorOverlay = (diagnostics: Diagnostic[]): void => {\n const errors = diagnostics\n .filter((diagnostic) => diagnostic.severity === \"error\")\n .map(enrichDiagnostic);\n const channel = overlayChannel();\n if (errors.length === 0 || !channel) {\n return;\n }\n const body = errors\n .map((diagnostic) => {\n const where = diagnostic.file\n ? `\\n at ${diagnostic.file}${diagnostic.line ? `:${diagnostic.line}` : \"\"}`\n : \"\";\n const fix = diagnostic.suggestion\n ? `\\n fix: ${diagnostic.suggestion}`\n : \"\";\n const docs = diagnostic.docsUrl ? `\\n docs: ${diagnostic.docsUrl}` : \"\";\n return `[${diagnostic.code}] ${diagnostic.message}${where}${fix}${docs}`;\n })\n .join(\"\\n\\n\");\n channel.send({\n err: {\n id: errors[0]?.file,\n message: `Blume found ${errors.length} error(s):\\n\\n${body}`,\n plugin: \"blume\",\n stack: \"\",\n },\n type: \"error\",\n });\n};\n\n/** A user page mounted into the generated runtime. */\nexport interface BlumePageRoute {\n /** Route pattern, e.g. `/changelog` or `/examples/[slug]`. */\n pattern: string;\n /** Absolute path to the user's `.astro` page file. */\n entrypoint: string;\n}\n\nexport interface BlumeIntegrationOptions {\n pages: BlumePageRoute[];\n /** Page routes that have a raw-Markdown variant (the content manifest). */\n contentRoutes: string[];\n /** Configured `deployment.base`, stripped from dev URLs before matching. */\n base?: string;\n /**\n * `content.assets` mounts: top-level dirs served at the site root in dev and\n * copied into the build output, so root-served assets need no relocation.\n */\n assets?: AssetMount[];\n}\n\n/**\n * Dev-server content negotiation: when a client asks for `text/markdown`,\n * transparently rewrite a content-page request to its `.md` variant so the\n * existing raw-Markdown endpoint serves it. Runs only under `blume dev`; static\n * and server builds expose the same content at the `.md` URL. Only routes with\n * a Markdown variant are rewritten, so landing pages and user `.astro` pages\n * keep serving HTML.\n */\nconst negotiateMarkdown =\n (routes: ReadonlySet<string>, base?: string) =>\n (req: IncomingMessage, res: ServerResponse, next: () => void): void => {\n if (\n (req.method === \"GET\" || req.method === \"HEAD\") &&\n prefersMarkdown(req.headers.accept)\n ) {\n const variant = markdownVariantUrl(req.url, routes, base);\n if (variant) {\n res.setHeader(\"Vary\", \"Accept\");\n req.url = variant;\n }\n }\n next();\n };\n\n/**\n * Blume's Astro integration. Mounts user-authored pages from `pages/` into the\n * generated runtime via `injectRoute`, keeping each file in its original\n * location so relative imports and `getStaticPaths` keep working, and teaches\n * the dev server to honour `Accept: text/markdown`.\n */\nexport const blumeIntegration = (\n options: BlumeIntegrationOptions\n): AstroIntegration => ({\n hooks: {\n \"astro:build:done\": async ({ dir }) => {\n // Copy in-place asset mounts into the build output, mirroring publicDir.\n if (options.assets?.length) {\n await copyAssetMounts(options.assets, fileURLToPath(dir));\n }\n },\n \"astro:config:setup\": ({ injectRoute }) => {\n for (const page of options.pages) {\n injectRoute({\n entrypoint: page.entrypoint,\n pattern: page.pattern,\n prerender: true,\n });\n }\n },\n \"astro:server:setup\": ({ server }) => {\n // Keep a handle on the dev server so Blume diagnostics can be pushed to\n // its browser error overlay (see `showBlumeErrorOverlay`).\n overlayServer = server as unknown as OverlayServer;\n // Prepend so the rewrite happens before Astro's own request handler,\n // letting the rewritten URL resolve to the `.md` endpoint.\n server.middlewares.stack.unshift({\n handle: negotiateMarkdown(new Set(options.contentRoutes), options.base),\n route: \"\",\n });\n // Serve `content.assets` mounts (Astro only serves publicDir in dev).\n if (options.assets?.length) {\n server.middlewares.stack.unshift({\n handle: serveAssetMounts(options.assets),\n route: \"\",\n });\n }\n },\n },\n name: \"blume\",\n});\n",
141
142
  "import { logger } from \"./log.ts\";\n\nconst MAX_PORT = 65_535;\n\n/**\n * Parse a `--port` value into a valid port number, or `undefined` when unset.\n * A non-integer or out-of-range value (`--port abc` → `NaN`) exits with an\n * error rather than propagating `localhost:NaN` into the dev server and the\n * `deployment.site` fallback.\n */\nexport const parsePort = (value?: string): number | undefined => {\n if (value === undefined) {\n return;\n }\n const port = Number(value);\n if (!(Number.isInteger(port) && port >= 1 && port <= MAX_PORT)) {\n logger.error(\n `Invalid --port \"${value}\" (expected an integer 1-${MAX_PORT}).`\n );\n process.exit(1);\n }\n return port;\n};\n",
143
+ "/**\n * Wrap an async task so it never runs concurrently with itself. Triggering the\n * returned function while a run is in flight coalesces into a single trailing\n * run after the current one settles.\n *\n * Dev regeneration (`scanProject` + `generateRuntime`) is expensive on a large\n * project — a full content re-scan that allocates big strings. A plain debounce\n * still lets a fast burst of watch events (or, before it was fixed, a `.blume/`\n * watch storm) start a new scan before the previous finished, piling up\n * overlapping scans until the heap is exhausted (observed as an OOM after\n * minutes of looping). Single-flighting bounds it to one scan at a time while\n * still guaranteeing a final run reflects the latest change.\n *\n * The task must not reject: a rejection would surface as an unhandled promise\n * rejection, so callers handle their own errors and always resolve.\n */\nexport const coalescedRunner = (task: () => Promise<void>): (() => void) => {\n let inFlight: Promise<void> | null = null;\n let pending = false;\n\n // Drain any run requested during the current run, then release the lock. The\n // `inFlight` promise is assigned synchronously by the caller below, so a\n // re-entrant trigger sees the lock immediately and only sets `pending`.\n const cycle = async (): Promise<void> => {\n try {\n do {\n pending = false;\n // oxlint-disable-next-line no-await-in-loop -- serialized by design\n await task();\n } while (pending);\n } finally {\n inFlight = null;\n }\n };\n\n return () => {\n if (inFlight) {\n pending = true;\n return;\n }\n inFlight = cycle();\n };\n};\n",
142
144
  "import { defineCommand } from \"citty\";\n\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport { serverFeatures } from \"../../core/server-features.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport {\n flushStdout,\n logger,\n reportDiagnostics,\n reportDiagnosticsJson,\n} from \"../log.ts\";\n\nconst MIN_NODE_MAJOR = 20;\n\nexport const doctorCommand = defineCommand({\n args: {\n json: {\n description: \"Emit diagnostics as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n },\n meta: {\n description: \"Diagnose common configuration and content problems.\",\n name: \"doctor\",\n },\n async run({ args }) {\n const root = process.cwd();\n const diagnostics: Diagnostic[] = [];\n\n const nodeMajor = Number.parseInt(\n process.versions.node.split(\".\")[0] ?? \"0\",\n 10\n );\n if (nodeMajor < MIN_NODE_MAJOR) {\n diagnostics.push({\n code: \"BLUME_NODE_VERSION\",\n message: `Node ${process.versions.node} is below the supported minimum (${MIN_NODE_MAJOR}).`,\n severity: \"warning\",\n });\n }\n\n try {\n const project = await scanProject(root, { mode: \"build\" });\n diagnostics.push(...project.diagnostics);\n\n const { config } = project;\n const features = serverFeatures(config);\n if (features.length > 0 && config.deployment.output === \"static\") {\n diagnostics.push({\n code: \"BLUME_SERVER_FEATURE_REQUIRED\",\n message: `${features.join(\", \")} require server output.`,\n severity: \"error\",\n suggestion: 'Set deployment.output to \"server\".',\n });\n }\n if (config.deployment.output === \"server\" && !config.deployment.adapter) {\n diagnostics.push({\n code: \"BLUME_ADAPTER_REQUIRED\",\n message: \"Server output requires an adapter.\",\n severity: \"error\",\n suggestion: 'Set deployment.adapter (e.g. \"vercel\").',\n });\n }\n\n if (!args.json) {\n logger.info(`Pages: ${project.graph.pages.length}`);\n logger.info(`Output: ${config.deployment.output}`);\n logger.info(`Search: ${config.search.provider}`);\n }\n } catch (error) {\n if (error instanceof BlumeError) {\n diagnostics.push(error.diagnostic);\n } else {\n reportInternalError(error);\n process.exit(1);\n }\n }\n\n if (args.json) {\n // Drain stdout before exiting non-zero: `process.exit` would otherwise\n // truncate the JSON payload mid-write when stdout is a pipe — exactly how\n // `--json` is consumed in CI/editors.\n if (reportDiagnosticsJson(diagnostics, root)) {\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n const hadErrors = reportDiagnostics(diagnostics, root);\n if (diagnostics.length === 0) {\n logger.success(\"No problems found.\");\n }\n if (hadErrors) {\n process.exit(1);\n }\n },\n});\n",
143
145
  "import { readFile, writeFile } from \"node:fs/promises\";\n\nimport { defineCommand } from \"citty\";\nimport { join, relative } from \"pathe\";\n\nimport { eject } from \"../../registry/eject.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\n\nconst updatePackageScripts = async (root: string): Promise<void> => {\n const pkgPath = join(root, \"package.json\");\n let pkg: Record<string, unknown>;\n try {\n pkg = JSON.parse(await readFile(pkgPath, \"utf-8\"));\n } catch {\n return;\n }\n const scripts = (pkg.scripts ?? {}) as Record<string, string>;\n pkg.scripts = {\n ...scripts,\n build: \"astro build\",\n dev: \"astro dev\",\n preview: \"astro preview\",\n };\n await writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, \"utf-8\");\n};\n\nexport const ejectCommand = defineCommand({\n args: {\n yes: { description: \"Skip the confirmation prompt.\", type: \"boolean\" },\n },\n meta: {\n description: \"Promote the generated runtime into an owned Astro project.\",\n name: \"eject\",\n },\n async run({ args }) {\n const root = process.cwd();\n refuseIfDevRunning(root, \"ejecting\");\n\n if (!args.yes) {\n logger.warn(\n \"Eject is one-way: it writes astro.config.mjs, src/, and (if absent) tsconfig.json, rewrites your package.json scripts, and removes .blume. An existing tsconfig.json is left untouched.\"\n );\n logger.info(\"Re-run with --yes to proceed.\");\n return;\n }\n\n const files = await eject(root);\n await updatePackageScripts(root);\n\n logger.success(`Ejected ${files.length} file(s):`);\n for (const file of files) {\n process.stdout.write(` ${relative(root, file)}\\n`);\n }\n logger.box(\n \"Your project is now a standalone Astro app.\\n\\n bun run dev\\n bun run build\\n\\nThe blume package remains importable.\"\n );\n },\n});\n",
144
146
  "import { existsSync } from \"node:fs\";\nimport { cp, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\n\nimport { join, relative } from \"pathe\";\n\nimport { buildAskData } from \"../ai/ask-data.ts\";\nimport { resolveAskBackend } from \"../ai/ask.ts\";\nimport { buildRawMarkdown } from \"../ai/markdown.ts\";\nimport { planComponentSlots } from \"../astro/component-slots.ts\";\nimport { discoverExamples } from \"../astro/examples.ts\";\nimport {\n buildRuntimeData,\n collectStaged,\n detectNeedsReact,\n} from \"../astro/generate.ts\";\nimport { discoverIslands } from \"../astro/islands.ts\";\nimport { customOgRoutes, discoverPages, routeIsTaken } from \"../astro/pages.ts\";\nimport {\n askEndpointTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n exampleSlug,\n islandMapTemplate,\n islandWrapperTemplate,\n mixedbreadSearchEndpointTemplate,\n notFoundPageTemplate,\n ogEndpointTemplate,\n rawMarkdownEndpointTemplate,\n rssEndpointTemplate,\n runtimeTsconfigTemplate,\n searchClientTemplate,\n searchEndpointTemplate,\n} from \"../astro/templates.ts\";\nimport { scanProject } from \"../core/project-graph.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { buildRssFeeds, renderRssFeed } from \"../deploy/rss.ts\";\nimport { hasScalarReferences } from \"../openapi/references.ts\";\nimport { buildReferenceFiles } from \"../openapi/scalar.ts\";\nimport { isOpenApiSource } from \"../openapi/source.ts\";\nimport { buildSearchDocuments } from \"../search/documents.ts\";\nimport { servesStaticIndex } from \"../search/providers.ts\";\nimport { tailwindEntryTemplate } from \"../theme/entry.ts\";\nimport { buildThemeCss } from \"../theme/palette.ts\";\nimport { twoslashCss } from \"../theme/twoslash.ts\";\n\nconst POSIX = (path: string): string => path.split(\"\\\\\").join(\"/\");\n\n/** The `blume:openapi` payload for the ejected app (`{}` when none). */\nconst ejectOpenApiData = (project: BlumeProject): unknown => {\n const source = project.sources.find(isOpenApiSource);\n return source ? source.openApiData() : {};\n};\n\n/**\n * The Ask AI endpoint plus, unless the backend runs its own retrieval (Inkeep),\n * its grounding snapshot. Empty when Ask AI is disabled.\n */\nconst askFiles = async (\n project: BlumeProject,\n srcDir: string,\n genDir: string\n): Promise<{ content: string; path: string }[]> => {\n const { ask } = project.config.ai;\n if (!ask?.enabled) {\n return [];\n }\n const grounded = ask.provider !== \"inkeep\";\n const files = [\n {\n content: askEndpointTemplate(resolveAskBackend(ask), grounded),\n path: join(srcDir, \"pages\", \"api\", \"ask.ts\"),\n },\n ];\n if (grounded) {\n files.push({\n content: `${JSON.stringify(await buildAskData(project))}\\n`,\n path: join(genDir, \"ask-data.json\"),\n });\n }\n return files;\n};\n\n/**\n * Promote the generated runtime into the project as an owned Astro app. After\n * eject the project has a normal `astro.config.mjs` and `src/`, the `blume` CLI\n * is no longer required, and the `blume` package remains importable.\n *\n * Returns the list of written files.\n */\nexport const eject = async (root: string): Promise<string[]> => {\n const project = await scanProject(root, { mode: \"build\" });\n const { context, config } = project;\n\n const srcDir = join(root, \"src\");\n const genDir = join(srcDir, \"generated\");\n const askEnabled = config.ai.ask?.enabled ?? false;\n const exportPdf = config.export.pdf;\n const exportEpub = config.export.epub;\n\n const [pages, needsReactRaw, userTheme, rawMarkdown, islands, examples] =\n await Promise.all([\n context.pagesRoot\n ? discoverPages(context.pagesRoot)\n : Promise.resolve([]),\n detectNeedsReact(root),\n context.themeFile\n ? readFile(context.themeFile, \"utf-8\")\n : Promise.resolve(\"\"),\n buildRawMarkdown(project),\n discoverIslands(root),\n discoverExamples(root, config.examples),\n ]);\n // Island/example frameworks drive which Astro renderers the ejected config\n // wires in; React also switches on for project `.tsx`/`.jsx` and Ask AI.\n const frameworks = new Set<string>([\n ...islands.islands.map((island) => island.framework),\n ...examples.examples.map((example) => example.framework),\n ]);\n const needsReact = needsReactRaw || askEnabled || frameworks.has(\"react\");\n const needsVue = frameworks.has(\"vue\");\n const needsSvelte = frameworks.has(\"svelte\");\n\n // A project-relative context so generated files use portable paths.\n const relContext: ProjectContext = {\n ...context,\n contentRoot: POSIX(relative(root, context.contentRoot)),\n outDir: \".\",\n root: \".\",\n };\n\n const componentsImport = context.componentsFile\n ? `../../${POSIX(relative(root, context.componentsFile))}`\n : null;\n const relPages = pages.map((page) => ({\n entrypoint: POSIX(relative(root, page.entrypoint)),\n pattern: page.pattern,\n }));\n\n // Non-filesystem sources eject their materialized MDX into `<root>/blume-staged`\n // (a dedicated dir so it never clashes with a content root literally named\n // `content`; the relative `staged` collection points there).\n const staged = collectStaged(project);\n const hasStaged = staged.size > 0;\n const stagedDir = \"blume-staged\";\n\n const files: {\n path: string;\n content: string;\n /** Don't overwrite a file the user already owns (e.g. a tuned tsconfig). */\n skipIfExists?: boolean;\n }[] = [\n {\n content: astroConfigTemplate({\n config,\n contentRoutes: project.manifest.routes.map((route) => route.path),\n context: relContext,\n dataPath: \"./src/generated/data.json\",\n examplesPath: \"./src/generated/examples.ts\",\n needsReact,\n needsSvelte,\n needsVue,\n openapiPath: \"./src/generated/openapi.json\",\n pages: relPages,\n searchClientPath: \"./src/generated/search-client.ts\",\n themePath: \"./src/generated/app.css\",\n }),\n path: join(root, \"astro.config.mjs\"),\n },\n {\n content: runtimeTsconfigTemplate(),\n path: join(root, \"tsconfig.json\"),\n // Never clobber a hand-tuned tsconfig; only write ours if none exists.\n skipIfExists: true,\n },\n { content: envTemplate(), path: join(srcDir, \"env.d.ts\") },\n {\n content: contentConfigTemplate({\n config,\n context: relContext,\n staged: hasStaged,\n stagedBase: stagedDir,\n }),\n path: join(srcDir, \"content.config.ts\"),\n },\n {\n content: catchAllPageTemplate({\n askEnabled,\n exportEpub,\n exportPdf,\n mathEnabled: config.markdown.math,\n needsReact,\n }),\n path: join(srcDir, \"pages\", \"[...slug].astro\"),\n },\n {\n // Eject keeps the portable re-export form (relative import to the user's\n // components file); hydration/island wrappers would need machine-specific\n // absolute paths, so the ejected app owns and wires those itself.\n content: planComponentSlots(componentsImport, null).module,\n path: join(genDir, \"components.ts\"),\n },\n // Island/example maps the catch-all imports; written even when empty so the\n // relative import and the `blume:examples` alias always resolve.\n {\n content: islandMapTemplate(islands.islands),\n path: join(genDir, \"islands.ts\"),\n },\n {\n content: exampleMapTemplate(examples.examples),\n path: join(genDir, \"examples.ts\"),\n },\n {\n content: tailwindEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n // Relative paths from src/generated/app.css keep the ejected app portable.\n sources: [\n \"../../node_modules/blume/src/**/*.{astro,ts,tsx}\",\n \"../../**/*.{astro,mdx,ts,tsx}\",\n ],\n twoslashCss: twoslashCss(),\n userTheme,\n }),\n path: join(genDir, \"app.css\"),\n },\n { content: buildRuntimeData(project), path: join(genDir, \"data.json\") },\n {\n content: `${JSON.stringify(ejectOpenApiData(project))}\\n`,\n path: join(genDir, \"openapi.json\"),\n },\n {\n content: `${JSON.stringify(rawMarkdown)}\\n`,\n path: join(genDir, \"raw-markdown.json\"),\n },\n {\n content: rawMarkdownEndpointTemplate(),\n path: join(srcDir, \"pages\", \"[...slug].md.ts\"),\n },\n {\n content: rawMarkdownEndpointTemplate(),\n path: join(srcDir, \"pages\", \"[...slug].mdx.ts\"),\n },\n ];\n\n if (askEnabled) {\n files.push(...(await askFiles(project, srcDir, genDir)));\n }\n\n if (config.seo.og.enabled) {\n files.push({\n content: ogEndpointTemplate(customOgRoutes(pages, config.title)),\n path: join(srcDir, \"pages\", \"og\", \"[...slug].png.ts\"),\n });\n }\n\n // Default 404 page, unless the project already owns `/404` (a custom\n // `pages/404.astro` or a `404.md` content page). The ejected project owns the\n // file afterwards and can edit or remove it.\n if (!routeIsTaken(pages, project.graph.pages, \"/404\")) {\n files.push({\n content: notFoundPageTemplate(),\n path: join(srcDir, \"pages\", \"404.astro\"),\n });\n }\n\n // The provider-specific client loader behind the `blume:search-client` alias.\n files.push({\n content: searchClientTemplate(config),\n path: join(genDir, \"search-client.ts\"),\n });\n\n if (servesStaticIndex(config.search.provider)) {\n const documents = await buildSearchDocuments(project);\n files.push(\n {\n content: `${JSON.stringify(documents)}\\n`,\n path: join(genDir, \"search.json\"),\n },\n {\n content: searchEndpointTemplate(),\n path: join(srcDir, \"pages\", \"blume-search.json.ts\"),\n }\n );\n }\n\n if (config.search.provider === \"mixedbread\") {\n files.push({\n content: mixedbreadSearchEndpointTemplate(\n config.search.mixedbread?.storeId ?? \"\"\n ),\n path: join(srcDir, \"pages\", \"api\", \"search.ts\"),\n });\n }\n\n const feeds = buildRssFeeds(project);\n if (feeds.length > 0) {\n const feedXml = Object.fromEntries(\n feeds.map((feed) => [feed.type, renderRssFeed(feed)])\n );\n files.push(\n {\n content: `${JSON.stringify(feedXml)}\\n`,\n path: join(genDir, \"rss.json\"),\n },\n {\n content: rssEndpointTemplate(),\n path: join(srcDir, \"pages\", \"[section]\", \"rss.xml.ts\"),\n }\n );\n }\n\n // Scalar API/AsyncAPI reference pages, mirrored from the generated runtime so\n // the ejected app keeps its reference routes.\n if (hasScalarReferences(config)) {\n const references = await buildReferenceFiles({\n config,\n contentRoutes: new Set(project.graph.pages.map((page) => page.route)),\n root,\n });\n for (const file of references.files) {\n files.push({\n content: file.content,\n path: join(srcDir, \"pages\", file.pagePath),\n });\n }\n }\n\n // Per-island and per-example live wrappers referenced by the maps above.\n files.push(\n ...islands.islands.map((island) => ({\n content: islandWrapperTemplate(island),\n path: join(genDir, \"islands\", `${island.name}.astro`),\n })),\n ...examples.examples.map((example) => ({\n content: exampleWrapperTemplate(example),\n path: join(genDir, \"examples\", `${exampleSlug(example.path)}.astro`),\n }))\n );\n\n // Materialize staged source bodies under `<root>/blume-staged/<source>/<ref>`,\n // matching the relative `staged` collection base in the ejected config.\n for (const [entryId, content] of staged) {\n files.push({ content, path: join(root, stagedDir, entryId) });\n }\n\n const written = files.filter(\n (file) => !(file.skipIfExists && existsSync(file.path))\n );\n await Promise.all(\n written.map(async (file) => {\n await mkdir(join(file.path, \"..\"), { recursive: true });\n await writeFile(file.path, file.content, \"utf-8\");\n })\n );\n\n // Materialized source assets (e.g. downloaded Notion images) live under the\n // hidden runtime's public dir; copy them into the owned project's `public/`\n // so the staged content's `/blume-assets/…` references still resolve.\n const assetsSrc = join(context.outDir, \"public\", \"blume-assets\");\n if (existsSync(assetsSrc)) {\n await cp(assetsSrc, join(root, \"public\", \"blume-assets\"), {\n recursive: true,\n });\n }\n\n // The hidden runtime is no longer the source of truth.\n await rm(context.outDir, { force: true, recursive: true });\n\n return written.map((file) => file.path);\n};\n",
145
147
  "import { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\n\nimport { defineCommand } from \"citty\";\nimport { basename, dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport { blumePackageJson, toPackageName } from \"../../core/package-json.ts\";\nimport { eject } from \"../../registry/eject.ts\";\nimport { logger } from \"../log.ts\";\n\nconst TEMPLATES = [\"docs\", \"api\", \"sdk\", \"changelog\"] as const;\ntype Template = (typeof TEMPLATES)[number];\n\nconst PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\", \"bun\"] as const;\ntype PackageManager = (typeof PACKAGE_MANAGERS)[number];\n\n/** A starter: the config plus seed content files (path is relative to root). */\ninterface Starter {\n config: string;\n files: (contentDir: string) => { content: string; path: string }[];\n}\n\nconst configFor = (\n extra: string\n): string => `import { defineConfig } from \"blume\";\n\nexport default defineConfig({\n title: \"My Docs\",\n description: \"Documentation powered by Blume.\",${extra}\n});\n`;\n\nconst page = (title: string, description: string, body: string): string =>\n `---\\ntitle: ${title}\\ndescription: ${description}\\n---\\n\\n${body}\\n`;\n\nconst STARTERS: Record<Template, Starter> = {\n api: {\n config: configFor(`\n openapi: {\n enabled: true,\n route: \"/api\",\n sources: [\n {\n label: \"Petstore\",\n spec: \"https://petstore3.swagger.io/api/v3/openapi.json\",\n },\n ],\n },`),\n files: (dir) => [\n {\n content: page(\n \"API Reference\",\n \"Explore the API.\",\n \"# API Reference\\n\\nYour OpenAPI spec renders at [`/api`](/api). Point `openapi.sources` at your own spec in `blume.config.ts`.\"\n ),\n path: join(dir, \"index.mdx\"),\n },\n ],\n },\n changelog: {\n config: configFor(`\n navigation: {\n tabs: [\n { label: \"Docs\", path: \"/\" },\n { label: \"Changelog\", path: \"/changelog\" },\n ],\n },`),\n files: (dir) => [\n {\n content: page(\n \"Introduction\",\n \"Welcome to your new Blume docs.\",\n \"# Introduction\\n\\nWrite your docs here, and log releases under `changelog/`.\"\n ),\n path: join(dir, \"index.mdx\"),\n },\n {\n content: `---\\ntitle: v1.0.0\\ntype: changelog\\ndate: 2026-01-01\\n---\\n\\nThe first release. Edit \\`${dir}/changelog/v1-0-0.mdx\\` or add new entries beside it.\\n`,\n path: join(dir, \"changelog\", \"v1-0-0.mdx\"),\n },\n ],\n },\n docs: {\n config: configFor(\"\"),\n files: (dir) => [\n {\n content: page(\n \"Introduction\",\n \"Welcome to your new Blume docs.\",\n `# Introduction\\n\\nWelcome to **Blume** — markdown-first docs powered by Astro and Vite.\\n\\nEdit \\`${dir}/index.mdx\\` to get started, then run \\`blume dev\\`.`\n ),\n path: join(dir, \"index.mdx\"),\n },\n ],\n },\n sdk: {\n config: configFor(\"\"),\n files: (dir) => [\n {\n content: page(\n \"Introduction\",\n \"Get started with the SDK.\",\n \"# Introduction\\n\\nInstall the SDK and make your first call. See [Installation](/installation).\"\n ),\n path: join(dir, \"index.mdx\"),\n },\n {\n content: page(\n \"Installation\",\n \"Install the SDK.\",\n \"# Installation\\n\\n```package-install\\nyour-sdk\\n```\"\n ),\n path: join(dir, \"installation.mdx\"),\n },\n ],\n },\n};\n\n/** Install + dev commands to print for the chosen package manager. */\nconst commandsFor = (pm: PackageManager): { dev: string; install: string } => ({\n dev: pm === \"npm\" ? \"npm run dev\" : `${pm} dev`,\n install: `${pm} install`,\n});\n\nconst writeFileSafe = async (\n path: string,\n content: string\n): Promise<boolean> => {\n if (existsSync(path)) {\n logger.info(`Skipped existing ${path}`);\n return false;\n }\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, content, \"utf-8\");\n logger.success(`Created ${path}`);\n return true;\n};\n\nexport const initCommand = defineCommand({\n args: {\n \"content-dir\": {\n default: \"docs\",\n description: \"Content directory.\",\n type: \"string\",\n },\n eject: {\n description: \"Eject to a standalone Astro project after scaffolding.\",\n type: \"boolean\",\n },\n \"package-manager\": {\n description:\n \"Package manager for the next-steps hint (npm|pnpm|yarn|bun).\",\n type: \"string\",\n },\n template: {\n description: \"Starter template: docs | api | sdk | changelog.\",\n type: \"string\",\n },\n yes: { description: \"Skip prompts.\", type: \"boolean\" },\n },\n meta: {\n description: \"Scaffold a minimal Blume project.\",\n name: \"init\",\n },\n async run({ args }) {\n const root = process.cwd();\n const contentDir = args[\"content-dir\"] ?? \"docs\";\n // The content dir is joined into every scaffolded file path, so an absolute\n // or `../`-escaping value would write outside the project. Reject it.\n if (\n isAbsolute(contentDir) ||\n relative(root, join(root, contentDir)).startsWith(\"..\")\n ) {\n logger.error(\n `Invalid --content-dir \"${contentDir}\" (must be a path inside the project).`\n );\n process.exit(1);\n }\n\n const template = (args.template ?? \"docs\") as Template;\n if (!TEMPLATES.includes(template)) {\n logger.error(\n `Unknown template \"${args.template}\" (use ${TEMPLATES.join(\" | \")}).`\n );\n process.exit(1);\n }\n const pm = (args[\"package-manager\"] ?? \"npm\") as PackageManager;\n if (!PACKAGE_MANAGERS.includes(pm)) {\n logger.error(\n `Unknown package manager \"${args[\"package-manager\"]}\" (use ${PACKAGE_MANAGERS.join(\" | \")}).`\n );\n process.exit(1);\n }\n\n const starter = STARTERS[template];\n const createdPackage = await writeFileSafe(\n join(root, \"package.json\"),\n blumePackageJson(toPackageName(basename(root)))\n );\n await writeFileSafe(join(root, \"blume.config.ts\"), starter.config);\n await Promise.all(\n starter\n .files(contentDir)\n .map((file) => writeFileSafe(join(root, file.path), file.content))\n );\n\n // Keep Blume's generated runtime (`.blume/`) and build output (`dist/`) out\n // of version control. Idempotent: creates `.gitignore` when absent and skips\n // entries already present (trailing-slash agnostic).\n const ignored = await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n if (ignored.length > 0) {\n logger.success(`Added ${ignored.join(\", \")} to .gitignore`);\n }\n\n const commands = commandsFor(pm);\n\n if (args.eject) {\n // Eject only generates files (no Astro runtime), so it works right after\n // scaffolding. The standalone app then runs with Astro directly.\n try {\n await eject(root);\n logger.success(\"Ejected to a standalone Astro project.\");\n logger.box(`Next steps:\\n\\n ${commands.install}\\n npx astro dev\\n`);\n } catch (error) {\n logger.warn(\n `Scaffolded, but eject failed: ${(error as Error).message}`\n );\n logger.box(\n `Next steps:\\n\\n ${commands.install}\\n blume eject --yes\\n`\n );\n }\n return;\n }\n\n const nextSteps = createdPackage\n ? `Next steps:\\n\\n ${commands.install}\\n ${commands.dev}\\n`\n : `Next steps:\\n\\n ${commands.dev}\\n`;\n logger.box(nextSteps);\n },\n});\n",
146
148
  "import { defineCommand } from \"citty\";\n\nimport { migrators } from \"../../migrate/migrate.ts\";\nimport { logger } from \"../log.ts\";\n\nconst makeMigrateCommand = (source: keyof typeof migrators) =>\n defineCommand({\n meta: {\n description: `Migrate a ${source} project to Blume.`,\n name: source,\n },\n async run() {\n const root = process.cwd();\n logger.start(`Migrating ${source} project`);\n const result = await migrators[source]?.(root);\n if (!result) {\n logger.error(`No migrator for ${source}.`);\n process.exit(1);\n }\n logger.success(`Migrated ${result.moved} content file(s).`);\n for (const warning of result.warnings) {\n logger.warn(warning);\n }\n logger.box(\"Review blume.config.ts and run `blume dev`.\");\n },\n });\n\nexport const migrateCommand = defineCommand({\n meta: {\n description: \"Migrate from another docs tool to Blume.\",\n name: \"migrate\",\n },\n subCommands: {\n fumadocs: makeMigrateCommand(\"fumadocs\"),\n mintlify: makeMigrateCommand(\"mintlify\"),\n nextra: makeMigrateCommand(\"nextra\"),\n starlight: makeMigrateCommand(\"starlight\"),\n },\n});\n",
147
- "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\n\nimport { dirname, join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { FolderMeta } from \"../../core/schema.ts\";\nimport {\n leftoverFiles,\n rewriteFrameworkScripts,\n writeBlumeConfig,\n} from \"../shared.ts\";\nimport { loadFumadocsConfig } from \"./config.ts\";\nimport {\n inlineFumadocsIncludes,\n rewriteFumadocsCallouts,\n rewriteFumadocsContainers,\n rewriteFumadocsTabs,\n stripFumadocsImports,\n unsupportedFumadocsComponents,\n} from \"./content.ts\";\nimport { normalizeFumadocsPageMeta } from \"./frontmatter.ts\";\nimport { reshapeFumadocsGroups } from \"./groups.ts\";\nimport {\n parseFumadocsPages,\n renderMetaModule,\n translateFumadocsMeta,\n translateFumadocsSelfMeta,\n} from \"./meta.ts\";\n\nexport interface FumadocsMigrationResult {\n moved: number;\n warnings: string[];\n}\n\n/** Fumadocs keeps documentation under `content/docs/`. */\nconst SOURCE_DIR = \"content/docs\";\nconst PAGE_GLOB = \"**/*.{md,mdx}\";\nconst META_GLOB = \"**/meta.json\";\nconst IGNORE = [\"**/node_modules/**\"];\n\n/**\n * Old Next/Fumadocs scaffolding a migration leaves behind. Blume can't safely\n * auto-delete these (they may hold custom code), so the ones that exist are\n * surfaced as a \"safe to delete\" checklist once the migration is verified.\n */\nconst FUMADOCS_LEFTOVERS = [\n \"next.config.ts\",\n \"next.config.mjs\",\n \"next.config.js\",\n \"source.config.ts\",\n \"source.config.mjs\",\n \"source.config.js\",\n \"mdx-components.tsx\",\n \"next-env.d.ts\",\n \"app\",\n];\n\ninterface PageResult {\n includeWarnings: string[];\n moved: number;\n removed: string[];\n skipped: string | null;\n unsupported: string[];\n}\n\n/** Rewrite a single page to idiomatic Blume MDX and move it into `docs/`. */\nconst movePage = async (\n abs: string,\n base: string,\n root: string\n): Promise<PageResult> => {\n const rel = relative(base, abs);\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n return {\n includeWarnings: [],\n moved: 0,\n removed: [],\n skipped: rel,\n unsupported: [],\n };\n }\n\n const raw = await readFile(abs, \"utf-8\");\n const included = await inlineFumadocsIncludes(raw, {\n filePath: abs,\n root: base,\n });\n let text = stripFumadocsImports(included.content);\n text = rewriteFumadocsCallouts(text);\n text = rewriteFumadocsContainers(text);\n text = rewriteFumadocsTabs(text);\n const unsupported = unsupportedFumadocsComponents(text);\n\n const parsed = matter(text);\n const { data, removed } = normalizeFumadocsPageMeta(parsed.data);\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, content, \"utf-8\");\n await rm(abs, { force: true });\n return {\n includeWarnings: included.warnings,\n moved: 1,\n removed,\n skipped: null,\n unsupported,\n };\n};\n\n/** Write a `FolderMeta` to `dest` unless it already exists. */\nconst writeMeta = async (\n dest: string,\n meta: FolderMeta,\n rel: string,\n warnings: string[]\n): Promise<string[]> => {\n if (Object.keys(meta).length === 0) {\n return warnings;\n }\n if (existsSync(dest)) {\n return [...warnings, `Skipped ${rel} (target already exists)`];\n }\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, renderMetaModule(meta), \"utf-8\");\n return warnings;\n};\n\n/** Convert one `meta.json` into a typed `meta.ts`, or relocate it if unparseable. */\nconst convertMeta = async (\n abs: string,\n base: string,\n root: string\n): Promise<string[]> => {\n const rel = relative(base, abs);\n const raw = await readFile(abs, \"utf-8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n return [`Skipped ${rel} (target already exists)`];\n }\n await mkdir(dirname(dest), { recursive: true });\n await rename(abs, dest);\n return [\n `Could not parse ${rel}; moved as-is — convert it to meta.ts by hand.`,\n ];\n }\n\n const dir = dirname(rel) === \".\" ? \"\" : dirname(rel);\n const docsDir = join(root, \"docs\", dir);\n const dest = join(docsDir, \"meta.ts\");\n\n // A `pages` array with `---Section---` separators can't round-trip through a\n // flat `meta.ts` ordering, so rebuild its sections as group folders instead.\n const structure = parseFumadocsPages((parsed as { pages?: unknown }).pages);\n if (structure.hasSections && !existsSync(dest)) {\n const self = translateFumadocsSelfMeta(parsed);\n const reshape = await reshapeFumadocsGroups(structure, docsDir);\n const meta: FolderMeta = { ...self.meta };\n if (reshape.order.length > 0) {\n meta.pages = reshape.order;\n }\n const result = await writeMeta(dest, meta, rel, [\n ...self.warnings,\n ...reshape.warnings,\n ]);\n await rm(abs, { force: true });\n return result;\n }\n\n const { meta, warnings } = translateFumadocsMeta(parsed);\n const result = await writeMeta(dest, meta, rel, warnings);\n await rm(abs, { force: true });\n return result;\n};\n\ninterface PageSummary {\n includeWarnings: string[];\n moved: number;\n removedKeys: string[];\n skipped: string[];\n unsupported: string[];\n}\n\nconst summarizePages = (results: PageResult[]): PageSummary => {\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const includeWarnings: string[] = [];\n const skipped: string[] = [];\n for (const result of results) {\n moved += result.moved;\n if (result.skipped) {\n skipped.push(result.skipped);\n }\n includeWarnings.push(...result.includeWarnings);\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n }\n return {\n includeWarnings,\n moved,\n removedKeys: [...removedKeys],\n skipped,\n unsupported: [...unsupported],\n };\n};\n\n/** Remove `content/docs` and `content` once emptied; warn about leftovers. */\nconst cleanupSourceDirs = async (root: string): Promise<string[]> => {\n const docs = join(root, \"content\", \"docs\");\n if (existsSync(docs)) {\n const remaining = await glob([\"**/*\"], { cwd: docs, dot: true });\n if (remaining.length > 0) {\n return [\n `Kept ${remaining.length} non-page file(s) under content/docs; move them into docs/ manually.`,\n ];\n }\n await rm(docs, { force: true, recursive: true });\n }\n const content = join(root, \"content\");\n if (existsSync(content)) {\n const remaining = await glob([\"**/*\"], { cwd: content, dot: true });\n if (remaining.length === 0) {\n await rm(content, { force: true, recursive: true });\n }\n }\n return [];\n};\n\n/**\n * Migrate a Fumadocs project to Blume. Moves every `content/docs` page into\n * `docs/`, rewrites Fumadocs MDX (callouts to directives, `<Cards>`/\n * `<Accordions>`/`<Files>` to their Blume equivalents, `<Tabs items>` to\n * per-`<Tab>` titles, and `<include>`s inlined), and converts each `meta.json`\n * into a typed `meta.ts`. The `loader({ baseUrl })` route prefix is preserved\n * via a `content.sources` filesystem source.\n */\nexport const migrateFumadocsProject = async (\n root: string\n): Promise<FumadocsMigrationResult> => {\n const { config, warnings: configWarnings } = await loadFumadocsConfig(root);\n\n const base = join(root, SOURCE_DIR);\n if (!existsSync(base)) {\n await writeBlumeConfig(root, config);\n return {\n moved: 0,\n warnings: [\n `No Fumadocs content directory (${SOURCE_DIR}) found; wrote a default config.`,\n ],\n };\n }\n\n const pageFiles = await glob([PAGE_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n const metaFiles = await glob([META_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n\n const pageResults = await Promise.all(\n pageFiles.map((abs) => movePage(abs, base, root))\n );\n const pages = summarizePages(pageResults);\n // Convert metas deepest-first and sequentially: a parent's group-folder\n // reshape can move a child folder, so the child's own reshape must finish\n // first (and the two can't race over the same `docs/` paths).\n const orderedMetas = metaFiles.toSorted(\n (a, b) => b.split(\"/\").length - a.split(\"/\").length\n );\n const metaWarnings: string[] = [];\n for (const abs of orderedMetas) {\n // oxlint-disable-next-line no-await-in-loop -- sequential to avoid move races\n metaWarnings.push(...(await convertMeta(abs, base, root)));\n }\n\n await writeBlumeConfig(root, config);\n const cleanupWarnings = await cleanupSourceDirs(root);\n\n // Tear down the old Next/Fumadocs scaffolding so the project builds as Blume:\n // repoint the npm scripts, ignore Blume's outputs, and list the leftover\n // framework files to delete by hand.\n const scriptsRewritten = await rewriteFrameworkScripts(\n root,\n /\\bnext\\b/u,\n /fumadocs/u\n );\n const gitignoreAdded = await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n const leftovers = leftoverFiles(root, FUMADOCS_LEFTOVERS);\n\n const warnings = [\n ...configWarnings,\n ...metaWarnings,\n ...pages.includeWarnings,\n ...pages.skipped.map((rel) => `Skipped ${rel} (target already exists)`),\n ...cleanupWarnings,\n ];\n if (pages.removedKeys.length > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${pages.removedKeys.join(\", \")}.`\n );\n }\n if (pages.unsupported.length > 0) {\n warnings.push(\n `Components without a drop-in Blume equivalent need manual review: ${pages.unsupported.join(\", \")}.`\n );\n }\n if (scriptsRewritten) {\n warnings.push(\"Repointed the dev/build/start scripts at the Blume CLI.\");\n }\n if (gitignoreAdded.length > 0) {\n warnings.push(`Added ${gitignoreAdded.join(\", \")} to .gitignore.`);\n }\n if (leftovers.length > 0) {\n warnings.push(\n `Safe to delete once the migration looks right: ${leftovers.join(\", \")}. Also drop the \\`next\\` plugin from tsconfig.json and the \\`.next\\`/\\`.source\\` lines from .gitignore.`\n );\n }\n warnings.push(\"Review blume.config.ts and the generated meta.ts files.\");\n\n return { moved: pages.moved, warnings };\n};\n",
149
+ "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\n\nimport { dirname, join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { FolderMeta } from \"../../core/schema.ts\";\nimport {\n leftoverFiles,\n rewriteFrameworkScripts,\n writeBlumeConfig,\n} from \"../shared.ts\";\nimport { loadFumadocsConfig } from \"./config.ts\";\nimport {\n inlineFumadocsIncludes,\n rewriteFumadocsCallouts,\n rewriteFumadocsContainers,\n rewriteFumadocsTabs,\n stripFumadocsImports,\n unsupportedFumadocsComponents,\n} from \"./content.ts\";\nimport { normalizeFumadocsPageMeta } from \"./frontmatter.ts\";\nimport { reshapeFumadocsGroups } from \"./groups.ts\";\nimport {\n parseFumadocsPages,\n renderMetaModule,\n translateFumadocsMeta,\n translateFumadocsSelfMeta,\n} from \"./meta.ts\";\n\nexport interface FumadocsMigrationResult {\n moved: number;\n warnings: string[];\n}\n\n/** Fumadocs keeps documentation under `content/docs/`. */\nconst SOURCE_DIR = \"content/docs\";\nconst PAGE_GLOB = \"**/*.{md,mdx}\";\nconst META_GLOB = \"**/meta.json\";\nconst IGNORE = [\"**/node_modules/**\"];\n\n/**\n * Old Next/Fumadocs scaffolding a migration leaves behind. Blume can't safely\n * auto-delete these (they may hold custom code), so the ones that exist are\n * surfaced as a \"safe to delete\" checklist once the migration is verified.\n */\nconst FUMADOCS_LEFTOVERS = [\n \"next.config.ts\",\n \"next.config.mjs\",\n \"next.config.js\",\n \"source.config.ts\",\n \"source.config.mjs\",\n \"source.config.js\",\n \"mdx-components.tsx\",\n \"next-env.d.ts\",\n \"app\",\n];\n\ninterface PageResult {\n includeWarnings: string[];\n moved: number;\n removed: string[];\n skipped: string | null;\n unsupported: string[];\n}\n\n/** Rewrite a single page to idiomatic Blume MDX and move it into `docs/`. */\nconst movePage = async (\n abs: string,\n base: string,\n root: string\n): Promise<PageResult> => {\n const rel = relative(base, abs);\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n return {\n includeWarnings: [],\n moved: 0,\n removed: [],\n skipped: rel,\n unsupported: [],\n };\n }\n\n const raw = await readFile(abs, \"utf-8\");\n const included = await inlineFumadocsIncludes(raw, {\n filePath: abs,\n root: base,\n });\n let text = stripFumadocsImports(included.content);\n text = rewriteFumadocsCallouts(text);\n text = rewriteFumadocsContainers(text);\n text = rewriteFumadocsTabs(text);\n const unsupported = unsupportedFumadocsComponents(text);\n\n const parsed = matter(text);\n const { data, removed } = normalizeFumadocsPageMeta(parsed.data);\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, content, \"utf-8\");\n await rm(abs, { force: true });\n return {\n includeWarnings: included.warnings,\n moved: 1,\n removed,\n skipped: null,\n unsupported,\n };\n};\n\n/**\n * Write a `FolderMeta` to `dest` unless it already exists. `handled` tells the\n * caller whether the source `meta.json` is safe to delete — a skipped write\n * (target exists) must keep the source, or its title/ordering is lost with\n * nowhere to recover it from.\n */\nconst writeMeta = async (\n dest: string,\n meta: FolderMeta,\n rel: string,\n warnings: string[]\n): Promise<{ handled: boolean; warnings: string[] }> => {\n if (Object.keys(meta).length === 0) {\n return { handled: true, warnings };\n }\n if (existsSync(dest)) {\n return {\n handled: false,\n warnings: [\n ...warnings,\n `Skipped ${rel} (target already exists); the source file was kept — merge it into the existing meta.ts by hand.`,\n ],\n };\n }\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, renderMetaModule(meta), \"utf-8\");\n return { handled: true, warnings };\n};\n\n/** Convert one `meta.json` into a typed `meta.ts`, or relocate it if unparseable. */\nconst convertMeta = async (\n abs: string,\n base: string,\n root: string\n): Promise<string[]> => {\n const rel = relative(base, abs);\n const raw = await readFile(abs, \"utf-8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n return [`Skipped ${rel} (target already exists)`];\n }\n await mkdir(dirname(dest), { recursive: true });\n await rename(abs, dest);\n return [\n `Could not parse ${rel}; moved as-is — convert it to meta.ts by hand.`,\n ];\n }\n\n const dir = dirname(rel) === \".\" ? \"\" : dirname(rel);\n const docsDir = join(root, \"docs\", dir);\n const dest = join(docsDir, \"meta.ts\");\n\n // A `pages` array with `---Section---` separators can't round-trip through a\n // flat `meta.ts` ordering, so rebuild its sections as group folders instead.\n const structure = parseFumadocsPages((parsed as { pages?: unknown }).pages);\n if (structure.hasSections && !existsSync(dest)) {\n const self = translateFumadocsSelfMeta(parsed);\n const reshape = await reshapeFumadocsGroups(structure, docsDir);\n const meta: FolderMeta = { ...self.meta };\n if (reshape.order.length > 0) {\n meta.pages = reshape.order;\n }\n const result = await writeMeta(dest, meta, rel, [\n ...self.warnings,\n ...reshape.warnings,\n ]);\n if (result.handled) {\n await rm(abs, { force: true });\n }\n return result.warnings;\n }\n\n const { meta, warnings } = translateFumadocsMeta(parsed);\n const result = await writeMeta(dest, meta, rel, warnings);\n if (result.handled) {\n await rm(abs, { force: true });\n }\n return result.warnings;\n};\n\ninterface PageSummary {\n includeWarnings: string[];\n moved: number;\n removedKeys: string[];\n skipped: string[];\n unsupported: string[];\n}\n\nconst summarizePages = (results: PageResult[]): PageSummary => {\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const includeWarnings: string[] = [];\n const skipped: string[] = [];\n for (const result of results) {\n moved += result.moved;\n if (result.skipped) {\n skipped.push(result.skipped);\n }\n includeWarnings.push(...result.includeWarnings);\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n }\n return {\n includeWarnings,\n moved,\n removedKeys: [...removedKeys],\n skipped,\n unsupported: [...unsupported],\n };\n};\n\n/** Remove `content/docs` and `content` once emptied; warn about leftovers. */\nconst cleanupSourceDirs = async (root: string): Promise<string[]> => {\n const docs = join(root, \"content\", \"docs\");\n if (existsSync(docs)) {\n const remaining = await glob([\"**/*\"], { cwd: docs, dot: true });\n if (remaining.length > 0) {\n return [\n `Kept ${remaining.length} non-page file(s) under content/docs; move them into docs/ manually.`,\n ];\n }\n await rm(docs, { force: true, recursive: true });\n }\n const content = join(root, \"content\");\n if (existsSync(content)) {\n const remaining = await glob([\"**/*\"], { cwd: content, dot: true });\n if (remaining.length === 0) {\n await rm(content, { force: true, recursive: true });\n }\n }\n return [];\n};\n\n/**\n * Migrate a Fumadocs project to Blume. Moves every `content/docs` page into\n * `docs/`, rewrites Fumadocs MDX (callouts to directives, `<Cards>`/\n * `<Accordions>`/`<Files>` to their Blume equivalents, `<Tabs items>` to\n * per-`<Tab>` titles, and `<include>`s inlined), and converts each `meta.json`\n * into a typed `meta.ts`. The `loader({ baseUrl })` route prefix is preserved\n * via a `content.sources` filesystem source.\n */\nexport const migrateFumadocsProject = async (\n root: string\n): Promise<FumadocsMigrationResult> => {\n const { config, warnings: configWarnings } = await loadFumadocsConfig(root);\n\n const base = join(root, SOURCE_DIR);\n if (!existsSync(base)) {\n await writeBlumeConfig(root, config);\n return {\n moved: 0,\n warnings: [\n `No Fumadocs content directory (${SOURCE_DIR}) found; wrote a default config.`,\n ],\n };\n }\n\n const pageFiles = await glob([PAGE_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n const metaFiles = await glob([META_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n\n const pageResults = await Promise.all(\n pageFiles.map((abs) => movePage(abs, base, root))\n );\n const pages = summarizePages(pageResults);\n // Convert metas deepest-first and sequentially: a parent's group-folder\n // reshape can move a child folder, so the child's own reshape must finish\n // first (and the two can't race over the same `docs/` paths).\n const orderedMetas = metaFiles.toSorted(\n (a, b) => b.split(\"/\").length - a.split(\"/\").length\n );\n const metaWarnings: string[] = [];\n for (const abs of orderedMetas) {\n // oxlint-disable-next-line no-await-in-loop -- sequential to avoid move races\n metaWarnings.push(...(await convertMeta(abs, base, root)));\n }\n\n await writeBlumeConfig(root, config);\n const cleanupWarnings = await cleanupSourceDirs(root);\n\n // Tear down the old Next/Fumadocs scaffolding so the project builds as Blume:\n // repoint the npm scripts, ignore Blume's outputs, and list the leftover\n // framework files to delete by hand.\n const scriptsRewritten = await rewriteFrameworkScripts(\n root,\n /\\bnext\\b/u,\n /fumadocs/u\n );\n const gitignoreAdded = await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n const leftovers = leftoverFiles(root, FUMADOCS_LEFTOVERS);\n\n const warnings = [\n ...configWarnings,\n ...metaWarnings,\n ...pages.includeWarnings,\n ...pages.skipped.map((rel) => `Skipped ${rel} (target already exists)`),\n ...cleanupWarnings,\n ];\n if (pages.removedKeys.length > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${pages.removedKeys.join(\", \")}.`\n );\n }\n if (pages.unsupported.length > 0) {\n warnings.push(\n `Components without a drop-in Blume equivalent need manual review: ${pages.unsupported.join(\", \")}.`\n );\n }\n if (scriptsRewritten) {\n warnings.push(\"Repointed the dev/build/start scripts at the Blume CLI.\");\n }\n if (gitignoreAdded.length > 0) {\n warnings.push(`Added ${gitignoreAdded.join(\", \")} to .gitignore.`);\n }\n if (leftovers.length > 0) {\n warnings.push(\n `Safe to delete once the migration looks right: ${leftovers.join(\", \")}. Also drop the \\`next\\` plugin from tsconfig.json and the \\`.next\\`/\\`.source\\` lines from .gitignore.`\n );\n }\n warnings.push(\"Review blume.config.ts and the generated meta.ts files.\");\n\n return { moved: pages.moved, warnings };\n};\n",
148
150
  "import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { basename, dirname, join } from \"pathe\";\n\nimport type { BlumeConfig } from \"../../core/schema.ts\";\n\n/**\n * Build a `BlumeConfig` for a Fumadocs project. Fumadocs is code-first — its\n * navigation comes from the folder tree plus `meta.json` files, not a JSON\n * config — so there is little to translate. We take the title from\n * `package.json` and scrape the `loader({ baseUrl })` route prefix from the\n * source loader so migrated routes keep serving under `/<baseUrl>`. The source\n * files are TypeScript, so we read by pattern rather than executing them.\n */\n\n/** Loader files that may hold `loader({ baseUrl: \"/docs\" })`. */\nconst SOURCE_FILES = [\n \"lib/source.ts\",\n \"app/source.ts\",\n \"src/lib/source.ts\",\n \"src/app/source.ts\",\n \"source.ts\",\n];\n\nconst BASE_URL = /baseUrl\\s*:\\s*['\"`](?<base>[^'\"`]+)['\"`]/u;\n\n/** Title-case a package name (drop any scope) into a readable doc title. */\nconst prettifyTitle = (name: string): string => {\n const base = name.includes(\"/\")\n ? name.slice(name.lastIndexOf(\"/\") + 1)\n : name;\n const words = base.split(/[-_\\s]+/u).filter(Boolean);\n if (words.length === 0) {\n return \"Documentation\";\n }\n return words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\n/**\n * Generic monorepo app-shell package names. When the migrated project is named\n * one of these, its name makes a poor doc title (\"Web\"), so we fall back to the\n * repo name — but only in a monorepo, where a better name is actually available.\n */\nconst GENERIC_NAMES = new Set([\n \"api\",\n \"app\",\n \"client\",\n \"frontend\",\n \"server\",\n \"site\",\n \"web\",\n \"www\",\n]);\n\n/** The nearest ancestor that is a git repository root, or null. */\nconst gitRepoRoot = (start: string): string | null => {\n let dir = start;\n for (;;) {\n if (existsSync(join(dir, \".git\"))) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return null;\n }\n dir = parent;\n }\n};\n\n/** The unscoped package name (`@acme/web` -> `web`). */\nconst bareName = (name: string): string =>\n name.includes(\"/\") ? name.slice(name.lastIndexOf(\"/\") + 1) : name;\n\nconst readTitle = async (root: string): Promise<string> => {\n const packageJson = join(root, \"package.json\");\n if (!existsSync(packageJson)) {\n return \"Documentation\";\n }\n try {\n const parsed = JSON.parse(await readFile(packageJson, \"utf-8\")) as {\n name?: unknown;\n };\n const { name } = parsed;\n if (typeof name !== \"string\" || !name.trim()) {\n return \"Documentation\";\n }\n // A generic name (`apps/web` -> \"Web\") is a weak title. In a monorepo the\n // repo's own directory name is usually better, so prefer it when this isn't\n // already the repo root.\n if (GENERIC_NAMES.has(bareName(name).toLowerCase())) {\n const repoRoot = gitRepoRoot(root);\n if (repoRoot && repoRoot !== root) {\n const repoTitle = prettifyTitle(basename(repoRoot));\n if (repoTitle !== \"Documentation\") {\n return repoTitle;\n }\n }\n }\n return prettifyTitle(name);\n } catch {\n return \"Documentation\";\n }\n};\n\nconst scrapeBaseUrl = async (root: string): Promise<string | null> => {\n for (const candidate of SOURCE_FILES) {\n const file = join(root, candidate);\n if (!existsSync(file)) {\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential probing of candidates\n const base = BASE_URL.exec(await readFile(file, \"utf-8\"))?.groups?.base;\n if (base) {\n return base;\n }\n }\n return null;\n};\n\nexport interface FumadocsConfigResult {\n config: BlumeConfig;\n warnings: string[];\n}\n\n/** Resolve the Blume config and route prefix for a Fumadocs project. */\nexport const loadFumadocsConfig = async (\n root: string\n): Promise<FumadocsConfigResult> => {\n const title = await readTitle(root);\n const baseUrl = await scrapeBaseUrl(root);\n // Default to the conventional Fumadocs `/docs` base when none is declared.\n const prefix = (baseUrl ?? \"docs\").replaceAll(/^\\/+|\\/+$/gu, \"\");\n const warnings: string[] = [];\n\n if (prefix) {\n warnings.push(\n `Docs are served under /${prefix} (set content.sources prefix); change it to \"\" to serve from the site root.`\n );\n return {\n config: {\n content: {\n sources: [{ prefix, root: \"docs\", type: \"filesystem\" }],\n },\n title,\n },\n warnings,\n };\n }\n\n warnings.push(\"Docs are served from the site root.\");\n return { config: { title }, warnings };\n};\n",
149
- "import { existsSync } from \"node:fs\";\nimport { readFile as readFileFromDisk } from \"node:fs/promises\";\n\nimport { dirname, resolve } from \"pathe\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport {\n findOpenTagEnd,\n isInsideRoot,\n renameTag,\n rewriteCallouts,\n} from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Fumadocs-only MDX into idiomatic Blume\n * markup. Runs once at migration time — no Fumadocs-aware plugins remain in the\n * Blume runtime.\n */\n\n// ---------------------------------------------------------------------------\n// Imports\n// ---------------------------------------------------------------------------\n\nconst FUMADOCS_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"']fumadocs-(?:ui|core|mdx)(?:\\/[^\"']*)?[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * Drop `import … from \"fumadocs-ui/…\"` (and `-core`/`-mdx`) statements. Blume\n * injects its components globally, so these imports would fail to resolve once\n * the Fumadocs packages are gone.\n */\nexport const stripFumadocsImports = (source: string): string => {\n const stripped = source.replace(FUMADOCS_IMPORT, \"\");\n // Collapse the blank gap a removed import block leaves behind.\n return stripped === source ? source : stripped.replaceAll(/\\n{3,}/gu, \"\\n\\n\");\n};\n\n// ---------------------------------------------------------------------------\n// Callouts\n// ---------------------------------------------------------------------------\n\n/** Fumadocs `<Callout type=\"X\">` values mapped to Blume directive names. */\nconst CALLOUT_TYPE_DIRECTIVES: Record<string, string> = {\n error: \"danger\",\n info: \"info\",\n note: \"note\",\n success: \"success\",\n tip: \"tip\",\n warn: \"warning\",\n warning: \"warning\",\n};\n\n/**\n * Convert Fumadocs `<Callout type=\"info|warn|error|…\" title=\"…\">` components\n * into Blume `:::` directives. A bare `<Callout>` becomes `:::note`; the `icon`\n * prop is dropped.\n */\nexport const rewriteFumadocsCallouts = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: {},\n tags: [\"Callout\"],\n typeDirectives: CALLOUT_TYPE_DIRECTIVES,\n });\n\n// ---------------------------------------------------------------------------\n// Container component renames\n// ---------------------------------------------------------------------------\n\n/**\n * Rename Fumadocs container components to their Blume equivalents. The\n * lookahead in `renameTag` means a longer tag (`Accordions`, `Files`) is never\n * matched by the rule for its shorter prefix (`Accordion`, `File`), so the\n * item-level renames run first and the container renames second:\n *\n * - `<Cards>` -> `<CardGroup>` (items stay `<Card>`).\n * - `<Accordions>`/`<Accordion>` -> `<Accordion>`/`<AccordionItem>`.\n * - `<Files>`/`<Folder>`/`<File>` -> `<FileTree>`/`<TreeFolder>`/`<TreeFile>`.\n */\nexport const rewriteFumadocsContainers = (source: string): string => {\n let out = renameTag(source, \"Cards\", \"CardGroup\");\n out = renameTag(out, \"Accordion\", \"AccordionItem\");\n out = renameTag(out, \"Accordions\", \"Accordion\");\n out = renameTag(out, \"File\", \"TreeFile\");\n out = renameTag(out, \"Folder\", \"TreeFolder\");\n out = renameTag(out, \"Files\", \"FileTree\");\n return out;\n};\n\n// ---------------------------------------------------------------------------\n// Tabs (items + value -> per-Tab title)\n// ---------------------------------------------------------------------------\n\nconst TABS_TAG = /<Tabs(?=[\\s/>])/u;\nconst TAB_TAG = /<Tab(?=[\\s/>])/u;\nconst ITEM_LITERAL = /'(?<s>[^']*)'|\"(?<d>[^\"]*)\"|`(?<t>[^`]*)`/gu;\n\nconst escapeAttribute = (value: string): string =>\n value.replaceAll('\"', \"&quot;\");\n\n/** Find the close brace matching the `{` at `open`, or -1 if unterminated. */\nconst matchBrace = (source: string, open: number): number => {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n if (source[index] === \"{\") {\n depth += 1;\n } else if (source[index] === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n }\n }\n return -1;\n};\n\n/** Span of an `items={…}` expression within a tag's attributes, or null. */\nconst itemsSpan = (attrs: string): { end: number; start: number } | null => {\n const match = /\\bitems\\s*=\\s*/u.exec(attrs);\n if (!match) {\n return null;\n }\n const braceStart = attrs.indexOf(\"{\", match.index + match[0].length);\n if (braceStart === -1) {\n return null;\n }\n const braceEnd = matchBrace(attrs, braceStart);\n return braceEnd === -1 ? null : { end: braceEnd, start: match.index };\n};\n\n/** Read the string literals from a Fumadocs `<Tabs items={[…]}>` attribute. */\nconst parseItems = (attrs: string): string[] => {\n const span = itemsSpan(attrs);\n if (!span) {\n return [];\n }\n const inner = attrs.slice(span.start, span.end + 1);\n const items: string[] = [];\n for (const match of inner.matchAll(ITEM_LITERAL)) {\n items.push(match.groups?.s ?? match.groups?.d ?? match.groups?.t ?? \"\");\n }\n return items;\n};\n\n/** Rebuild a `<Tabs …>` open tag with the `items={…}` attribute removed. */\nconst buildTabsOpen = (attrs: string, selfClosing: boolean): string => {\n const span = itemsSpan(attrs);\n const withoutItems = span\n ? attrs.slice(0, span.start) + attrs.slice(span.end + 1)\n : attrs;\n const body = withoutItems.replace(/\\/\\s*$/u, \"\").trim();\n const space = body ? ` ${body}` : \"\";\n return selfClosing ? `<Tabs${space} />` : `<Tabs${space}>`;\n};\n\n/** Give a single `<Tab …>` open tag a `title`, preferring its own `value`. */\nconst titleizeTab = (tag: string, fallback: string | undefined): string => {\n if (/\\btitle\\s*=/u.test(tag)) {\n return tag;\n }\n if (/\\bvalue\\s*=/u.test(tag)) {\n return tag.replace(/\\bvalue(?<eq>\\s*=)/u, \"title$<eq>\");\n }\n if (fallback === undefined) {\n return tag;\n }\n return tag.replace(/^<Tab/u, `<Tab title=\"${escapeAttribute(fallback)}\"`);\n};\n\n/**\n * Find the `</name>` that closes the tag opened at `from` (an index just past\n * the open tag's `>`), honoring nesting. Returns its start index, or -1.\n */\nconst findMatchingClose = (\n source: string,\n from: number,\n name: string\n): number => {\n const token = new RegExp(`<${name}(?=[\\\\s/>])|</${name}>`, \"gu\");\n token.lastIndex = from;\n let depth = 1;\n for (let match = token.exec(source); match; match = token.exec(source)) {\n if (match[0].startsWith(\"</\")) {\n depth -= 1;\n if (depth === 0) {\n return match.index;\n }\n } else {\n depth += 1;\n }\n }\n return -1;\n};\n\n/** Title the direct `<Tab>` children of a Tabs block, skipping nested Tabs. */\nconst titleizeTabChildren = (inner: string, items: string[]): string => {\n let output = \"\";\n let cursor = 0;\n let position = 0;\n\n while (cursor < inner.length) {\n const rest = inner.slice(cursor);\n const tab = TAB_TAG.exec(rest);\n if (!tab) {\n output += rest;\n break;\n }\n const nested = TABS_TAG.exec(rest);\n if (nested && nested.index < tab.index) {\n const start = cursor + nested.index;\n const openEnd = findOpenTagEnd(inner, start + \"<Tabs\".length);\n const close =\n openEnd === -1 ? -1 : findMatchingClose(inner, openEnd + 1, \"Tabs\");\n if (close === -1) {\n output += inner.slice(cursor);\n break;\n }\n const end = close + \"</Tabs>\".length;\n output += inner.slice(cursor, end);\n cursor = end;\n continue;\n }\n const start = cursor + tab.index;\n const openEnd = findOpenTagEnd(inner, start + \"<Tab\".length);\n if (openEnd === -1) {\n output += inner.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n const tagText = inner.slice(start, openEnd + 1);\n output +=\n inner.slice(cursor, start) + titleizeTab(tagText, items[position]);\n position += 1;\n cursor = openEnd + 1;\n }\n\n return output;\n};\n\n/**\n * Reshape Fumadocs tabs to Blume's API. Fumadocs declares tab labels on the\n * parent (`<Tabs items={['npm','pnpm']}>`) and selects with `<Tab value=\"npm\">`;\n * Blume's `<Tab>` carries its own `title`. Each tab is titled from its `value`\n * (or the positional `items` entry) and the `items` prop is stripped. Nested\n * tab groups are handled recursively with their own `items`.\n */\nexport const rewriteFumadocsTabs = (source: string): string => {\n let output = \"\";\n let cursor = 0;\n\n while (cursor < source.length) {\n const match = TABS_TAG.exec(source.slice(cursor));\n if (!match) {\n output += source.slice(cursor);\n break;\n }\n const start = cursor + match.index;\n const openEnd = findOpenTagEnd(source, start + \"<Tabs\".length);\n if (openEnd === -1) {\n output += source.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n const attrs = source.slice(start + \"<Tabs\".length, openEnd);\n const selfClosing = attrs.trimEnd().endsWith(\"/\");\n output += source.slice(cursor, start);\n\n if (selfClosing) {\n output += buildTabsOpen(attrs, true);\n cursor = openEnd + 1;\n continue;\n }\n\n const close = findMatchingClose(source, openEnd + 1, \"Tabs\");\n if (close === -1) {\n output += source.slice(start, openEnd + 1);\n cursor = openEnd + 1;\n continue;\n }\n const inner = rewriteFumadocsTabs(source.slice(openEnd + 1, close));\n output += buildTabsOpen(attrs, false);\n output += titleizeTabChildren(inner, parseItems(attrs));\n output += \"</Tabs>\";\n cursor = close + \"</Tabs>\".length;\n }\n\n return output;\n};\n\n// ---------------------------------------------------------------------------\n// Includes\n// ---------------------------------------------------------------------------\n\nconst INCLUDE = /<include\\b[^>]*>(?<path>[\\s\\S]*?)<\\/include>/gu;\n\ninterface IncludeOptions {\n filePath: string;\n readFile?: (file: string) => Promise<string>;\n /** Docs root the include must stay within; targets escaping it are skipped. */\n root: string;\n seen?: Set<string>;\n}\n\n/**\n * Inline Fumadocs `<include>./partial.mdx</include>` references — source-level\n * includes with no Blume runtime equivalent. The referenced file's frontmatter\n * is stripped, nested includes are resolved (with a cycle guard), and the path\n * is resolved relative to the including file. Missing or circular targets are\n * left untouched and reported.\n */\nexport const inlineFumadocsIncludes = async (\n source: string,\n options: IncludeOptions\n): Promise<{ content: string; warnings: string[] }> => {\n const matches = [...source.matchAll(INCLUDE)];\n if (matches.length === 0) {\n return { content: source, warnings: [] };\n }\n\n const read = options.readFile ?? ((file) => readFileFromDisk(file, \"utf-8\"));\n const seen = options.seen ?? new Set<string>();\n const warnings: string[] = [];\n let content = source;\n\n for (const match of matches) {\n const rawPath = match.groups?.path?.trim() ?? \"\";\n if (!rawPath) {\n continue;\n }\n const target = resolve(dirname(options.filePath), rawPath);\n if (!isInsideRoot(options.root, target)) {\n warnings.push(\n `<include> target \"${rawPath}\" is outside the docs tree — left as-is.`\n );\n continue;\n }\n if (seen.has(target)) {\n warnings.push(`Circular <include> \"${rawPath}\" — left as-is.`);\n continue;\n }\n if (!existsSync(target)) {\n warnings.push(`<include> target \"${rawPath}\" not found — left as-is.`);\n continue;\n }\n seen.add(target);\n // oxlint-disable-next-line no-await-in-loop -- sequential include reads\n const raw = await read(target);\n // oxlint-disable-next-line no-await-in-loop -- sequential include reads\n const nested = await inlineFumadocsIncludes(matter(raw).content.trim(), {\n ...options,\n filePath: target,\n seen,\n });\n seen.delete(target);\n warnings.push(...nested.warnings);\n content = content.replace(match[0], () => nested.content);\n }\n\n return { content, warnings };\n};\n\n// ---------------------------------------------------------------------------\n// Unsupported components\n// ---------------------------------------------------------------------------\n\n/** Fumadocs components with no drop-in Blume equivalent — flagged for review. */\nconst UNSUPPORTED_COMPONENTS = [\n \"Banner\",\n \"DynamicCodeBlock\",\n \"ImageZoom\",\n \"InlineTOC\",\n];\n\n/** Names of Fumadocs components in `source` that need manual attention. */\nexport const unsupportedFumadocsComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n",
151
+ "import { existsSync } from \"node:fs\";\nimport { readFile as readFileFromDisk } from \"node:fs/promises\";\n\nimport { dirname, resolve } from \"pathe\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport {\n findOpenTagEnd,\n isInsideRoot,\n renameTag,\n rewriteCallouts,\n stripImports,\n} from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Fumadocs-only MDX into idiomatic Blume\n * markup. Runs once at migration time — no Fumadocs-aware plugins remain in the\n * Blume runtime.\n */\n\n// ---------------------------------------------------------------------------\n// Imports\n// ---------------------------------------------------------------------------\n\nconst FUMADOCS_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"']fumadocs-(?:ui|core|mdx)(?:\\/[^\"']*)?[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * Drop `import … from \"fumadocs-ui/…\"` (and `-core`/`-mdx`) statements. Blume\n * injects its components globally, so these imports would fail to resolve once\n * the Fumadocs packages are gone.\n */\nexport const stripFumadocsImports = (source: string): string =>\n stripImports(source, FUMADOCS_IMPORT);\n\n// ---------------------------------------------------------------------------\n// Callouts\n// ---------------------------------------------------------------------------\n\n/** Fumadocs `<Callout type=\"X\">` values mapped to Blume directive names. */\nconst CALLOUT_TYPE_DIRECTIVES: Record<string, string> = {\n error: \"danger\",\n info: \"info\",\n note: \"note\",\n success: \"success\",\n tip: \"tip\",\n warn: \"warning\",\n warning: \"warning\",\n};\n\n/**\n * Convert Fumadocs `<Callout type=\"info|warn|error|…\" title=\"…\">` components\n * into Blume `:::` directives. A bare `<Callout>` becomes `:::note`; the `icon`\n * prop is dropped.\n */\nexport const rewriteFumadocsCallouts = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: {},\n tags: [\"Callout\"],\n typeDirectives: CALLOUT_TYPE_DIRECTIVES,\n });\n\n// ---------------------------------------------------------------------------\n// Container component renames\n// ---------------------------------------------------------------------------\n\n/**\n * Rename Fumadocs container components to their Blume equivalents. The\n * lookahead in `renameTag` means a longer tag (`Accordions`, `Files`) is never\n * matched by the rule for its shorter prefix (`Accordion`, `File`), so the\n * item-level renames run first and the container renames second:\n *\n * - `<Cards>` -> `<CardGroup>` (items stay `<Card>`).\n * - `<Accordions>`/`<Accordion>` -> `<Accordion>`/`<AccordionItem>`.\n * - `<Files>`/`<Folder>`/`<File>` -> `<FileTree>`/`<TreeFolder>`/`<TreeFile>`.\n */\nexport const rewriteFumadocsContainers = (source: string): string => {\n let out = renameTag(source, \"Cards\", \"CardGroup\");\n out = renameTag(out, \"Accordion\", \"AccordionItem\");\n out = renameTag(out, \"Accordions\", \"Accordion\");\n out = renameTag(out, \"File\", \"TreeFile\");\n out = renameTag(out, \"Folder\", \"TreeFolder\");\n out = renameTag(out, \"Files\", \"FileTree\");\n return out;\n};\n\n// ---------------------------------------------------------------------------\n// Tabs (items + value -> per-Tab title)\n// ---------------------------------------------------------------------------\n\nconst TABS_TAG = /<Tabs(?=[\\s/>])/u;\nconst TAB_TAG = /<Tab(?=[\\s/>])/u;\nconst ITEM_LITERAL = /'(?<s>[^']*)'|\"(?<d>[^\"]*)\"|`(?<t>[^`]*)`/gu;\n\nconst escapeAttribute = (value: string): string =>\n value.replaceAll('\"', \"&quot;\");\n\n/** Find the close brace matching the `{` at `open`, or -1 if unterminated. */\nconst matchBrace = (source: string, open: number): number => {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n if (source[index] === \"{\") {\n depth += 1;\n } else if (source[index] === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n }\n }\n return -1;\n};\n\n/** Span of an `items={…}` expression within a tag's attributes, or null. */\nconst itemsSpan = (attrs: string): { end: number; start: number } | null => {\n const match = /\\bitems\\s*=\\s*/u.exec(attrs);\n if (!match) {\n return null;\n }\n const braceStart = attrs.indexOf(\"{\", match.index + match[0].length);\n if (braceStart === -1) {\n return null;\n }\n const braceEnd = matchBrace(attrs, braceStart);\n return braceEnd === -1 ? null : { end: braceEnd, start: match.index };\n};\n\n/** Read the string literals from a Fumadocs `<Tabs items={[…]}>` attribute. */\nconst parseItems = (attrs: string): string[] => {\n const span = itemsSpan(attrs);\n if (!span) {\n return [];\n }\n const inner = attrs.slice(span.start, span.end + 1);\n const items: string[] = [];\n for (const match of inner.matchAll(ITEM_LITERAL)) {\n items.push(match.groups?.s ?? match.groups?.d ?? match.groups?.t ?? \"\");\n }\n return items;\n};\n\n/** Rebuild a `<Tabs …>` open tag with the `items={…}` attribute removed. */\nconst buildTabsOpen = (attrs: string, selfClosing: boolean): string => {\n const span = itemsSpan(attrs);\n const withoutItems = span\n ? attrs.slice(0, span.start) + attrs.slice(span.end + 1)\n : attrs;\n const body = withoutItems.replace(/\\/\\s*$/u, \"\").trim();\n const space = body ? ` ${body}` : \"\";\n return selfClosing ? `<Tabs${space} />` : `<Tabs${space}>`;\n};\n\n/** Give a single `<Tab …>` open tag a `title`, preferring its own `value`. */\nconst titleizeTab = (tag: string, fallback: string | undefined): string => {\n if (/\\btitle\\s*=/u.test(tag)) {\n return tag;\n }\n if (/\\bvalue\\s*=/u.test(tag)) {\n return tag.replace(/\\bvalue(?<eq>\\s*=)/u, \"title$<eq>\");\n }\n if (fallback === undefined) {\n return tag;\n }\n return tag.replace(/^<Tab/u, `<Tab title=\"${escapeAttribute(fallback)}\"`);\n};\n\n/**\n * Find the `</name>` that closes the tag opened at `from` (an index just past\n * the open tag's `>`), honoring nesting. Returns its start index, or -1.\n */\nconst findMatchingClose = (\n source: string,\n from: number,\n name: string\n): number => {\n const token = new RegExp(`<${name}(?=[\\\\s/>])|</${name}>`, \"gu\");\n token.lastIndex = from;\n let depth = 1;\n for (let match = token.exec(source); match; match = token.exec(source)) {\n if (match[0].startsWith(\"</\")) {\n depth -= 1;\n if (depth === 0) {\n return match.index;\n }\n } else {\n depth += 1;\n }\n }\n return -1;\n};\n\n/** Title the direct `<Tab>` children of a Tabs block, skipping nested Tabs. */\nconst titleizeTabChildren = (inner: string, items: string[]): string => {\n let output = \"\";\n let cursor = 0;\n let position = 0;\n\n while (cursor < inner.length) {\n const rest = inner.slice(cursor);\n const tab = TAB_TAG.exec(rest);\n if (!tab) {\n output += rest;\n break;\n }\n const nested = TABS_TAG.exec(rest);\n if (nested && nested.index < tab.index) {\n const start = cursor + nested.index;\n const openEnd = findOpenTagEnd(inner, start + \"<Tabs\".length);\n const close =\n openEnd === -1 ? -1 : findMatchingClose(inner, openEnd + 1, \"Tabs\");\n if (close === -1) {\n output += inner.slice(cursor);\n break;\n }\n const end = close + \"</Tabs>\".length;\n output += inner.slice(cursor, end);\n cursor = end;\n continue;\n }\n const start = cursor + tab.index;\n const openEnd = findOpenTagEnd(inner, start + \"<Tab\".length);\n if (openEnd === -1) {\n output += inner.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n const tagText = inner.slice(start, openEnd + 1);\n output +=\n inner.slice(cursor, start) + titleizeTab(tagText, items[position]);\n position += 1;\n cursor = openEnd + 1;\n }\n\n return output;\n};\n\n/**\n * Reshape Fumadocs tabs to Blume's API. Fumadocs declares tab labels on the\n * parent (`<Tabs items={['npm','pnpm']}>`) and selects with `<Tab value=\"npm\">`;\n * Blume's `<Tab>` carries its own `title`. Each tab is titled from its `value`\n * (or the positional `items` entry) and the `items` prop is stripped. Nested\n * tab groups are handled recursively with their own `items`.\n */\nexport const rewriteFumadocsTabs = (source: string): string => {\n let output = \"\";\n let cursor = 0;\n\n while (cursor < source.length) {\n const match = TABS_TAG.exec(source.slice(cursor));\n if (!match) {\n output += source.slice(cursor);\n break;\n }\n const start = cursor + match.index;\n const openEnd = findOpenTagEnd(source, start + \"<Tabs\".length);\n if (openEnd === -1) {\n output += source.slice(cursor, start + 1);\n cursor = start + 1;\n continue;\n }\n const attrs = source.slice(start + \"<Tabs\".length, openEnd);\n const selfClosing = attrs.trimEnd().endsWith(\"/\");\n output += source.slice(cursor, start);\n\n if (selfClosing) {\n output += buildTabsOpen(attrs, true);\n cursor = openEnd + 1;\n continue;\n }\n\n const close = findMatchingClose(source, openEnd + 1, \"Tabs\");\n if (close === -1) {\n output += source.slice(start, openEnd + 1);\n cursor = openEnd + 1;\n continue;\n }\n const inner = rewriteFumadocsTabs(source.slice(openEnd + 1, close));\n output += buildTabsOpen(attrs, false);\n output += titleizeTabChildren(inner, parseItems(attrs));\n output += \"</Tabs>\";\n cursor = close + \"</Tabs>\".length;\n }\n\n return output;\n};\n\n// ---------------------------------------------------------------------------\n// Includes\n// ---------------------------------------------------------------------------\n\nconst INCLUDE = /<include\\b[^>]*>(?<path>[\\s\\S]*?)<\\/include>/gu;\n\ninterface IncludeOptions {\n filePath: string;\n readFile?: (file: string) => Promise<string>;\n /** Docs root the include must stay within; targets escaping it are skipped. */\n root: string;\n seen?: Set<string>;\n}\n\n/**\n * Inline Fumadocs `<include>./partial.mdx</include>` references — source-level\n * includes with no Blume runtime equivalent. The referenced file's frontmatter\n * is stripped, nested includes are resolved (with a cycle guard), and the path\n * is resolved relative to the including file. Missing or circular targets are\n * left untouched and reported.\n */\nexport const inlineFumadocsIncludes = async (\n source: string,\n options: IncludeOptions\n): Promise<{ content: string; warnings: string[] }> => {\n const matches = [...source.matchAll(INCLUDE)];\n if (matches.length === 0) {\n return { content: source, warnings: [] };\n }\n\n const read = options.readFile ?? ((file) => readFileFromDisk(file, \"utf-8\"));\n const seen = options.seen ?? new Set<string>();\n const warnings: string[] = [];\n let content = source;\n\n for (const match of matches) {\n const rawPath = match.groups?.path?.trim() ?? \"\";\n if (!rawPath) {\n continue;\n }\n const target = resolve(dirname(options.filePath), rawPath);\n if (!isInsideRoot(options.root, target)) {\n warnings.push(\n `<include> target \"${rawPath}\" is outside the docs tree — left as-is.`\n );\n continue;\n }\n if (seen.has(target)) {\n warnings.push(`Circular <include> \"${rawPath}\" — left as-is.`);\n continue;\n }\n if (!existsSync(target)) {\n warnings.push(`<include> target \"${rawPath}\" not found — left as-is.`);\n continue;\n }\n seen.add(target);\n // oxlint-disable-next-line no-await-in-loop -- sequential include reads\n const raw = await read(target);\n // oxlint-disable-next-line no-await-in-loop -- sequential include reads\n const nested = await inlineFumadocsIncludes(matter(raw).content.trim(), {\n ...options,\n filePath: target,\n seen,\n });\n seen.delete(target);\n warnings.push(...nested.warnings);\n content = content.replace(match[0], () => nested.content);\n }\n\n return { content, warnings };\n};\n\n// ---------------------------------------------------------------------------\n// Unsupported components\n// ---------------------------------------------------------------------------\n\n/** Fumadocs components with no drop-in Blume equivalent — flagged for review. */\nconst UNSUPPORTED_COMPONENTS = [\n \"Banner\",\n \"DynamicCodeBlock\",\n \"ImageZoom\",\n \"InlineTOC\",\n];\n\n/** Names of Fumadocs components in `source` that need manual attention. */\nexport const unsupportedFumadocsComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n",
150
152
  "import { stripUnknownPageMeta } from \"../shared.ts\";\n\n/**\n * Normalize Fumadocs page frontmatter for Blume. Fumadocs' core fields\n * (`title`, `description`, `icon`) already validate against Blume's page schema\n * and pass through untouched; Fumadocs-only keys with no equivalent — most\n * notably `full` (full-width, no-TOC layout) — are dropped by the strict-schema\n * strip and reported so the author can re-apply them by hand.\n */\nexport const normalizeFumadocsPageMeta = (\n value: unknown\n): { data: Record<string, unknown>; removed: string[] } => {\n const data =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? { ...(value as Record<string, unknown>) }\n : {};\n return stripUnknownPageMeta(data);\n};\n",
151
153
  "import { existsSync, statSync } from \"node:fs\";\nimport { mkdir, rename, writeFile } from \"node:fs/promises\";\n\nimport { basename, join } from \"pathe\";\n\nimport { isInsideRoot } from \"../shared.ts\";\nimport { renderMetaModule } from \"./meta.ts\";\nimport type {\n FumadocsPageItem,\n FumadocsPagesStructure,\n FumadocsSection,\n} from \"./meta.ts\";\n\n/**\n * Rebuild Fumadocs `---Section---` separators as Blume group folders.\n *\n * Fumadocs draws a non-collapsible section heading from a `\"---Label---\"` entry\n * in a folder's `pages` array — exactly what a Blume `(Label)/` group folder\n * renders by default (`display: \"flat\"`). Blume has no flat-file \"separator\"\n * primitive, so the only faithful, non-overriding home for a section is a group\n * folder: it is route-transparent (the `(Label)` segment is stripped from URLs,\n * see `core/sources/normalize.ts`) and composes with per-folder `meta.ts`,\n * unlike a global `navigation.sidebar` override (which would disable every other\n * folder's meta site-wide).\n *\n * The reshape runs against the already-migrated `docs/` tree, so each `pages`\n * entry is resolved to a real page file or folder before it is moved. A section\n * that is a single folder is left in place (wrapping it would double the\n * heading); links have no file to move and are dropped with a warning.\n */\n\nconst PAGE_EXTS = [\".mdx\", \".md\"];\nconst WORD_SPLIT = /[-_]/u;\nconst PATH_SEP = /[/\\\\]/u;\n\ninterface ResolvedEntry {\n kind: \"file\" | \"folder\";\n path: string;\n}\n\nconst isDirectory = (path: string): boolean => {\n try {\n return statSync(path).isDirectory();\n } catch {\n return false;\n }\n};\n\n/** Resolve a `pages` name to its on-disk page file or folder under `docsDir`. */\nconst resolveEntry = (docsDir: string, name: string): ResolvedEntry | null => {\n // A `pages` entry is author-controlled; reject any that escapes `docsDir`\n // (e.g. `\"../../victim\"`) so the later `rename` can't move a file out of the\n // docs tree.\n if (!isInsideRoot(docsDir, join(docsDir, name))) {\n return null;\n }\n for (const ext of PAGE_EXTS) {\n const file = join(docsDir, `${name}${ext}`);\n if (existsSync(file)) {\n return { kind: \"file\", path: file };\n }\n }\n const folder = join(docsDir, name);\n return isDirectory(folder) ? { kind: \"folder\", path: folder } : null;\n};\n\nconst humanize = (name: string): string =>\n name\n .split(WORD_SPLIT)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\nconst linkWarning = (item: { href: string; text: string }): string =>\n `Dropped sidebar link \"${item.text}\" (${item.href}) — add it to navbar.links manually.`;\n\nconst extractWarning = (name: string): string =>\n `Sidebar extract \"...${name}\" became a normal \"${name}\" group (its pages are not flattened into the parent).`;\n\nexport interface GroupReshapeResult {\n /** Ordering keys for the parent folder's `meta.ts` `pages`. */\n order: string[];\n warnings: string[];\n}\n\n/** Record an in-place item's ordering key (lead items, or an ungroupable run). */\nconst addUngroupedItem = (\n item: FumadocsPageItem,\n order: string[],\n warnings: string[]\n): void => {\n if (item.kind === \"link\") {\n warnings.push(linkWarning(item));\n return;\n }\n if (item.kind === \"extract\") {\n warnings.push(extractWarning(item.name));\n }\n order.push(item.name);\n};\n\n/** A section of one folder keeps its place without a wrapping group folder. */\nconst reshapeSingleFolderSection = (\n section: FumadocsSection,\n only: FumadocsPageItem & { kind: \"extract\" | \"ref\" },\n order: string[],\n warnings: string[]\n): void => {\n order.push(only.name);\n if (humanize(only.name).toLowerCase() !== section.label.toLowerCase()) {\n warnings.push(\n `Section \"${section.label}\" wraps folder \"${only.name}\"; set that folder's meta title to \"${section.label}\" to make the heading match.`\n );\n }\n if (only.kind === \"extract\") {\n warnings.push(extractWarning(only.name));\n }\n};\n\n/** Move one section item into the group folder; return its ordering key. */\nconst moveItemIntoGroup = async (\n item: FumadocsPageItem,\n docsDir: string,\n groupDir: string,\n label: string,\n warnings: string[]\n): Promise<string | null> => {\n if (item.kind === \"link\") {\n warnings.push(linkWarning(item));\n return null;\n }\n const resolved = resolveEntry(docsDir, item.name);\n if (!resolved) {\n warnings.push(\n `Sidebar entry \"${item.name}\" in section \"${label}\" matched no page or folder; skipped.`\n );\n return null;\n }\n const dest = join(groupDir, basename(resolved.path));\n if (existsSync(dest)) {\n warnings.push(\n `Skipped moving \"${item.name}\" into section \"${label}\" (target already exists).`\n );\n return null;\n }\n await mkdir(groupDir, { recursive: true });\n await rename(resolved.path, dest);\n if (item.kind === \"extract\") {\n warnings.push(extractWarning(item.name));\n }\n return item.name;\n};\n\nconst reshapeSection = async (\n section: FumadocsSection,\n docsDir: string,\n order: string[],\n warnings: string[]\n): Promise<void> => {\n const movable = section.items.filter((item) => item.kind !== \"link\");\n\n // A lone folder already renders as its own group; wrapping it in a `(Label)/`\n // folder would stack two headings, so leave it in place.\n if (movable.length === 1) {\n const [only] = movable as [FumadocsPageItem & { kind: \"extract\" | \"ref\" }];\n if (resolveEntry(docsDir, only.name)?.kind === \"folder\") {\n reshapeSingleFolderSection(section, only, order, warnings);\n return;\n }\n }\n\n if (PATH_SEP.test(section.label)) {\n warnings.push(\n `Section \"${section.label}\" has a slash in its name and can't become a group folder; its pages stay ungrouped.`\n );\n for (const item of section.items) {\n addUngroupedItem(item, order, warnings);\n }\n return;\n }\n\n const groupDir = join(docsDir, `(${section.label})`);\n const sectionKeys: string[] = [];\n for (const item of section.items) {\n // oxlint-disable-next-line no-await-in-loop -- sequential moves into one group\n const key = await moveItemIntoGroup(\n item,\n docsDir,\n groupDir,\n section.label,\n warnings\n );\n if (key) {\n sectionKeys.push(key);\n }\n }\n\n // Nothing movable (e.g. a link-only section) — drop the empty heading.\n if (sectionKeys.length === 0) {\n return;\n }\n\n // The group folder's key in the nav is its label, so order it by label.\n order.push(section.label);\n // Preserve the authored order of the section's pages.\n if (sectionKeys.length > 1) {\n await writeFile(\n join(groupDir, \"meta.ts\"),\n renderMetaModule({ pages: sectionKeys }),\n \"utf-8\"\n );\n }\n};\n\n/**\n * Reshape a parsed `pages` structure into group folders under `docsDir`,\n * returning the parent folder's `meta.ts` page ordering and any warnings. Items\n * are moved within the already-migrated `docs/` tree, so this must run after the\n * pages have been moved out of `content/docs`.\n */\nexport const reshapeFumadocsGroups = async (\n structure: FumadocsPagesStructure,\n docsDir: string\n): Promise<GroupReshapeResult> => {\n const order: string[] = [];\n const warnings: string[] = [];\n\n for (const item of structure.lead) {\n addUngroupedItem(item, order, warnings);\n }\n for (const section of structure.sections) {\n // oxlint-disable-next-line no-await-in-loop -- sections share `docsDir` state\n await reshapeSection(section, docsDir, order, warnings);\n }\n\n return { order, warnings };\n};\n",
152
154
  "import type { FolderMeta } from \"../../core/schema.ts\";\n\n/**\n * Translate a Fumadocs folder `meta.json` into a Blume `FolderMeta` (`meta.ts`).\n * Unlike Nextra, Fumadocs declares a folder's own title/icon/ordering in *that\n * folder's* `meta.json`, so the mapping is self-contained. Fumadocs-only\n * concepts with no Blume equivalent are dropped and reported:\n *\n * - `defaultOpen` -> `collapsed` (inverted) + `display: \"group\"` (collapsible).\n * - `root: true` -> `display: \"page\"` (the closest analogue to a page-tree root).\n * - `description` -> dropped (folders carry no description in Blume).\n * - `pages` entries: plain slugs are kept as ordering; `\"...\"` (the rest marker,\n * already Blume's default) is dropped silently; `\"...folder\"` (the *extract*\n * operator, which inlines a folder's children) keeps the folder's place in the\n * ordering as a plain `\"folder\"` key and warns that it renders as a normal\n * group rather than flattened; `\"---Section---\"` separators and `\"[Text](url)\"`\n * links have no folder-meta home and are dropped with a warning.\n *\n * When a `pages` array carries `---Section---` separators, the migrator instead\n * takes the *structural* path ({@link parseFumadocsPages} + the group-folder\n * reshape in `index.ts`), which rebuilds each section as a Blume group folder\n * rather than flattening it through `filterPages`.\n */\n\ninterface FumadocsMeta {\n defaultOpen?: unknown;\n description?: unknown;\n icon?: unknown;\n pages?: unknown;\n root?: unknown;\n title?: unknown;\n}\n\nconst SEPARATOR = /^---(?<label>.*)---$/u;\nconst LINK = /^(?:\\[[^\\]]*\\])?\\[(?<text>[^\\]]*)\\]\\((?<href>[^)]*)\\)$/u;\nconst REST = \"...\";\n/** Fumadocs *extract* operator: `...folder` inlines that folder's children. */\nconst EXTRACT = /^\\.\\.\\.(?<folder>.+)$/u;\n\ninterface PagesResult {\n pages: string[];\n warnings: string[];\n}\n\nconst filterPages = (raw: unknown): PagesResult => {\n if (!Array.isArray(raw)) {\n return { pages: [], warnings: [] };\n }\n\n const pages: string[] = [];\n const warnings: string[] = [];\n for (const entry of raw) {\n if (typeof entry !== \"string\") {\n continue;\n }\n const value = entry.trim();\n if (value === REST || value === \"\") {\n continue;\n }\n const extract = EXTRACT.exec(value);\n if (extract) {\n // Blume has no \"flatten a folder's children inline\" sidebar primitive, but\n // the folder is a sibling here, so keep its position in the ordering and\n // let it render as a normal group.\n const folder = extract.groups?.folder?.trim() ?? \"\";\n if (folder) {\n pages.push(folder);\n warnings.push(\n `Sidebar extract \"...${folder}\" became a normal \"${folder}\" group (its pages are not flattened into the parent).`\n );\n }\n continue;\n }\n const separator = SEPARATOR.exec(value);\n if (separator) {\n const label = separator.groups?.label?.trim();\n warnings.push(\n `Dropped sidebar separator \"${label || value}\" — recreate it with a sidebar group if needed.`\n );\n continue;\n }\n const link = LINK.exec(value);\n if (link) {\n warnings.push(\n `Dropped sidebar link \"${link.groups?.text}\" (${link.groups?.href}) — add it to navbar.links manually.`\n );\n continue;\n }\n pages.push(value);\n }\n\n return { pages, warnings };\n};\n\nexport interface FumadocsMetaConversion {\n meta: FolderMeta;\n warnings: string[];\n}\n\n/** Render a Blume `meta.ts` module source for a `FolderMeta`. */\nexport const renderMetaModule = (meta: FolderMeta): string =>\n `import { defineMeta } from \"blume\";\\n\\nexport default defineMeta(${JSON.stringify(meta, null, 2)});\\n`;\n\n/**\n * Translate a folder's own title/icon/display fields — everything in a Fumadocs\n * `meta.json` *except* the `pages` ordering. Split out from\n * {@link translateFumadocsMeta} so the structural path (which reshapes `pages`\n * into group folders) can reuse the self fields without the flat `pages` array.\n */\nexport const translateFumadocsSelfMeta = (\n value: unknown\n): FumadocsMetaConversion => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return { meta: {}, warnings: [] };\n }\n\n const source = value as FumadocsMeta;\n const meta: FolderMeta = {};\n const warnings: string[] = [];\n\n if (typeof source.title === \"string\") {\n meta.title = source.title;\n }\n if (typeof source.icon === \"string\") {\n meta.icon = source.icon;\n }\n if (source.root === true) {\n meta.display = \"page\";\n } else if (typeof source.defaultOpen === \"boolean\") {\n meta.display = \"group\";\n meta.collapsed = !source.defaultOpen;\n }\n if (typeof source.description === \"string\") {\n warnings.push(\n \"Dropped folder `description` — Blume folders have no description field.\"\n );\n }\n\n return { meta, warnings };\n};\n\n/** Map a parsed Fumadocs `meta.json` object onto a Blume `FolderMeta`. */\nexport const translateFumadocsMeta = (\n value: unknown\n): FumadocsMetaConversion => {\n const { meta, warnings } = translateFumadocsSelfMeta(value);\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const { pages, warnings: pageWarnings } = filterPages(\n (value as FumadocsMeta).pages\n );\n if (pages.length > 0) {\n meta.pages = pages;\n }\n warnings.push(...pageWarnings);\n }\n return { meta, warnings };\n};\n\n// ---------------------------------------------------------------------------\n// Structural pages (separators -> sections)\n// ---------------------------------------------------------------------------\n\n/**\n * One entry in a Fumadocs `pages` array, after classification: a `ref` (a plain\n * page or folder name), an `extract` (`...folder`, whose children Fumadocs\n * inlines), or a `link` (`[Text](url)`).\n */\nexport type FumadocsPageItem =\n | { kind: \"extract\"; name: string }\n | { kind: \"link\"; href: string; text: string }\n | { kind: \"ref\"; name: string };\n\n/** A run of items under one `---Label---` separator. */\nexport interface FumadocsSection {\n items: FumadocsPageItem[];\n label: string;\n}\n\nexport interface FumadocsPagesStructure {\n /** Whether any `---Section---` separator was present. */\n hasSections: boolean;\n /** Items before the first separator; they stay at the folder's top level. */\n lead: FumadocsPageItem[];\n sections: FumadocsSection[];\n}\n\n/**\n * Parse a Fumadocs `pages` array into its structural shape: the lead items\n * (before any separator) and the sections each `---Label---` introduces. Unlike\n * {@link filterPages}, separators are preserved (as section boundaries) so the\n * migrator can rebuild them as Blume group folders. The rest marker (`\"...\"`) is\n * dropped — Blume appends unlisted pages by default.\n */\nexport const parseFumadocsPages = (raw: unknown): FumadocsPagesStructure => {\n const lead: FumadocsPageItem[] = [];\n const sections: FumadocsSection[] = [];\n if (!Array.isArray(raw)) {\n return { hasSections: false, lead, sections };\n }\n\n let current: FumadocsSection | null = null;\n const push = (item: FumadocsPageItem): void => {\n (current ? current.items : lead).push(item);\n };\n\n for (const entry of raw) {\n if (typeof entry !== \"string\") {\n continue;\n }\n const value = entry.trim();\n if (value === REST || value === \"\") {\n continue;\n }\n const separator = SEPARATOR.exec(value);\n if (separator) {\n current = {\n items: [],\n label: separator.groups?.label?.trim() || \"Section\",\n };\n sections.push(current);\n continue;\n }\n const extract = EXTRACT.exec(value);\n if (extract) {\n const name = extract.groups?.folder?.trim();\n if (name) {\n push({ kind: \"extract\", name });\n }\n continue;\n }\n const link = LINK.exec(value);\n if (link) {\n push({\n href: link.groups?.href ?? \"\",\n kind: \"link\",\n text: link.groups?.text ?? \"\",\n });\n continue;\n }\n push({ kind: \"ref\", name: value });\n }\n\n return { hasSections: sections.length > 0, lead, sections };\n};\n",
153
- "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, stat, writeFile } from \"node:fs/promises\";\n\nimport { dirname, join } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { BlumeConfig } from \"../../core/schema.ts\";\nimport { ensurePackageJson } from \"../shared.ts\";\nimport { assetSegments } from \"./assets.ts\";\nimport { loadMintlifyConfig, partitionMintlifyRedirects } from \"./config.ts\";\nimport { mintlifyI18n } from \"./i18n.ts\";\nimport { transformMintlifyContent } from \"./transform.ts\";\n\nexport interface MintlifyMigrationResult {\n moved: number;\n warnings: string[];\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n\nconst hasFontFamily = (value: unknown): boolean => {\n const object = asRecord(value);\n if (!object) {\n return false;\n }\n const named = (child: unknown): boolean =>\n typeof asRecord(child)?.family === \"string\";\n return (\n typeof object.family === \"string\" ||\n named(object.heading) ||\n named(object.body)\n );\n};\n\n/**\n * Warn about Mintlify site chrome that Blume's config doesn't model, so it isn't\n * dropped silently: header links (`navbar.links`/`navbar.primary`), footer\n * socials (`footer.socials`), and fonts outside Blume's curated Google set. The\n * contextual page menu and last-updated timestamp are covered by Blume defaults\n * (page actions, git-derived dates), so they need no warning.\n */\nconst droppedChromeWarnings = (\n spec: Record<string, unknown>,\n config: BlumeConfig\n): string[] => {\n const warnings: string[] = [];\n const navbar = asRecord(spec.navbar);\n if (navbar && (navbar.links || navbar.primary)) {\n warnings.push(\n \"Header links (navbar.links/navbar.primary) have no blume.config equivalent and were dropped; re-add them with navigation.tabs or a Header layout override.\"\n );\n }\n if (asRecord(spec.footer)?.socials) {\n warnings.push(\n \"Footer social links (footer.socials) have no blume.config equivalent and were dropped; add them with a Footer layout override.\"\n );\n }\n if (hasFontFamily(spec.fonts ?? spec.font) && !config.theme?.fonts) {\n warnings.push(\n \"docs.json font family isn't in Blume's curated Google Fonts set; set theme.fonts to a supported slug or add @font-face rules in theme.css.\"\n );\n }\n return warnings;\n};\n\n/**\n * Warn about dynamic (wildcard/param) redirects the migrator dropped. Blume\n * redirects are static path-to-path, so a `:slug*`/`:id` source becomes an\n * unroutable Astro destination — kept ones crash the build. Point the user at\n * host-level rules that do support wildcards.\n */\nconst droppedRedirectWarnings = (spec: Record<string, unknown>): string[] => {\n const { dropped } = partitionMintlifyRedirects(spec);\n if (dropped.length === 0) {\n return [];\n }\n return [\n `Dropped ${dropped.length} dynamic redirect(s) Blume can't model as static path-to-path (${dropped.join(\", \")}); re-add them as host-level rules (e.g. _redirects or vercel.json).`,\n ];\n};\n\n/** Recursively drop `undefined`, empty arrays, and empty objects. */\nconst prune = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(prune);\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(value)) {\n const pruned = prune(raw);\n if (pruned === undefined) {\n continue;\n }\n if (Array.isArray(pruned) && pruned.length === 0) {\n continue;\n }\n if (\n pruned &&\n typeof pruned === \"object\" &&\n !Array.isArray(pruned) &&\n Object.keys(pruned).length === 0\n ) {\n continue;\n }\n out[key] = pruned;\n }\n return out;\n }\n return value;\n};\n\nconst writeBlumeConfig = async (\n root: string,\n config: BlumeConfig\n): Promise<void> => {\n const body = `import { defineConfig } from \"blume\";\\n\\nexport default defineConfig(${JSON.stringify(prune(config), null, 2)});\\n`;\n await writeFile(join(root, \"blume.config.ts\"), body, \"utf-8\");\n};\n\ninterface RelocatedAssets {\n /** Top-level dirs served in place via `content.assets` (no files moved). */\n served: string[];\n /** Top-level files moved under `public/`. */\n moved: string[];\n}\n\n/**\n * Make referenced top-level assets resolvable in Blume. Directories (e.g.\n * Mintlify's `images/`) are left in place and served via `content.assets`, so\n * the migration doesn't churn every file under them; loose top-level files\n * (a root `favicon.png`, `logo.png`) are moved under `public/` since a mount\n * points at a directory.\n */\nconst relocateAssets = async (\n root: string,\n segments: string[]\n): Promise<RelocatedAssets> => {\n const served: string[] = [];\n const moved: string[] = [];\n for (const segment of segments) {\n const source = join(root, segment);\n if (!existsSync(source) || segment === \"public\") {\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential fs stats\n const stats = await stat(source);\n if (stats.isDirectory()) {\n served.push(segment);\n continue;\n }\n const dest = join(root, \"public\", segment);\n if (existsSync(dest)) {\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential fs moves\n await mkdir(join(root, \"public\"), { recursive: true });\n // oxlint-disable-next-line no-await-in-loop -- sequential fs moves\n await rename(source, dest);\n moved.push(segment);\n }\n return { moved, served };\n};\n\n/**\n * Fold relocated assets into the config (served dirs become `content.assets`)\n * and record what happened. Served dirs stay in place; only loose files moved.\n */\nconst applyRelocatedAssets = (\n config: BlumeConfig,\n assets: RelocatedAssets,\n warnings: string[]\n): void => {\n if (assets.served.length > 0) {\n config.content = {\n ...config.content,\n assets: [\n ...new Set([...(config.content?.assets ?? []), ...assets.served]),\n ],\n };\n warnings.push(\n `Kept asset dir(s) in place, served via content.assets: ${assets.served.join(\", \")}.`\n );\n }\n if (assets.moved.length > 0) {\n warnings.push(`Moved assets into public/: ${assets.moved.join(\", \")}.`);\n }\n};\n\n/**\n * Scaffold the project files a config-only Mintlify repo lacks: a runnable\n * `package.json` (it ships no npm manifest) and a `.gitignore` for Blume's\n * generated `.blume/` runtime and `dist/` build output. Both are idempotent —\n * an existing file is extended, not overwritten — and noted in the warnings.\n */\nconst scaffoldProjectFiles = async (\n root: string,\n warnings: string[]\n): Promise<void> => {\n if (await ensurePackageJson(root)) {\n warnings.push(\n \"Created a package.json with blume as a dependency; run `npm install`, then `npm run dev`.\"\n );\n }\n const ignored = await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n if (ignored.length > 0) {\n warnings.push(`Added ${ignored.join(\", \")} to .gitignore.`);\n }\n};\n\n/**\n * Delete the inlined markdown snippets. Component files (e.g. `.jsx`) are kept\n * because their imports were rewritten to resolve against `/snippets`.\n */\nconst cleanupSnippets = async (\n root: string,\n kept: Set<string>,\n warnings: string[]\n): Promise<void> => {\n const dir = join(root, \"snippets\");\n if (!existsSync(dir)) {\n return;\n }\n const markdown = await glob([\"**/*.{md,mdx}\"], { absolute: true, cwd: dir });\n for (const file of markdown) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs removes\n await rm(file, { force: true });\n }\n const remaining = await glob([\"**/*\"], { cwd: dir, dot: true });\n if (remaining.length === 0) {\n await rm(dir, { force: true, recursive: true });\n warnings.push(\"Inlined and removed the /snippets directory.\");\n } else {\n warnings.push(\n `Inlined markdown snippets; kept ${remaining.length} component file(s) under /snippets.`\n );\n }\n if (kept.size > 0) {\n warnings.push(\n `Rewrote ${kept.size} component snippet import(s) to relative paths; verify they resolve.`\n );\n }\n};\n\n/**\n * Migrate a Mintlify project to Blume: translate `docs.json`/`mint.json` into\n * `blume.config.ts`, rewrite every page to idiomatic Blume MDX in place, and\n * relocate static assets. Content stays at the project root (`content.root`\n * is `\".\"`).\n */\nexport const migrateMintlifyProject = async (\n root: string\n): Promise<MintlifyMigrationResult> => {\n const warnings: string[] = [];\n const configFile = existsSync(join(root, \"docs.json\"))\n ? join(root, \"docs.json\")\n : join(root, \"mint.json\");\n\n let config: BlumeConfig;\n if (existsSync(configFile)) {\n config = await loadMintlifyConfig(root, configFile);\n const spec = JSON.parse(await readFile(configFile, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const i18n = mintlifyI18n(spec);\n if (i18n) {\n config.i18n = i18n;\n // Language switching is handled by Blume i18n, not a nav selector.\n if (config.navigation?.selectors) {\n config.navigation.selectors = config.navigation.selectors.filter(\n (selector) => selector.kind !== \"language\"\n );\n }\n warnings.push(\n `Mapped ${i18n.locales.length} languages to i18n.locales (default: ${i18n.defaultLocale}); review the locale labels.`\n );\n }\n const openapiSources = config.openapi?.sources ?? [];\n if (openapiSources.length > 0) {\n warnings.push(\n `Mapped ${openapiSources.length} OpenAPI spec source(s) to openapi.sources (native reference renderer); verify each spec path or URL resolves.`\n );\n }\n warnings.push(...droppedChromeWarnings(spec, config));\n warnings.push(...droppedRedirectWarnings(spec));\n } else {\n warnings.push(\"No docs.json or mint.json found; writing a default config.\");\n config = { content: { root: \".\" }, title: \"Documentation\" };\n }\n\n const variables = (config.variables as Record<string, string>) ?? {};\n // Globals are inlined into content below; Blume has no runtime substitution.\n config.variables = undefined;\n\n const files = await glob([\"**/*.{md,mdx}\"], {\n absolute: true,\n cwd: root,\n ignore: [\n \"node_modules/**\",\n \".blume/**\",\n \"dist/**\",\n \"public/**\",\n \"snippets/**\",\n ],\n });\n\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const keptComponents = new Set<string>();\n for (const file of files) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n const raw = await readFile(file, \"utf-8\");\n // oxlint-disable-next-line no-await-in-loop -- sequential transforms\n const result = await transformMintlifyContent(raw, {\n filePath: file,\n root,\n variables,\n });\n if (result.content !== raw) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n await mkdir(dirname(file), { recursive: true });\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n await writeFile(file, result.content, \"utf-8\");\n }\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n for (const name of result.components) {\n keptComponents.add(name);\n }\n moved += 1;\n }\n\n const assets = await relocateAssets(root, assetSegments(config));\n await cleanupSnippets(root, keptComponents, warnings);\n\n if (config.content?.exclude) {\n config.content.exclude = [...new Set(config.content.exclude)];\n }\n applyRelocatedAssets(config, assets, warnings);\n await writeBlumeConfig(root, config);\n await scaffoldProjectFiles(root, warnings);\n\n if (Object.keys(variables).length > 0) {\n warnings.push(\n `Inlined ${Object.keys(variables).length} docs.json variable(s) into content; Blume has no runtime variable substitution.`\n );\n }\n if (removedKeys.size > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${[...removedKeys].join(\", \")}.`\n );\n }\n if (unsupported.size > 0) {\n warnings.push(\n `Components without a Blume equivalent need manual review: ${[...unsupported].join(\", \")}.`\n );\n }\n warnings.push(\n \"Review blume.config.ts; navigation, theme, and chrome were mapped from docs.json.\"\n );\n\n return { moved, warnings };\n};\n",
154
- "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\n\nimport { basename, dirname, extname, join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport type { BlumeConfig, FolderMeta } from \"../../core/schema.ts\";\nimport { writeBlumeConfig } from \"../shared.ts\";\nimport {\n rewriteNextraCallouts,\n stripNextraImports,\n unsupportedNextraComponents,\n} from \"./content.ts\";\nimport type { NextraPageOverride } from \"./frontmatter.ts\";\nimport { normalizeNextraPageMeta } from \"./frontmatter.ts\";\nimport { parseNextraMeta, toBlumeFolderMeta } from \"./meta.ts\";\n\nexport interface NextraMigrationResult {\n moved: number;\n warnings: string[];\n}\n\ninterface Tab {\n label: string;\n path: string;\n}\n\ninterface FolderIndex {\n childDirs: Map<string, Set<string>>;\n pagesByDir: Map<string, Map<string, string>>;\n}\n\ninterface MetaPlan {\n consumedMetas: string[];\n folderTitleByDir: Map<string, string>;\n metaByDir: Map<string, FolderMeta>;\n pageOverrides: Map<string, NextraPageOverride>;\n tabs: Tab[];\n unparseableMetas: { abs: string; rel: string }[];\n warnings: string[];\n}\n\ninterface PageMove {\n moved: number;\n removed: string[];\n skipped: string | null;\n unsupported: string[];\n}\n\n/** Nextra keeps docs under `content/` (App Router) or `pages/` (Pages Router). */\nconst SOURCE_DIRS = [\"content\", \"pages\"];\n\nconst PAGE_GLOB = \"**/*.{md,mdx}\";\nconst META_GLOB = \"**/_meta.{js,mjs,cjs,ts,jsx,tsx,json}\";\nconst IGNORE = [\"**/node_modules/**\"];\n\n/** Normalize a `dirname` result so the content root is \"\" rather than \".\". */\nconst normalizeDir = (dir: string): string => (dir === \".\" ? \"\" : dir);\n\nconst mergeOverride = (\n map: Map<string, NextraPageOverride>,\n key: string,\n patch: NextraPageOverride\n): void => {\n map.set(key, { ...map.get(key), ...patch });\n};\n\n/** Index which child slugs in each folder are pages vs subdirectories. */\nconst indexFolders = (\n base: string,\n pageFiles: string[],\n metaFiles: string[]\n): FolderIndex => {\n const pagesByDir = new Map<string, Map<string, string>>();\n const allDirs = new Set<string>([\"\"]);\n const registerDir = (dir: string): void => {\n let current = normalizeDir(dir);\n allDirs.add(current);\n while (current !== \"\") {\n current = normalizeDir(dirname(current));\n allDirs.add(current);\n }\n };\n\n for (const abs of pageFiles) {\n const rel = relative(base, abs);\n const dir = normalizeDir(dirname(rel));\n const slug = basename(rel).replace(/\\.mdx?$/u, \"\");\n const folder = pagesByDir.get(dir) ?? new Map<string, string>();\n folder.set(slug, abs);\n pagesByDir.set(dir, folder);\n registerDir(dir);\n }\n for (const abs of metaFiles) {\n registerDir(normalizeDir(dirname(relative(base, abs))));\n }\n\n const childDirs = new Map<string, Set<string>>();\n for (const dir of allDirs) {\n if (dir === \"\") {\n continue;\n }\n const parent = normalizeDir(dirname(dir));\n const children = childDirs.get(parent) ?? new Set<string>();\n children.add(basename(dir));\n childDirs.set(parent, children);\n }\n\n return { childDirs, pagesByDir };\n};\n\ninterface ParsedMeta {\n abs: string;\n ext: string;\n raw: string;\n rel: string;\n}\n\n/** Parse every `_meta`, accumulating ordering, titles, and page overrides. */\nconst planMetas = (metas: ParsedMeta[], index: FolderIndex): MetaPlan => {\n const plan: MetaPlan = {\n consumedMetas: [],\n folderTitleByDir: new Map(),\n metaByDir: new Map(),\n pageOverrides: new Map(),\n tabs: [],\n unparseableMetas: [],\n warnings: [],\n };\n\n for (const meta of metas) {\n const dir = normalizeDir(dirname(meta.rel));\n const entries = parseNextraMeta(meta.raw, meta.ext);\n if (!entries) {\n plan.unparseableMetas.push({ abs: meta.abs, rel: meta.rel });\n continue;\n }\n\n const conversion = toBlumeFolderMeta(entries, {\n hasDir: (slug) => index.childDirs.get(dir)?.has(slug) ?? false,\n hasPage: (slug) => index.pagesByDir.get(dir)?.has(slug) ?? false,\n });\n\n plan.metaByDir.set(dir, conversion.folderMeta);\n plan.consumedMetas.push(meta.abs);\n for (const [slug, title] of Object.entries(conversion.folderTitles)) {\n plan.folderTitleByDir.set(normalizeDir(join(dir, slug)), title);\n }\n for (const [slug, label] of Object.entries(conversion.pageLabels)) {\n const pageAbs = index.pagesByDir.get(dir)?.get(slug);\n if (pageAbs) {\n mergeOverride(plan.pageOverrides, pageAbs, { label });\n }\n }\n for (const slug of conversion.hiddenPages) {\n const pageAbs = index.pagesByDir.get(dir)?.get(slug);\n if (pageAbs) {\n mergeOverride(plan.pageOverrides, pageAbs, { hidden: true });\n }\n }\n if (dir === \"\") {\n plan.tabs.push(...conversion.navPages);\n } else if (conversion.navPages.length > 0) {\n plan.warnings.push(\n `Ignored ${conversion.navPages.length} top-nav page entr(y/ies) in ${meta.rel}; type:\"page\" only maps at the root.`\n );\n }\n plan.warnings.push(...conversion.warnings);\n }\n\n return plan;\n};\n\n/** Move and rewrite a single page into `docs/`. */\nconst movePage = async (\n abs: string,\n options: {\n base: string;\n overrides: Map<string, NextraPageOverride>;\n root: string;\n }\n): Promise<PageMove> => {\n const rel = relative(options.base, abs);\n const dest = join(options.root, \"docs\", rel);\n if (existsSync(dest)) {\n return { moved: 0, removed: [], skipped: rel, unsupported: [] };\n }\n const raw = await readFile(abs, \"utf-8\");\n const text = rewriteNextraCallouts(stripNextraImports(raw));\n const unsupported = unsupportedNextraComponents(text);\n const parsed = matter(text);\n const { data, removed } = normalizeNextraPageMeta(\n parsed.data,\n options.overrides.get(abs) ?? {}\n );\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, content, \"utf-8\");\n await rm(abs, { force: true });\n return { moved: 1, removed, skipped: null, unsupported };\n};\n\ninterface PageSummary {\n moved: number;\n removedKeys: string[];\n skipped: string[];\n unsupported: string[];\n}\n\nconst summarizePageMoves = (results: PageMove[]): PageSummary => {\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const skipped: string[] = [];\n for (const result of results) {\n moved += result.moved;\n if (result.skipped) {\n skipped.push(result.skipped);\n }\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n }\n return {\n moved,\n removedKeys: [...removedKeys],\n skipped,\n unsupported: [...unsupported],\n };\n};\n\n/** Write a `meta.ts` per folder, merging own ordering with a parent title. */\nconst writeFolderMetas = async (\n root: string,\n plan: MetaPlan\n): Promise<void> => {\n const dirs = new Set<string>([\n ...plan.metaByDir.keys(),\n ...plan.folderTitleByDir.keys(),\n ]);\n await Promise.all(\n [...dirs].map(async (dir) => {\n const finalMeta: FolderMeta = { ...plan.metaByDir.get(dir) };\n const title = plan.folderTitleByDir.get(dir);\n if (title !== undefined) {\n finalMeta.title = title;\n }\n if (Object.keys(finalMeta).length === 0) {\n return;\n }\n const dest = join(root, \"docs\", dir, \"meta.ts\");\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(\n dest,\n `import { defineMeta } from \"blume\";\\n\\nexport default defineMeta(${JSON.stringify(finalMeta, null, 2)});\\n`,\n \"utf-8\"\n );\n })\n );\n};\n\n/** Relocate `_meta` files we couldn't parse, untouched, for manual conversion. */\nconst relocateUnparseableMetas = async (\n root: string,\n metas: { abs: string; rel: string }[]\n): Promise<string[]> => {\n const warnings: string[] = [];\n await Promise.all(\n metas.map(async ({ abs, rel }) => {\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n warnings.push(`Skipped ${rel} (target already exists)`);\n return;\n }\n await mkdir(dirname(dest), { recursive: true });\n await rename(abs, dest);\n warnings.push(\n `Could not parse ${rel}; moved as-is — convert it to meta.ts by hand.`\n );\n })\n );\n return warnings;\n};\n\nconst buildConfig = (tabs: Tab[]): BlumeConfig =>\n tabs.length > 0\n ? { navigation: { tabs }, title: \"Documentation\" }\n : { title: \"Documentation\" };\n\n/**\n * Migrate a Nextra project to Blume: move every `.md`/`.mdx` page into `docs/`,\n * rewrite Nextra `<Callout>`s to directives, and convert each `_meta` file into\n * a typed `meta.ts`. Nextra declares a folder's title (and per-page sidebar\n * labels) in the *parent* `_meta`, so those are propagated into child `meta.ts`\n * titles and page frontmatter. Content lands in the default `docs/` root.\n */\nexport const migrateNextraProject = async (\n root: string\n): Promise<NextraMigrationResult> => {\n const sourceDir = SOURCE_DIRS.find((dir) => existsSync(join(root, dir)));\n if (!sourceDir) {\n await writeBlumeConfig(root, { title: \"Documentation\" });\n return {\n moved: 0,\n warnings: [\n \"No Nextra content directory (content/ or pages/) found; wrote a default config.\",\n ],\n };\n }\n const base = join(root, sourceDir);\n\n const pageFiles = await glob([PAGE_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n const metaFiles = await glob([META_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n\n const index = indexFolders(base, pageFiles, metaFiles);\n const metas = await Promise.all(\n metaFiles.map(async (abs) => ({\n abs,\n ext: extname(abs),\n raw: await readFile(abs, \"utf-8\"),\n rel: relative(base, abs),\n }))\n );\n const plan = planMetas(metas, index);\n\n const moves = await Promise.all(\n pageFiles.map((abs) =>\n movePage(abs, { base, overrides: plan.pageOverrides, root })\n )\n );\n const pages = summarizePageMoves(moves);\n\n await writeFolderMetas(root, plan);\n await Promise.all(plan.consumedMetas.map((abs) => rm(abs, { force: true })));\n const relocateWarnings = await relocateUnparseableMetas(\n root,\n plan.unparseableMetas\n );\n await writeBlumeConfig(root, buildConfig(plan.tabs));\n\n const warnings = [\n ...plan.warnings,\n ...pages.skipped.map((rel) => `Skipped ${rel} (target already exists)`),\n ...relocateWarnings,\n ];\n if (pages.removedKeys.length > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${pages.removedKeys.join(\", \")}.`\n );\n }\n if (pages.unsupported.length > 0) {\n warnings.push(\n `Components without a drop-in Blume equivalent need manual review: ${pages.unsupported.join(\", \")}.`\n );\n }\n warnings.push(\"Review blume.config.ts and the generated meta.ts files.\");\n\n return { moved: pages.moved, warnings };\n};\n",
155
+ "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, stat, writeFile } from \"node:fs/promises\";\n\nimport { dirname, join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { BlumeConfig } from \"../../core/schema.ts\";\nimport { ensurePackageJson } from \"../shared.ts\";\nimport { assetSegments } from \"./assets.ts\";\nimport { loadMintlifyConfig, partitionMintlifyRedirects } from \"./config.ts\";\nimport { mintlifyI18n } from \"./i18n.ts\";\nimport { transformMintlifyContent } from \"./transform.ts\";\n\nexport interface MintlifyMigrationResult {\n moved: number;\n warnings: string[];\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n\nconst hasFontFamily = (value: unknown): boolean => {\n const object = asRecord(value);\n if (!object) {\n return false;\n }\n const named = (child: unknown): boolean =>\n typeof asRecord(child)?.family === \"string\";\n return (\n typeof object.family === \"string\" ||\n named(object.heading) ||\n named(object.body)\n );\n};\n\n/**\n * Warn about Mintlify site chrome that Blume's config doesn't model, so it isn't\n * dropped silently: header links (`navbar.links`/`navbar.primary`), footer\n * socials (`footer.socials`), and fonts outside Blume's curated Google set. The\n * contextual page menu and last-updated timestamp are covered by Blume defaults\n * (page actions, git-derived dates), so they need no warning.\n */\nconst droppedChromeWarnings = (\n spec: Record<string, unknown>,\n config: BlumeConfig\n): string[] => {\n const warnings: string[] = [];\n const navbar = asRecord(spec.navbar);\n if (navbar && (navbar.links || navbar.primary)) {\n warnings.push(\n \"Header links (navbar.links/navbar.primary) have no blume.config equivalent and were dropped; re-add them with navigation.tabs or a Header layout override.\"\n );\n }\n if (asRecord(spec.footer)?.socials) {\n warnings.push(\n \"Footer social links (footer.socials) have no blume.config equivalent and were dropped; add them with a Footer layout override.\"\n );\n }\n if (hasFontFamily(spec.fonts ?? spec.font) && !config.theme?.fonts) {\n warnings.push(\n \"docs.json font family isn't in Blume's curated Google Fonts set; set theme.fonts to a supported slug or add @font-face rules in theme.css.\"\n );\n }\n return warnings;\n};\n\n/**\n * Warn about dynamic (wildcard/param) redirects the migrator dropped. Blume\n * redirects are static path-to-path, so a `:slug*`/`:id` source becomes an\n * unroutable Astro destination — kept ones crash the build. Point the user at\n * host-level rules that do support wildcards.\n */\nconst droppedRedirectWarnings = (spec: Record<string, unknown>): string[] => {\n const { dropped } = partitionMintlifyRedirects(spec);\n if (dropped.length === 0) {\n return [];\n }\n return [\n `Dropped ${dropped.length} dynamic redirect(s) Blume can't model as static path-to-path (${dropped.join(\", \")}); re-add them as host-level rules (e.g. _redirects or vercel.json).`,\n ];\n};\n\n/** Recursively drop `undefined`, empty arrays, and empty objects. */\nconst prune = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(prune);\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(value)) {\n const pruned = prune(raw);\n if (pruned === undefined) {\n continue;\n }\n if (Array.isArray(pruned) && pruned.length === 0) {\n continue;\n }\n if (\n pruned &&\n typeof pruned === \"object\" &&\n !Array.isArray(pruned) &&\n Object.keys(pruned).length === 0\n ) {\n continue;\n }\n out[key] = pruned;\n }\n return out;\n }\n return value;\n};\n\nconst writeBlumeConfig = async (\n root: string,\n config: BlumeConfig\n): Promise<void> => {\n const body = `import { defineConfig } from \"blume\";\\n\\nexport default defineConfig(${JSON.stringify(prune(config), null, 2)});\\n`;\n await writeFile(join(root, \"blume.config.ts\"), body, \"utf-8\");\n};\n\ninterface RelocatedAssets {\n /** Top-level dirs served in place via `content.assets` (no files moved). */\n served: string[];\n /** Top-level files moved under `public/`. */\n moved: string[];\n}\n\n/**\n * Make referenced top-level assets resolvable in Blume. Directories (e.g.\n * Mintlify's `images/`) are left in place and served via `content.assets`, so\n * the migration doesn't churn every file under them; loose top-level files\n * (a root `favicon.png`, `logo.png`) are moved under `public/` since a mount\n * points at a directory.\n */\nconst relocateAssets = async (\n root: string,\n segments: string[]\n): Promise<RelocatedAssets> => {\n const served: string[] = [];\n const moved: string[] = [];\n for (const segment of segments) {\n const source = join(root, segment);\n if (!existsSync(source) || segment === \"public\") {\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential fs stats\n const stats = await stat(source);\n if (stats.isDirectory()) {\n served.push(segment);\n continue;\n }\n const dest = join(root, \"public\", segment);\n if (existsSync(dest)) {\n continue;\n }\n // oxlint-disable-next-line no-await-in-loop -- sequential fs moves\n await mkdir(join(root, \"public\"), { recursive: true });\n // oxlint-disable-next-line no-await-in-loop -- sequential fs moves\n await rename(source, dest);\n moved.push(segment);\n }\n return { moved, served };\n};\n\n/**\n * Fold relocated assets into the config (served dirs become `content.assets`)\n * and record what happened. Served dirs stay in place; only loose files moved.\n */\nconst applyRelocatedAssets = (\n config: BlumeConfig,\n assets: RelocatedAssets,\n warnings: string[]\n): void => {\n if (assets.served.length > 0) {\n config.content = {\n ...config.content,\n assets: [\n ...new Set([...(config.content?.assets ?? []), ...assets.served]),\n ],\n };\n warnings.push(\n `Kept asset dir(s) in place, served via content.assets: ${assets.served.join(\", \")}.`\n );\n }\n if (assets.moved.length > 0) {\n warnings.push(`Moved assets into public/: ${assets.moved.join(\", \")}.`);\n }\n};\n\n/**\n * Remove the foreign Mintlify config now that it's been translated into\n * `blume.config.ts`. Leaving `docs.json`/`mint.json` on disk keeps the project a\n * bridge-mode candidate: `detectMintlifyBridge` fires on any later run where a\n * `blume.config.*` is absent (e.g. the config is deleted to re-run the\n * migration), silently serving the *un-migrated* Mintlify project instead of the\n * converted one. Removing it makes the conversion permanent — matching the\n * migrator's promise and how it already deletes inlined snippets.\n */\nconst removeForeignConfig = async (\n root: string,\n warnings: string[]\n): Promise<void> => {\n const removed: string[] = [];\n for (const name of [\"docs.json\", \"mint.json\"]) {\n const file = join(root, name);\n if (existsSync(file)) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs removes\n await rm(file, { force: true });\n removed.push(name);\n }\n }\n if (removed.length > 0) {\n warnings.push(\n `Removed ${removed.join(\", \")} (translated to blume.config.ts) so \"blume dev\" no longer falls back to Mintlify bridge mode.`\n );\n }\n};\n\n/**\n * Scaffold the project files a config-only Mintlify repo lacks: a runnable\n * `package.json` (it ships no npm manifest) and a `.gitignore` for Blume's\n * generated `.blume/` runtime and `dist/` build output. Both are idempotent —\n * an existing file is extended, not overwritten — and noted in the warnings.\n */\nconst scaffoldProjectFiles = async (\n root: string,\n warnings: string[]\n): Promise<void> => {\n if (await ensurePackageJson(root)) {\n warnings.push(\n \"Created a package.json with blume as a dependency; run `npm install`, then `npm run dev`.\"\n );\n }\n const ignored = await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n if (ignored.length > 0) {\n warnings.push(`Added ${ignored.join(\", \")} to .gitignore.`);\n }\n};\n\n/**\n * Delete the inlined markdown snippets. Component files (e.g. `.jsx`) are kept\n * because their imports were rewritten to resolve against `/snippets`.\n */\nconst cleanupSnippets = async (\n root: string,\n kept: Set<string>,\n warnings: string[]\n): Promise<void> => {\n const dir = join(root, \"snippets\");\n if (!existsSync(dir)) {\n return;\n }\n const markdown = await glob([\"**/*.{md,mdx}\"], { absolute: true, cwd: dir });\n for (const file of markdown) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs removes\n await rm(file, { force: true });\n }\n const remaining = await glob([\"**/*\"], { cwd: dir, dot: true });\n if (remaining.length === 0) {\n await rm(dir, { force: true, recursive: true });\n warnings.push(\"Inlined and removed the /snippets directory.\");\n } else {\n warnings.push(\n `Inlined markdown snippets; kept ${remaining.length} component file(s) under /snippets.`\n );\n }\n if (kept.size > 0) {\n warnings.push(\n `Rewrote ${kept.size} component snippet import(s) to relative paths; verify they resolve.`\n );\n }\n};\n\n// Root-absolute asset references in page content (`![…](/screenshots/a.png)`,\n// `src=\"/img/x.svg\"`). Mintlify serves any top-level dir at the site root, so\n// dirs referenced only by content — not the config — must also be mounted.\nconst CONTENT_ASSET_REF =\n /(?:\\]\\(|src=[\"'])(?<path>\\/[^\\s\"')]+\\.(?:avif|bmp|gif|ico|jpe?g|mov|mp4|pdf|png|svg|webm|webp|zip))/giu;\n\nconst contentAssetSegments = (content: string): string[] =>\n [...content.matchAll(CONTENT_ASSET_REF)].flatMap((match) => {\n const segment = match.groups?.path?.split(\"/\")[1];\n return segment ? [segment] : [];\n });\n\n/**\n * Rewrite every page to idiomatic Blume MDX in place, collecting what was\n * dropped or kept for the migration summary. A page whose transform throws\n * (a dangling snippet import, a snippet cycle) must not abort the whole\n * migration mid-rewrite; it is left as-is with a warning.\n */\nconst rewritePagesInPlace = async (\n files: string[],\n options: {\n root: string;\n variables: Record<string, string>;\n warnings: string[];\n }\n): Promise<{\n moved: number;\n removedKeys: Set<string>;\n unsupported: Set<string>;\n keptComponents: Set<string>;\n assetDirs: Set<string>;\n}> => {\n const { root, variables, warnings } = options;\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const keptComponents = new Set<string>();\n const assetDirs = new Set<string>();\n for (const file of files) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n const raw = await readFile(file, \"utf-8\");\n let result: Awaited<ReturnType<typeof transformMintlifyContent>>;\n try {\n // oxlint-disable-next-line no-await-in-loop -- sequential transforms\n result = await transformMintlifyContent(raw, {\n filePath: file,\n root,\n variables,\n });\n } catch (error) {\n warnings.push(\n `Skipped rewriting ${relative(root, file)}: ${(error as Error).message}. The page was left unconverted — fix it by hand.`\n );\n continue;\n }\n if (result.content !== raw) {\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n await mkdir(dirname(file), { recursive: true });\n // oxlint-disable-next-line no-await-in-loop -- sequential fs writes\n await writeFile(file, result.content, \"utf-8\");\n }\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n for (const name of result.components) {\n keptComponents.add(name);\n }\n for (const segment of contentAssetSegments(result.content)) {\n assetDirs.add(segment);\n }\n moved += 1;\n }\n return { assetDirs, keptComponents, moved, removedKeys, unsupported };\n};\n\n/**\n * Migrate a Mintlify project to Blume: translate `docs.json`/`mint.json` into\n * `blume.config.ts`, rewrite every page to idiomatic Blume MDX in place, and\n * relocate static assets. Content stays at the project root (`content.root`\n * is `\".\"`).\n */\nexport const migrateMintlifyProject = async (\n root: string\n): Promise<MintlifyMigrationResult> => {\n const warnings: string[] = [];\n const configFile = existsSync(join(root, \"docs.json\"))\n ? join(root, \"docs.json\")\n : join(root, \"mint.json\");\n\n let config: BlumeConfig;\n if (existsSync(configFile)) {\n config = await loadMintlifyConfig(root, configFile);\n const spec = JSON.parse(await readFile(configFile, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const i18n = mintlifyI18n(spec);\n if (i18n) {\n config.i18n = i18n;\n // Language switching is handled by Blume i18n, not a nav selector.\n if (config.navigation?.selectors) {\n config.navigation.selectors = config.navigation.selectors.filter(\n (selector) => selector.kind !== \"language\"\n );\n }\n warnings.push(\n `Mapped ${i18n.locales.length} languages to i18n.locales (default: ${i18n.defaultLocale}); review the locale labels.`\n );\n }\n const openapiSources = config.openapi?.sources ?? [];\n if (openapiSources.length > 0) {\n warnings.push(\n `Mapped ${openapiSources.length} OpenAPI spec source(s) to openapi.sources (native reference renderer); verify each spec path or URL resolves.`\n );\n }\n warnings.push(...droppedChromeWarnings(spec, config));\n warnings.push(...droppedRedirectWarnings(spec));\n } else {\n warnings.push(\"No docs.json or mint.json found; writing a default config.\");\n config = { content: { root: \".\" }, title: \"Documentation\" };\n }\n\n const variables = (config.variables as Record<string, string>) ?? {};\n // Globals are inlined into content below; Blume has no runtime substitution.\n config.variables = undefined;\n\n const files = await glob([\"**/*.{md,mdx}\"], {\n absolute: true,\n cwd: root,\n ignore: [\n \"node_modules/**\",\n \".blume/**\",\n \"dist/**\",\n \"public/**\",\n \"snippets/**\",\n ],\n });\n\n const { moved, removedKeys, unsupported, keptComponents, assetDirs } =\n await rewritePagesInPlace(files, { root, variables, warnings });\n\n // Config-referenced segments (logo/favicon/backgrounds + /images) plus dirs\n // referenced only by page content — Mintlify serves every top-level dir at\n // the site root, so both kinds must stay resolvable after migration.\n const assets = await relocateAssets(root, [\n ...new Set([...assetSegments(config), ...assetDirs]),\n ]);\n await cleanupSnippets(root, keptComponents, warnings);\n\n if (config.content?.exclude) {\n config.content.exclude = [...new Set(config.content.exclude)];\n }\n applyRelocatedAssets(config, assets, warnings);\n await writeBlumeConfig(root, config);\n // Drop the source config only after the Blume config is safely on disk, so a\n // mid-migration failure never leaves the project with neither.\n await removeForeignConfig(root, warnings);\n await scaffoldProjectFiles(root, warnings);\n\n if (Object.keys(variables).length > 0) {\n warnings.push(\n `Inlined ${Object.keys(variables).length} docs.json variable(s) into content; Blume has no runtime variable substitution.`\n );\n }\n if (removedKeys.size > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${[...removedKeys].join(\", \")}.`\n );\n }\n if (unsupported.size > 0) {\n warnings.push(\n `Components without a Blume equivalent need manual review: ${[...unsupported].join(\", \")}.`\n );\n }\n warnings.push(\n \"Review blume.config.ts; navigation, theme, and chrome were mapped from docs.json.\"\n );\n\n return { moved, warnings };\n};\n",
156
+ "import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\n\nimport { basename, dirname, extname, join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { BlumeConfig, FolderMeta } from \"../../core/schema.ts\";\nimport { rewriteFrameworkScripts, writeBlumeConfig } from \"../shared.ts\";\nimport {\n rewriteNextraCallouts,\n stripNextraImports,\n unsupportedNextraComponents,\n} from \"./content.ts\";\nimport type { NextraPageOverride } from \"./frontmatter.ts\";\nimport { normalizeNextraPageMeta } from \"./frontmatter.ts\";\nimport { parseNextraMeta, toBlumeFolderMeta } from \"./meta.ts\";\n\nexport interface NextraMigrationResult {\n moved: number;\n warnings: string[];\n}\n\ninterface Tab {\n label: string;\n path: string;\n}\n\ninterface FolderIndex {\n childDirs: Map<string, Set<string>>;\n pagesByDir: Map<string, Map<string, string>>;\n}\n\ninterface MetaPlan {\n consumedMetas: string[];\n folderTitleByDir: Map<string, string>;\n metaByDir: Map<string, FolderMeta>;\n pageOverrides: Map<string, NextraPageOverride>;\n tabs: Tab[];\n unparseableMetas: { abs: string; rel: string }[];\n warnings: string[];\n}\n\ninterface PageMove {\n moved: number;\n removed: string[];\n skipped: string | null;\n unsupported: string[];\n}\n\n/** Nextra keeps docs under `content/` (App Router) or `pages/` (Pages Router). */\nconst SOURCE_DIRS = [\"content\", \"pages\"];\n\nconst PAGE_GLOB = \"**/*.{md,mdx}\";\nconst META_GLOB = \"**/_meta.{js,mjs,cjs,ts,jsx,tsx,json}\";\nconst IGNORE = [\"**/node_modules/**\"];\n\n/** Normalize a `dirname` result so the content root is \"\" rather than \".\". */\nconst normalizeDir = (dir: string): string => (dir === \".\" ? \"\" : dir);\n\nconst mergeOverride = (\n map: Map<string, NextraPageOverride>,\n key: string,\n patch: NextraPageOverride\n): void => {\n map.set(key, { ...map.get(key), ...patch });\n};\n\n/** Index which child slugs in each folder are pages vs subdirectories. */\nconst indexFolders = (\n base: string,\n pageFiles: string[],\n metaFiles: string[]\n): FolderIndex => {\n const pagesByDir = new Map<string, Map<string, string>>();\n const allDirs = new Set<string>([\"\"]);\n const registerDir = (dir: string): void => {\n let current = normalizeDir(dir);\n allDirs.add(current);\n while (current !== \"\") {\n current = normalizeDir(dirname(current));\n allDirs.add(current);\n }\n };\n\n for (const abs of pageFiles) {\n const rel = relative(base, abs);\n const dir = normalizeDir(dirname(rel));\n const slug = basename(rel).replace(/\\.mdx?$/u, \"\");\n const folder = pagesByDir.get(dir) ?? new Map<string, string>();\n folder.set(slug, abs);\n pagesByDir.set(dir, folder);\n registerDir(dir);\n }\n for (const abs of metaFiles) {\n registerDir(normalizeDir(dirname(relative(base, abs))));\n }\n\n const childDirs = new Map<string, Set<string>>();\n for (const dir of allDirs) {\n if (dir === \"\") {\n continue;\n }\n const parent = normalizeDir(dirname(dir));\n const children = childDirs.get(parent) ?? new Set<string>();\n children.add(basename(dir));\n childDirs.set(parent, children);\n }\n\n return { childDirs, pagesByDir };\n};\n\ninterface ParsedMeta {\n abs: string;\n ext: string;\n raw: string;\n rel: string;\n}\n\n/** Parse every `_meta`, accumulating ordering, titles, and page overrides. */\nconst planMetas = (metas: ParsedMeta[], index: FolderIndex): MetaPlan => {\n const plan: MetaPlan = {\n consumedMetas: [],\n folderTitleByDir: new Map(),\n metaByDir: new Map(),\n pageOverrides: new Map(),\n tabs: [],\n unparseableMetas: [],\n warnings: [],\n };\n\n for (const meta of metas) {\n const dir = normalizeDir(dirname(meta.rel));\n const entries = parseNextraMeta(meta.raw, meta.ext);\n if (!entries) {\n plan.unparseableMetas.push({ abs: meta.abs, rel: meta.rel });\n continue;\n }\n\n const conversion = toBlumeFolderMeta(entries, {\n hasDir: (slug) => index.childDirs.get(dir)?.has(slug) ?? false,\n hasPage: (slug) => index.pagesByDir.get(dir)?.has(slug) ?? false,\n });\n\n plan.metaByDir.set(dir, conversion.folderMeta);\n plan.consumedMetas.push(meta.abs);\n for (const [slug, title] of Object.entries(conversion.folderTitles)) {\n plan.folderTitleByDir.set(normalizeDir(join(dir, slug)), title);\n }\n for (const [slug, label] of Object.entries(conversion.pageLabels)) {\n const pageAbs = index.pagesByDir.get(dir)?.get(slug);\n if (pageAbs) {\n mergeOverride(plan.pageOverrides, pageAbs, { label });\n }\n }\n for (const slug of conversion.hiddenPages) {\n const pageAbs = index.pagesByDir.get(dir)?.get(slug);\n if (pageAbs) {\n mergeOverride(plan.pageOverrides, pageAbs, { hidden: true });\n }\n }\n if (dir === \"\") {\n plan.tabs.push(...conversion.navPages);\n } else if (conversion.navPages.length > 0) {\n plan.warnings.push(\n `Ignored ${conversion.navPages.length} top-nav page entr(y/ies) in ${meta.rel}; type:\"page\" only maps at the root.`\n );\n }\n plan.warnings.push(...conversion.warnings);\n }\n\n return plan;\n};\n\n/** Move and rewrite a single page into `docs/`. */\nconst movePage = async (\n abs: string,\n options: {\n base: string;\n overrides: Map<string, NextraPageOverride>;\n root: string;\n }\n): Promise<PageMove> => {\n const rel = relative(options.base, abs);\n const dest = join(options.root, \"docs\", rel);\n if (existsSync(dest)) {\n return { moved: 0, removed: [], skipped: rel, unsupported: [] };\n }\n const raw = await readFile(abs, \"utf-8\");\n const text = rewriteNextraCallouts(stripNextraImports(raw));\n const unsupported = unsupportedNextraComponents(text);\n const parsed = matter(text);\n const { data, removed } = normalizeNextraPageMeta(\n parsed.data,\n options.overrides.get(abs) ?? {}\n );\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(dest, content, \"utf-8\");\n await rm(abs, { force: true });\n return { moved: 1, removed, skipped: null, unsupported };\n};\n\ninterface PageSummary {\n moved: number;\n removedKeys: string[];\n skipped: string[];\n unsupported: string[];\n}\n\nconst summarizePageMoves = (results: PageMove[]): PageSummary => {\n let moved = 0;\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n const skipped: string[] = [];\n for (const result of results) {\n moved += result.moved;\n if (result.skipped) {\n skipped.push(result.skipped);\n }\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n }\n return {\n moved,\n removedKeys: [...removedKeys],\n skipped,\n unsupported: [...unsupported],\n };\n};\n\n/** Write a `meta.ts` per folder, merging own ordering with a parent title. */\nconst writeFolderMetas = async (\n root: string,\n plan: MetaPlan\n): Promise<void> => {\n const dirs = new Set<string>([\n ...plan.metaByDir.keys(),\n ...plan.folderTitleByDir.keys(),\n ]);\n await Promise.all(\n [...dirs].map(async (dir) => {\n const finalMeta: FolderMeta = { ...plan.metaByDir.get(dir) };\n const title = plan.folderTitleByDir.get(dir);\n if (title !== undefined) {\n finalMeta.title = title;\n }\n if (Object.keys(finalMeta).length === 0) {\n return;\n }\n const dest = join(root, \"docs\", dir, \"meta.ts\");\n await mkdir(dirname(dest), { recursive: true });\n await writeFile(\n dest,\n `import { defineMeta } from \"blume\";\\n\\nexport default defineMeta(${JSON.stringify(finalMeta, null, 2)});\\n`,\n \"utf-8\"\n );\n })\n );\n};\n\n/** Relocate `_meta` files we couldn't parse, untouched, for manual conversion. */\nconst relocateUnparseableMetas = async (\n root: string,\n metas: { abs: string; rel: string }[]\n): Promise<string[]> => {\n const warnings: string[] = [];\n await Promise.all(\n metas.map(async ({ abs, rel }) => {\n const dest = join(root, \"docs\", rel);\n if (existsSync(dest)) {\n warnings.push(`Skipped ${rel} (target already exists)`);\n return;\n }\n await mkdir(dirname(dest), { recursive: true });\n await rename(abs, dest);\n warnings.push(\n `Could not parse ${rel}; moved as-is — convert it to meta.ts by hand.`\n );\n })\n );\n return warnings;\n};\n\nconst buildConfig = (tabs: Tab[]): BlumeConfig =>\n tabs.length > 0\n ? { navigation: { tabs }, title: \"Documentation\" }\n : { title: \"Documentation\" };\n\n/**\n * Migrate a Nextra project to Blume: move every `.md`/`.mdx` page into `docs/`,\n * rewrite Nextra `<Callout>`s to directives, and convert each `_meta` file into\n * a typed `meta.ts`. Nextra declares a folder's title (and per-page sidebar\n * labels) in the *parent* `_meta`, so those are propagated into child `meta.ts`\n * titles and page frontmatter. Content lands in the default `docs/` root.\n */\nexport const migrateNextraProject = async (\n root: string\n): Promise<NextraMigrationResult> => {\n const sourceDir = SOURCE_DIRS.find((dir) => existsSync(join(root, dir)));\n if (!sourceDir) {\n await writeBlumeConfig(root, { title: \"Documentation\" });\n return {\n moved: 0,\n warnings: [\n \"No Nextra content directory (content/ or pages/) found; wrote a default config.\",\n ],\n };\n }\n const base = join(root, sourceDir);\n\n const pageFiles = await glob([PAGE_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n const metaFiles = await glob([META_GLOB], {\n absolute: true,\n cwd: base,\n ignore: IGNORE,\n });\n\n const index = indexFolders(base, pageFiles, metaFiles);\n const metas = await Promise.all(\n metaFiles.map(async (abs) => ({\n abs,\n ext: extname(abs),\n raw: await readFile(abs, \"utf-8\"),\n rel: relative(base, abs),\n }))\n );\n const plan = planMetas(metas, index);\n\n const moves = await Promise.all(\n pageFiles.map((abs) =>\n movePage(abs, { base, overrides: plan.pageOverrides, root })\n )\n );\n const pages = summarizePageMoves(moves);\n\n await writeFolderMetas(root, plan);\n await Promise.all(plan.consumedMetas.map((abs) => rm(abs, { force: true })));\n const relocateWarnings = await relocateUnparseableMetas(\n root,\n plan.unparseableMetas\n );\n await writeBlumeConfig(root, buildConfig(plan.tabs));\n\n // Tear down the Next scaffolding like the Fumadocs migrator does — without\n // this, `npm run dev` still launches Next against the gutted content tree.\n const scriptsRewritten = await rewriteFrameworkScripts(\n root,\n /\\bnext\\b/u,\n /\\bnextra\\b/u\n );\n await ensureGitignore(root, [\".blume/\", \"dist/\"]);\n\n const warnings = [\n ...plan.warnings,\n ...pages.skipped.map((rel) => `Skipped ${rel} (target already exists)`),\n ...relocateWarnings,\n ];\n if (scriptsRewritten) {\n warnings.push(\n \"Repointed package.json scripts at Blume (dev/build/preview); remove the leftover Next/Nextra dependencies and next.config/theme.config by hand.\"\n );\n }\n if (pages.removedKeys.length > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${pages.removedKeys.join(\", \")}.`\n );\n }\n if (pages.unsupported.length > 0) {\n warnings.push(\n `Components without a drop-in Blume equivalent need manual review: ${pages.unsupported.join(\", \")}.`\n );\n }\n warnings.push(\"Review blume.config.ts and the generated meta.ts files.\");\n\n return { moved: pages.moved, warnings };\n};\n",
155
157
  "import { rewriteCallouts } from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Nextra-only MDX into idiomatic Blume\n * markup. Runs once at migration time.\n */\n\n/** Nextra `<Callout type=\"X\">` values mapped to Blume directive names. */\nconst CALLOUT_TYPE_DIRECTIVES: Record<string, string> = {\n default: \"note\",\n error: \"danger\",\n info: \"info\",\n warning: \"warning\",\n};\n\n/**\n * Convert Nextra `<Callout>` components (with an optional `type`) into Blume\n * `:::` directives. A bare `<Callout>` becomes `:::note`; the `emoji` prop is\n * dropped.\n */\nexport const rewriteNextraCallouts = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: {},\n tags: [\"Callout\"],\n typeDirectives: CALLOUT_TYPE_DIRECTIVES,\n });\n\nconst NEXTRA_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"']nextra(?:\\/[^\"']*)?[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * Drop `import … from \"nextra/…\"` statements. Blume injects its components\n * globally, so these imports would fail to resolve once `nextra` is gone.\n */\nexport const stripNextraImports = (source: string): string =>\n source.replace(NEXTRA_IMPORT, \"\");\n\n/** Nextra components with no drop-in Blume equivalent — flagged for review. */\nconst UNSUPPORTED_COMPONENTS = [\"Bleed\", \"Cards\", \"FileTree\", \"Steps\", \"Tabs\"];\n\n/** Names of Nextra components in `source` that need manual attention. */\nexport const unsupportedNextraComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n",
156
158
  "import { stripUnknownPageMeta } from \"../shared.ts\";\n\nexport interface NextraPageOverride {\n hidden?: boolean;\n label?: string;\n}\n\n/**\n * Fold Nextra `_meta` overrides (a sidebar label, `display: \"hidden\"`) into a\n * page's frontmatter, then drop any keys Blume's strict page schema rejects.\n * Nextra's own `title`/`description`/`sidebarTitle` already validate and pass\n * through untouched. Explicit page frontmatter wins over `_meta` overrides.\n */\nexport const normalizeNextraPageMeta = (\n value: unknown,\n override: NextraPageOverride = {}\n): { data: Record<string, unknown>; removed: string[] } => {\n const source =\n value && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : {};\n const data: Record<string, unknown> = { ...source };\n\n const sidebar: Record<string, unknown> = {\n ...(typeof source.sidebar === \"object\" && source.sidebar !== null\n ? (source.sidebar as Record<string, unknown>)\n : {}),\n };\n if (override.label !== undefined && sidebar.label === undefined) {\n sidebar.label = override.label;\n }\n if (override.hidden && sidebar.hidden === undefined) {\n sidebar.hidden = true;\n }\n if (Object.keys(sidebar).length > 0) {\n data.sidebar = sidebar;\n }\n\n return stripUnknownPageMeta(data);\n};\n",
157
159
  "import type { FolderMeta } from \"../../core/schema.ts\";\nimport {\n parseKey,\n readString,\n scanObject,\n splitKeyValue,\n stripJsComments,\n} from \"../shared.ts\";\n\n/**\n * Read Nextra `_meta` files (ordering + per-entry config) and map them onto\n * Blume's folder `meta.ts` shape. `_meta.js`/`_meta.ts` are parsed by extracting\n * their default-exported object literal as text — Nextra meta is overwhelmingly\n * a map of string titles and simple config objects — rather than executing user\n * code (matching the other migrators, which never eval). Entries whose value is\n * an expression (JSX title, imported component, computed) keep their slug for\n * ordering but are otherwise flagged `unparseable`. The low-level JS scanners\n * live in `../shared.ts` so the Starlight migrator reuses them.\n */\n\nexport interface NextraMetaEntry {\n display?: string;\n href?: string;\n newWindow?: boolean;\n slug: string;\n title?: string;\n type?: string;\n /** The value couldn't be read beyond its key (e.g. a JSX/expression title). */\n unparseable: boolean;\n}\n\nconst DEFAULT_EXPORT = /(?:export\\s+default|module\\.exports\\s*=)\\s*/u;\n\n/** Locate and split the default-exported object literal into raw entries. */\nconst extractObjectEntries = (source: string): string[] | null => {\n const clean = stripJsComments(source);\n const marker = DEFAULT_EXPORT.exec(clean);\n if (!marker) {\n return null;\n }\n let index = marker.index + marker[0].length;\n while (index < clean.length && /\\s/u.test(clean[index] ?? \"\")) {\n index += 1;\n }\n if (clean[index] !== \"{\") {\n return null;\n }\n return scanObject(clean, index)?.entries ?? null;\n};\n\nconst applyField = (\n target: NextraMetaEntry,\n key: string,\n value: string\n): void => {\n if (key === \"newWindow\") {\n const flag = value.trim();\n if (flag === \"true\") {\n target.newWindow = true;\n } else if (flag === \"false\") {\n target.newWindow = false;\n }\n return;\n }\n const str = readString(value);\n if (str === null) {\n return;\n }\n if (key === \"title\") {\n target.title = str;\n } else if (key === \"type\") {\n target.type = str;\n } else if (key === \"display\") {\n target.display = str;\n } else if (key === \"href\") {\n target.href = str;\n }\n};\n\nconst entryFromObjectEntries = (\n slug: string,\n entries: string[]\n): NextraMetaEntry => {\n const entry: NextraMetaEntry = { slug, unparseable: false };\n for (const raw of entries) {\n const kv = splitKeyValue(raw);\n if (kv?.key) {\n applyField(entry, parseKey(kv.key), kv.value);\n }\n }\n return entry;\n};\n\nconst entryFromValue = (slug: string, value: string): NextraMetaEntry => {\n const trimmed = value.trim();\n const [first] = trimmed;\n if (first === '\"' || first === \"'\" || first === \"`\") {\n const str = readString(trimmed);\n return str === null\n ? { slug, unparseable: true }\n : { slug, title: str, unparseable: false };\n }\n if (first === \"{\") {\n const scan = scanObject(trimmed, 0);\n if (scan) {\n return entryFromObjectEntries(slug, scan.entries);\n }\n }\n return { slug, unparseable: true };\n};\n\nconst entryFromJson = (slug: string, value: unknown): NextraMetaEntry => {\n if (typeof value === \"string\") {\n return { slug, title: value, unparseable: false };\n }\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n const entry: NextraMetaEntry = { slug, unparseable: false };\n if (typeof obj.title === \"string\") {\n entry.title = obj.title;\n }\n if (typeof obj.type === \"string\") {\n entry.type = obj.type;\n }\n if (typeof obj.display === \"string\") {\n entry.display = obj.display;\n }\n if (typeof obj.href === \"string\") {\n entry.href = obj.href;\n }\n if (typeof obj.newWindow === \"boolean\") {\n entry.newWindow = obj.newWindow;\n }\n return entry;\n }\n return { slug, unparseable: true };\n};\n\n/**\n * Parse a Nextra `_meta` file into ordered entries, or null if no object\n * literal could be located (the caller then moves the file as-is and warns).\n */\nexport const parseNextraMeta = (\n source: string,\n ext: string\n): NextraMetaEntry[] | null => {\n if (ext === \".json\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(source);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n return Object.entries(parsed as Record<string, unknown>).map(\n ([slug, value]) => entryFromJson(slug, value)\n );\n }\n\n const rawEntries = extractObjectEntries(source);\n if (!rawEntries) {\n return null;\n }\n const result: NextraMetaEntry[] = [];\n for (const raw of rawEntries) {\n const kv = splitKeyValue(raw);\n if (kv?.key) {\n result.push(entryFromValue(parseKey(kv.key), kv.value));\n }\n }\n return result;\n};\n\nexport interface NextraMetaConversion {\n folderMeta: FolderMeta;\n /** Child subfolder slug -> title (Nextra declares a folder's title in its parent). */\n folderTitles: Record<string, string>;\n /** Child page slugs to hide from the sidebar (`display: \"hidden\"`). */\n hiddenPages: string[];\n /** `type: \"page\"` entries -> top-nav tabs (only used for the root meta). */\n navPages: { label: string; path: string }[];\n /** Child page slug -> sidebar label (a Nextra `_meta` string title). */\n pageLabels: Record<string, string>;\n warnings: string[];\n}\n\n/**\n * Map parsed Nextra entries onto a Blume `FolderMeta` (`pages` ordering) plus\n * the cross-file overrides the orchestrator threads into child `meta.ts` titles\n * and page frontmatter. `hasPage`/`hasDir` report whether a slug resolves to a\n * content file or a subdirectory in this folder.\n */\nexport const toBlumeFolderMeta = (\n entries: NextraMetaEntry[],\n options: {\n hasDir: (slug: string) => boolean;\n hasPage: (slug: string) => boolean;\n }\n): NextraMetaConversion => {\n const pages: string[] = [];\n const folderTitles: Record<string, string> = {};\n const pageLabels: Record<string, string> = {};\n const hiddenPages: string[] = [];\n const navPages: { label: string; path: string }[] = [];\n const warnings: string[] = [];\n\n for (const entry of entries) {\n const { slug } = entry;\n const label = entry.title ?? slug;\n\n if (entry.type === \"separator\") {\n warnings.push(\n `Dropped separator \"${label}\" — recreate it with a sidebar group if needed.`\n );\n continue;\n }\n if (entry.href) {\n warnings.push(\n `External link \"${label}\" (${entry.href}) — add it to navbar.links manually.`\n );\n continue;\n }\n if (entry.type === \"menu\") {\n warnings.push(\n `Dropped navbar menu \"${label}\" — recreate it via navbar/navigation config.`\n );\n continue;\n }\n if (entry.type === \"page\") {\n navPages.push({ label, path: slug === \"index\" ? \"/\" : `/${slug}` });\n continue;\n }\n\n const isPage = options.hasPage(slug);\n const isDir = options.hasDir(slug);\n if (!(isPage || isDir)) {\n continue;\n }\n if (entry.display === \"hidden\") {\n if (isPage) {\n hiddenPages.push(slug);\n }\n continue;\n }\n\n pages.push(slug);\n if (entry.title) {\n if (isDir) {\n folderTitles[slug] = entry.title;\n } else {\n pageLabels[slug] = entry.title;\n }\n }\n }\n\n return {\n folderMeta: pages.length > 0 ? { pages } : {},\n folderTitles,\n hiddenPages,\n navPages,\n pageLabels,\n warnings,\n };\n};\n",
158
160
  "import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport matter from \"../../core/frontmatter.ts\";\nimport { writeBlumeConfig } from \"../shared.ts\";\nimport { loadStarlightConfig, mapStarlightConfig } from \"./config.ts\";\nimport {\n hasAliasedAssets,\n rewriteStarlightAsides,\n rewriteStarlightComponents,\n stripStarlightImports,\n unsupportedStarlightComponents,\n} from \"./content.ts\";\nimport { normalizeStarlightPageMeta } from \"./frontmatter.ts\";\nimport { starlightI18n } from \"./i18n.ts\";\n\nexport interface StarlightMigrationResult {\n moved: number;\n warnings: string[];\n}\n\n/** Starlight always keeps its docs collection here. */\nconst CONTENT_DIR = \"src/content/docs\";\n\ninterface PageResult {\n aliased: boolean;\n removed: string[];\n unsupported: string[];\n}\n\n/** Rewrite one Starlight page to idiomatic Blume MDX, in place. */\nconst transformPage = async (file: string): Promise<PageResult> => {\n const raw = await readFile(file, \"utf-8\");\n let text = stripStarlightImports(raw);\n text = rewriteStarlightAsides(text);\n text = rewriteStarlightComponents(text);\n const unsupported = unsupportedStarlightComponents(text);\n const aliased = hasAliasedAssets(text);\n\n const parsed = matter(text);\n const { data, removed } = normalizeStarlightPageMeta(parsed.data);\n const content =\n Object.keys(data).length > 0\n ? matter.stringify(parsed.content, data)\n : parsed.content;\n if (content !== raw) {\n await writeFile(file, content, \"utf-8\");\n }\n return { aliased, removed, unsupported };\n};\n\n/**\n * Migrate a Starlight project to Blume: translate the `starlight({...})` options\n * out of `astro.config.*` into `blume.config.ts`, then rewrite each page under\n * `src/content/docs` to idiomatic Blume MDX in place (asides → directives,\n * component renames, frontmatter mapping). Content stays put — the generated\n * config points `content.root` at `src/content/docs`.\n */\nexport const migrateStarlightProject = async (\n root: string\n): Promise<StarlightMigrationResult> => {\n const { options, warnings } = await loadStarlightConfig(root);\n const config = mapStarlightConfig(options, warnings);\n\n const i18n = starlightI18n(options);\n if (i18n) {\n config.i18n = i18n;\n warnings.push(\n `Mapped ${i18n.locales.length} locale(s) to i18n (default: ${i18n.defaultLocale}); review the locale labels.`\n );\n }\n\n const base = join(root, CONTENT_DIR);\n if (!existsSync(base)) {\n await writeBlumeConfig(root, config);\n return {\n moved: 0,\n warnings: [\n ...warnings,\n `Content directory ${CONTENT_DIR} not found; wrote blume.config.ts only.`,\n ],\n };\n }\n\n const files = await glob([\"**/*.{md,mdx}\"], { absolute: true, cwd: base });\n const results = await Promise.all(files.map(transformPage));\n\n await writeBlumeConfig(root, config);\n\n const removedKeys = new Set<string>();\n const unsupported = new Set<string>();\n let aliasedAssets = false;\n for (const result of results) {\n for (const key of result.removed) {\n removedKeys.add(key);\n }\n for (const name of result.unsupported) {\n unsupported.add(name);\n }\n aliasedAssets ||= result.aliased;\n }\n\n if (removedKeys.size > 0) {\n warnings.push(\n `Dropped unsupported page frontmatter keys: ${[...removedKeys].join(\", \")}.`\n );\n if (removedKeys.has(\"hero\") || removedKeys.has(\"template\")) {\n warnings.push(\n \"Pages using `template: splash` / `hero` have no automatic equivalent — rebuild them as custom pages under `pages/`.\"\n );\n }\n }\n if (unsupported.size > 0) {\n warnings.push(\n `Components without a drop-in Blume equivalent need manual review: ${[...unsupported].join(\", \")}.`\n );\n }\n if (aliasedAssets) {\n warnings.push(\n \"Some pages reference images via `~/`/`@/` aliases; rewrite them to relative or /public paths.\"\n );\n }\n warnings.push(\n \"Content stays under src/content/docs; the now-unused astro.config.*, src/content.config.ts, and @astrojs/starlight dependency are safe to remove.\"\n );\n\n return { moved: results.length, warnings };\n};\n",
159
161
  "import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport type { BlumeConfig, SidebarItemConfig } from \"../../core/schema.ts\";\nimport type { LiteralValue } from \"../shared.ts\";\nimport {\n asLiteralArray as asArray,\n asLiteralString as asString,\n isLiteralObject as isObject,\n parseLiteral,\n scanObject,\n stripJsComments,\n} from \"../shared.ts\";\n\n/**\n * Translate a Starlight `astro.config.*` into a `BlumeConfig`. The\n * `starlight({...})` options object is read statically out of the source text —\n * never executed — mirroring the Nextra `_meta` reader. Values that aren't pure\n * literals are skipped and reported, so a config that references imported assets\n * or plugins still yields a usable result instead of failing wholesale.\n */\n\nconst CONFIG_FILES = [\n \"astro.config.mjs\",\n \"astro.config.mts\",\n \"astro.config.ts\",\n \"astro.config.js\",\n \"astro.config.cjs\",\n];\n\nconst STARLIGHT_IMPORT =\n /import\\s+(?<name>\\w+)\\s+from\\s+[\"']@astrojs\\/starlight[\"']/u;\n\ntype StarlightOptions = Record<string, LiteralValue>;\n\n/** Extract the object literal passed to `starlight(…)` from config source. */\nconst extractStarlightOptions = (\n source: string\n): StarlightOptions | \"unparseable\" | \"missing\" => {\n const clean = stripJsComments(source);\n const importName = STARLIGHT_IMPORT.exec(clean)?.groups?.name ?? \"starlight\";\n const call = new RegExp(`\\\\b${importName}\\\\s*\\\\(`, \"u\").exec(clean);\n if (!call) {\n return \"missing\";\n }\n let index = call.index + call[0].length;\n while (index < clean.length && /\\s/u.test(clean[index] ?? \"\")) {\n index += 1;\n }\n if (clean[index] !== \"{\") {\n // `starlight()` with no/non-literal options — nothing to translate.\n return clean[index] === \")\" ? {} : \"unparseable\";\n }\n const scan = scanObject(clean, index);\n if (!scan) {\n return \"unparseable\";\n }\n const parsed = parseLiteral(clean.slice(index, scan.end + 1));\n return isObject(parsed) ? parsed : \"unparseable\";\n};\n\nexport interface LoadedStarlightConfig {\n options: StarlightOptions;\n warnings: string[];\n}\n\n/** Locate and read the Starlight options out of the project's astro config. */\nexport const loadStarlightConfig = async (\n root: string\n): Promise<LoadedStarlightConfig> => {\n const file = CONFIG_FILES.map((name) => join(root, name)).find((path) =>\n existsSync(path)\n );\n if (!file) {\n return {\n options: {},\n warnings: [\n \"No astro.config.* found; wrote a default config — port your Starlight options by hand.\",\n ],\n };\n }\n\n const source = await readFile(file, \"utf-8\");\n const result = extractStarlightOptions(source);\n if (result === \"missing\") {\n return {\n options: {},\n warnings: [\n \"Could not find a starlight() call in astro.config.*; port your options by hand.\",\n ],\n };\n }\n if (result === \"unparseable\") {\n return {\n options: {},\n warnings: [\n \"Could not statically read the starlight() options; port your config by hand.\",\n ],\n };\n }\n return { options: result, warnings: [] };\n};\n\n// ---------------------------------------------------------------------------\n// Field mappers\n// ---------------------------------------------------------------------------\n\ntype LogoConfig = string | { alt?: string; dark?: string; light?: string };\n\nconst mapLogo = (\n value: LiteralValue | undefined,\n warnings: string[]\n): LogoConfig | undefined => {\n const logo = isObject(value) ? value : undefined;\n if (!logo) {\n return undefined;\n }\n const alt = asString(logo.alt);\n const src = asString(logo.src);\n const light = asString(logo.light);\n const dark = asString(logo.dark);\n\n let result: LogoConfig | undefined;\n if (src) {\n result = alt ? { alt, dark: src, light: src } : src;\n } else if (light || dark) {\n result = {\n ...(alt ? { alt } : {}),\n ...(dark ? { dark } : {}),\n ...(light ? { light } : {}),\n };\n }\n if (result) {\n warnings.push(\n \"Mapped the Starlight logo; move the referenced file under public/ (Blume serves static assets from there).\"\n );\n }\n return result;\n};\n\nconst GITHUB_REPO = /github\\.com\\/(?<owner>[^/]+)\\/(?<repo>[^/?#]+)/u;\nconst EDIT_LINK =\n /github\\.com\\/(?<owner>[^/]+)\\/(?<repo>[^/]+)\\/edit\\/(?<branch>[^/?#]+)/u;\n\ninterface GithubConfig {\n branch?: string;\n owner: string;\n repo: string;\n}\n\nconst githubFromUrl = (url: string): GithubConfig | undefined => {\n const groups = GITHUB_REPO.exec(url)?.groups;\n if (!groups?.owner || !groups.repo) {\n return undefined;\n }\n return { owner: groups.owner, repo: groups.repo.replace(/\\.git$/u, \"\") };\n};\n\ninterface SocialMapping {\n github?: GithubConfig;\n socials: Record<string, string>;\n}\n\n/** Normalize a Starlight social icon key into a Blume `footer.socials` key. */\nconst socialKey = (icon: string): string =>\n icon.toLowerCase().replace(/\\.com$/u, \"\");\n\nconst mapSocial = (value: LiteralValue | undefined): SocialMapping => {\n const result: SocialMapping = { socials: {} };\n const record = (icon: string, href: string): void => {\n const key = socialKey(icon);\n result.socials[key] = href;\n if (key === \"github\" && !result.github) {\n result.github = githubFromUrl(href);\n }\n };\n\n const array = asArray(value);\n if (array) {\n for (const entry of array) {\n if (!isObject(entry)) {\n continue;\n }\n const icon = asString(entry.icon);\n const href = asString(entry.href);\n if (icon && href) {\n record(icon, href);\n }\n }\n return result;\n }\n // Older Starlight: `social: { github: \"https://…\", discord: \"https://…\" }`.\n if (isObject(value)) {\n for (const [icon, href] of Object.entries(value)) {\n const url = asString(href);\n if (url) {\n record(icon, url);\n }\n }\n }\n return result;\n};\n\nconst mapEditLink = (\n value: LiteralValue | undefined\n): GithubConfig | undefined => {\n const editLink = isObject(value) ? value : undefined;\n const baseUrl = asString(editLink?.baseUrl);\n if (!baseUrl) {\n return undefined;\n }\n const groups = EDIT_LINK.exec(baseUrl)?.groups;\n if (!groups?.owner || !groups.repo || !groups.branch) {\n return undefined;\n }\n return {\n branch: groups.branch,\n owner: groups.owner,\n repo: groups.repo.replace(/\\.git$/u, \"\"),\n };\n};\n\n/** Flatten a Starlight badge (`string` or `{ text, variant }`) to a string. */\nconst badgeText = (value: LiteralValue | undefined): string | undefined =>\n asString(value) ?? asString(isObject(value) ? value.text : undefined);\n\nconst mapSidebarItem = (\n value: LiteralValue,\n warnings: string[]\n): SidebarItemConfig | null => {\n if (typeof value === \"string\") {\n return `/${value.replace(/^\\/+/u, \"\")}`;\n }\n if (!isObject(value)) {\n return null;\n }\n const label = asString(value.label);\n const badge = badgeText(value.badge);\n const collapsed =\n typeof value.collapsed === \"boolean\" ? value.collapsed : undefined;\n\n const autogenerate = isObject(value.autogenerate)\n ? asString(value.autogenerate.directory)\n : undefined;\n if (autogenerate && label) {\n return {\n label,\n ...(badge ? { badge } : {}),\n ...(collapsed === undefined ? {} : { collapsed }),\n root: autogenerate,\n };\n }\n\n const items = asArray(value.items);\n if (items && label) {\n const mapped = items\n .map((item) => mapSidebarItem(item, warnings))\n .filter((item): item is SidebarItemConfig => item !== null);\n return {\n ...(badge ? { badge } : {}),\n ...(collapsed === undefined ? {} : { collapsed }),\n items: mapped,\n label,\n };\n }\n\n const link = asString(value.link);\n if (link) {\n return label\n ? { ...(badge ? { badge } : {}), href: link, label }\n : { href: link, label: link };\n }\n\n const slug = asString(value.slug);\n if (slug) {\n const href = `/${slug.replace(/^\\/+/u, \"\")}`;\n return label ? { ...(badge ? { badge } : {}), href, label } : href;\n }\n\n warnings.push(\"Skipped a sidebar entry that uses an unsupported shape.\");\n return null;\n};\n\nconst mapSidebar = (\n value: LiteralValue | undefined,\n warnings: string[]\n): SidebarItemConfig[] | undefined => {\n const array = asArray(value);\n if (!array) {\n return undefined;\n }\n const items = array\n .map((item) => mapSidebarItem(item, warnings))\n .filter((item): item is SidebarItemConfig => item !== null);\n return items.length > 0 ? items : undefined;\n};\n\nconst mapCodeTheme = (\n value: LiteralValue | undefined,\n warnings: string[]\n): { dark: string; light: string } | undefined => {\n const expressive = isObject(value) ? value : undefined;\n if (value === false) {\n warnings.push(\n \"expressiveCode is disabled in Starlight; Blume always renders code blocks.\"\n );\n return undefined;\n }\n if (!expressive) {\n return undefined;\n }\n if (expressive.styleOverrides !== undefined) {\n warnings.push(\n \"Dropped expressiveCode.styleOverrides; restyle code blocks via theme.css.\"\n );\n }\n const themes = asArray(expressive.themes)?.filter(\n (theme): theme is string => typeof theme === \"string\"\n );\n const [first, second] = themes ?? [];\n if (!first) {\n return undefined;\n }\n const dark = themes?.find((theme) => /dark/u.test(theme)) ?? first;\n const light =\n themes?.find((theme) => /light/u.test(theme)) ?? second ?? first;\n return { dark, light };\n};\n\nconst mapHead = (\n value: LiteralValue | undefined,\n warnings: string[]\n): Record<string, string> | undefined => {\n const array = asArray(value);\n if (!array) {\n return undefined;\n }\n const metatags: Record<string, string> = {};\n for (const entry of array) {\n if (!isObject(entry)) {\n continue;\n }\n const tag = asString(entry.tag);\n const attrs = isObject(entry.attrs) ? entry.attrs : undefined;\n const content = asString(attrs?.content);\n const key = asString(attrs?.name) ?? asString(attrs?.property);\n if (tag === \"meta\" && key && content) {\n metatags[key] = content;\n } else {\n warnings.push(\n `Dropped a <${tag ?? \"?\"}> head entry; re-add scripts/links via a custom layout.`\n );\n }\n }\n return Object.keys(metatags).length > 0 ? metatags : undefined;\n};\n\n/** Warn about Starlight options that carry over to Blume only by hand. */\nconst warnDroppedOptions = (\n options: StarlightOptions,\n warnings: string[]\n): void => {\n if (options.customCss !== undefined) {\n warnings.push(\n \"Dropped customCss; move your custom styles into a top-level theme.css.\"\n );\n }\n if (isObject(options.components)) {\n warnings.push(\n \"Dropped Starlight component overrides; re-implement them via `blume eject`.\"\n );\n }\n if (asArray(options.plugins)?.length) {\n warnings.push(\n \"Dropped Starlight plugins; they have no Blume equivalent and need manual review.\"\n );\n }\n if (options.routeMiddleware !== undefined) {\n warnings.push(\n \"Dropped routeMiddleware; re-implement any route data in Blume directly.\"\n );\n }\n};\n\n/**\n * Map the statically-read Starlight options onto a `BlumeConfig`. Content stays\n * under `src/content/docs`, so the content root is pinned there. Unsupported or\n * non-literal options are dropped with a warning rather than failing.\n */\nexport const mapStarlightConfig = (\n options: StarlightOptions,\n warnings: string[]\n): BlumeConfig => {\n const config: BlumeConfig = {\n content: { root: \"src/content/docs\" },\n title: asString(options.title) ?? \"Documentation\",\n };\n if (options.title !== undefined && asString(options.title) === undefined) {\n warnings.push(\n \"Starlight title is per-locale or computed; set config.title manually.\"\n );\n }\n\n const description =\n asString(options.description) ?? asString(options.tagline);\n if (description) {\n config.description = description;\n }\n\n const logo = mapLogo(options.logo, warnings);\n if (logo) {\n config.logo = logo;\n }\n\n const favicon = asString(options.favicon);\n if (favicon) {\n config.favicon = favicon;\n if (!favicon.startsWith(\"/\") && !/^https?:/u.test(favicon)) {\n warnings.push(\n `favicon \"${favicon}\" should live under public/ and be referenced from the site root.`\n );\n }\n }\n\n const social = mapSocial(options.social);\n const github = mapEditLink(options.editLink) ?? social.github;\n if (github) {\n config.github = github;\n }\n\n const sidebar = mapSidebar(options.sidebar, warnings);\n if (sidebar) {\n config.navigation = { sidebar };\n }\n\n const theme = mapCodeTheme(options.expressiveCode, warnings);\n if (theme) {\n config.markdown = { codeBlocks: { theme } };\n }\n\n const metatags = mapHead(options.head, warnings);\n if (metatags) {\n config.seo = { metatags };\n }\n\n if (options.lastUpdated === true) {\n config.lastModified = true;\n }\n\n warnDroppedOptions(options, warnings);\n\n return config;\n};\n",
160
- "import { renameTag, rewriteCallouts } from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Starlight-only MDX into idiomatic Blume\n * markup. Runs once at migration time — no Starlight-aware plugins remain in the\n * Blume runtime.\n */\n\nconst STARLIGHT_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"']@astrojs\\/starlight(?:\\/[^\"']*)?[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * Drop `import … from \"@astrojs/starlight/components\"` (and other subpaths).\n * Blume injects its components globally, so these imports would fail to resolve\n * once the Starlight packages are gone.\n */\nexport const stripStarlightImports = (source: string): string => {\n const stripped = source.replace(STARLIGHT_IMPORT, \"\");\n // Collapse the blank gap a removed import block leaves behind.\n return stripped === source ? source : stripped.replaceAll(/\\n{3,}/gu, \"\\n\\n\");\n};\n\n/** Starlight `<Aside type=\"X\">` values mapped to Blume directive names. */\nconst ASIDE_TYPE_DIRECTIVES: Record<string, string> = {\n caution: \"caution\",\n danger: \"danger\",\n note: \"note\",\n tip: \"tip\",\n};\n\n/**\n * Convert Starlight `<Aside type=\"note|tip|caution|danger\" title=\"…\">`\n * components into Blume `:::` directives. A bare `<Aside>` becomes `:::note`.\n * (Plain `:::`-syntax asides already pass through unchanged — Blume's directive\n * set covers all four types, with `caution` aliased to `warning`.)\n */\nexport const rewriteStarlightAsides = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: {},\n tags: [\"Aside\"],\n typeDirectives: ASIDE_TYPE_DIRECTIVES,\n });\n\n/**\n * Rename Starlight container components to their Blume equivalents, then move\n * each `<Tab>`'s `label` onto the `title` prop Blume reads. `LinkCard` folds into\n * `Card` (which renders an `href`); its `description` has no Card prop and is\n * dropped. `CardGrid`'s `stagger` layout flag has no equivalent and is left on\n * the tag harmlessly (Blume ignores unknown attributes).\n */\nexport const rewriteStarlightComponents = (source: string): string => {\n let out = renameTag(source, \"CardGrid\", \"CardGroup\");\n out = renameTag(out, \"LinkCard\", \"Card\");\n out = renameTag(out, \"TabItem\", \"Tab\");\n // Starlight selects a tab label with `label=`; Blume's `<Tab>` uses `title=`.\n out = out.replaceAll(\n /(?<tab><Tab\\b[^>]*?)\\blabel(?<eq>\\s*=)/gu,\n \"$<tab>title$<eq>\"\n );\n return out;\n};\n\n/** Starlight components with no drop-in Blume equivalent — flagged for review. */\nconst UNSUPPORTED_COMPONENTS = [\"Code\", \"FileTree\", \"LinkButton\", \"Steps\"];\n\n/** Names of Starlight components in `source` that need manual attention. */\nexport const unsupportedStarlightComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n\nconst ASSET_ALIAS =\n /(?:!\\[[^\\]]*\\]\\(|\\bsrc\\s*=\\s*[\"'])(?<path>[~@]\\/[^\"')\\s]+)/u;\n\n/** True when the source references images via Starlight's `~/`/`@/` aliases. */\nexport const hasAliasedAssets = (source: string): boolean =>\n ASSET_ALIAS.test(source);\n",
162
+ "import { renameTag, rewriteCallouts, stripImports } from \"../shared.ts\";\n\n/**\n * Source-to-source rewrites that turn Starlight-only MDX into idiomatic Blume\n * markup. Runs once at migration time — no Starlight-aware plugins remain in the\n * Blume runtime.\n */\n\nconst STARLIGHT_IMPORT =\n /^import\\s+[\\s\\S]*?\\s+from\\s+[\"']@astrojs\\/starlight(?:\\/[^\"']*)?[\"'];?[ \\t]*\\n?/gmu;\n\n/**\n * Drop `import … from \"@astrojs/starlight/components\"` (and other subpaths).\n * Blume injects its components globally, so these imports would fail to resolve\n * once the Starlight packages are gone.\n */\nexport const stripStarlightImports = (source: string): string =>\n stripImports(source, STARLIGHT_IMPORT);\n\n/** Starlight `<Aside type=\"X\">` values mapped to Blume directive names. */\nconst ASIDE_TYPE_DIRECTIVES: Record<string, string> = {\n caution: \"caution\",\n danger: \"danger\",\n note: \"note\",\n tip: \"tip\",\n};\n\n/**\n * Convert Starlight `<Aside type=\"note|tip|caution|danger\" title=\"…\">`\n * components into Blume `:::` directives. A bare `<Aside>` becomes `:::note`.\n * (Plain `:::`-syntax asides already pass through unchanged — Blume's directive\n * set covers all four types, with `caution` aliased to `warning`.)\n */\nexport const rewriteStarlightAsides = (source: string): string =>\n rewriteCallouts(source, {\n defaultDirective: \"note\",\n tagDirectives: {},\n tags: [\"Aside\"],\n typeDirectives: ASIDE_TYPE_DIRECTIVES,\n });\n\n/**\n * Rename Starlight container components to their Blume equivalents, then move\n * each `<Tab>`'s `label` onto the `title` prop Blume reads. `LinkCard` folds into\n * `Card` (which renders an `href`); its `description` has no Card prop and is\n * dropped. `CardGrid`'s `stagger` layout flag has no equivalent and is left on\n * the tag harmlessly (Blume ignores unknown attributes).\n */\nexport const rewriteStarlightComponents = (source: string): string => {\n let out = renameTag(source, \"CardGrid\", \"CardGroup\");\n out = renameTag(out, \"LinkCard\", \"Card\");\n out = renameTag(out, \"TabItem\", \"Tab\");\n // Starlight selects a tab label with `label=`; Blume's `<Tab>` uses `title=`.\n out = out.replaceAll(\n /(?<tab><Tab\\b[^>]*?)\\blabel(?<eq>\\s*=)/gu,\n \"$<tab>title$<eq>\"\n );\n return out;\n};\n\n/** Starlight components with no drop-in Blume equivalent — flagged for review. */\nconst UNSUPPORTED_COMPONENTS = [\"Code\", \"FileTree\", \"LinkButton\", \"Steps\"];\n\n/** Names of Starlight components in `source` that need manual attention. */\nexport const unsupportedStarlightComponents = (source: string): string[] =>\n UNSUPPORTED_COMPONENTS.filter((name) =>\n new RegExp(`<${name}\\\\b`, \"u\").test(source)\n );\n\nconst ASSET_ALIAS =\n /(?:!\\[[^\\]]*\\]\\(|\\bsrc\\s*=\\s*[\"'])(?<path>[~@]\\/[^\"')\\s]+)/u;\n\n/** True when the source references images via Starlight's `~/`/`@/` aliases. */\nexport const hasAliasedAssets = (source: string): boolean =>\n ASSET_ALIAS.test(source);\n",
161
163
  "import { z } from \"zod\";\n\nimport { stripUnknownPageMeta } from \"../shared.ts\";\n\n/**\n * One-time translation of Starlight page frontmatter into Blume's shape. Runs at\n * migration time only — Blume's runtime page schema stays Starlight-free and\n * strict. `sidebar.badge` flattens to a string, `pagefind:false` becomes\n * `search.exclude`, `lastUpdated` (a date) becomes `lastModified`, and\n * `prev`/`next:false` become `hideFooterPagination`. Starlight-only keys\n * (`template`, `hero`, `banner`, `tableOfContents`, `editUrl`, `head`) are then\n * dropped by the strict-schema pass and reported.\n */\n\nconst starlightBadgeSchema = z.union([\n z.string(),\n z.object({ text: z.string() }).passthrough(),\n]);\n\nconst starlightSidebarSchema = z\n .object({\n badge: starlightBadgeSchema.optional(),\n hidden: z.boolean().optional(),\n label: z.string().optional(),\n order: z.number().optional(),\n })\n .passthrough();\n\nconst starlightPageMetaInputSchema = z\n .object({\n lastUpdated: z.union([z.date(), z.string(), z.boolean()]).optional(),\n next: z.unknown().optional(),\n pagefind: z.boolean().optional(),\n prev: z.unknown().optional(),\n sidebar: starlightSidebarSchema.optional(),\n })\n .passthrough();\n\ntype StarlightPageMeta = z.infer<typeof starlightPageMetaInputSchema>;\n\nconst normalizedSidebar = (\n sidebar: NonNullable<StarlightPageMeta[\"sidebar\"]>\n): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n if (sidebar.label !== undefined) {\n out.label = sidebar.label;\n }\n if (sidebar.order !== undefined) {\n out.order = sidebar.order;\n }\n if (sidebar.hidden !== undefined) {\n out.hidden = sidebar.hidden;\n }\n const badge =\n typeof sidebar.badge === \"string\" ? sidebar.badge : sidebar.badge?.text;\n if (badge !== undefined) {\n out.badge = badge;\n }\n return out;\n};\n\n/**\n * Map Starlight page frontmatter onto Blume's frontmatter shape, returning the\n * cleaned data plus any unknown keys dropped to satisfy the strict page schema.\n */\nexport const normalizeStarlightPageMeta = (\n value: unknown\n): { data: Record<string, unknown>; removed: string[] } => {\n const parsed = starlightPageMetaInputSchema.safeParse(value);\n if (!parsed.success || typeof value !== \"object\" || value === null) {\n return stripUnknownPageMeta((value ?? {}) as Record<string, unknown>);\n }\n\n const meta = parsed.data;\n const data: Record<string, unknown> = {\n ...(value as Record<string, unknown>),\n };\n\n if (meta.sidebar) {\n const sidebar = normalizedSidebar(meta.sidebar);\n if (Object.keys(sidebar).length > 0) {\n data.sidebar = sidebar;\n } else {\n delete data.sidebar;\n }\n }\n\n if (meta.pagefind === false) {\n const existing =\n typeof data.search === \"object\" && data.search !== null\n ? (data.search as Record<string, unknown>)\n : {};\n data.search = { ...existing, exclude: true };\n }\n delete data.pagefind;\n\n if (meta.lastUpdated instanceof Date) {\n data.lastModified = meta.lastUpdated.toISOString();\n } else if (typeof meta.lastUpdated === \"string\") {\n data.lastModified = meta.lastUpdated;\n }\n delete data.lastUpdated;\n\n if (meta.prev === false || meta.next === false) {\n data.hideFooterPagination = true;\n }\n delete data.prev;\n delete data.next;\n\n return stripUnknownPageMeta(data);\n};\n",
162
164
  "import type { BlumeConfig } from \"../../core/schema.ts\";\nimport type { LiteralValue } from \"../shared.ts\";\nimport { asLiteralString, isLiteralObject } from \"../shared.ts\";\n\n/**\n * Map Starlight's `defaultLocale` + `locales` onto Blume's `i18n` config.\n * Starlight keys locales by URL segment (`root` for the un-prefixed default) and\n * carries the BCP-47 tag in `lang`; Blume keys by `code`. The `root` locale maps\n * to the default with `hideDefaultLocalePrefix`, and locale directories under\n * `src/content/docs` line up with Blume's `\"dir\"` parser.\n */\n\ntype I18nConfig = NonNullable<BlumeConfig[\"i18n\"]>;\n\nexport const starlightI18n = (\n options: Record<string, LiteralValue>\n): I18nConfig | undefined => {\n const locales = isLiteralObject(options.locales)\n ? options.locales\n : undefined;\n if (!locales) {\n return undefined;\n }\n\n const entries: { code: string; label: string }[] = [];\n let rootCode: string | undefined;\n for (const [key, value] of Object.entries(locales)) {\n const entry = isLiteralObject(value) ? value : undefined;\n const lang = asLiteralString(entry?.lang);\n const label = asLiteralString(entry?.label) ?? key;\n const code = key === \"root\" ? (lang ?? \"en\") : (lang ?? key);\n if (key === \"root\") {\n rootCode = code;\n }\n entries.push({ code, label });\n }\n if (entries.length === 0) {\n return undefined;\n }\n\n const requested = asLiteralString(options.defaultLocale);\n const fallback = rootCode ?? entries[0]?.code ?? \"en\";\n const preferred =\n requested === undefined || requested === \"root\" ? fallback : requested;\n const codes = new Set(entries.map((locale) => locale.code));\n const defaultLocale = codes.has(preferred) ? preferred : fallback;\n\n return {\n defaultLocale,\n hideDefaultLocalePrefix: true,\n locales: entries,\n parser: \"dir\",\n };\n};\n",
163
165
  "import { migrateFumadocsProject } from \"./fumadocs/index.ts\";\nimport { migrateMintlifyProject } from \"./mintlify/index.ts\";\nimport { migrateNextraProject } from \"./nextra/index.ts\";\nimport { migrateStarlightProject } from \"./starlight/index.ts\";\n\nexport interface MigrationResult {\n moved: number;\n warnings: string[];\n}\n\n/**\n * Migrate a Mintlify project (`docs.json`/`mint.json` + MDX). Translates the\n * config, rewrites pages to idiomatic Blume MDX in place, and relocates assets.\n * Unlike the other migrators, content stays at the project root.\n */\nexport const migrateMintlify = (root: string): Promise<MigrationResult> =>\n migrateMintlifyProject(root);\n\n/**\n * Migrate a Nextra project (`content/` or `pages/` + `_meta` files). Moves pages\n * into `docs/`, rewrites `<Callout>`s to directives, and converts every `_meta`\n * into a typed `meta.ts`, preserving navigation order and titles.\n */\nexport const migrateNextra = (root: string): Promise<MigrationResult> =>\n migrateNextraProject(root);\n\n/**\n * Migrate a Fumadocs project (`content/docs` + `meta.json`). Moves pages into\n * `docs/`, rewrites Fumadocs MDX (callouts, `<Cards>`/`<Accordions>`/`<Files>`,\n * `<Tabs items>`, `<include>`) to idiomatic Blume markup, converts every\n * `meta.json` into a typed `meta.ts`, and preserves the `/docs` route prefix.\n */\nexport const migrateFumadocs = (root: string): Promise<MigrationResult> =>\n migrateFumadocsProject(root);\n\n/**\n * Migrate a Starlight project (`src/content/docs` + `astro.config.*`). Translates\n * the `starlight({...})` options into `blume.config.ts` and rewrites each page to\n * idiomatic Blume MDX in place (asides → directives, component renames,\n * frontmatter mapping). Content stays under `src/content/docs`.\n */\nexport const migrateStarlight = (root: string): Promise<MigrationResult> =>\n migrateStarlightProject(root);\n\nexport const migrators: Record<\n string,\n (root: string) => Promise<MigrationResult>\n> = {\n fumadocs: migrateFumadocs,\n mintlify: migrateMintlify,\n nextra: migrateNextra,\n starlight: migrateStarlight,\n};\n",
@@ -166,7 +168,7 @@
166
168
  "import { existsSync } from \"node:fs\";\n\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { resolveAssetMounts } from \"../../core/assets.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { validateLinks } from \"../../core/links.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport {\n flushStdout,\n logger,\n reportDiagnostics,\n reportDiagnosticsJson,\n} from \"../log.ts\";\n\nexport const validateCommand = defineCommand({\n args: {\n external: {\n description: \"Check external (HTTP) links over the network.\",\n type: \"boolean\",\n },\n json: {\n description: \"Emit diagnostics as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n strict: {\n description: \"Treat warnings as errors.\",\n type: \"boolean\",\n },\n },\n meta: {\n description: \"Validate internal, anchor, asset, and external links.\",\n name: \"validate\",\n },\n async run({ args }) {\n const root = process.cwd();\n const diagnostics: Diagnostic[] = [];\n\n try {\n const project = await scanProject(root, { mode: \"build\" });\n // Surface content/graph problems too: a page that fails to parse is a\n // link-validation blind spot, so silently passing would be misleading.\n diagnostics.push(...project.diagnostics);\n\n const publicDir = join(root, \"public\");\n diagnostics.push(\n ...(await validateLinks(project.graph, {\n assetMounts: resolveAssetMounts(root, project.config.content.assets),\n checkExternal: Boolean(args.external),\n publicDir: existsSync(publicDir) ? publicDir : null,\n redirects: project.config.redirects,\n }))\n );\n } catch (error) {\n if (error instanceof BlumeError) {\n diagnostics.push(error.diagnostic);\n } else {\n reportInternalError(error);\n process.exit(1);\n }\n }\n\n if (args.json) {\n // Drain stdout before exiting non-zero: `process.exit` would otherwise\n // truncate the JSON payload mid-write when stdout is a pipe — exactly how\n // `--json` is consumed in CI/editors.\n const hadErrors = reportDiagnosticsJson(diagnostics, root);\n if (hadErrors || (Boolean(args.strict) && diagnostics.length > 0)) {\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n const hadErrors = reportDiagnostics(diagnostics, root);\n if (diagnostics.length === 0) {\n logger.success(\"No broken links found.\");\n }\n if (hadErrors || (Boolean(args.strict) && diagnostics.length > 0)) {\n process.exit(1);\n }\n },\n});\n",
167
169
  "import { existsSync } from \"node:fs\";\n\nimport { basename, join } from \"pathe\";\n\nimport type { AssetMount } from \"./assets.ts\";\nimport type {\n ContentGraph,\n Diagnostic,\n PageLink,\n PageRecord,\n} from \"./types.ts\";\n\nconst HTTP = /^https?:\\/\\//iu;\nconst PROTOCOL_RELATIVE = /^\\/\\//u;\nconst SCHEME = /^[a-z][a-z0-9+.-]*:/iu;\nconst DOC_EXT = /\\.(?:md|mdx)$/iu;\nconst FILE_EXT = /\\.[a-z0-9]+$/iu;\n\nconst EXTERNAL_CONCURRENCY = 8;\nconst EXTERNAL_TIMEOUT_MS = 10_000;\nconst STATUS_NOT_FOUND = 404;\nconst STATUS_GONE = 410;\nconst STATUS_METHOD_NOT_ALLOWED = 405;\nconst STATUS_NOT_IMPLEMENTED = 501;\n\n/** Source position shared by every diagnostic raised for a link. */\ninterface LinkSite {\n column: number;\n file: string;\n line: number;\n}\n\n/** An external link occurrence queued for a network probe. */\ninterface ExternalRef extends LinkSite {\n url: string;\n}\n\n/** Lookups derived once from the content graph. */\ninterface LinkContext {\n anchors: Map<string, Set<string>>;\n /** `content.assets` mounts served alongside `public/` (checked in place). */\n assetMounts: AssetMount[];\n publicDir: string | null;\n /** Normalized `redirect.from` paths — valid targets that resolve at runtime. */\n redirects: Set<string>;\n routes: Set<string>;\n}\n\n/** Whether a resolved asset path exists under `public/` or an asset mount. */\nconst assetIsPresent = (resolved: string, ctx: LinkContext): boolean => {\n if (ctx.publicDir && existsSync(join(ctx.publicDir, resolved))) {\n return true;\n }\n return ctx.assetMounts.some(\n (mount) =>\n (resolved === mount.url || resolved.startsWith(`${mount.url}/`)) &&\n existsSync(join(mount.dir, resolved.slice(mount.url.length)))\n );\n};\n\n/** Outcome of classifying one link target. */\ntype LinkResult = Diagnostic | \"asset-unchecked\" | null;\n\n/**\n * Whether a page is a directory index (`…/index.md(x)`). Its route already *is*\n * its directory, so a relative link must resolve against the route itself, not\n * its parent — otherwise `./sibling` from `guides/index.mdx` (route `/guides`)\n * would resolve to `/sibling` and be falsely flagged as broken.\n */\nconst isIndexPage = (page: PageRecord): boolean => {\n const ref = page.source?.ref ?? page.sourcePath ?? \"\";\n return /^index\\.(?:md|mdx)$/iu.test(basename(ref));\n};\n\n/** Resolve a relative link target against the directory of a page route. */\nconst resolveRelative = (\n pageRoute: string,\n target: string,\n isIndex: boolean\n): string => {\n const segments = pageRoute.split(\"/\").filter(Boolean);\n // Drop a leaf page's own segment so links resolve against its parent\n // directory. An index page's route already is its directory, so keep it.\n if (!isIndex) {\n segments.pop();\n }\n for (const part of target.split(\"/\")) {\n if (part === \"\" || part === \".\") {\n continue;\n }\n if (part === \"..\") {\n segments.pop();\n continue;\n }\n segments.push(part);\n }\n return `/${segments.join(\"/\")}`;\n};\n\n/** Normalize an internal path to its canonical route form. */\nconst toRoute = (path: string): string => {\n let route = path.replace(DOC_EXT, \"\");\n if (route.endsWith(\"/index\")) {\n route = route.slice(0, -\"/index\".length);\n }\n if (route.length > 1 && route.endsWith(\"/\")) {\n route = route.slice(0, -1);\n }\n return route === \"\" ? \"/\" : route;\n};\n\n/** Build a map of route -> set of heading anchor slugs. */\nconst buildAnchorIndex = (pages: PageRecord[]): Map<string, Set<string>> => {\n const anchors = new Map<string, Set<string>>();\n for (const page of pages) {\n anchors.set(\n page.route,\n new Set(page.headings.map((heading) => heading.slug))\n );\n }\n return anchors;\n};\n\n/** Verify a fragment resolves to a heading on the target route. */\nconst checkAnchor = (\n route: string,\n fragment: string,\n site: LinkSite,\n ctx: LinkContext\n): Diagnostic | null => {\n if (ctx.anchors.get(route)?.has(fragment.toLowerCase())) {\n return null;\n }\n return {\n ...site,\n code: \"BLUME_BROKEN_ANCHOR\",\n message: `No heading on ${route} matches anchor #${fragment}.`,\n severity: \"warning\",\n };\n};\n\n/** Validate a resolved internal path: asset, route, then optional anchor. */\nconst checkPathLink = (\n resolved: string,\n fragment: string,\n target: string,\n site: LinkSite,\n ctx: LinkContext\n): LinkResult => {\n // A real route always wins over the asset-extension heuristic, so a path\n // whose last segment merely contains a dot (e.g. a page at `/releases/v1.0`)\n // isn't misread as a missing asset.\n const route = toRoute(resolved);\n if (ctx.routes.has(route)) {\n return fragment ? checkAnchor(route, fragment, site, ctx) : null;\n }\n // A configured `redirect.from` resolves at runtime, so it's a valid target.\n // Its destination (and any anchor there) is validated on its own page, so we\n // don't follow the redirect to check the fragment here.\n if (ctx.redirects.has(route)) {\n return null;\n }\n\n if (FILE_EXT.test(resolved) && !DOC_EXT.test(resolved)) {\n if (assetIsPresent(resolved, ctx)) {\n return null;\n }\n // Nowhere to look: no `public/` and no asset mounts configured.\n if (ctx.publicDir === null && ctx.assetMounts.length === 0) {\n return \"asset-unchecked\";\n }\n return {\n ...site,\n code: \"BLUME_BROKEN_ASSET\",\n message: `Asset ${resolved} was not found in the public directory.`,\n severity: \"warning\",\n suggestion: `Add the file at public${resolved} or fix the link.`,\n };\n }\n\n return {\n ...site,\n code: \"BLUME_BROKEN_LINK\",\n message: `Broken link to ${target}: no page resolves to ${route}.`,\n severity: \"error\",\n suggestion: \"Check the path, or create the target page.\",\n };\n};\n\n/** Probe a URL with the given method, normalizing failures to a result. */\nconst request = async (\n url: string,\n method: \"GET\" | \"HEAD\"\n): Promise<{\n ok: boolean;\n status?: number;\n timedOut?: boolean;\n error?: string;\n}> => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), EXTERNAL_TIMEOUT_MS);\n try {\n const response = await fetch(url, {\n method,\n redirect: \"follow\",\n signal: controller.signal,\n });\n return { ok: response.ok, status: response.status };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n return { ok: false, timedOut: true };\n }\n return {\n error: error instanceof Error ? error.message : String(error),\n ok: false,\n };\n } finally {\n clearTimeout(timer);\n }\n};\n\n/** Probe a single URL: HEAD first, falling back to GET when needed. */\nconst probe = async (\n url: string\n): Promise<Awaited<ReturnType<typeof request>>> => {\n const head = await request(url, \"HEAD\");\n const retry =\n head.status === STATUS_METHOD_NOT_ALLOWED ||\n head.status === STATUS_NOT_IMPLEMENTED ||\n (!head.ok && head.status === undefined && !head.timedOut);\n return retry ? await request(url, \"GET\") : head;\n};\n\n/** Grade a probe result into a diagnostic severity + detail, or null if OK. */\nconst gradeExternal = (\n result: Awaited<ReturnType<typeof request>>\n): { severity: Diagnostic[\"severity\"]; detail: string } | null => {\n if (result.ok) {\n return null;\n }\n if (result.timedOut) {\n return { detail: \"request timed out\", severity: \"warning\" };\n }\n if (result.status === undefined) {\n return { detail: result.error ?? \"unreachable\", severity: \"error\" };\n }\n if (result.status === STATUS_NOT_FOUND || result.status === STATUS_GONE) {\n return { detail: `HTTP ${result.status}`, severity: \"error\" };\n }\n return { detail: `HTTP ${result.status}`, severity: \"warning\" };\n};\n\n/** Probe queued external links with bounded concurrency. */\nconst checkExternalLinks = async (\n refs: ExternalRef[]\n): Promise<Diagnostic[]> => {\n const unique = [...new Set(refs.map((ref) => ref.url))];\n const results = new Map<string, Awaited<ReturnType<typeof probe>>>();\n\n let cursor = 0;\n const worker = async (): Promise<void> => {\n while (cursor < unique.length) {\n const url = unique[cursor];\n cursor += 1;\n if (url !== undefined) {\n // oxlint-disable-next-line no-await-in-loop -- bounded-concurrency pool\n results.set(url, await probe(url));\n }\n }\n };\n await Promise.all(\n Array.from(\n { length: Math.min(EXTERNAL_CONCURRENCY, unique.length) },\n worker\n )\n );\n\n const diagnostics: Diagnostic[] = [];\n for (const ref of refs) {\n const result = results.get(ref.url);\n const grade = result ? gradeExternal(result) : null;\n if (grade) {\n diagnostics.push({\n code: \"BLUME_DEAD_LINK\",\n column: ref.column,\n file: ref.file,\n line: ref.line,\n message: `External link ${ref.url} is unreachable (${grade.detail}).`,\n severity: grade.severity,\n });\n }\n }\n return diagnostics;\n};\n\n/** Classify a single link, queueing external refs via `onExternal`. */\nconst classifyLink = (\n page: PageRecord,\n link: PageLink,\n ctx: LinkContext,\n onExternal: (ref: ExternalRef) => void\n): LinkResult => {\n const { target } = link;\n const site: LinkSite = {\n column: link.column,\n file: page.sourcePath ?? page.id,\n line: link.line,\n };\n\n if (HTTP.test(target) || PROTOCOL_RELATIVE.test(target)) {\n onExternal({\n ...site,\n url: PROTOCOL_RELATIVE.test(target) ? `https:${target}` : target,\n });\n return null;\n }\n if (SCHEME.test(target)) {\n // mailto:, tel:, and other non-HTTP schemes are not validated.\n return null;\n }\n\n const hashIndex = target.indexOf(\"#\");\n const fragment = hashIndex === -1 ? \"\" : target.slice(hashIndex + 1);\n let rawPath = hashIndex === -1 ? target : target.slice(0, hashIndex);\n const queryIndex = rawPath.indexOf(\"?\");\n if (queryIndex !== -1) {\n rawPath = rawPath.slice(0, queryIndex);\n }\n\n if (rawPath === \"\") {\n return fragment ? checkAnchor(page.route, fragment, site, ctx) : null;\n }\n\n const resolved = rawPath.startsWith(\"/\")\n ? rawPath\n : resolveRelative(page.route, rawPath, isIndexPage(page));\n return checkPathLink(resolved, fragment, target, site, ctx);\n};\n\n/**\n * Validate every link discovered in the content graph: internal page links and\n * anchors against the route map, asset links against the public dir, and\n * (opt-in) external links over the network.\n */\nexport const validateLinks = async (\n graph: ContentGraph,\n options: {\n publicDir: string | null;\n checkExternal?: boolean;\n /** `content.assets` mounts served alongside `public/`. */\n assetMounts?: AssetMount[];\n /** Configured redirects; their `from` paths count as valid link targets. */\n redirects?: { from: string }[];\n }\n): Promise<Diagnostic[]> => {\n const ctx: LinkContext = {\n anchors: buildAnchorIndex(graph.pages),\n assetMounts: options.assetMounts ?? [],\n publicDir: options.publicDir,\n redirects: new Set(\n (options.redirects ?? []).map((redirect) => toRoute(redirect.from))\n ),\n routes: new Set(graph.routes.keys()),\n };\n const diagnostics: Diagnostic[] = [];\n const external: ExternalRef[] = [];\n let uncheckedAssets = 0;\n\n for (const page of graph.pages) {\n for (const link of page.links) {\n const result = classifyLink(page, link, ctx, (ref) => external.push(ref));\n if (result === \"asset-unchecked\") {\n uncheckedAssets += 1;\n } else if (result) {\n diagnostics.push(result);\n }\n }\n }\n\n if (uncheckedAssets > 0) {\n diagnostics.push({\n code: \"BLUME_ASSETS_UNCHECKED\",\n message: `${uncheckedAssets} asset link(s) not checked: no public/ directory found.`,\n severity: \"info\",\n });\n }\n\n if (options.checkExternal && external.length > 0) {\n diagnostics.push(...(await checkExternalLinks(external)));\n }\n\n return diagnostics;\n};\n"
168
170
  ],
169
- "mappings": "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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
170
- "debugId": "19E77FB94468BA6064756E2164756E21",
171
+ "mappings": "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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
172
+ "debugId": "F0CC89E6DCE0E32D64756E2164756E21",
171
173
  "names": []
172
174
  }