blume 1.1.0 → 1.1.2
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.
- package/CHANGELOG.md +24 -0
- package/dist/cli/index.js +319 -91
- package/dist/cli/index.js.map +18 -18
- package/dist/types/ai/component-markdown.d.ts +12 -1
- package/dist/types/core/config-input.d.ts +18 -8
- package/dist/types/core/schema.d.ts +38 -24
- package/dist/types/core/types.d.ts +14 -0
- package/dist/types/markdown/themes.d.ts +21 -0
- package/docs/advanced/changelog.mdx +1 -1
- package/docs/configuration/ai.mdx +2 -2
- package/docs/configuration/index.mdx +1 -1
- package/docs/configuration/seo.mdx +16 -0
- package/docs/content/components.mdx +1 -1
- package/docs/content/navigation.mdx +4 -0
- package/docs/content/syntax.mdx +14 -0
- package/docs/reference/cli.mdx +1 -1
- package/docs/reference/frontmatter.mdx +2 -0
- package/package.json +2 -1
- package/src/ai/component-markdown.ts +39 -11
- package/src/ai/llms.ts +4 -2
- package/src/ai/markdown.ts +5 -1
- package/src/astro/generate.ts +121 -32
- package/src/astro/pages.ts +21 -5
- package/src/astro/templates.ts +70 -7
- package/src/audit/checks/llms.ts +4 -1
- package/src/cli/commands/build.ts +13 -1
- package/src/cli/prepare.ts +10 -2
- package/src/components/content/Component.astro +99 -6
- package/src/components/content/diff.ts +53 -4
- package/src/components/layout/RootLayout.astro +9 -1
- package/src/components/layout/nav-utils.ts +18 -7
- package/src/core/config-input.ts +18 -8
- package/src/core/diagnostics.ts +2 -0
- package/src/core/graph.ts +23 -4
- package/src/core/navigation.ts +180 -21
- package/src/core/project-graph.ts +54 -28
- package/src/core/schema.ts +39 -2
- package/src/core/sources/github-releases.ts +65 -2
- package/src/core/types.ts +14 -0
- package/src/markdown/index.ts +3 -0
- package/src/markdown/inline-code.ts +1 -1
- package/src/markdown/themes.ts +7 -2
- package/src/markdown/twoslash.ts +60 -0
- package/src/registry/eject.ts +3 -1
- /package/docs/{03-faq.mdx → 07-faq.mdx} +0 -0
package/dist/cli/index.js.map
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"import { join } from \"pathe\";\n\nimport { packageRoot } from \"../core/package-root.ts\";\n\n/** A file copied into the user's project by `blume add`. */\nexport interface RegistryFile {\n /** Path to the source file, relative to the blume package `src` directory. */\n source: string;\n /** Destination path relative to the project root. */\n target: string;\n /** Rewrite the file's relative imports to `blume/*` specifiers on copy. */\n rewrite?: boolean;\n}\n\nexport interface RegistryItem {\n name: string;\n description: string;\n files: RegistryFile[];\n /** Lines printed after install to guide the user. */\n postInstall: string[];\n}\n\n/** Absolute path to the blume package `src` directory (the copy source root). */\nexport const packageSrc = join(packageRoot(), \"src\");\n\n/**\n * A built-in layout component offered as editable source. `blume add` rewrites\n * its relative imports to `blume/*`, so it renders identically to the built-in\n * until the user changes it, then registers under the matching `layout` slot.\n */\nconst layoutComponent = (config: {\n name: string;\n description: string;\n /** Source basename under `src/components/layout`. */\n file: string;\n /** Layout slot key, also the import name in the post-install hint. */\n slot: string;\n}): RegistryItem => {\n const target = `components/blume/${config.file}`;\n return {\n description: config.description,\n files: [\n {\n rewrite: true,\n source: `components/layout/${config.file}`,\n target,\n },\n ],\n name: config.name,\n postInstall: [\n \"Register it in components.ts:\",\n ' import { defineComponents } from \"blume\";',\n ` import ${config.slot} from \"./${target}\";`,\n \"\",\n ` export default defineComponents({ layout: { ${config.slot} } });`,\n \"\",\n \"It imports the rest from `blume/*`, so it matches the built-in until you edit it.\",\n ],\n };\n};\n\n/**\n * A built-in MDX content component offered as editable source. Like\n * {@link layoutComponent}, but registered under the `mdx` map (the tag you write\n * in `.mdx`) rather than a `layout` slot.\n */\nconst contentComponent = (config: {\n name: string;\n description: string;\n /** Source basename under `src/components/content`. */\n file: string;\n /** MDX tag / component name, also the import name in the post-install hint. */\n tag: string;\n}): RegistryItem => {\n const target = `components/blume/${config.file}`;\n return {\n description: config.description,\n files: [\n {\n rewrite: true,\n source: `components/content/${config.file}`,\n target,\n },\n ],\n name: config.name,\n postInstall: [\n \"Register it in components.ts:\",\n ' import { defineComponents } from \"blume\";',\n ` import ${config.tag} from \"./${target}\";`,\n \"\",\n ` export default defineComponents({ mdx: { ${config.tag} } });`,\n \"\",\n \"It imports the rest from `blume/*`, so it matches the built-in until you edit it.\",\n ],\n };\n};\n\n/** Every user-facing content component, by `blume add` name → source basename. */\nconst CONTENT_COMPONENTS: {\n name: string;\n description: string;\n file: string;\n tag: string;\n}[] = [\n {\n description: \"Aside for notes, tips, and warnings.\",\n file: \"Callout.astro\",\n name: \"callout\",\n tag: \"Callout\",\n },\n {\n description: \"A linkable card with icon, title, and body.\",\n file: \"Card.astro\",\n name: \"card\",\n tag: \"Card\",\n },\n {\n description: \"A responsive grid of cards.\",\n file: \"CardGroup.astro\",\n name: \"card-group\",\n tag: \"CardGroup\",\n },\n {\n description: \"Tabbed code blocks for multiple languages.\",\n file: \"CodeGroup.astro\",\n name: \"code-group\",\n tag: \"CodeGroup\",\n },\n {\n description: \"A small status/label badge.\",\n file: \"Badge.astro\",\n name: \"badge\",\n tag: \"Badge\",\n },\n {\n description: \"A numbered list of steps.\",\n file: \"Steps.astro\",\n name: \"steps\",\n tag: \"Steps\",\n },\n {\n description: \"A single step within Steps.\",\n file: \"Step.astro\",\n name: \"step\",\n tag: \"Step\",\n },\n {\n description: \"A tabbed content panel.\",\n file: \"Tabs.astro\",\n name: \"tabs\",\n tag: \"Tabs\",\n },\n {\n description: \"A single tab within Tabs.\",\n file: \"Tab.astro\",\n name: \"tab\",\n tag: \"Tab\",\n },\n {\n description: \"A collapsible accordion group.\",\n file: \"Accordion.astro\",\n name: \"accordion\",\n tag: \"Accordion\",\n },\n {\n description: \"A single item within an Accordion.\",\n file: \"AccordionItem.astro\",\n name: \"accordion-item\",\n tag: \"AccordionItem\",\n },\n {\n description: \"A multi-column layout.\",\n file: \"Columns.astro\",\n name: \"columns\",\n tag: \"Columns\",\n },\n {\n description: \"A single column within Columns.\",\n file: \"Column.astro\",\n name: \"column\",\n tag: \"Column\",\n },\n {\n description: \"A bordered frame around an image or embed.\",\n file: \"Frame.astro\",\n name: \"frame\",\n tag: \"Frame\",\n },\n {\n description: \"An inline expand/collapse disclosure.\",\n file: \"Expandable.astro\",\n name: \"expandable\",\n tag: \"Expandable\",\n },\n {\n description: \"A titled content panel.\",\n file: \"Panel.astro\",\n name: \"panel\",\n tag: \"Panel\",\n },\n {\n description: \"A hover tooltip.\",\n file: \"Tooltip.astro\",\n name: \"tooltip\",\n tag: \"Tooltip\",\n },\n {\n description: \"A compact linkable tile.\",\n file: \"Tile.astro\",\n name: \"tile\",\n tag: \"Tile\",\n },\n {\n description: \"A styled prompt / terminal block.\",\n file: \"Prompt.astro\",\n name: \"prompt\",\n tag: \"Prompt\",\n },\n {\n description: \"A responsive, privacy-friendly YouTube embed.\",\n file: \"YouTube.astro\",\n name: \"youtube\",\n tag: \"YouTube\",\n },\n];\n\n/** The built-in, Blume-owned source registry. */\nexport const registry: RegistryItem[] = [\n layoutComponent({\n description: \"The top navigation bar (logo, search, nav links).\",\n file: \"Header.astro\",\n name: \"header\",\n slot: \"Header\",\n }),\n layoutComponent({\n description: \"The sidebar navigation tree.\",\n file: \"NavTree.astro\",\n name: \"sidebar\",\n slot: \"Sidebar\",\n }),\n layoutComponent({\n description: \"The breadcrumb trail shown above page content.\",\n file: \"Breadcrumbs.astro\",\n name: \"breadcrumbs\",\n slot: \"Breadcrumbs\",\n }),\n layoutComponent({\n description: \"The on-this-page table of contents.\",\n file: \"TableOfContents.astro\",\n name: \"table-of-contents\",\n slot: \"TableOfContents\",\n }),\n layoutComponent({\n description: \"The previous/next pagination footer.\",\n file: \"Pagination.astro\",\n name: \"pagination\",\n slot: \"Pagination\",\n }),\n layoutComponent({\n description: 'The \"Was this page helpful?\" feedback rating.',\n file: \"PageFeedback.astro\",\n name: \"feedback\",\n slot: \"Feedback\",\n }),\n ...CONTENT_COMPONENTS.map(contentComponent),\n];\n\nexport const findItem = (name: string): RegistryItem | undefined =>\n registry.find((item) => item.name === name);\n",
|
|
10
10
|
"import { dirname, relative, resolve } from \"pathe\";\n\n// A relative specifier (starting with `.`) in an `import … from \"…\"` or\n// `export … from \"…\"` statement. Anchored to the start of a line (`m` flag) and\n// bounded by `[^;]` so it only matches a real statement — not a `from \"./…\"`\n// that happens to appear inside a string or JSX text — while still allowing a\n// multiline import body between the keyword and `from`.\nconst FROM_IMPORT =\n /(?<prefix>^[ \\t]*(?:import|export)\\b[^;]*?\\bfrom[ \\t]*)(?<quote>[\"'])(?<spec>\\.[^\"']*)\\k<quote>/gmu;\n\n// A side-effect `import \"./…\"` at the start of a line.\nconst SIDE_EFFECT_IMPORT =\n /(?<prefix>^[ \\t]*import[ \\t]+)(?<quote>[\"'])(?<spec>\\.[^\"']*)\\k<quote>/gmu;\n\n/**\n * Rewrite a built-in component's relative imports to `blume/*` package\n * specifiers, so a copy installed by `blume add` resolves the rest of the\n * framework from the package instead of broken relative paths.\n *\n * `sourceFile` is the original file's absolute path and `srcRoot` the package\n * `src` directory; a relative import is resolved against the source, mapped to\n * its path under `src`, and re-emitted as `blume/<that path>`. Two specifiers\n * are left untouched: a self-reference (a component importing itself, e.g. the\n * recursive nav tree) stays relative so the copy recurses into the copy, and\n * anything resolving outside `src` is left as-is.\n */\nexport const rewriteImports = (\n content: string,\n sourceFile: string,\n srcRoot: string\n): string => {\n const rewrite = (\n match: string,\n prefix: string,\n quote: string,\n spec: string\n ): string => {\n const resolved = resolve(dirname(sourceFile), spec);\n if (resolved === sourceFile) {\n return match;\n }\n const rel = relative(srcRoot, resolved);\n if (rel.startsWith(\"..\")) {\n return match;\n }\n return `${prefix}${quote}blume/${rel}${quote}`;\n };\n return content\n .replaceAll(FROM_IMPORT, rewrite)\n .replaceAll(SIDE_EFFECT_IMPORT, rewrite);\n};\n",
|
|
11
11
|
"import { consola } from \"consola\";\nimport { relative } from \"pathe\";\n\nimport {\n countBySeverity,\n enrichDiagnostic,\n formatDiagnostic,\n hasErrors,\n} from \"../core/diagnostics.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\nexport const logger = consola.withTag(\"blume\");\n\n/**\n * Resolve once stdout has drained. `process.exit` doesn't flush a piped stdout,\n * so await this before exiting non-zero after writing machine-readable output\n * (e.g. `--json`), otherwise the payload can be truncated in CI.\n */\nexport const flushStdout = (): Promise<void> =>\n // oxlint-disable-next-line promise/avoid-new -- adapt stdout's write callback\n new Promise((resolve) => {\n process.stdout.write(\"\", () => resolve());\n });\n\n/**\n * Print diagnostics as a JSON document on stdout for CI and editors: each is\n * enriched with its `docsUrl` and its `file` made root-relative. Returns whether\n * any were errors, matching {@link reportDiagnostics}.\n */\nexport const reportDiagnosticsJson = (\n diagnostics: Diagnostic[],\n root?: string\n): boolean => {\n const enriched = diagnostics.map((diagnostic) => {\n const withDocs = enrichDiagnostic(diagnostic);\n return withDocs.file && root\n ? { ...withDocs, file: relative(root, withDocs.file) }\n : withDocs;\n });\n process.stdout.write(\n `${JSON.stringify(\n { diagnostics: enriched, summary: countBySeverity(diagnostics) },\n null,\n 2\n )}\\n`\n );\n return hasErrors(diagnostics);\n};\n\n/** Print a batch of diagnostics and return whether any were errors. */\nexport const reportDiagnostics = (\n diagnostics: Diagnostic[],\n root?: string\n): boolean => {\n if (diagnostics.length === 0) {\n return false;\n }\n\n for (const diagnostic of diagnostics) {\n process.stderr.write(\n `${formatDiagnostic(enrichDiagnostic(diagnostic), root)}\\n`\n );\n }\n\n const counts = countBySeverity(diagnostics);\n const summary = [\n counts.error ? `${counts.error} error(s)` : null,\n counts.warning ? `${counts.warning} warning(s)` : null,\n ]\n .filter(Boolean)\n .join(\", \");\n if (summary) {\n process.stderr.write(`\\n${summary}\\n`);\n }\n\n return hasErrors(diagnostics);\n};\n",
|
|
12
|
-
"import { relative } from \"pathe\";\nimport type { ZodError } from \"zod\";\n\nimport type { Diagnostic } from \"./types.ts\";\n\n/** A recoverable error carrying a structured diagnostic. */\nexport class BlumeError extends Error {\n readonly diagnostic: Diagnostic;\n\n constructor(diagnostic: Diagnostic) {\n super(diagnostic.message);\n this.name = \"BlumeError\";\n this.diagnostic = diagnostic;\n }\n}\n\nexport const createDiagnostic = (diagnostic: Diagnostic): Diagnostic =>\n diagnostic;\n\n/** Docs site base; diagnostic help links resolve against it. */\nconst DOCS_BASE = \"https://useblume.dev\";\n\nconst DOCS_DEPLOYMENT = \"/docs/deployment\";\nconst DOCS_REFERENCE_CLI = \"/docs/reference/cli\";\nconst DOCS_CONTENT_SOURCES = \"/docs/content/sources\";\nconst DOCS_CONTENT_NAVIGATION = \"/docs/content/navigation\";\n\n/** Diagnostic code → the docs page that explains it. */\nconst DOCS_PATHS: Record<string, string> = {\n BLUME_ADAPTER_REQUIRED: DOCS_DEPLOYMENT,\n BLUME_ASSETS_UNCHECKED: DOCS_REFERENCE_CLI,\n BLUME_ASSET_FETCH_FAILED: DOCS_CONTENT_SOURCES,\n BLUME_BROKEN_ANCHOR: DOCS_REFERENCE_CLI,\n BLUME_BROKEN_ASSET: DOCS_REFERENCE_CLI,\n BLUME_BROKEN_LINK: DOCS_REFERENCE_CLI,\n BLUME_CONFIG_INVALID: \"/docs/configuration\",\n BLUME_CONFIG_LOAD_FAILED: \"/docs/configuration\",\n BLUME_CONTENT_ROOT_MISSING: DOCS_CONTENT_SOURCES,\n BLUME_DEAD_LINK: DOCS_REFERENCE_CLI,\n BLUME_DUPLICATE_ROUTE: DOCS_CONTENT_NAVIGATION,\n BLUME_FRONTMATTER_INVALID: \"/docs/reference/frontmatter\",\n BLUME_META_INVALID: \"/docs/content/meta\",\n BLUME_META_LOAD_FAILED: \"/docs/content/meta\",\n BLUME_MISSING_SECRET: DOCS_DEPLOYMENT,\n BLUME_NAV_DUPLICATE_LABEL: DOCS_CONTENT_NAVIGATION,\n BLUME_NAV_HIDDEN_IN_SIDEBAR: DOCS_CONTENT_NAVIGATION,\n BLUME_NAV_MISSING_PAGE: DOCS_CONTENT_NAVIGATION,\n BLUME_NODE_VERSION: \"/docs/quickstart\",\n BLUME_SERVER_FEATURE_REQUIRED: DOCS_DEPLOYMENT,\n BLUME_SOURCE_FETCH_FAILED: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_MISCONFIGURED: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_OFFLINE: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_SDK_MISSING: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_UNAVAILABLE: DOCS_CONTENT_SOURCES,\n BLUME_UNKNOWN_COMPONENT: \"/docs/configuration/customization\",\n BLUME_UNKNOWN_ICON: DOCS_CONTENT_NAVIGATION,\n};\n\n/** The docs URL that explains a diagnostic code, if one is mapped. */\nexport const resolveDocsUrl = (code: string): string | undefined => {\n const path = DOCS_PATHS[code];\n return path ? `${DOCS_BASE}${path}` : undefined;\n};\n\n/** Fill in `docsUrl` from the code map where a diagnostic doesn't set its own. */\nexport const enrichDiagnostic = (diagnostic: Diagnostic): Diagnostic =>\n diagnostic.docsUrl\n ? diagnostic\n : { ...diagnostic, docsUrl: resolveDocsUrl(diagnostic.code) };\n\nconst REGEXP_SPECIAL = /[$()*+.?[\\\\\\]^{|}]/gu;\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(REGEXP_SPECIAL, String.raw`\\$&`);\n\n/**\n * Best-effort source position for a Zod issue path (e.g. `[\"seo\", \"title\"]`) in\n * the raw config / frontmatter text. Narrows key-by-key — finding each string\n * segment as a `key:`/`key =` at or after the previous match — so a nested key\n * lands under its parent. Array indices are skipped. Returns 1-based line/column,\n * or undefined when nothing matches.\n */\nconst stepSegment = (\n source: string,\n segment: string | number,\n cursor: number\n): { index: number; next: number; stop: boolean } => {\n // A non-string path segment (array index) is skipped without moving on.\n if (typeof segment !== \"string\") {\n return { index: -1, next: cursor, stop: false };\n }\n // The negative lookbehind keeps a segment like `title` from matching the\n // tail of an unrelated key such as `subtitle:`.\n const matcher = new RegExp(\n `(?<![\\\\w$])${escapeRegExp(segment)}\\\\s*[:=]`,\n \"gu\"\n );\n matcher.lastIndex = cursor;\n const match = matcher.exec(source);\n if (!match) {\n return { index: -1, next: cursor, stop: true };\n }\n return { index: match.index, next: matcher.lastIndex, stop: false };\n};\n\nconst locatePath = (\n source: string,\n path: readonly (string | number)[]\n): { column: number; line: number } | undefined => {\n let cursor = 0;\n let found = -1;\n for (const segment of path) {\n const step = stepSegment(source, segment, cursor);\n if (step.stop) {\n break;\n }\n cursor = step.next;\n if (step.index >= 0) {\n found = step.index;\n }\n }\n if (found < 0) {\n return;\n }\n const before = source.slice(0, found);\n const lastNewline = before.lastIndexOf(\"\\n\");\n return { column: found - lastNewline, line: before.split(\"\\n\").length };\n};\n\n/** The YAML front matter block of a `.md`/`.mdx` source, if it has one. */\nconst FRONTMATTER = /^---\\r?\\n(?<body>[\\s\\S]*?)\\r?\\n---/u;\n\n/**\n * Locate a front matter key in a content file, e.g. `[\"seo\", \"description\"]` in\n * `docs/api.mdx`. Scoped to the front matter block so a `title:` written in the\n * page body can't be mistaken for the front matter key of the same name; returns\n * undefined when the file has no front matter or the key isn't set (a missing\n * key has no line to point at — callers anchor to the file instead).\n */\nexport const locateFrontmatterKey = (\n source: string,\n path: readonly (string | number)[]\n): { column: number; line: number } | undefined => {\n const block = FRONTMATTER.exec(source);\n if (!block) {\n return;\n }\n // `locatePath` reports lines 1-based within the text it was given, and the\n // front matter body starts one line below the opening `---`.\n const position = locatePath(block.groups?.body ?? \"\", path);\n return position && { column: position.column, line: position.line + 1 };\n};\n\n/**\n * Convert generic validation issues (message + path, the shape shared by Zod\n * and Standard Schema issues) into Blume diagnostics, anchored to a file.\n */\nexport const diagnosticsFromIssues = (\n issues: readonly {\n message: string;\n path: readonly (string | number)[];\n }[],\n options: { code: string; file?: string; source?: string }\n): Diagnostic[] =>\n issues.map((issue) => {\n const schemaPath = issue.path.join(\".\");\n const position = options.source\n ? locatePath(options.source, issue.path)\n : undefined;\n return {\n code: options.code,\n column: position?.column,\n file: options.file,\n line: position?.line,\n message: schemaPath ? `${schemaPath}: ${issue.message}` : issue.message,\n schemaPath: schemaPath || undefined,\n severity: \"error\",\n } satisfies Diagnostic;\n });\n\n/** Convert a ZodError into Blume diagnostics, anchored to a file. */\nexport const diagnosticsFromZod = (\n error: ZodError,\n options: { code: string; file?: string; source?: string }\n): Diagnostic[] =>\n diagnosticsFromIssues(\n error.issues.map((issue) => ({\n message:\n \"received\" in issue\n ? `${issue.message} (received: ${JSON.stringify(issue.received)})`\n : issue.message,\n path: issue.path,\n })),\n options\n );\n\nconst ESC = String.fromCodePoint(27);\nconst COLORS = {\n blue: `${ESC}[34m`,\n bold: `${ESC}[1m`,\n cyan: `${ESC}[36m`,\n dim: `${ESC}[2m`,\n red: `${ESC}[31m`,\n reset: `${ESC}[0m`,\n yellow: `${ESC}[33m`,\n};\n\nconst severityColor = (severity: Diagnostic[\"severity\"]): string => {\n if (severity === \"error\") {\n return COLORS.red;\n }\n if (severity === \"warning\") {\n return COLORS.yellow;\n }\n return COLORS.blue;\n};\n\n/** Format a single diagnostic for terminal output. */\nexport const formatDiagnostic = (\n diagnostic: Diagnostic,\n root?: string\n): string => {\n const color = severityColor(diagnostic.severity);\n const lines: string[] = [\n `${color}${COLORS.bold}${diagnostic.code}${COLORS.reset} ${diagnostic.message}`,\n ];\n\n // An audit finding is about a built URL, and names the source file that fixes\n // it as a second line (\"at /docs/api\" / \"in docs/api.mdx:3:2\"). Everything\n // else is about a file alone, and keeps the original single `at file` line.\n if (diagnostic.url) {\n lines.push(` ${COLORS.dim}at ${diagnostic.url}${COLORS.reset}`);\n }\n if (diagnostic.file) {\n const location = root ? relative(root, diagnostic.file) : diagnostic.file;\n const column =\n diagnostic.column === undefined ? \"\" : `:${diagnostic.column}`;\n const position =\n diagnostic.line === undefined ? \"\" : `:${diagnostic.line}${column}`;\n const label = diagnostic.url ? \"in\" : \"at\";\n lines.push(` ${COLORS.dim}${label} ${location}${position}${COLORS.reset}`);\n }\n\n if (diagnostic.suggestion) {\n lines.push(` ${COLORS.cyan}fix: ${diagnostic.suggestion}${COLORS.reset}`);\n }\n\n if (diagnostic.docsUrl) {\n lines.push(` ${COLORS.dim}docs: ${diagnostic.docsUrl}${COLORS.reset}`);\n }\n\n return lines.join(\"\\n\");\n};\n\nexport const hasErrors = (diagnostics: Diagnostic[]): boolean =>\n diagnostics.some((d) => d.severity === \"error\");\n\nexport const countBySeverity = (\n diagnostics: Diagnostic[]\n): Record<Diagnostic[\"severity\"], number> => {\n const counts = { error: 0, info: 0, warning: 0 };\n for (const diagnostic of diagnostics) {\n counts[diagnostic.severity] += 1;\n }\n return counts;\n};\n",
|
|
12
|
+
"import { relative } from \"pathe\";\nimport type { ZodError } from \"zod\";\n\nimport type { Diagnostic } from \"./types.ts\";\n\n/** A recoverable error carrying a structured diagnostic. */\nexport class BlumeError extends Error {\n readonly diagnostic: Diagnostic;\n\n constructor(diagnostic: Diagnostic) {\n super(diagnostic.message);\n this.name = \"BlumeError\";\n this.diagnostic = diagnostic;\n }\n}\n\nexport const createDiagnostic = (diagnostic: Diagnostic): Diagnostic =>\n diagnostic;\n\n/** Docs site base; diagnostic help links resolve against it. */\nconst DOCS_BASE = \"https://useblume.dev\";\n\nconst DOCS_DEPLOYMENT = \"/docs/deployment\";\nconst DOCS_REFERENCE_CLI = \"/docs/reference/cli\";\nconst DOCS_CONTENT_SOURCES = \"/docs/content/sources\";\nconst DOCS_CONTENT_NAVIGATION = \"/docs/content/navigation\";\n\n/** Diagnostic code → the docs page that explains it. */\nconst DOCS_PATHS: Record<string, string> = {\n BLUME_ADAPTER_REQUIRED: DOCS_DEPLOYMENT,\n BLUME_ASSETS_UNCHECKED: DOCS_REFERENCE_CLI,\n BLUME_ASSET_FETCH_FAILED: DOCS_CONTENT_SOURCES,\n BLUME_BROKEN_ANCHOR: DOCS_REFERENCE_CLI,\n BLUME_BROKEN_ASSET: DOCS_REFERENCE_CLI,\n BLUME_BROKEN_LINK: DOCS_REFERENCE_CLI,\n BLUME_CONFIG_INVALID: \"/docs/configuration\",\n BLUME_CONFIG_LOAD_FAILED: \"/docs/configuration\",\n BLUME_CONTENT_ROOT_MISSING: DOCS_CONTENT_SOURCES,\n BLUME_DEAD_LINK: DOCS_REFERENCE_CLI,\n BLUME_DUPLICATE_ROUTE: DOCS_CONTENT_NAVIGATION,\n BLUME_DUPLICATE_SIDEBAR_ORDER: DOCS_CONTENT_NAVIGATION,\n BLUME_FRONTMATTER_INVALID: \"/docs/reference/frontmatter\",\n BLUME_META_INVALID: \"/docs/content/meta\",\n BLUME_META_LOAD_FAILED: \"/docs/content/meta\",\n BLUME_MISSING_SECRET: DOCS_DEPLOYMENT,\n BLUME_NAV_DUPLICATE_LABEL: DOCS_CONTENT_NAVIGATION,\n BLUME_NAV_HIDDEN_IN_SIDEBAR: DOCS_CONTENT_NAVIGATION,\n BLUME_NAV_INDEX_TITLE_MISMATCH: DOCS_CONTENT_NAVIGATION,\n BLUME_NAV_MISSING_PAGE: DOCS_CONTENT_NAVIGATION,\n BLUME_NODE_VERSION: \"/docs/quickstart\",\n BLUME_SERVER_FEATURE_REQUIRED: DOCS_DEPLOYMENT,\n BLUME_SOURCE_FETCH_FAILED: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_MISCONFIGURED: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_OFFLINE: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_SDK_MISSING: DOCS_CONTENT_SOURCES,\n BLUME_SOURCE_UNAVAILABLE: DOCS_CONTENT_SOURCES,\n BLUME_UNKNOWN_COMPONENT: \"/docs/configuration/customization\",\n BLUME_UNKNOWN_ICON: DOCS_CONTENT_NAVIGATION,\n};\n\n/** The docs URL that explains a diagnostic code, if one is mapped. */\nexport const resolveDocsUrl = (code: string): string | undefined => {\n const path = DOCS_PATHS[code];\n return path ? `${DOCS_BASE}${path}` : undefined;\n};\n\n/** Fill in `docsUrl` from the code map where a diagnostic doesn't set its own. */\nexport const enrichDiagnostic = (diagnostic: Diagnostic): Diagnostic =>\n diagnostic.docsUrl\n ? diagnostic\n : { ...diagnostic, docsUrl: resolveDocsUrl(diagnostic.code) };\n\nconst REGEXP_SPECIAL = /[$()*+.?[\\\\\\]^{|}]/gu;\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(REGEXP_SPECIAL, String.raw`\\$&`);\n\n/**\n * Best-effort source position for a Zod issue path (e.g. `[\"seo\", \"title\"]`) in\n * the raw config / frontmatter text. Narrows key-by-key — finding each string\n * segment as a `key:`/`key =` at or after the previous match — so a nested key\n * lands under its parent. Array indices are skipped. Returns 1-based line/column,\n * or undefined when nothing matches.\n */\nconst stepSegment = (\n source: string,\n segment: string | number,\n cursor: number\n): { index: number; next: number; stop: boolean } => {\n // A non-string path segment (array index) is skipped without moving on.\n if (typeof segment !== \"string\") {\n return { index: -1, next: cursor, stop: false };\n }\n // The negative lookbehind keeps a segment like `title` from matching the\n // tail of an unrelated key such as `subtitle:`.\n const matcher = new RegExp(\n `(?<![\\\\w$])${escapeRegExp(segment)}\\\\s*[:=]`,\n \"gu\"\n );\n matcher.lastIndex = cursor;\n const match = matcher.exec(source);\n if (!match) {\n return { index: -1, next: cursor, stop: true };\n }\n return { index: match.index, next: matcher.lastIndex, stop: false };\n};\n\nconst locatePath = (\n source: string,\n path: readonly (string | number)[]\n): { column: number; line: number } | undefined => {\n let cursor = 0;\n let found = -1;\n for (const segment of path) {\n const step = stepSegment(source, segment, cursor);\n if (step.stop) {\n break;\n }\n cursor = step.next;\n if (step.index >= 0) {\n found = step.index;\n }\n }\n if (found < 0) {\n return;\n }\n const before = source.slice(0, found);\n const lastNewline = before.lastIndexOf(\"\\n\");\n return { column: found - lastNewline, line: before.split(\"\\n\").length };\n};\n\n/** The YAML front matter block of a `.md`/`.mdx` source, if it has one. */\nconst FRONTMATTER = /^---\\r?\\n(?<body>[\\s\\S]*?)\\r?\\n---/u;\n\n/**\n * Locate a front matter key in a content file, e.g. `[\"seo\", \"description\"]` in\n * `docs/api.mdx`. Scoped to the front matter block so a `title:` written in the\n * page body can't be mistaken for the front matter key of the same name; returns\n * undefined when the file has no front matter or the key isn't set (a missing\n * key has no line to point at — callers anchor to the file instead).\n */\nexport const locateFrontmatterKey = (\n source: string,\n path: readonly (string | number)[]\n): { column: number; line: number } | undefined => {\n const block = FRONTMATTER.exec(source);\n if (!block) {\n return;\n }\n // `locatePath` reports lines 1-based within the text it was given, and the\n // front matter body starts one line below the opening `---`.\n const position = locatePath(block.groups?.body ?? \"\", path);\n return position && { column: position.column, line: position.line + 1 };\n};\n\n/**\n * Convert generic validation issues (message + path, the shape shared by Zod\n * and Standard Schema issues) into Blume diagnostics, anchored to a file.\n */\nexport const diagnosticsFromIssues = (\n issues: readonly {\n message: string;\n path: readonly (string | number)[];\n }[],\n options: { code: string; file?: string; source?: string }\n): Diagnostic[] =>\n issues.map((issue) => {\n const schemaPath = issue.path.join(\".\");\n const position = options.source\n ? locatePath(options.source, issue.path)\n : undefined;\n return {\n code: options.code,\n column: position?.column,\n file: options.file,\n line: position?.line,\n message: schemaPath ? `${schemaPath}: ${issue.message}` : issue.message,\n schemaPath: schemaPath || undefined,\n severity: \"error\",\n } satisfies Diagnostic;\n });\n\n/** Convert a ZodError into Blume diagnostics, anchored to a file. */\nexport const diagnosticsFromZod = (\n error: ZodError,\n options: { code: string; file?: string; source?: string }\n): Diagnostic[] =>\n diagnosticsFromIssues(\n error.issues.map((issue) => ({\n message:\n \"received\" in issue\n ? `${issue.message} (received: ${JSON.stringify(issue.received)})`\n : issue.message,\n path: issue.path,\n })),\n options\n );\n\nconst ESC = String.fromCodePoint(27);\nconst COLORS = {\n blue: `${ESC}[34m`,\n bold: `${ESC}[1m`,\n cyan: `${ESC}[36m`,\n dim: `${ESC}[2m`,\n red: `${ESC}[31m`,\n reset: `${ESC}[0m`,\n yellow: `${ESC}[33m`,\n};\n\nconst severityColor = (severity: Diagnostic[\"severity\"]): string => {\n if (severity === \"error\") {\n return COLORS.red;\n }\n if (severity === \"warning\") {\n return COLORS.yellow;\n }\n return COLORS.blue;\n};\n\n/** Format a single diagnostic for terminal output. */\nexport const formatDiagnostic = (\n diagnostic: Diagnostic,\n root?: string\n): string => {\n const color = severityColor(diagnostic.severity);\n const lines: string[] = [\n `${color}${COLORS.bold}${diagnostic.code}${COLORS.reset} ${diagnostic.message}`,\n ];\n\n // An audit finding is about a built URL, and names the source file that fixes\n // it as a second line (\"at /docs/api\" / \"in docs/api.mdx:3:2\"). Everything\n // else is about a file alone, and keeps the original single `at file` line.\n if (diagnostic.url) {\n lines.push(` ${COLORS.dim}at ${diagnostic.url}${COLORS.reset}`);\n }\n if (diagnostic.file) {\n const location = root ? relative(root, diagnostic.file) : diagnostic.file;\n const column =\n diagnostic.column === undefined ? \"\" : `:${diagnostic.column}`;\n const position =\n diagnostic.line === undefined ? \"\" : `:${diagnostic.line}${column}`;\n const label = diagnostic.url ? \"in\" : \"at\";\n lines.push(` ${COLORS.dim}${label} ${location}${position}${COLORS.reset}`);\n }\n\n if (diagnostic.suggestion) {\n lines.push(` ${COLORS.cyan}fix: ${diagnostic.suggestion}${COLORS.reset}`);\n }\n\n if (diagnostic.docsUrl) {\n lines.push(` ${COLORS.dim}docs: ${diagnostic.docsUrl}${COLORS.reset}`);\n }\n\n return lines.join(\"\\n\");\n};\n\nexport const hasErrors = (diagnostics: Diagnostic[]): boolean =>\n diagnostics.some((d) => d.severity === \"error\");\n\nexport const countBySeverity = (\n diagnostics: Diagnostic[]\n): Record<Diagnostic[\"severity\"], number> => {\n const counts = { error: 0, info: 0, warning: 0 };\n for (const diagnostic of diagnostics) {\n counts[diagnostic.severity] += 1;\n }\n return counts;\n};\n",
|
|
13
13
|
"import { defineCommand } from \"citty\";\n\nimport {\n AGENTS,\n fixPrompt,\n launchAgent,\n WINDOWS_COMMAND_NOT_FOUND,\n writeAgentReport,\n} from \"../../audit/agent.ts\";\nimport type { AgentKind } from \"../../audit/agent.ts\";\nimport { formatCatalog, formatReport, reportJson } from \"../../audit/report.ts\";\nimport { NoBuildError, runAudit } from \"../../audit/run.ts\";\nimport type { AuditResult } from \"../../audit/run.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport type { DiagnosticSeverity } from \"../../core/types.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport { flushStdout, logger } from \"../log.ts\";\n\nconst SEVERITIES: DiagnosticSeverity[] = [\"error\", \"warning\", \"info\"];\n\n/** Severities at or above the gate, e.g. `warning` -> error + warning. */\nconst failingSeverities = (gate: DiagnosticSeverity): Set<DiagnosticSeverity> =>\n new Set(SEVERITIES.slice(0, SEVERITIES.indexOf(gate) + 1));\n\nconst splitTerms = (value: string | undefined): string[] =>\n value\n ? value\n .split(\",\")\n .map((term) => term.trim())\n .filter(Boolean)\n : [];\n\n/** Whether the run should exit non-zero, given the gate. */\nexport const shouldFail = (\n result: AuditResult,\n gate: DiagnosticSeverity\n): boolean => {\n const failing = failingSeverities(gate);\n return result.diagnostics.some((d) => failing.has(d.severity));\n};\n\nexport const auditCommand = defineCommand({\n args: {\n claude: {\n description: \"Hand the findings to Claude Code to fix interactively.\",\n type: \"boolean\",\n },\n codex: {\n description: \"Hand the findings to Codex to fix interactively.\",\n type: \"boolean\",\n },\n external: {\n description: \"Probe outbound links over the network.\",\n type: \"boolean\",\n },\n \"fail-on\": {\n description:\n \"Exit non-zero at this severity or above: error | warning | info. Defaults to error.\",\n type: \"string\",\n },\n json: {\n description: \"Emit the report as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n \"list-checks\": {\n description: \"Print every check the audit can report, then exit.\",\n type: \"boolean\",\n },\n only: {\n description: \"Only report these checks or categories (comma-separated).\",\n type: \"string\",\n },\n skip: {\n description: \"Suppress these checks or categories (comma-separated).\",\n type: \"string\",\n },\n strict: {\n description: \"Alias for --fail-on warning.\",\n type: \"boolean\",\n },\n url: {\n description:\n \"Also probe a live deployment (e.g. https://docs.example.com) for status codes, headers, and redirects.\",\n type: \"string\",\n },\n verbose: {\n description: \"List every affected page instead of the first few.\",\n type: \"boolean\",\n },\n },\n meta: {\n description: \"Audit the built site for SEO and site-health issues.\",\n name: \"audit\",\n },\n async run({ args }) {\n if (args[\"list-checks\"]) {\n process.stdout.write(formatCatalog());\n return;\n }\n\n const root = process.cwd();\n const gate = (args[\"fail-on\"] ??\n (args.strict ? \"warning\" : \"error\")) as DiagnosticSeverity;\n if (!SEVERITIES.includes(gate)) {\n logger.error(\n `Invalid --fail-on \"${gate}\" (use ${SEVERITIES.join(\" | \")}).`\n );\n process.exit(1);\n }\n const agents = (Object.keys(AGENTS) as AgentKind[]).filter(\n (kind) => args[kind]\n );\n if (agents.length > 1) {\n logger.error(\"Pass at most one of --claude or --codex.\");\n process.exit(1);\n }\n const [agent] = agents;\n if (agent && args.json) {\n logger.error(`--json and --${agent} are mutually exclusive.`);\n process.exit(1);\n }\n let result: AuditResult;\n try {\n // `scanProject`, not `prepareProject`: the audit reads the *existing*\n // build and never regenerates the runtime, so it doesn't contend with a\n // running dev server. Same reasoning as `blume validate`.\n const project = await scanProject(root, { mode: \"build\" });\n result = await runAudit({\n external: args.external,\n only: splitTerms(args.only),\n origin: args.url,\n project,\n skip: splitTerms(args.skip),\n });\n } catch (error) {\n if (error instanceof NoBuildError) {\n logger.error(`${error.message} Run \\`blume build\\` first.`);\n process.exit(1);\n }\n if (error instanceof BlumeError) {\n logger.error(error.diagnostic.message);\n process.exit(1);\n }\n reportInternalError(error);\n process.exit(1);\n }\n\n if (agent) {\n // Show the same report a plain run would, so the terminal records what\n // was handed off before the agent's own UI takes over the screen.\n process.stderr.write(\n formatReport(result, root, { verbose: args.verbose })\n );\n if (result.diagnostics.length === 0) {\n return;\n }\n const cli = AGENTS[agent];\n const report = await writeAgentReport(result, root);\n const count = result.diagnostics.length;\n // Straight to stderr like the report above it, not `logger.info` —\n // consola drops info-level lines in test and CI environments.\n process.stderr.write(\n ` Handing ${count} finding${count === 1 ? \"\" : \"s\"} to ${cli.name}…\\n\\n`\n );\n let code: number;\n try {\n code = await launchAgent(cli.bin, fixPrompt(report));\n } catch {\n code = WINDOWS_COMMAND_NOT_FOUND;\n }\n // A POSIX spawn rejects on a missing executable; the Windows shell\n // launch reports it through cmd.exe's 9009 instead. Same diagnosis.\n if (code === WINDOWS_COMMAND_NOT_FOUND) {\n logger.error(\n `${cli.name} (\\`${cli.bin}\\`) was not found on PATH. Install it with \\`${cli.install}\\`.`\n );\n process.exit(1);\n }\n if (code !== 0) {\n process.exit(code);\n }\n // The gate is a CI concern; a handoff run succeeds when the agent\n // session does, not when the pre-fix site was already clean.\n return;\n }\n\n if (args.json) {\n process.stdout.write(reportJson(result, root));\n if (shouldFail(result, gate)) {\n // `process.exit` doesn't flush a piped stdout — without this the JSON is\n // truncated mid-write in exactly the CI setups that consume it.\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n process.stderr.write(formatReport(result, root, { verbose: args.verbose }));\n\n if (shouldFail(result, gate)) {\n process.exit(1);\n }\n },\n});\n",
|
|
14
14
|
"import { spawn } from \"node:child_process\";\nimport { mkdtemp, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\n\nimport { join } from \"pathe\";\n\nimport { reportJson } from \"./report.ts\";\nimport type { AuditResult } from \"./run.ts\";\n\n/** A coding agent CLI the audit can hand its findings to (`--claude`, `--codex`). */\nexport interface AgentCli {\n /** The executable to look up on PATH. */\n bin: string;\n /** How to install it, shown when the executable is missing. */\n install: string;\n /** Display name for messages. */\n name: string;\n}\n\nexport type AgentKind = \"claude\" | \"codex\";\n\nexport const AGENTS: Record<AgentKind, AgentCli> = {\n claude: {\n bin: \"claude\",\n install: \"npm install -g @anthropic-ai/claude-code\",\n name: \"Claude Code\",\n },\n codex: {\n bin: \"codex\",\n install: \"npm install -g @openai/codex\",\n name: \"Codex\",\n },\n};\n\n/**\n * Write the full JSON report where the agent can read it. A file rather than\n * inline prompt text: a large site's report can exceed the platform's argv\n * limit, and the JSON already carries every finding untruncated — the terminal\n * report previews three pages per check, the file never does.\n */\nexport const writeAgentReport = async (\n result: AuditResult,\n root: string\n): Promise<string> => {\n const dir = await mkdtemp(join(tmpdir(), \"blume-audit-\"));\n const path = join(dir, \"report.json\");\n await writeFile(path, reportJson(result, root));\n return path;\n};\n\n/** The handoff prompt: where the report is, how to read it, and the ground rules. */\nexport const fixPrompt = (reportPath: string): string =>\n `Fix the issues found by \\`blume audit\\` in this project.\n\nThe full audit report is at ${reportPath}. It is JSON: each entry in \\`diagnostics\\` is one finding, with the check \\`code\\`, a \\`message\\` explaining what is wrong, the affected page \\`url\\`, the source \\`file\\` to edit (relative to the current directory, with a \\`line\\` when the finding points at a specific front matter key), and a \\`suggestion\\` describing the fix.\n\nWork through every finding:\n1. Read the report and group the findings by \\`file\\`.\n2. Apply each finding's \\`suggestion\\` by editing the named source file — most fixes are front matter edits at the cited line.\n3. Never fix a finding by deleting a page, removing content, or hiding it from the audit; if a finding genuinely needs a human decision, leave it and say so in your summary.\n\nWhen you are done, run \\`blume build\\` and then \\`blume audit\\` to verify, and repeat until the audit reports no issues.`;\n\nconst spawnAgent = (\n command: string,\n args: string[],\n shell: boolean\n): Promise<number> =>\n // oxlint-disable-next-line promise/avoid-new -- adapt spawn's event callbacks\n new Promise((resolve, reject) => {\n const child = spawn(command, args, { shell, stdio: \"inherit\" });\n child.once(\"error\", reject);\n child.once(\"close\", (code) => resolve(code ?? 1));\n });\n\n/**\n * cmd.exe reports a missing executable through this exit code instead of a\n * spawn error, so a shell launch can't rely on the `error` event for the\n * \"not installed\" diagnosis.\n */\nexport const WINDOWS_COMMAND_NOT_FOUND = 9009;\n\n/**\n * Run the agent CLI interactively with the handoff prompt, inheriting the\n * terminal so the user watches and steers the fixes rather than granting a\n * headless process blanket write access. Resolves with the agent's exit code;\n * rejects when the executable isn't on PATH.\n *\n * On Windows, npm installs agent CLIs as `.cmd` shims, which Node refuses to\n * spawn without a shell — and cmd.exe cannot carry the multi-line prompt as an\n * argument (a newline ends the command). So there the prompt is written to a\n * file next to the report and handed over via a one-line pointer that survives\n * cmd.exe quoting; a missing executable surfaces as\n * {@link WINDOWS_COMMAND_NOT_FOUND} rather than a rejection.\n */\nexport const launchAgent = async (\n bin: string,\n prompt: string,\n platform: NodeJS.Platform = process.platform\n): Promise<number> => {\n if (platform !== \"win32\") {\n return await spawnAgent(bin, [prompt], false);\n }\n const dir = await mkdtemp(join(tmpdir(), \"blume-audit-\"));\n const promptPath = join(dir, \"prompt.md\");\n await writeFile(promptPath, prompt);\n // Double quotes are the one grouping cmd.exe respects; neither the temp\n // path nor the fixed pointer text can contain one.\n return await spawnAgent(\n `\"${bin}\" \"Read ${promptPath} and follow its instructions exactly.\"`,\n [],\n true\n );\n};\n",
|
|
15
15
|
"import { relative } from \"pathe\";\n\nimport { countBySeverity } from \"../core/diagnostics.ts\";\nimport type { Diagnostic, DiagnosticSeverity } from \"../core/types.ts\";\nimport { CHECKS, checkMeta } from \"./catalog.ts\";\nimport type { CheckId } from \"./catalog.ts\";\nimport type { AuditResult } from \"./run.ts\";\nimport type { AuditCategory, AuditTier } from \"./types.ts\";\n\nconst ESC = String.fromCodePoint(27);\nconst COLORS = {\n bold: `${ESC}[1m`,\n cyan: `${ESC}[36m`,\n dim: `${ESC}[2m`,\n green: `${ESC}[32m`,\n red: `${ESC}[31m`,\n reset: `${ESC}[0m`,\n yellow: `${ESC}[33m`,\n};\n\nconst SEVERITY_COLOR: Record<DiagnosticSeverity, string> = {\n error: COLORS.red,\n info: `${ESC}[34m`,\n warning: COLORS.yellow,\n};\n\nconst GLYPH: Record<DiagnosticSeverity, string> = {\n error: \"✖\",\n info: \"ℹ\",\n warning: \"⚠\",\n};\n\n/** How many affected pages to list before collapsing the rest. */\nconst PREVIEW = 3;\n\n/** The tier a category belongs to, for the \"skipped\" line. */\nconst TIER_FLAG: Partial<Record<AuditTier, string>> = {\n external: \"--external\",\n network: \"--url <origin>\",\n};\n\ninterface CheckRollup {\n id: CheckId;\n count: number;\n severity: DiagnosticSeverity;\n category: AuditCategory;\n title: string;\n findings: Diagnostic[];\n}\n\n/**\n * Group findings by check. This is the difference between a report people read\n * and one they close: 214 pages × 6 findings is an unreadable wall, but \"Meta\n * description missing — 12 pages\" is a to-do list.\n */\nexport const rollup = (diagnostics: Diagnostic[]): CheckRollup[] => {\n const groups = new Map<string, Diagnostic[]>();\n for (const diagnostic of diagnostics) {\n const group = groups.get(diagnostic.code);\n if (group) {\n group.push(diagnostic);\n } else {\n groups.set(diagnostic.code, [diagnostic]);\n }\n }\n\n const order: Record<DiagnosticSeverity, number> = {\n error: 0,\n info: 2,\n warning: 1,\n };\n const checks = [...groups.entries()].map(([id, findings]) => {\n const { category, severity, title } = checkMeta(id as CheckId);\n return {\n category,\n count: findings.length,\n findings,\n id: id as CheckId,\n severity,\n title,\n };\n });\n\n // Rank each category by the worst thing in it, so the categories that need\n // attention lead. Sorting on severity alone would interleave the categories\n // and print \"content\" three separate times.\n const worst = new Map<AuditCategory, number>();\n for (const check of checks) {\n const rank = order[check.severity];\n worst.set(\n check.category,\n Math.min(worst.get(check.category) ?? rank, rank)\n );\n }\n\n return checks.toSorted(\n (a, b) =>\n (worst.get(a.category) ?? 0) - (worst.get(b.category) ?? 0) ||\n a.category.localeCompare(b.category) ||\n order[a.severity] - order[b.severity] ||\n b.count - a.count\n );\n};\n\n/** Categories that had no findings but were never run, and the flag that runs them. */\nconst skippedTiers = (tiers: Record<AuditTier, boolean>): string[] =>\n (Object.keys(TIER_FLAG) as AuditTier[])\n .filter((tier) => !tiers[tier])\n .map((tier) => {\n const label = CHECKS.filter((check) => check.tier === tier).length;\n return ` ${COLORS.dim}⊘ ${tier.padEnd(12)} skipped — pass ${TIER_FLAG[tier]} (${label} checks)${COLORS.reset}`;\n });\n\n/** How many checks actually ran, i.e. those whose tier was enabled. */\nconst activeChecks = (tiers: Record<AuditTier, boolean>): number =>\n CHECKS.filter((check) => tiers[check.tier]).length;\n\n/**\n * Individual checks performed: every rule that ran, against every page crawled.\n * The headline number — it's what makes \"39 warnings\" legible as a proportion\n * rather than a bare count.\n */\nexport const auditCount = (result: AuditResult): number =>\n activeChecks(result.tiers) * result.pages;\n\nconst summaryLine = (\n counts: Record<DiagnosticSeverity, number>,\n audits: number\n): string =>\n [\n `${audits.toLocaleString(\"en-US\")} audit${audits === 1 ? \"\" : \"s\"}`,\n `${counts.error} error${counts.error === 1 ? \"\" : \"s\"}`,\n `${counts.warning} warning${counts.warning === 1 ? \"\" : \"s\"}`,\n `${counts.info} note${counts.info === 1 ? \"\" : \"s\"}`,\n ].join(\" · \");\n\n/** One affected page: the URL, and the source file that fixes it. */\nconst findingLine = (diagnostic: Diagnostic, root: string): string => {\n const url = diagnostic.url ?? \"\";\n const source = diagnostic.file\n ? `${COLORS.dim}${relative(root, diagnostic.file)}${\n diagnostic.line === undefined ? \"\" : `:${diagnostic.line}`\n }${COLORS.reset}`\n : \"\";\n // padEnd alone yields no gap once the URL reaches the column width.\n return ` ${url.padEnd(34)} ${source}`.trimEnd();\n};\n\n/**\n * Render the audit as a report grouped by check, with each check's affected\n * pages, the source file to edit, and the fix.\n */\nexport const formatReport = (\n result: AuditResult,\n root: string,\n options: { verbose?: boolean } = {}\n): string => {\n const counts = countBySeverity(result.diagnostics);\n const groups = rollup(result.diagnostics);\n const lines: string[] = [];\n\n const where = result.origin\n ? `${relative(root, result.staticDir) || \"dist\"} + ${result.origin}`\n : `${relative(root, result.staticDir) || \"dist\"} · offline`;\n lines.push(\n \"\",\n ` ${COLORS.bold}blume audit${COLORS.reset} ${COLORS.dim}${result.pages} pages · ${where}${COLORS.reset}`,\n ` ${summaryLine(counts, auditCount(result))}`,\n \"\"\n );\n\n if (groups.length === 0) {\n lines.push(` ${COLORS.green}✔ No issues found.${COLORS.reset}`, \"\");\n }\n\n let category: AuditCategory | null = null;\n for (const group of groups) {\n const { category: next } = group;\n if (next !== category) {\n category = next;\n lines.push(` ${COLORS.bold}${category}${COLORS.reset}`, \"\");\n }\n\n const color = SEVERITY_COLOR[group.severity];\n const pages = `${group.count} page${group.count === 1 ? \"\" : \"s\"}`;\n lines.push(\n ` ${color}${GLYPH[group.severity]} ${group.title}${COLORS.reset} ${COLORS.dim}${pages}${COLORS.reset}`\n );\n\n const shown = options.verbose\n ? group.findings\n : group.findings.slice(0, PREVIEW);\n for (const diagnostic of shown) {\n lines.push(findingLine(diagnostic, root));\n }\n const hidden = group.count - shown.length;\n if (hidden > 0) {\n lines.push(\n ` ${COLORS.dim}… and ${hidden} more (--verbose)${COLORS.reset}`\n );\n }\n\n // Every finding in a group shares the catalog's fix unless it overrode it,\n // so showing the first one's is showing the group's.\n const [first] = group.findings;\n const fix = first?.suggestion;\n if (fix) {\n lines.push(` ${COLORS.cyan}fix: ${fix}${COLORS.reset}`);\n }\n lines.push(\"\");\n }\n\n const skipped = skippedTiers(result.tiers);\n if (skipped.length > 0) {\n lines.push(...skipped, \"\");\n }\n\n return lines.join(\"\\n\");\n};\n\n/**\n * The machine-readable report. The existing `diagnostics` + `summary` shape is\n * preserved exactly — anything already parsing `blume validate --json` keeps\n * working — with the audit-specific rollup added alongside it.\n */\nexport const reportJson = (result: AuditResult, root: string): string => {\n const diagnostics = result.diagnostics.map((diagnostic) =>\n diagnostic.file\n ? { ...diagnostic, file: relative(root, diagnostic.file) }\n : diagnostic\n );\n return `${JSON.stringify(\n {\n audit: {\n /** Checks run × pages crawled — the total number of individual audits. */\n audits: auditCount(result),\n checks: rollup(result.diagnostics).map((group) => ({\n category: group.category,\n count: group.count,\n id: group.id,\n severity: group.severity,\n })),\n origin: result.origin,\n pages: result.pages,\n staticDir: relative(root, result.staticDir),\n tiers: result.tiers,\n },\n diagnostics,\n summary: countBySeverity(result.diagnostics),\n },\n null,\n 2\n )}\\n`;\n};\n\n/** `--list-checks`: the catalog, which is also the docs' source of truth. */\nexport const formatCatalog = (): string => {\n const lines: string[] = [\"\"];\n let category: AuditCategory | null = null;\n for (const check of [...CHECKS].toSorted((a, b) =>\n a.category.localeCompare(b.category)\n )) {\n const { category: next } = check;\n if (next !== category) {\n category = next;\n lines.push(` ${COLORS.bold}${category}${COLORS.reset}`);\n }\n const tier =\n check.tier === \"static\"\n ? \"\"\n : ` ${COLORS.dim}[${check.tier}]${COLORS.reset}`;\n lines.push(\n ` ${SEVERITY_COLOR[check.severity]}${GLYPH[check.severity]}${COLORS.reset} ${check.id.replace(\"BLUME_AUDIT_\", \"\").toLowerCase().padEnd(34)} ${COLORS.dim}${check.title}${COLORS.reset}${tier}`\n );\n }\n lines.push(\"\", ` ${CHECKS.length} checks.`, \"\");\n return lines.join(\"\\n\");\n};\n",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"import { SITE_INFERRING_ADAPTERS } from \"../../core/deployment-env.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport { ERROR_ROUTES } from \"../types.ts\";\nimport type { AuditContext, CheckModule, PageSnapshot } from \"../types.ts\";\nimport { normalizePath, siteOrigin } from \"../url.ts\";\n\n/** The canonical URL parsed, or null when it isn't a usable absolute URL. */\nconst parseCanonical = (page: PageSnapshot): URL | null => {\n if (!page.canonical) {\n return null;\n }\n try {\n return new URL(page.canonical);\n } catch {\n return null;\n }\n};\n\nconst canonicalChecks = (\n context: AuditContext,\n page: PageSnapshot\n): Diagnostic[] => {\n const { site } = context.project.config.deployment;\n const origin = siteOrigin(site);\n\n // Error routes are noindex by design, so a canonical on them is meaningless\n // and its absence isn't a defect — flagging /404 would be a guaranteed\n // finding on every site that has an error page.\n if (ERROR_ROUTES.has(page.url)) {\n return [];\n }\n\n if (!page.canonical) {\n // Without `deployment.site` Blume has no absolute URL to canonicalize to, so\n // report the root cause once (in the sitemap/robots checks) rather than\n // flagging every page for a config field they can't fix individually.\n return site\n ? [\n finding(\n \"BLUME_AUDIT_CANONICAL_MISSING\",\n pageSite(context, page),\n \"Page has no canonical URL.\"\n ),\n ]\n : [];\n }\n\n const canonical = parseCanonical(page);\n if (!canonical) {\n return [\n finding(\n \"BLUME_AUDIT_CANONICAL_BAD_TARGET\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `Canonical \"${page.canonical}\" is not a valid absolute URL.`\n ),\n ];\n }\n\n const found: Diagnostic[] = [];\n if (origin && canonical.origin !== origin) {\n const sameHost = canonical.host === new URL(origin).host;\n // A different *protocol* on the same host is a misconfiguration worth\n // calling out; a different host entirely is a deliberate cross-site\n // canonical, which is legitimate.\n if (sameHost) {\n found.push(\n finding(\n \"BLUME_AUDIT_CANONICAL_PROTOCOL_MISMATCH\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `Canonical uses ${canonical.protocol}// but the site is ${new URL(origin).protocol}//.`\n )\n );\n }\n return found;\n }\n\n const target = normalizePath(canonical.pathname);\n if (target === normalizePath(page.url)) {\n return found;\n }\n\n // The canonical points at another page on this site. It must exist, and it\n // must not itself redirect — a canonical to a redirect is a dead end.\n const redirect = context.redirects.find(\n (entry) => normalizePath(entry.from) === target\n );\n if (redirect) {\n found.push(\n finding(\n \"BLUME_AUDIT_CANONICAL_BAD_TARGET\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `Canonical points at ${target}, which is a redirect to ${redirect.to}.`\n )\n );\n } else if (context.byUrl.has(target)) {\n found.push(\n finding(\n \"BLUME_AUDIT_CANONICAL_NOT_SELF\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `Page declares ${target} as its canonical, so it will not be indexed itself.`\n )\n );\n } else {\n found.push(\n finding(\n \"BLUME_AUDIT_CANONICAL_BAD_TARGET\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `Canonical points at ${target}, which is not a page on this site.`\n )\n );\n }\n return found;\n};\n\n/**\n * Whether and how a page can be indexed: its canonical, its robots meta, and\n * whether Googlebot will read all of it.\n */\nexport const indexabilityChecks: CheckModule = {\n category: \"indexability\",\n run(context) {\n const found: Diagnostic[] = [];\n\n // Without `deployment.site` Blume has no absolute URL to build from, so it\n // cannot emit a canonical, an Open Graph image, or a sitemap on *any* page.\n // That's one fact about the config, not a defect on each of 200 pages —\n // report it once, and let the checks that depend on it stay quiet.\n if (!context.project.config.deployment.site) {\n const { adapter } = context.project.config.deployment;\n const site = {\n file: context.project.context.configFile ?? undefined,\n url: \"/\",\n };\n // On a platform adapter the value arrives from the platform's env vars\n // at deploy time (`applyDeploymentEnv`), so only this local artifact is\n // missing it — the deployed site won't be. Hardcoding `deployment.site`\n // would duplicate state the platform owns, so the finding (which agents\n // apply verbatim via `--claude`/`--codex`) must not suggest it.\n found.push(\n adapter && SITE_INFERRING_ADAPTERS.has(adapter)\n ? finding(\n \"BLUME_AUDIT_SITE_INFERRED_AT_DEPLOY\",\n site,\n `deployment.site is not set in this build — on ${adapter} it is inferred from the platform env at deploy time, so canonical URLs, Open Graph images, and the sitemap are only missing from this local artifact.`\n )\n : finding(\n \"BLUME_AUDIT_SITE_NOT_SET\",\n site,\n \"deployment.site is not set, so no canonical URLs, Open Graph images, or sitemap can be generated.\"\n )\n );\n }\n\n for (const page of context.pages) {\n found.push(...canonicalChecks(context, page));\n\n // Error routes are *meant* to carry noindex, so reporting them would be a\n // guaranteed finding on every site that has a 404 page. A robots meta\n // that doesn't noindex (an ejected layout emitting `index, follow`)\n // leaves the page indexable and isn't this finding.\n if (page.robots && !page.indexable && !ERROR_ROUTES.has(page.url)) {\n found.push(\n finding(\n \"BLUME_AUDIT_ROBOTS_META_UNEXPECTED\",\n pageSite(context, page, [\"noindex\"]),\n `Page declares robots \"${page.robots}\" and will not be indexed.`\n )\n );\n\n // Google warns against pairing the two: the canonical says \"index that\n // URL\", the robots meta says \"don't trust this page's signals\" — and\n // which one wins is undefined.\n if (!page.indexable && page.canonical) {\n found.push(\n finding(\n \"BLUME_AUDIT_CANONICAL_ON_NOINDEX\",\n pageSite(context, page, [\"noindex\"]),\n `Page is noindex but declares ${page.canonical} as its canonical.`\n )\n );\n }\n }\n\n // Only the manifest knows a page was a draft — the built HTML looks like\n // any other page, which is exactly why deploying a `--preview` build is\n // so easy to miss.\n if (page.route?.draft) {\n found.push(\n finding(\n \"BLUME_AUDIT_DRAFT_PAGE_PUBLISHED\",\n pageSite(context, page, [\"draft\"]),\n `${page.url} is marked draft in its front matter but is in the build.`\n )\n );\n }\n\n if (page.bytes > context.thresholds.maxHtmlBytes) {\n const mb = (page.bytes / 1024 / 1024).toFixed(1);\n found.push(\n finding(\n \"BLUME_AUDIT_HTML_TOO_LARGE\",\n pageSite(context, page),\n `Page HTML is ${mb} MB — past Googlebot's 2 MB limit, the rest is not crawled.`\n )\n );\n }\n }\n return found;\n },\n tier: \"static\",\n};\n",
|
|
30
30
|
"import type { LinkGraph, PageSnapshot } from \"./types.ts\";\nimport { resolveHref } from \"./url.ts\";\n\nconst add = (\n map: Map<string, Set<string>>,\n key: string,\n value: string\n): void => {\n const existing = map.get(key);\n if (existing) {\n existing.add(value);\n } else {\n map.set(key, new Set([value]));\n }\n};\n\n/**\n * Build the internal link graph, keeping prose links and chrome links apart.\n *\n * The split is the whole point. Blume's sidebar links every navigable page from\n * every page, so a graph that lumps the two together concludes that every page\n * has hundreds of inbound links — which makes \"orphan page\" unfireable and makes\n * a single broken sidebar link look like N broken links, one per page.\n */\nexport const buildGraph = (\n pages: PageSnapshot[],\n origin: string | null,\n deployBase = \"\"\n): LinkGraph => {\n const graph: LinkGraph = {\n chromeIn: new Map(),\n chromeOut: new Map(),\n contentIn: new Map(),\n contentOut: new Map(),\n };\n\n for (const page of pages) {\n for (const link of page.links) {\n const resolved = resolveHref(page.url, link.href, origin, deployBase);\n if (resolved.kind !== \"internal\" && resolved.kind !== \"self-origin\") {\n continue;\n }\n const out = link.content ? graph.contentOut : graph.chromeOut;\n const incoming = link.content ? graph.contentIn : graph.chromeIn;\n add(out, page.url, resolved.path);\n add(incoming, resolved.path, page.url);\n }\n }\n\n return graph;\n};\n\n/**\n * Pages nothing links to from prose — reachable only through the sidebar.\n *\n * This is what an SEO means by \"orphan\": the page ships, but no other page's\n * body ever points a reader (or a crawler following editorial links) at it.\n * Non-indexable pages are excluded — a `noindex` page is *meant* to be\n * unreachable — as is the home page, which is nobody's job to link to. Under a\n * `basePath` the home page's built URL is the base itself, so the caller names\n * it via `homeUrl`.\n */\nexport const orphanPages = (\n pages: PageSnapshot[],\n graph: LinkGraph,\n homeUrl = \"/\"\n): PageSnapshot[] =>\n pages.filter(\n (page) =>\n page.indexable &&\n page.url !== \"/\" &&\n page.url !== homeUrl &&\n (graph.contentIn.get(page.url)?.size ?? 0) === 0\n );\n",
|
|
31
31
|
"import { normalizeBasePath } from \"../../core/base-path.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { orphanPages } from \"../graph.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport type {\n AuditContext,\n CheckModule,\n PageSnapshot,\n SnapshotLink,\n} from \"../types.ts\";\nimport { normalizePath, resolveHref, siteOrigin } from \"../url.ts\";\n\n/** Whether a path is served by the build — as a page, or as a static file. */\nconst isServed = (context: AuditContext, path: string): boolean =>\n context.byUrl.has(path) ||\n context.files.has(path) ||\n // Astro's directory format serves `/docs/api` from `/docs/api/index.html`.\n context.files.has(`${path}/index.html`);\n\n/** Browser-magic fragments that scroll without needing a matching id. */\nconst MAGIC_FRAGMENTS = new Set([\"\", \"top\"]);\n\n/** Whether a fragment lands on an id of the target page. */\nconst anchorResolves = (target: PageSnapshot, fragment: string): boolean => {\n if (MAGIC_FRAGMENTS.has(fragment)) {\n return true;\n }\n // Hrefs usually carry the fragment percent-encoded while the HTML id is not;\n // check both spellings so an encoded match isn't reported as broken.\n try {\n return (\n target.ids.has(fragment) || target.ids.has(decodeURIComponent(fragment))\n );\n } catch {\n return target.ids.has(fragment);\n }\n};\n\nconst redirectFrom = (context: AuditContext, path: string) =>\n context.redirects.find((entry) => normalizePath(entry.from) === path);\n\n/**\n * Internal links, and what they land on.\n *\n * Broken *chrome* links are deduplicated by target: Blume renders the sidebar on\n * every page, so one bad nav entry would otherwise be reported once per page —\n * hundreds of findings for a single typo. Body links are reported per\n * occurrence, because each one lives in a different `.mdx` a reader can go fix.\n */\nexport const linkChecks: CheckModule = {\n category: \"links\",\n run(context) {\n const found: Diagnostic[] = [];\n const origin = siteOrigin(context.project.config.deployment.site);\n const deployBase = normalizeBasePath(\n context.project.config.deployment.base\n );\n /** Broken chrome targets, and the first page each was seen on. */\n const brokenChrome = new Map<string, PageSnapshot>();\n const redirectedChrome = new Map<string, PageSnapshot>();\n\n /** Broken anchor targets in chrome (`url#frag`), first page each was seen on. */\n const brokenChromeAnchors = new Map<string, PageSnapshot>();\n\n /**\n * A fragment must land on an id of the page it targets — a miss loads the\n * page but silently dumps the reader at the top, which no crawler reports\n * because the HTTP response is a healthy 200.\n */\n const checkAnchor = (\n page: PageSnapshot,\n link: SnapshotLink,\n target: PageSnapshot,\n fragment: string\n ): void => {\n if (anchorResolves(target, fragment)) {\n return;\n }\n const where =\n target === page ? \"this page\" : `${target.url}, which has no such id`;\n if (link.content) {\n found.push(\n finding(\n \"BLUME_AUDIT_ANCHOR_BROKEN\",\n pageSite(context, page),\n `Link to ${link.href} points at #${fragment} on ${where}.`\n )\n );\n } else {\n const key = `${target.url}#${fragment}`;\n if (!brokenChromeAnchors.has(key)) {\n brokenChromeAnchors.set(key, page);\n }\n }\n };\n\n const classify = (page: PageSnapshot, link: SnapshotLink): void => {\n // Same-page anchors (`#setup`) never leave the page, so resolveHref\n // files them under \"ignored\" — but their fragment still has to exist.\n if (link.href.startsWith(\"#\")) {\n checkAnchor(page, link, page, link.href.slice(1));\n return;\n }\n\n const resolved = resolveHref(page.url, link.href, origin, deployBase);\n if (resolved.kind === \"external\" || resolved.kind === \"ignored\") {\n return;\n }\n\n const anchorTarget = resolved.hash\n ? context.byUrl.get(resolved.path)\n : undefined;\n if (anchorTarget) {\n checkAnchor(page, link, anchorTarget, resolved.hash);\n }\n\n if (resolved.kind === \"self-origin\") {\n found.push(\n finding(\n \"BLUME_AUDIT_INTERNAL_LINK_ABSOLUTE\",\n pageSite(context, page),\n `Link to ${link.href} hardcodes the site's origin; use ${resolved.path} instead.`\n )\n );\n }\n\n if (link.rel?.includes(\"nofollow\")) {\n found.push(\n finding(\n \"BLUME_AUDIT_INTERNAL_LINK_NOFOLLOW\",\n pageSite(context, page),\n `Internal link to ${resolved.path} is rel=\"nofollow\".`\n )\n );\n }\n\n const { path } = resolved;\n const redirect = redirectFrom(context, path);\n if (redirect) {\n if (link.content) {\n found.push(\n finding(\n \"BLUME_AUDIT_LINK_TO_REDIRECT\",\n pageSite(context, page),\n `Link to ${path} goes through a redirect to ${redirect.to}.`\n )\n );\n } else if (!redirectedChrome.has(path)) {\n redirectedChrome.set(path, page);\n }\n return;\n }\n\n if (isServed(context, path)) {\n return;\n }\n\n if (link.content) {\n found.push(\n finding(\n \"BLUME_AUDIT_LINK_TO_BROKEN\",\n pageSite(context, page),\n `Link to ${link.href} resolves to ${path}, which the build does not serve.`\n )\n );\n } else if (!brokenChrome.has(path)) {\n brokenChrome.set(path, page);\n }\n };\n\n for (const page of context.pages) {\n for (const link of page.links) {\n classify(page, link);\n }\n }\n\n for (const [path, page] of brokenChrome) {\n found.push(\n finding(\n \"BLUME_AUDIT_LINK_TO_BROKEN\",\n { url: page.url },\n `Navigation links to ${path}, which the build does not serve.`,\n \"Fix the entry in your navigation config or meta file.\"\n )\n );\n }\n for (const [path, page] of redirectedChrome) {\n const redirect = redirectFrom(context, path);\n found.push(\n finding(\n \"BLUME_AUDIT_LINK_TO_REDIRECT\",\n { url: page.url },\n `Navigation links to ${path}, which redirects to ${redirect?.to}.`,\n \"Point the navigation entry straight at the destination.\"\n )\n );\n }\n for (const [key, page] of brokenChromeAnchors) {\n found.push(\n finding(\n \"BLUME_AUDIT_ANCHOR_BROKEN\",\n { url: page.url },\n `Navigation links to ${key}, but the target page has no such id.`\n )\n );\n }\n\n const homeUrl = normalizeBasePath(context.project.config.basePath) || \"/\";\n for (const page of orphanPages(context.pages, context.graph, homeUrl)) {\n found.push(\n finding(\n \"BLUME_AUDIT_ORPHAN_PAGE\",\n pageSite(context, page),\n \"No other page's body links here — it is reachable only from the sidebar.\"\n )\n );\n }\n\n return found;\n },\n tier: \"static\",\n};\n",
|
|
32
|
-
"import { normalizeBasePath, stripBasePath } from \"../../core/base-path.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport { ERROR_ROUTES } from \"../types.ts\";\nimport type { AuditContext, CheckModule } from \"../types.ts\";\nimport { normalizePath, siteOrigin } from \"../url.ts\";\n\n/** The `ai.llmsTxt` config normalized to what the checks need. */\nconst llmsConfig = (\n context: AuditContext\n): { enabled: boolean; openapi: boolean } => {\n const value = context.project.config.ai?.llmsTxt;\n if (typeof value === \"object\" && value !== null) {\n return { enabled: value.enabled, openapi: value.openapi };\n }\n return { enabled: value !== false, openapi: true };\n};\n\n/**\n * An llms.txt link target reduced to a site path, or null when it's off-site.\n * Entry URLs carry the deployment base; page URLs (from the file tree) don't.\n */\nconst entryPath = (\n url: string,\n origin: string | null,\n deployBase: string\n): string | null => {\n if (/^https?:\\/\\//iu.test(url)) {\n try {\n const parsed = new URL(url);\n if (origin && parsed.origin !== origin) {\n return null;\n }\n return normalizePath(\n stripBasePath(deployBase, decodeURI(parsed.pathname))\n );\n } catch {\n return null;\n }\n }\n if (!url.startsWith(\"/\")) {\n return null;\n }\n try {\n return normalizePath(stripBasePath(deployBase, decodeURI(url)));\n } catch {\n return normalizePath(stripBasePath(deployBase, url));\n }\n};\n\n/**\n * The `llms.txt` index, held to the sitemap's standard.\n *\n * SEO crawlers audit for Google and stop there. But Blume's promise is\n * AI-ready docs, and `llms.txt` is the sitemap of that surface: a stale entry\n * sends an agent to a page that is not there, and an unlisted page is\n * invisible to every tool that starts from the index.\n */\nexport const llmsChecks: CheckModule = {\n category: \"ai\",\n run(context) {\n const { enabled, openapi } = llmsConfig(context);\n if (!enabled) {\n return [];\n }\n\n const { llms } = context;\n if (!llms) {\n return [\n finding(\n \"BLUME_AUDIT_LLMS_TXT_MISSING\",\n { url: \"/llms.txt\" },\n \"The build has no llms.txt.\"\n ),\n ];\n }\n\n const found: Diagnostic[] = [];\n const origin = siteOrigin(context.project.config.deployment.site);\n const deployBase = normalizeBasePath(\n context.project.config.deployment.base\n );\n\n const listed = new Set<string>();\n for (const entry of llms.entries) {\n const path = entryPath(entry.url, origin, deployBase);\n if (path === null) {\n // Off-site or unparseable targets aren't pages this build can vouch\n // for; external link health is the `--external` tier's job.\n continue;\n }\n listed.add(path);\n if (!context.byUrl.has(path)) {\n found.push(\n finding(\n \"BLUME_AUDIT_LLMS_TXT_STALE_ENTRY\",\n { file: llms.file, line: entry.line, url: entry.url },\n `llms.txt lists ${path}, which the build does not serve.`\n )\n );\n }\n }\n\n // The reverse direction, mirroring INDEXABLE_PAGE_NOT_IN_SITEMAP: a page\n // that is built, indexable, and in the nav belongs in the index. Pages the\n // generator deliberately skips — hidden, drafts, error routes, API\n // reference when `ai.llmsTxt.openapi` is off, custom pages with no\n // manifest route — are skipped here for the same reasons.\n for (const page of context.pages) {\n const { route } = page;\n if (\n !route ||\n route.hidden ||\n route.draft ||\n !page.indexable ||\n ERROR_ROUTES.has(page.url) ||\n (!openapi && route.source.name === \"openapi\") ||\n listed.has(normalizePath(page.url))\n ) {\n continue;\n }\n found.push(\n finding(\n \"BLUME_AUDIT_LLMS_TXT_PAGE_MISSING\",\n pageSite(context, page),\n `${page.url} is built and indexable but is not listed in llms.txt.`\n )\n );\n }\n\n return found;\n },\n tier: \"static\",\n};\n",
|
|
32
|
+
"import { normalizeBasePath, stripBasePath } from \"../../core/base-path.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport { ERROR_ROUTES } from \"../types.ts\";\nimport type { AuditContext, CheckModule } from \"../types.ts\";\nimport { normalizePath, siteOrigin } from \"../url.ts\";\n\n/** The `ai.llmsTxt` config normalized to what the checks need. */\nconst llmsConfig = (\n context: AuditContext\n): { enabled: boolean; openapi: boolean } => {\n const value = context.project.config.ai?.llmsTxt;\n if (typeof value === \"object\" && value !== null) {\n return { enabled: value.enabled, openapi: value.openapi };\n }\n return { enabled: value !== false, openapi: true };\n};\n\n/**\n * An llms.txt link target reduced to a site path, or null when it's off-site.\n * Entry URLs carry the deployment base; page URLs (from the file tree) don't.\n */\nconst entryPath = (\n url: string,\n origin: string | null,\n deployBase: string\n): string | null => {\n if (/^https?:\\/\\//iu.test(url)) {\n try {\n const parsed = new URL(url);\n if (origin && parsed.origin !== origin) {\n return null;\n }\n return normalizePath(\n stripBasePath(deployBase, decodeURI(parsed.pathname))\n );\n } catch {\n return null;\n }\n }\n if (!url.startsWith(\"/\")) {\n return null;\n }\n try {\n return normalizePath(stripBasePath(deployBase, decodeURI(url)));\n } catch {\n return normalizePath(stripBasePath(deployBase, url));\n }\n};\n\n/**\n * The `llms.txt` index, held to the sitemap's standard.\n *\n * SEO crawlers audit for Google and stop there. But Blume's promise is\n * AI-ready docs, and `llms.txt` is the sitemap of that surface: a stale entry\n * sends an agent to a page that is not there, and an unlisted page is\n * invisible to every tool that starts from the index.\n */\nexport const llmsChecks: CheckModule = {\n category: \"ai\",\n run(context) {\n const { enabled, openapi } = llmsConfig(context);\n if (!enabled) {\n return [];\n }\n\n const { llms } = context;\n if (!llms) {\n return [\n finding(\n \"BLUME_AUDIT_LLMS_TXT_MISSING\",\n { url: \"/llms.txt\" },\n \"The build has no llms.txt.\"\n ),\n ];\n }\n\n const found: Diagnostic[] = [];\n const origin = siteOrigin(context.project.config.deployment.site);\n const deployBase = normalizeBasePath(\n context.project.config.deployment.base\n );\n\n const listed = new Set<string>();\n for (const entry of llms.entries) {\n const path = entryPath(entry.url, origin, deployBase);\n if (path === null) {\n // Off-site or unparseable targets aren't pages this build can vouch\n // for; external link health is the `--external` tier's job.\n continue;\n }\n listed.add(path);\n // A listed target may be a served asset rather than a page — Blume's own\n // llms.txt links the changelog RSS feed — so the file index vouches for\n // it too, the same way redirect targets may land on a served asset.\n if (!context.byUrl.has(path) && !context.files.has(path)) {\n found.push(\n finding(\n \"BLUME_AUDIT_LLMS_TXT_STALE_ENTRY\",\n { file: llms.file, line: entry.line, url: entry.url },\n `llms.txt lists ${path}, which the build does not serve.`\n )\n );\n }\n }\n\n // The reverse direction, mirroring INDEXABLE_PAGE_NOT_IN_SITEMAP: a page\n // that is built, indexable, and in the nav belongs in the index. Pages the\n // generator deliberately skips — hidden, drafts, error routes, API\n // reference when `ai.llmsTxt.openapi` is off, custom pages with no\n // manifest route — are skipped here for the same reasons.\n for (const page of context.pages) {\n const { route } = page;\n if (\n !route ||\n route.hidden ||\n route.draft ||\n !page.indexable ||\n ERROR_ROUTES.has(page.url) ||\n (!openapi && route.source.name === \"openapi\") ||\n listed.has(normalizePath(page.url))\n ) {\n continue;\n }\n found.push(\n finding(\n \"BLUME_AUDIT_LLMS_TXT_PAGE_MISSING\",\n pageSite(context, page),\n `${page.url} is built and indexable but is not listed in llms.txt.`\n )\n );\n }\n\n return found;\n },\n tier: \"static\",\n};\n",
|
|
33
33
|
"import type { DiagnosticSeverity } from \"./types.ts\";\n\nexport const PROBE_CONCURRENCY = 8;\nexport const PROBE_TIMEOUT_MS = 10_000;\n\nconst STATUS_NOT_FOUND = 404;\nconst STATUS_GONE = 410;\nconst STATUS_METHOD_NOT_ALLOWED = 405;\nconst STATUS_NOT_IMPLEMENTED = 501;\n\n/** The outcome of a single HTTP probe, with failures normalized rather than thrown. */\nexport interface ProbeResult {\n ok: boolean;\n status?: number;\n timedOut?: boolean;\n error?: string;\n /** Whether the request was redirected before landing on `status`. */\n redirected?: boolean;\n /** The URL finally landed on, after following redirects. */\n finalUrl?: string;\n /** `Content-Encoding` of the response, when the server set one. */\n encoding?: string | null;\n /** Wall-clock milliseconds for the request. */\n ms?: number;\n /** `X-Robots-Tag` of the response, when the server set one. */\n robotsTag?: string | null;\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 timeoutMs: number\n): Promise<ProbeResult> => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n const started = performance.now();\n try {\n const response = await fetch(url, {\n method,\n redirect: \"follow\",\n signal: controller.signal,\n });\n return {\n encoding: response.headers.get(\"content-encoding\"),\n finalUrl: response.url,\n ms: Math.round(performance.now() - started),\n ok: response.ok,\n redirected: response.redirected,\n robotsTag: response.headers.get(\"x-robots-tag\"),\n status: response.status,\n };\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/**\n * Probe a single URL: HEAD first, falling back to GET.\n *\n * Plenty of servers reject HEAD outright (405/501) or drop the connection, so a\n * HEAD-only probe would report healthy pages as dead.\n */\nexport const probe = async (\n url: string,\n options: { timeoutMs?: number } = {}\n): Promise<ProbeResult> => {\n const timeoutMs = options.timeoutMs ?? PROBE_TIMEOUT_MS;\n const head = await request(url, \"HEAD\", timeoutMs);\n const unreachable = !head.ok && head.status === undefined && !head.timedOut;\n const retry =\n head.status === STATUS_METHOD_NOT_ALLOWED ||\n head.status === STATUS_NOT_IMPLEMENTED ||\n unreachable;\n return retry ? await request(url, \"GET\", timeoutMs) : head;\n};\n\n/** Grade a probe result into a severity + detail, or null when the URL is fine. */\nexport const gradeExternal = (\n result: ProbeResult\n): { severity: DiagnosticSeverity; 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 // A 404/410 is definitively dead. A 403/429/5xx may well be rate limiting or a\n // transient blip, which is not the author's bug to fix.\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/**\n * Probe many URLs with bounded concurrency, deduplicating first. Returns a map\n * from URL to its result — the caller decides what each one means.\n */\nexport const probeAll = async (\n urls: readonly string[],\n options: { concurrency?: number; timeoutMs?: number } = {}\n): Promise<Map<string, ProbeResult>> => {\n const unique = [...new Set(urls)];\n const results = new Map<string, ProbeResult>();\n const limit = Math.min(\n options.concurrency ?? PROBE_CONCURRENCY,\n unique.length\n );\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, options));\n }\n }\n };\n await Promise.all(Array.from({ length: limit }, worker));\n\n return results;\n};\n",
|
|
34
34
|
"import { normalizeBasePath } from \"../../core/base-path.ts\";\nimport { gradeExternal, probeAll } from \"../../core/probe.ts\";\nimport type { ProbeResult } from \"../../core/probe.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport type { AuditContext, CheckModule, PageSnapshot } from \"../types.ts\";\nimport { resolveHref, siteOrigin } from \"../url.ts\";\n\nconst CLIENT_ERROR = 400;\nconst SERVER_ERROR = 500;\n/** Past this, a page is slow enough that it costs you crawl budget and readers. */\nconst SLOW_MS = 1500;\n\n/** The live URL a built page is served at, under the `--url` origin. */\nconst liveUrl = (origin: string, page: PageSnapshot): string =>\n new URL(page.url, origin).toString();\n\n/**\n * Whether the response failed outright, and how. Null when the page is served.\n *\n * Exported so the grading can be unit-tested against synthetic responses: a\n * timeout, an HTTPS-to-HTTP downgrade, and a slow first byte are all awkward to\n * provoke from a local test server, and faking the network to test them would\n * only be testing the fake.\n */\nexport const badResponse = (\n context: AuditContext,\n page: PageSnapshot,\n result: ProbeResult\n): Diagnostic | null => {\n const site = pageSite(context, page);\n\n if (result.timedOut) {\n return finding(\n \"BLUME_AUDIT_HTTP_TIMEOUT\",\n site,\n `${page.url} did not respond within the timeout.`\n );\n }\n\n const { status } = result;\n if (status !== undefined && status >= SERVER_ERROR) {\n return finding(\n \"BLUME_AUDIT_HTTP_5XX\",\n site,\n `${page.url} returned HTTP ${status}.`\n );\n }\n if (status !== undefined && status >= CLIENT_ERROR) {\n return finding(\n \"BLUME_AUDIT_HTTP_4XX\",\n site,\n `${page.url} is in the build but returned HTTP ${status}.`\n );\n }\n if (!result.ok) {\n return finding(\n \"BLUME_AUDIT_HTTP_5XX\",\n site,\n `${page.url} is unreachable: ${result.error ?? \"no response\"}.`\n );\n }\n return null;\n};\n\n/** What a *successful* response still gets wrong: headers, timing, protocol. */\nexport const servedPageChecks = (\n context: AuditContext,\n page: PageSnapshot,\n result: ProbeResult,\n origin: string\n): Diagnostic[] => {\n const site = pageSite(context, page);\n const found: Diagnostic[] = [];\n\n // A page served over HTTPS that redirects down to HTTP hands the reader to an\n // insecure connection — the opposite of the usual upgrade.\n if (\n result.redirected &&\n result.finalUrl?.startsWith(\"http://\") &&\n origin.startsWith(\"https://\")\n ) {\n found.push(\n finding(\n \"BLUME_AUDIT_REDIRECT_TO_HTTP\",\n site,\n `${page.url} redirects to ${result.finalUrl}, downgrading to HTTP.`\n )\n );\n }\n\n if (!result.encoding) {\n found.push(\n finding(\n \"BLUME_AUDIT_NOT_COMPRESSED\",\n site,\n `${page.url} is served without gzip or brotli compression.`\n )\n );\n }\n\n if (result.ms !== undefined && result.ms > SLOW_MS) {\n found.push(\n finding(\n \"BLUME_AUDIT_SLOW_RESPONSE\",\n site,\n `${page.url} took ${result.ms}ms to respond.`\n )\n );\n }\n\n // The header wins over the meta tag, so a stray `X-Robots-Tag: noindex` —\n // Vercel sets one on password-protected and preview deploys — silently\n // deindexes a page whose HTML looks perfectly indexable.\n const tag = result.robotsTag;\n if (tag?.includes(\"noindex\") && page.indexable) {\n found.push(\n finding(\n \"BLUME_AUDIT_ROBOTS_HEADER_CONFLICT\",\n site,\n `${page.url} sends \"X-Robots-Tag: ${tag}\" but its HTML has no noindex — the header wins.`\n )\n );\n }\n\n return found;\n};\n\n/**\n * The built site, checked against a live deployment.\n *\n * Everything here needs the network, which is why it only runs with `--url`: a\n * page that exists in `dist/` can still 404 in production behind a bad rewrite,\n * and only the real response carries the headers (`Content-Encoding`,\n * `X-Robots-Tag`) that decide whether the page is compressed and indexable.\n */\nexport const networkChecks: CheckModule = {\n category: \"network\",\n async run(context) {\n const { origin } = context;\n if (!origin) {\n return [];\n }\n\n const found: Diagnostic[] = [];\n const targets = context.pages.map((page) => liveUrl(origin, page));\n // robots.txt and sitemap.xml are fetched alongside the pages: they're the\n // two files a crawler asks for first, and a deploy that hides them silently\n // undoes everything else the audit checks.\n const robotsUrl = new URL(\"/robots.txt\", origin).toString();\n const sitemapUrl = new URL(\"/sitemap.xml\", origin).toString();\n\n const results = await probeAll([...targets, robotsUrl, sitemapUrl]);\n\n for (const page of context.pages) {\n const result = results.get(liveUrl(origin, page));\n if (!result) {\n continue;\n }\n const failure = badResponse(context, page, result);\n if (failure) {\n found.push(failure);\n continue;\n }\n found.push(...servedPageChecks(context, page, result, origin));\n }\n\n const robots = results.get(robotsUrl);\n if (robots && !robots.ok) {\n found.push(\n finding(\n \"BLUME_AUDIT_ROBOTS_NOT_ACCESSIBLE\",\n { url: \"/robots.txt\" },\n `robots.txt is not reachable at ${robotsUrl}.`\n )\n );\n }\n\n const sitemap = results.get(sitemapUrl);\n if (context.sitemap && sitemap && !sitemap.ok) {\n found.push(\n finding(\n \"BLUME_AUDIT_SITEMAP_NOT_ACCESSIBLE\",\n { url: \"/sitemap.xml\" },\n `sitemap.xml is in the build but is not reachable at ${sitemapUrl}.`\n )\n );\n }\n\n return found;\n },\n tier: \"network\",\n};\n\n/**\n * Outbound links, probed over the network (`--external`).\n *\n * Severity is graded rather than flat: a 404 is the author's bug, but a 403 or a\n * 5xx is usually rate limiting or someone else's outage, and failing a build on\n * that would make the check useless.\n */\nexport const externalChecks: CheckModule = {\n category: \"network\",\n async run(context) {\n const origin = siteOrigin(context.project.config.deployment.site);\n const deployBase = normalizeBasePath(\n context.project.config.deployment.base\n );\n\n /** Every outbound URL, and the pages that link to it. */\n const linkers = new Map<string, PageSnapshot[]>();\n for (const page of context.pages) {\n for (const link of page.links) {\n const resolved = resolveHref(page.url, link.href, origin, deployBase);\n if (resolved.kind !== \"external\") {\n continue;\n }\n const pages = linkers.get(resolved.url);\n if (pages) {\n if (!pages.includes(page)) {\n pages.push(page);\n }\n } else {\n linkers.set(resolved.url, [page]);\n }\n }\n }\n\n if (linkers.size === 0) {\n return [];\n }\n const results = await probeAll([...linkers.keys()]);\n\n const found: Diagnostic[] = [];\n for (const [url, pages] of linkers) {\n const result = results.get(url);\n if (!result) {\n continue;\n }\n const site = pageSite(context, pages[0] as PageSnapshot);\n\n const grade = gradeExternal(result);\n if (grade) {\n // Severity is graded, not flat. A 404 is a bug the author can fix; a 403\n // or 5xx is usually rate limiting or someone else's outage, and failing\n // a build on that would get `--external` switched off for good.\n found.push({\n ...finding(\n \"BLUME_AUDIT_EXTERNAL_LINK_BROKEN\",\n site,\n `${url} is unreachable (${grade.detail}), linked from ${pages.length} page(s).`\n ),\n severity: grade.severity,\n });\n continue;\n }\n\n if (result.redirected && result.finalUrl && result.finalUrl !== url) {\n found.push(\n finding(\n \"BLUME_AUDIT_EXTERNAL_LINK_REDIRECT\",\n site,\n `${url} redirects to ${result.finalUrl}.`\n )\n );\n }\n }\n return found;\n },\n tier: \"external\",\n};\n",
|
|
35
35
|
"import { readFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport { normalizeBasePath } from \"../../core/base-path.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { imageSize } from \"../image-size.ts\";\nimport type { ImageSize } from \"../image-size.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport type { CheckModule, PageSnapshot } from \"../types.ts\";\nimport { resolveHref, siteOrigin } from \"../url.ts\";\n\n/**\n * Below this, large social cards render the image blurry or fall back to a\n * small-card layout: Facebook's floor for a full-width card is 600×315\n * (1200×630 recommended), X's for `summary_large_image` is 300×157.\n */\nconst MIN_WIDTH = 600;\nconst MIN_HEIGHT = 315;\n\n/**\n * The Open Graph image as bytes, not just a tag. `OG_IMAGE_MISSING` proves the\n * meta tag exists; only the build can prove the tag points at a real file of a\n * shareable size — a crawler needs the live site for either.\n */\nexport const ogImageChecks: CheckModule = {\n category: \"social\",\n async run(context) {\n const found: Diagnostic[] = [];\n /** Pending reads per file path — the site-wide default OG image is read once. */\n const sizes = new Map<string, Promise<ImageSize | null>>();\n\n const read = async (path: string): Promise<ImageSize | null> => {\n try {\n return imageSize(await readFile(join(context.staticDir, path)));\n } catch {\n // Unreadable bytes: existence was already established via the file\n // index, and an unknown format is not a finding.\n return null;\n }\n };\n\n // Cache the promise, not the result, so concurrent pages sharing one\n // image (the site-wide default) share a single read.\n const measure = (path: string): Promise<ImageSize | null> => {\n const cached = sizes.get(path);\n if (cached) {\n return cached;\n }\n const pending = read(path);\n sizes.set(path, pending);\n return pending;\n };\n\n const origin = siteOrigin(context.project.config.deployment.site);\n const deployBase = normalizeBasePath(\n context.project.config.deployment.base\n );\n const candidates: { page: PageSnapshot; path: string }[] = [];\n\n for (const page of context.pages) {\n const src = page.og[\"og:image\"];\n if (!src) {\n continue;\n }\n // An og:image on another origin (a CDN, an external host) is outside the\n // build — its existence can't be proven without the network, so it's the\n // network tier's business, not this check's.\n const resolved = resolveHref(page.url, src, origin, deployBase);\n if (resolved.kind === \"external\" || resolved.kind === \"ignored\") {\n continue;\n }\n\n const { path } = resolved;\n if (\n !(context.files.has(path) || context.files.has(`${path}/index.html`))\n ) {\n found.push(\n finding(\n \"BLUME_AUDIT_OG_IMAGE_BROKEN\",\n pageSite(context, page, [\"seo\", \"image\"]),\n `og:image points at ${path}, which is not in the build.`\n )\n );\n continue;\n }\n\n candidates.push({ page, path });\n }\n\n const measured = await Promise.all(\n candidates.map(async (candidate) => ({\n ...candidate,\n size: await measure(candidate.path),\n }))\n );\n for (const { page, path, size } of measured) {\n if (size && (size.width < MIN_WIDTH || size.height < MIN_HEIGHT)) {\n found.push(\n finding(\n \"BLUME_AUDIT_OG_IMAGE_SMALL\",\n pageSite(context, page, [\"seo\", \"image\"]),\n `og:image ${path} is ${size.width}×${size.height} — below the ${MIN_WIDTH}×${MIN_HEIGHT} floor for large social cards.`\n )\n );\n }\n }\n\n return found;\n },\n tier: \"static\",\n};\n",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"import { normalizeBasePath, stripBasePath } from \"../../core/base-path.ts\";\nimport type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport type { AuditContext, CheckModule } from \"../types.ts\";\nimport { normalizePath, siteOrigin } from \"../url.ts\";\n\nconst MAX_SITEMAP_BYTES = 50 * 1024 * 1024;\nconst MAX_SITEMAP_URLS = 50_000;\n\n/**\n * Slack for future `<lastmod>` values. A date-only stamp written in a timezone\n * ahead of UTC parses as \"tomorrow\" from behind it; a day of grace keeps that\n * from being reported as a lie.\n */\nconst LASTMOD_SLACK_MS = 24 * 60 * 60 * 1000;\n\n/** Error routes are never crawlable destinations, so they belong out of the sitemap. */\nconst ERROR_ROUTES = new Set([\"/404\", \"/500\"]);\n\n/** Site paths listed in the sitemap, normalized for comparison against page URLs. */\nconst sitemapPaths = (context: AuditContext): Map<string, string> => {\n const paths = new Map<string, string>();\n for (const loc of context.sitemap?.urls ?? []) {\n try {\n paths.set(normalizePath(new URL(loc).pathname), loc);\n } catch {\n // A malformed <loc> is reported by SITEMAP_INVALID, not here.\n }\n }\n return paths;\n};\n\n/** The path of a canonical URL, or null when it isn't parseable (CANONICAL_BAD_TARGET reports that). */\nconst canonicalPath = (canonical: string): string | null => {\n try {\n return normalizePath(new URL(canonical).pathname);\n } catch {\n return null;\n }\n};\n\n/** Validate one `<loc>` against the build: does it exist, and is it indexable? */\nconst checkListedUrl = (\n context: AuditContext,\n loc: string,\n origin: string | null,\n file: string\n): Diagnostic[] => {\n let parsed: URL;\n try {\n parsed = new URL(loc);\n } catch {\n return [\n finding(\n \"BLUME_AUDIT_SITEMAP_INVALID\",\n { file, url: \"/sitemap.xml\" },\n `sitemap.xml lists \"${loc}\", which is not a valid absolute URL.`\n ),\n ];\n }\n\n if (origin && parsed.origin !== origin) {\n return [\n finding(\n \"BLUME_AUDIT_SITEMAP_OUT_OF_SCOPE\",\n { file, url: loc },\n `sitemap.xml lists ${loc}, which is on another origin.`\n ),\n ];\n }\n\n // `<loc>`s carry the deployment base; page URLs (from the file tree) don't.\n const path = normalizePath(\n stripBasePath(\n normalizeBasePath(context.project.config.deployment.base),\n parsed.pathname\n )\n );\n const page = context.byUrl.get(path);\n if (!page) {\n const redirect = context.redirects.find(\n (entry) => normalizePath(entry.from) === path\n );\n return [\n finding(\n \"BLUME_AUDIT_SITEMAP_BAD_URL\",\n { file, url: loc },\n redirect\n ? `sitemap.xml lists ${path}, which redirects to ${redirect.to}.`\n : `sitemap.xml lists ${path}, which the build does not serve.`\n ),\n ];\n }\n\n const found: Diagnostic[] = [];\n if (!page.indexable) {\n found.push(\n finding(\n \"BLUME_AUDIT_NOINDEX_IN_SITEMAP\",\n pageSite(context, page, [\"noindex\"]),\n `${path} is in the sitemap but declares robots \"${page.robots}\".`\n )\n );\n }\n\n const canonical = page.canonical && canonicalPath(page.canonical);\n if (canonical && canonical !== path) {\n found.push(\n finding(\n \"BLUME_AUDIT_NON_CANONICAL_IN_SITEMAP\",\n pageSite(context, page, [\"seo\", \"canonical\"]),\n `${path} is in the sitemap but canonicalizes to ${canonical}.`\n )\n );\n }\n return found;\n};\n\n/**\n * The sitemap, cross-checked against what was actually built.\n *\n * The highest-value check here is the one Ahrefs buries at info severity:\n * `INDEXABLE_PAGE_NOT_IN_SITEMAP`. A page that a stray `draft: true` or\n * `sidebar.hidden` quietly kept out of the sitemap is invisible to search, and\n * nothing else in the toolchain tells you.\n */\nexport const sitemapChecks: CheckModule = {\n category: \"sitemap\",\n run(context) {\n const { sitemap } = context;\n const { site } = context.project.config.deployment;\n\n // Without `deployment.site` Blume can't emit a sitemap at all (absolute URLs\n // are required), and that's a config choice, not a defect. Stay quiet.\n if (!(site && context.project.config.seo.sitemap)) {\n return [];\n }\n\n if (!sitemap) {\n return [\n finding(\n \"BLUME_AUDIT_SITEMAP_INVALID\",\n { url: \"/sitemap.xml\" },\n \"The build has no sitemap.xml.\",\n \"Set `seo.sitemap: true` and `deployment.site` in blume.config.ts.\"\n ),\n ];\n }\n\n const found: Diagnostic[] = [];\n if (sitemap.error) {\n found.push(\n finding(\n \"BLUME_AUDIT_SITEMAP_INVALID\",\n { file: sitemap.file, url: \"/sitemap.xml\" },\n `sitemap.xml is not a valid urlset: ${sitemap.error}`\n )\n );\n return found;\n }\n\n if (\n sitemap.bytes > MAX_SITEMAP_BYTES ||\n sitemap.urls.length > MAX_SITEMAP_URLS\n ) {\n found.push(\n finding(\n \"BLUME_AUDIT_SITEMAP_TOO_LARGE\",\n { file: sitemap.file, url: \"/sitemap.xml\" },\n `sitemap.xml holds ${sitemap.urls.length} URLs in ${Math.round(sitemap.bytes / 1024 / 1024)} MB.`\n )\n );\n }\n\n // A `<lastmod>` that lies — malformed, or claiming the future — teaches\n // search engines to distrust every lastmod in the file, which throws away\n // the recrawl-priority signal the field exists to provide.\n for (const [loc, lastmod] of sitemap.lastmod ?? []) {\n const time = Date.parse(lastmod);\n if (Number.isNaN(time)) {\n found.push(\n finding(\n \"BLUME_AUDIT_SITEMAP_LASTMOD_INVALID\",\n { file: sitemap.file, url: loc },\n `sitemap.xml gives ${loc} a lastmod of \"${lastmod}\", which is not a valid W3C date.`\n )\n );\n } else if (time > Date.now() + LASTMOD_SLACK_MS) {\n found.push(\n finding(\n \"BLUME_AUDIT_SITEMAP_LASTMOD_INVALID\",\n { file: sitemap.file, url: loc },\n `sitemap.xml gives ${loc} a lastmod of ${lastmod}, which is in the future.`\n )\n );\n }\n }\n\n const origin = siteOrigin(site);\n const listed = sitemapPaths(context);\n\n for (const loc of sitemap.urls) {\n found.push(...checkListedUrl(context, loc, origin, sitemap.file));\n }\n\n // The other direction: a page that was built, is indexable, and should be\n // findable — but never made it into the sitemap.\n for (const page of context.pages) {\n if (\n !page.indexable ||\n ERROR_ROUTES.has(page.url) ||\n listed.has(normalizePath(page.url))\n ) {\n continue;\n }\n found.push(\n finding(\n \"BLUME_AUDIT_INDEXABLE_PAGE_NOT_IN_SITEMAP\",\n pageSite(context, page),\n `${page.url} is built and indexable but is not listed in sitemap.xml.`\n )\n );\n }\n\n return found;\n },\n tier: \"static\",\n};\n",
|
|
40
40
|
"import type { Diagnostic } from \"../../core/types.ts\";\nimport { finding } from \"../catalog.ts\";\nimport { pageSite } from \"../locate.ts\";\nimport type { CheckModule, PageSnapshot } from \"../types.ts\";\nimport { normalizePath } from \"../url.ts\";\n\n/** The Open Graph properties a share card is unusable without. */\nconst OG_REQUIRED = [\"og:title\", \"og:type\", \"og:description\"];\n\n/**\n * `og:url` must be an absolute URL, so Blume can only emit it once\n * `deployment.site` is known. Requiring it on a site that hasn't set one would\n * report the same missing config on every page; SITE_NOT_SET says it once.\n */\nconst ogRequired = (hasSite: boolean): string[] =>\n hasSite ? [...OG_REQUIRED, \"og:url\"] : OG_REQUIRED;\n\n/**\n * Open Graph and X (Twitter) card tags.\n *\n * Ahrefs splits each of these into \"missing\" and \"incomplete\". That's a\n * distinction without a difference — a card with no tags and a card with half\n * its tags both fail to render — so each is one check that names exactly which\n * properties are absent.\n */\nexport const socialChecks: CheckModule = {\n category: \"social\",\n run(context) {\n const found: Diagnostic[] = [];\n const hasSite = Boolean(context.project.config.deployment.site);\n const required = ogRequired(hasSite);\n\n for (const page of context.pages) {\n // Error pages are never shared, so their cards don't matter.\n if (!page.indexable) {\n continue;\n }\n\n const missing = required.filter((property) => !page.og[property]);\n if (missing.length > 0) {\n found.push(\n finding(\n \"BLUME_AUDIT_OG_INCOMPLETE\",\n pageSite(context, page, [\"description\"]),\n missing.length === required.length\n ? \"Page has no Open Graph tags.\"\n : `Open Graph is missing ${missing.join(\", \")}.`\n )\n );\n }\n\n // The generated OG card is served from an absolute URL, so it too depends\n // on `deployment.site`; SITE_NOT_SET already covers that case.\n if (hasSite && !page.og[\"og:image\"]) {\n found.push(\n finding(\n \"BLUME_AUDIT_OG_IMAGE_MISSING\",\n pageSite(context, page, [\"seo\", \"image\"]),\n \"Page has no og:image — shares will render without a preview card.\"\n )\n );\n }\n\n const ogUrl = page.og[\"og:url\"];\n if (ogUrl && page.canonical && ogUrl !== page.canonical) {\n found.push(\n finding(\n \"BLUME_AUDIT_OG_URL_MISMATCH\",\n pageSite(context, page),\n `og:url is ${ogUrl} but the canonical is ${page.canonical}.`\n )\n );\n }\n\n // X reads title/description/image from the Open Graph tags, so the only\n // thing it can't infer is the card type and the account attribution.\n if (!page.twitter[\"twitter:card\"]) {\n found.push(\n finding(\n \"BLUME_AUDIT_TWITTER_CARD_INCOMPLETE\",\n pageSite(context, page),\n \"Page has no twitter:card — X will render a plain link, not a card.\"\n )\n );\n }\n }\n return found;\n },\n tier: \"static\",\n};\n\n/**\n * What's missing from one JSON-LD block.\n *\n * A block may either be a single node (`{@context, @type, …}`) or a `@graph`\n * container (`{@context, @graph: [{@type, …}, …]}`), which is the shape Blume\n * itself emits. In the container form `@context` is declared once at the root\n * and each entry carries its own `@type` — so demanding `@type` on the root, or\n * `@context` on each entry, would flag perfectly valid structured data.\n */\nconst jsonLdProblems = (node: unknown): string[] => {\n if (typeof node !== \"object\" || node === null) {\n return [\"it is not an object\"];\n }\n const record = node as Record<string, unknown>;\n const problems: string[] = [];\n if (!record[\"@context\"]) {\n problems.push(\"@context\");\n }\n\n const graph = record[\"@graph\"];\n if (Array.isArray(graph)) {\n const untyped = graph.filter(\n (entry) =>\n typeof entry !== \"object\" ||\n entry === null ||\n !(entry as Record<string, unknown>)[\"@type\"]\n ).length;\n if (untyped > 0) {\n problems.push(`@type on ${untyped} of its ${graph.length} @graph nodes`);\n }\n } else if (!record[\"@type\"]) {\n problems.push(\"@type\");\n }\n\n return problems;\n};\n\n/** Structured data. We validate what Blume emits, and don't pretend to do more. */\nexport const structuredDataChecks: CheckModule = {\n category: \"structured-data\",\n run(context) {\n const found: Diagnostic[] = [];\n for (const page of context.pages) {\n for (const error of page.jsonldErrors) {\n found.push(\n finding(\n \"BLUME_AUDIT_JSONLD_INVALID\",\n pageSite(context, page),\n `A JSON-LD block failed to parse: ${error}`\n )\n );\n }\n\n for (const node of page.jsonld) {\n const problems = jsonLdProblems(node);\n if (problems.length > 0) {\n found.push(\n finding(\n \"BLUME_AUDIT_JSONLD_INCOMPLETE\",\n pageSite(context, page),\n `A JSON-LD block is missing ${problems.join(\" and \")}.`\n )\n );\n }\n }\n }\n return found;\n },\n tier: \"static\",\n};\n\n/** What makes a slug untidy, with the human name for each offense. */\nconst URL_STYLE: { name: string; test: RegExp }[] = [\n { name: \"uppercase letters\", test: /[A-Z]/u },\n { name: \"underscores\", test: /_/u },\n { name: \"spaces\", test: /%20| /u },\n];\n\n/** A protocol-relative URL names a dotted host (`//cdn.example.com/x`). */\nconst DOTTED_HOST = /^\\/\\/[^/]*\\./u;\n\n/**\n * Whether an href carries a doubled slash from a trailing-slash `basePath` /\n * `deployment.base`. `//docs/x` is the telltale: a browser reads it as a\n * protocol-relative URL with host `docs`, so the link silently leaves the site\n * — and every link checker skips it as external. An interior `//` (`/docs//x`)\n * is the same mistake composed mid-path.\n */\nconst doubledSlash = (href: string): boolean => {\n if (href.startsWith(\"//\")) {\n return !DOTTED_HOST.test(href);\n }\n if (!href.startsWith(\"/\")) {\n return false;\n }\n // Only the path — a query param may legitimately carry a URL.\n const [path] = href.split(/[?#]/u);\n return (path ?? \"\").includes(\"//\");\n};\n\nexport const urlChecks: CheckModule = {\n category: \"links\",\n run(context) {\n const found: Diagnostic[] = [];\n /** Doubled hrefs are site-wide (a bad base) — one finding per target. */\n const doubled = new Map<string, PageSnapshot>();\n for (const page of context.pages) {\n if (page.url.includes(\"//\")) {\n found.push(\n finding(\n \"BLUME_AUDIT_DOUBLE_SLASH_URL\",\n pageSite(context, page),\n `URL ${normalizePath(page.url)} contains a double slash.`\n )\n );\n }\n for (const link of page.links) {\n const href = link.href.trim();\n if (doubledSlash(href) && !doubled.has(href)) {\n doubled.set(href, page);\n }\n }\n\n const untidy = URL_STYLE.filter((style) => style.test.test(page.url));\n if (untidy.length > 0) {\n found.push(\n finding(\n \"BLUME_AUDIT_URL_STYLE\",\n pageSite(context, page),\n `URL ${page.url} contains ${untidy.map((style) => style.name).join(\" and \")}.`\n )\n );\n }\n }\n for (const [href, page] of doubled) {\n found.push(\n finding(\n \"BLUME_AUDIT_DOUBLE_SLASH_URL\",\n pageSite(context, page),\n `Link to ${href} contains a double slash.`\n )\n );\n }\n return found;\n },\n tier: \"static\",\n};\n",
|
|
41
41
|
"import { readFile, stat } from \"node:fs/promises\";\n\nimport { join, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\n\nimport { examplesRouteBase } from \"../astro/templates.ts\";\nimport { stripBasePath } from \"../core/base-path.ts\";\nimport type { BlumeManifest, RouteManifestEntry } from \"../core/types.ts\";\nimport { buildSnapshot } from \"./snapshot.ts\";\nimport type { LlmsDoc, PageSnapshot, RobotsDoc, SitemapDoc } from \"./types.ts\";\n\n/**\n * The route prefix `<Component />` preview frames live under. They are bare\n * documents rendered for iframes — deliberately noindex, no title worth\n * grading, no front matter to fix — so auditing them as pages only produces\n * findings nobody can act on.\n */\nconst EXAMPLES_PREFIX = `${examplesRouteBase(\"\")}/`;\n\n/** Everything read off disk in one pass over the built site. */\nexport interface CrawlResult {\n pages: PageSnapshot[];\n /** Every file in the static dir: URL path -> size in bytes. */\n files: Map<string, number>;\n sitemap: SitemapDoc | null;\n robots: RobotsDoc | null;\n llms: LlmsDoc | null;\n}\n\n/**\n * The URL a built HTML file is served at. Astro's directory build format emits\n * `docs/api/index.html` for `/docs/api`, so the `index.html` leaf collapses;\n * a flat `404.html` keeps its name.\n */\nexport const fileToUrl = (staticDir: string, file: string): string => {\n const rel = relative(staticDir, file).replaceAll(\"\\\\\", \"/\");\n const path = rel.replace(/(?:^|\\/)index\\.html$/u, \"\").replace(/\\.html$/u, \"\");\n return path === \"\" ? \"/\" : `/${path}`;\n};\n\n/**\n * Every file in the static dir, keyed the way an HTML `src`/`href` would name\n * it, with its size — so a reference can be resolved and weighed in one pass.\n */\nconst indexFiles = async (staticDir: string): Promise<Map<string, number>> => {\n const found = await glob(\"**/*\", { cwd: staticDir, dot: true });\n const sized = await Promise.all(\n found.map(async (file) => {\n const path = `/${file.replaceAll(\"\\\\\", \"/\")}`;\n const info = await stat(join(staticDir, file));\n return [path, info.size] as const;\n })\n );\n return new Map(sized);\n};\n\n/**\n * Look a built URL up in the route manifest. Routes carry `basePath` while the\n * built file tree may not, so both spellings are tried before giving up — a page\n * that fails to join is still audited, it just can't name a source file to fix.\n */\nconst routeIndex = (\n manifest: BlumeManifest,\n basePath: string\n): Map<string, RouteManifestEntry> => {\n const index = new Map<string, RouteManifestEntry>();\n for (const route of manifest.routes) {\n index.set(route.path, route);\n const stripped = stripBasePath(basePath, route.path);\n if (!index.has(stripped)) {\n index.set(stripped, route);\n }\n }\n return index;\n};\n\nconst SITEMAP_URL = /<url>(?<block>[\\s\\S]*?)<\\/url>/gu;\nconst SITEMAP_LOC = /<loc>(?<loc>[\\s\\S]*?)<\\/loc>/gu;\nconst SITEMAP_LASTMOD = /<lastmod>(?<date>[\\s\\S]*?)<\\/lastmod>/u;\nconst XML_ENTITIES: Record<string, string> = {\n \"&\": \"&\",\n \"'\": \"'\",\n \">\": \">\",\n \"<\": \"<\",\n \""\": '\"',\n};\n\nconst unescapeXml = (value: string): string =>\n value.replaceAll(\n /&(?:amp|apos|gt|lt|quot);/gu,\n (entity) => XML_ENTITIES[entity] ?? entity\n );\n\n/**\n * Parse `sitemap.xml`. Deliberately shallow: we only need the `<loc>` list and\n * whether the document is a well-formed urlset, and pulling in an XML parser to\n * learn that would be a dependency for one regex.\n */\nexport const parseSitemap = (\n file: string,\n xml: string,\n bytes: number\n): SitemapDoc => {\n const doc: SitemapDoc = { bytes, file, lastmod: new Map(), urls: [] };\n if (!xml.includes(\"<urlset\")) {\n doc.error = xml.includes(\"<sitemapindex\")\n ? \"sitemap is an index, not a urlset\"\n : \"no <urlset> element\";\n return doc;\n }\n for (const match of xml.matchAll(SITEMAP_LOC)) {\n const loc = unescapeXml((match.groups?.loc ?? \"\").trim());\n if (loc) {\n doc.urls.push(loc);\n }\n }\n // `<lastmod>` is scoped per `<url>` block so it stays attached to its `<loc>`\n // — the flat loc scan above deliberately isn't, so a sitemap with stray text\n // between blocks still yields its URL list.\n for (const match of xml.matchAll(SITEMAP_URL)) {\n const block = match.groups?.block ?? \"\";\n const loc = unescapeXml(\n (\n new RegExp(SITEMAP_LOC.source, \"u\").exec(block)?.groups?.loc ?? \"\"\n ).trim()\n );\n const lastmod = SITEMAP_LASTMOD.exec(block)?.groups?.date?.trim();\n if (loc && lastmod) {\n doc.lastmod?.set(loc, lastmod);\n }\n }\n return doc;\n};\n\n/**\n * Parse the `llms.txt` index into its Markdown link targets. Deliberately\n * shallow, like {@link parseSitemap}: the checks only need \"which pages does\n * this file claim exist\", not a Markdown AST.\n */\nexport const parseLlms = (file: string, text: string): LlmsDoc => {\n const entries: LlmsDoc[\"entries\"] = [];\n const link = /\\]\\((?<url>[^)\\s]+)\\)/gu;\n for (const [index, line] of text.split(/\\r?\\n/u).entries()) {\n for (const match of line.matchAll(link)) {\n const url = match.groups?.url;\n if (url) {\n entries.push({ line: index + 1, url });\n }\n }\n }\n return { entries, file };\n};\n\nconst ROBOTS_DIRECTIVE = /^(?<field>[a-z-]+)\\s*:\\s*(?<value>.*)$/iu;\n\n/** Parse `robots.txt` into the directives the audit cares about. */\nexport const parseRobots = (file: string, text: string): RobotsDoc => {\n const doc: RobotsDoc = { disallow: [], file, invalid: [], sitemaps: [] };\n // Only `User-agent: *` rules bind the crawlers we're auditing for; a block\n // scoped to some other agent isn't a finding about our indexable pages.\n let appliesToAll = false;\n for (const [index, raw] of text.split(/\\r?\\n/u).entries()) {\n const line = raw.trim();\n if (line === \"\" || line.startsWith(\"#\")) {\n continue;\n }\n const match = ROBOTS_DIRECTIVE.exec(line);\n if (!match) {\n doc.invalid.push({ line: index + 1, text: line });\n continue;\n }\n const field = (match.groups?.field ?? \"\").toLowerCase();\n const value = (match.groups?.value ?? \"\").trim();\n if (field === \"user-agent\") {\n appliesToAll = value === \"*\";\n } else if (field === \"disallow\" && appliesToAll && value) {\n doc.disallow.push(value);\n } else if (field === \"sitemap\" && value) {\n doc.sitemaps.push(value);\n }\n }\n return doc;\n};\n\n/**\n * Whether an emitted `.html` file is a real page rather than a fragment.\n *\n * Astro writes standalone HTML for some components (`_home/Footer/index.html`\n * and friends) — markup with no `<html>` or `<head>`, never served as a route.\n * Auditing those as pages reports every one of them as missing a title, a\n * viewport, and a `lang` attribute, which is noise about markup nobody visits.\n * An SEO audit is about documents, so that's what we keep.\n */\nconst isDocument = (html: string): boolean => /<head[\\s>]/iu.test(html);\n\nconst readIfPresent = async (file: string): Promise<string | null> => {\n try {\n return await readFile(file, \"utf-8\");\n } catch {\n return null;\n }\n};\n\n/**\n * Read the built site: every HTML page reduced to a snapshot, the full file\n * index (for resolving subresource references), plus sitemap.xml and robots.txt.\n */\nexport const crawlStaticDir = async (options: {\n staticDir: string;\n manifest: BlumeManifest;\n basePath: string;\n}): Promise<CrawlResult> => {\n const { staticDir, manifest, basePath } = options;\n const routes = routeIndex(manifest, basePath);\n\n const htmlFiles = await glob(\"**/*.html\", { absolute: true, cwd: staticDir });\n const snapshots = await Promise.all(\n htmlFiles.toSorted().map(async (file) => {\n const url = fileToUrl(staticDir, file);\n if (stripBasePath(basePath, url).startsWith(EXAMPLES_PREFIX)) {\n return null;\n }\n const html = await readFile(file, \"utf-8\");\n if (!isDocument(html)) {\n return null;\n }\n return buildSnapshot({\n file,\n html,\n route: routes.get(url) ?? routes.get(stripBasePath(basePath, url)),\n url,\n });\n })\n );\n const pages = snapshots.filter((page) => page !== null);\n\n const sitemapFile = join(staticDir, \"sitemap.xml\");\n const sitemapXml = await readIfPresent(sitemapFile);\n const robotsFile = join(staticDir, \"robots.txt\");\n const robotsTxt = await readIfPresent(robotsFile);\n const llmsFile = join(staticDir, \"llms.txt\");\n const llmsText = await readIfPresent(llmsFile);\n const files = await indexFiles(staticDir);\n\n return {\n files,\n llms: llmsText === null ? null : parseLlms(llmsFile, llmsText),\n pages,\n robots: robotsTxt === null ? null : parseRobots(robotsFile, robotsTxt),\n sitemap:\n sitemapXml === null\n ? null\n : parseSitemap(\n sitemapFile,\n sitemapXml,\n files.get(\"/sitemap.xml\") ?? Buffer.byteLength(sitemapXml, \"utf-8\")\n ),\n };\n};\n",
|
|
42
|
-
"import { existsSync, readFileSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { askBackendRuntimeDep } from \"../ai/ask.ts\";\nimport type { AskBackend } from \"../ai/ask.ts\";\nimport { normalizeBasePath } from \"../core/base-path.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport { BLUME_IGNORE_DIRS } from \"../core/sources/watch.ts\";\nimport { trimChar } from \"../core/trim.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { applyBaseToAstroRedirects } from \"../deploy/redirects.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\nconst WRANGLER_CONFIG_FILES = [\n \"wrangler.jsonc\",\n \"wrangler.json\",\n \"wrangler.toml\",\n];\n\nconst resolveCloudflareAdapterArgs = (context: ProjectContext): string => {\n const args: string[] = ['prerenderEnvironment: \"node\"'];\n const wranglerPath = WRANGLER_CONFIG_FILES.map((file) =>\n join(context.root, file)\n ).find((file) => existsSync(file));\n if (wranglerPath) {\n let configPath = relative(context.outDir, wranglerPath);\n // The wrangler config always lives at the project root, above the `.blume`\n // runtime, so `relative` yields a `../…` path; normalize the theoretical\n // sibling case to an explicit `./` so it reads as a relative import.\n if (!configPath.startsWith(\".\") && !configPath.startsWith(\"/\")) {\n configPath = `./${configPath}`;\n }\n args.push(`configPath: ${JSON.stringify(configPath)}`);\n }\n return `{ ${args.join(\", \")} }`;\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-js` (OG image rendering) loads `@takumi-rs/core`, a native NAPI\n * addon that finds its platform-specific `.node` binding via\n * `createRequire(import.meta.url)`. Bundling it relocates `import.meta.url`\n * and breaks the binding lookup (\"Cannot find native binding\") on other\n * platforms (e.g. the Linux CI runner), so it must resolve from\n * `node_modules` at runtime instead. The prerender env matches these by\n * exact specifier, so every entry point Blume imports has to be listed:\n * the bare `takumi-js` (render) plus `takumi-js/helpers` (the `googleFonts`\n * OG-font loader). The `@takumi-rs/*` packages are listed too so the native\n * backend is never pulled into a chunk down any transitive path.\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 \"@takumi-rs/wasm\",\n \"github-slugger\",\n \"katex\",\n \"shiki\",\n \"simple-icons\",\n \"takumi-js\",\n \"takumi-js/helpers\",\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\n/**\n * The root a deploy adapter is shown, in place of the `.blume` runtime Astro\n * actually roots at. Adapters assume `outDir` is `<root>/dist` and resolve their\n * own output (and Vercel's dependency trace) against `root`, so the root implied\n * by Blume's `outDir` is the one that keeps that assumption true. See\n * {@link withAdapterRoot}.\n *\n * For a normal build that is the project root (`<project>/dist` -> `<project>`).\n * For a relocated runtime (`blume build --isolated`) it is the runtime dir\n * itself (`<runtime>/dist` -> `<runtime>`), keeping a verify build's adapter\n * output self-contained instead of overwriting the real `.vercel/output`.\n */\nconst adapterRoot = (context: ProjectContext): string =>\n dirname(astroOutDir(context));\n\n/**\n * Excludes Vite's pre-bundled dep cache from @vitejs/plugin-react. Astro's\n * react() replaces the plugin's default `/node_modules/` exclude with just\n * `/\\.astro$/`, so without this Babel re-parses every optimized dep chunk\n * served from `.vite/deps` — a 500KB+ vendor bundle per chunk, re-done on each\n * re-optimization. A blanket `/node_modules/` exclude would instead switch the\n * React Compiler off for Blume's own components in published installs (they\n * resolve under `node_modules/blume/src`, and exclude beats include in the\n * plugin's filter), so only the pre-bundle cache is excluded.\n */\nconst REACT_EXCLUDE = String.raw`exclude: [/\\/node_modules\\/\\.vite\\//]`;\n\n/**\n * The `react()` integration call. When `compilerPath` is set (the resolved\n * absolute path to `babel-plugin-react-compiler`), react() carries the compiler\n * as the first babel plugin — an absolute path, because @vitejs/plugin-react\n * resolves babel plugins from the *project* root, not `.blume/`, so a bare\n * specifier wouldn't resolve in a user project. `target: \"19\"` matches Blume's\n * React pin. `null`/`undefined` (compiler off or unresolvable) omits the babel\n * block. Both variants carry the pre-bundle exclude above.\n */\nconst reactIntegration = (compilerPath: string | null | undefined): string =>\n compilerPath\n ? `react({ babel: { plugins: [[${JSON.stringify(compilerPath)}, { target: \"19\" }]] }, ${REACT_EXCLUDE} })`\n : `react({ ${REACT_EXCLUDE} })`;\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 /** The generated Ask trigger (`blume:ask`); renders nothing when Ask is off. */\n askPath: string;\n dataPath: string;\n examplesPath: string;\n /** The example-preview Tailwind entry (`blume:examples-theme`). */\n examplesThemePath: string;\n themePath: string;\n searchClientPath: string;\n openapiPath: string;\n /**\n * Absolute path to `babel-plugin-react-compiler` when the React Compiler is\n * enabled (resolved from Blume's package root by the caller); null/absent\n * disables the compiler and emits a bare `react()`.\n */\n reactCompilerPath?: string | null;\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 askPath,\n contentRoutes,\n examplesPath,\n examplesThemePath,\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 if (!server || !deployment.adapter) {\n return \"\";\n }\n if (deployment.adapter === \"cloudflare\") {\n return resolveCloudflareAdapterArgs(context);\n }\n return ADAPTER_OPTIONS[deployment.adapter] ?? \"\";\n })();\n // Vercel resolves its Build Output tree and its `@vercel/nft` dependency\n // trace against the Astro root, which for Blume is the hidden `.blume`\n // runtime — leaving the traced function without its chunks or node_modules.\n // The other adapters emit into `outDir` (cloudflare, node) or are surfaced\n // afterwards (netlify), so none of them read `root` this way.\n const adapterExpr =\n deployment.adapter === \"vercel\"\n ? `withAdapterRoot(adapter(${adapterArgs}), ${JSON.stringify(adapterRoot(context))})`\n : `adapter(${adapterArgs})`;\n const adapterOption =\n server && deployment.adapter ? `\\n adapter: ${adapterExpr},` : \"\";\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 // Base the redirect paths the same way routes are based, so a redirect lands\n // under `basePath` too. Astro layers its own `base` (deployment.base) onto\n // `from` when matching, but never onto `to` — see applyBaseToAstroRedirects.\n const basedRedirects = applyBaseToAstroRedirects(\n config.redirects,\n config.basePath,\n deployment.base ?? \"\"\n );\n const redirectsOption =\n basedRedirects.length > 0\n ? `\\n redirects: ${JSON.stringify(\n Object.fromEntries(\n basedRedirects.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 blumeImports = [\n \"blumeIntegration\",\n \"prerenderDepsPlugin\",\n \"serverAppResolvePlugin\",\n ...(adapterOption.includes(\"withAdapterRoot\") ? [\"withAdapterRoot\"] : []),\n ];\n const blumeImport = `import { ${blumeImports.join(\", \")} } 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 // Content links are rewritten to their real served URL: the `deployment.base`\n // subdirectory (Astro doesn't rewrite `<a href>`) layered over the site-wide\n // `basePath` baked into routes. The layers are passed separately so a\n // hand-written `basePath` link (`/docs/x`) isn't double-prefixed (see\n // `withComposedBasePath`). The link checker validates the base-less authored\n // path against `basePath` routes separately.\n const deployBase = normalizeBasePath(deployment.base);\n\n const integrations = [\n `mdx({ processor: blumeMdxProcessor(${JSON.stringify({\n basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\n deployBase,\n headingAnchors: config.markdown.headingAnchors,\n })}) })`,\n ];\n if (needsReact) {\n integrations.push(reactIntegration(options.reactCompilerPath));\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) and wires\n // up dev-server `Accept: text/markdown` negotiation over the content routes.\n integrations.push(\n `blumeIntegration(${JSON.stringify({ 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 basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\n deployBase,\n headingAnchors: config.markdown.headingAnchors,\n })}),\n shikiConfig: {\n themes: {\n light: ${JSON.stringify(config.markdown.codeBlocks.theme.light)},\n dark: ${JSON.stringify(config.markdown.codeBlocks.theme.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(), serverAppResolvePlugin()],\n // Mermaid (lazy-loaded client-side for diagrams) statically imports dayjs as\n // CJS (\\`dayjs/dayjs.min.js\\`). In dev, an un-pre-bundled dependency is served\n // as raw ESM, and that UMD file exposes no \\`default\\` export, so mermaid\n // throws on load and diagrams render blank. Forcing mermaid through the dep\n // optimizer bundles dayjs with correct CJS interop. In a standalone install\n // Blume's dynamic \\`import(\"mermaid\")\\` lives inside \\`node_modules/blume\\`,\n // which Vite's optimizer scan doesn't crawl, so mermaid is never discovered\n // on its own — hence the explicit include. mermaid resolves through the\n // \\`blume\\` package (it isn't a direct dep of the generated project), so the\n // nested \\`blume > mermaid\\` form is required. Production (Rollup) already\n // handles the interop, so this only affects dev.\n optimizeDeps: { include: [\"blume > mermaid\"] },\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 //\n // The SSR externals go through the legacy \\`ssr.external\\` key rather than\n // \\`environments.ssr\\`: defining a user-owned \\`environments.ssr\\` block\n // collides with the internal environment Astro 7 builds the server under and\n // detaches the adapter's server entrypoint from the rolldown input, so the\n // SSR entry is emitted as \\`index.mjs\\` instead of the \\`entry.mjs\\` the\n // Vercel adapter's \\`astro:build:done\\` hook then fails to find. \\`prerender\\`\n // is Astro-only and has no legacy equivalent, so it stays under \\`environments\\`.\n ssr: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} },\n environments: {\n prerender: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n },\n resolve: {\n alias: {\n \"blume:ask\": ${JSON.stringify(askPath)},\n \"blume:data\": ${JSON.stringify(dataPath)},\n \"blume:examples\": ${JSON.stringify(examplesPath)},\n \"blume:examples-theme\": ${JSON.stringify(examplesThemePath)},\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/**\n * Astro's glob loader resolves `base` with `new URL(base, config.root)`. On\n * Windows an absolute path like `C:\\\\docs\\\\content` makes `new URL` parse the\n * drive letter as a URL scheme, so the result isn't a `file:` URL and Astro's\n * subsequent `fileURLToPath` throws \"The URL must be of scheme file\". Emit an\n * absolute base as a proper `file://` URL so the drive letter can't be mistaken\n * for a scheme; relative bases resolve against `config.root` unchanged.\n */\nconst astroGlobBase = (base: string): string =>\n isAbsolute(base) ? pathToFileURL(base).href : base;\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 * The `docs` collection's base + include/exclude globs. Defaults to\n * `content.root` and the top-level content globs; a single filesystem source\n * roots the collection at *its* root so entry ids resolve (see\n * `resolveDocsCollection`).\n */\n collection?: { base: string; include: string[]; exclude: string[] };\n /**\n * Whether any filesystem (non-staged) source feeds the `docs` collection.\n * When false (e.g. an all-staged project where every page is materialized by\n * a non-filesystem source), the 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 const collectionBase = options.collection?.base ?? context.contentRoot;\n const includeGlobs = options.collection?.include ?? config.content.include;\n const excludeGlobs = options.collection?.exclude ?? config.content.exclude;\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 // the collection base is the project root (a migrated `.`-rooted project).\n const outDirRel = relative(collectionBase, 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/`: an all-staged project roots the\n // collection 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 ...includeGlobs,\n ...(excludeGlobs ?? []).map((pattern) => `!${pattern}`),\n // Mirror the filesystem scan's baseline ignores (see BLUME_IGNORE_DIRS):\n // Astro's content layer roots at the project dir, so a `.`-wide content\n // root would otherwise re-ingest dependency trees and build output —\n // e.g. a prior `dist/*.mdx` render — and crash the content-module graph.\n // The runtime dir (`.blume`, or a custom distDir) is excluded precisely\n // by `outDirIgnore` instead, so it's left out of this baseline.\n ...BLUME_IGNORE_DIRS.flatMap((dir) =>\n dir === \".blume\" ? [] : [`!**/${dir}/**`]\n ),\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(astroGlobBase(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(astroGlobBase(collectionBase))},\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 // `streamText` returns synchronously and defers provider/auth/network errors\n // to stream consumption, so the handler's try/catch never sees them: without\n // these the client gets a 200 whose stream aborts mid-flight and nothing is\n // logged server-side. A missing credential is rejected up front as a real\n // 500; everything else is at least logged via `onError`.\n const keyCheck =\n backend.kind === \"gateway\"\n ? ` // The AI Gateway authenticates with an API key or Vercel's OIDC token.\n if (!(process.env.AI_GATEWAY_API_KEY || process.env.VERCEL_OIDC_TOKEN)) {\n return new Response(\n \"Ask AI is not configured: set AI_GATEWAY_API_KEY (or deploy on Vercel with OIDC).\",\n { status: 500 }\n );\n }`\n : ` if (!process.env[${JSON.stringify(backend.apiKeyEnv)}]) {\n return new Response(\n ${JSON.stringify(`Ask AI is not configured: set ${backend.apiKeyEnv}.`)},\n { status: 500 }\n );\n }`;\n // Provider errors surface mid-stream, after the 200 is committed; this is\n // the only place they can be observed server-side.\n const onError = ` onError({ error }) {\n console.error(\"Ask AI provider error:\", error);\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${onError}\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${onError}\n });`;\n const handler = `export const POST: APIRoute = async ({ request }) => {\n${validate}\n${keyCheck}\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/**\n * Generate `.blume/src/generated/Ask.astro` — the component behind the\n * `blume:ask` alias that the shared header renders in place of a per-page slot.\n *\n * The header can't import the Ask AI island directly: it's a React component, so\n * the import alone would drag the JSX renderer into the module graph of every\n * project — including the ones that never enable Ask AI and therefore have no\n * React integration wired into their generated Astro config (see `needsReact`).\n * Routing the import through a generated component keeps that dependency behind\n * the config switch: enabled projects get the island, disabled ones get a\n * component that renders nothing and imports no React.\n *\n * `strings` comes from the header (the active locale's dictionary); the empty-\n * state suggestions are read straight from the data snapshot, which is why no\n * page has to pass them.\n */\nexport const askComponentTemplate = (askEnabled: boolean): string =>\n askEnabled\n ? `---\n// Generated by Blume. Do not edit.\nimport AskAI from \"blume/components/islands/AskAI.astro\";\nimport data from \"blume:data\";\n\nconst { strings } = Astro.props;\n---\n\n<AskAI strings={strings ?? data.ui.ask} suggestions={data.config.ask?.suggestions ?? []} />\n`\n : `---\n// Generated by Blume. Do not edit.\n// Ask AI is off (\\`ai.ask.enabled\\`), so the header's Ask trigger renders nothing.\n// Deliberately imports no React island, keeping the JSX renderer out of projects\n// that don't need it.\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 * Both read `raw-markdown.json`, whose entries hold the verbatim source (`mdx`)\n * plus a component-downleveled variant (`md`) when the page uses components:\n * `/<route>.mdx` serves the source exactly as written, `/<route>.md` serves\n * plain Markdown with `<TypeTable>`-style components converted for consumers\n * that can't interpret JSX.\n */\nexport const rawMarkdownEndpointTemplate = (kind: \"md\" | \"mdx\"): 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 }: { props: { route: string } }) {\n const entries = raw as Record<string, { md?: string; mdx?: string }>;\n const entry = entries[props.route];\n return new Response(entry ? ${\n kind === \"md\" ? '(entry.md ?? entry.mdx ?? \"\")' : '(entry.mdx ?? \"\")'\n } : \"\", {\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 `${trimChar(route, \"/\")}.ts`;\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 = trimChar(route, \"/\");\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 }: { props: { section: string } }) {\n const bySection = feeds as Record<string, string>;\n return new Response(bySection[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 \"blume:data\";\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<string>();\n const paths: { params: { slug: string }; props: { title: string } }[] = [];\n const add = (slug: string, title: string) => {\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 }: { props: { title: string } }) {\n const png = await renderOgImage({\n accent: data.config.og.palette?.accent ?? data.config.theme.accent.light,\n brand: data.config.title,\n description: data.config.description,\n fonts: data.config.og.fonts,\n logo: data.config.og.logo,\n palette: data.config.og.palette,\n repo: repoSlug,\n site: siteHost,\n title: props.title,\n });\n return new Response(new Uint8Array(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// The reference is an unlocalized route, so its chrome renders in the default\n// locale's language and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the changelog index's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\n---\n\n<ReferenceLayout\n analytics={data.config.analytics}\n banner={data.config.banner}\n dir={dir}\n fontCssVars={data.fontCssVars}\n locale={htmlLang}\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 ui={data.ui}\n>\n <ScalarComponent configuration={configuration} renderMode=\"client\" />\n</ReferenceLayout>\n`;\n\nexport const catchAllPageTemplate = (options: {\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 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 type { CollectionKey } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport { withBase } from \"blume/components/islands/base-path.ts\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\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 Prompt from \"blume/components/content/Prompt.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 ApiTagOperations from \"blume/components/openapi/ApiTagOperations.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 \"blume:data\";\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 ApiTagOperations,\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 Prompt,\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 as CollectionKey, 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;\n// Absolute URLs also carry the deployment base (the page is served under it):\n// \\`site + base + path\\`. Only absolutize root-relative paths: \\`seo.image\\` may be\n// an external URL, which passes through verbatim (mirrors PageLayout).\nconst ogImage =\n ogRel && base && ogRel.startsWith(\"/\") ? \\`\\${base}\\${withBase(ogRel)}\\` : ogRel;\n// Blume's generated card has known dimensions the layout can declare; a user's\n// \\`seo.image\\` could be any size or format, so it gets none.\nconst ogGenerated = !seo.image && Boolean(ogPath);\n\n// X attribution: the site's account, plus a creator the page can claim for\n// itself (a guest post crediting its own author) over the configured default.\nconst x = { ...data.config.x, ...(seo.x?.creator ? { creator: seo.x.creator } : {}) };\n\nconst basedRoute = withBase(route);\nconst canonical =\n seo.canonical ??\n (base ? \\`\\${base}\\${basedRoute === \"/\" ? \"\" : basedRoute}\\` : 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: string) =>\n i18n && codeArg === i18n.defaultLocale && i18n.hideDefaultLocalePrefix\n ? \"\"\n : \\`/\\${codeArg}\\`;\nconst localizeRoute = (logical: string, codeArg: string) => {\n const prefix = localePrefix(codeArg);\n if (!prefix) {\n return logical;\n }\n return logical === \"/\" ? prefix : \\`\\${prefix}\\${logical}\\`;\n};\nconst stripLocale = (path: string, codeArg: string) => {\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: string) => {\n const p = withBase(path);\n return base + (p === \"/\" ? \"\" : p);\n};\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 ogGenerated={ogGenerated}\n x={x}\n canonical={canonical}\n editUrl={editUrl}\n feedback={data.config.feedback}\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>\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 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 clientData = options.needsReact\n ? '\\n clientData={{ config: data.config, navigation: data.navigation, page: { route: \"/changelog\", title: pageTitle } }}'\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 { withBase } from \"blume/components/islands/base-path.ts\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\nimport { layoutOverrides } from \"../generated/components.ts\";\nimport data from \"blume:data\";\n\nexport const prerender = true;\n\nconst entryDate = (entry: {\n data: { date?: string | null; changelog?: { date?: string | null } | null };\n}) => entry.data.date ?? entry.data.changelog?.date ?? null;\n\nconst toTime = (value: string | null | undefined) => {\n if (!value) {\n return 0;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? 0 : date.getTime();\n};\n\n// The changelog is an unlocalized route, so its chrome renders in the default\n// locale's dictionary and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the catch-all's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\n\n// Formatted in the same locale as the chrome, and in UTC, to match the\n// per-page \"last updated\" stamp.\nconst formatDate = (value: string | null | undefined) => {\n if (!value) {\n return;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? undefined\n : new Intl.DateTimeFormat(htmlLang, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(date);\n};\n\nconst slugify = (text: string) =>\n text.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") ||\n \"update\";\n\n// The major of a version's embedded semver (\\`1.2.3\\` -> 1, \\`pkg@2.0.0\\` -> 2), or\n// null when there is no full major.minor.patch to key on. Drives the changelog's\n// group-by-major pagination, so it tolerates the scoped tags monorepos publish.\nconst majorVersion = (version: string | null | undefined) => {\n const match = /(\\\\d+)\\\\.\\\\d+\\\\.\\\\d+/.exec(String(version ?? \"\"));\n return match ? Number(match[1]) : null;\n};\n\n// Map each entry to its own generated page so the timeline heading can deep-link\n// to it. The collection entry id matches the route manifest's \\`entryId\\`.\nconst routeByEntry = new Map(\n data.routes.map((route) => [route.entryId, route.path])\n);\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 href: routeByEntry.get(entry.id) ?? undefined,\n id: slugify(label),\n label,\n major: majorVersion(entry.data.changelog?.version),\n tags: entry.data.changelog?.category\n ? [entry.data.changelog.category]\n : [],\n };\n })\n);\n\n// Repeated labels slug to the same id (e.g. two entries with neither a title\n// nor a version both falling back to \"update\"); suffix the later ones -2, -3,\n// ... so every heading deep-links to its own entry. The first keeps the plain\n// slug, and the rendered ids stay in lockstep with the \\`headings\\` list below.\nconst seenIds = new Set();\nfor (const item of items) {\n let uniqueId = item.id;\n for (let n = 2; seenIds.has(uniqueId); n += 1) {\n uniqueId = item.id + \"-\" + n;\n }\n seenIds.add(uniqueId);\n item.id = uniqueId;\n}\n\n// A changelog is semver-paginated only when every visible release parses as\n// semver and they span more than one major line. Older majors then collapse\n// into groups the reader reveals one at a time; otherwise the timeline is flat.\nconst majors = items.every((item) => item.major !== null)\n ? [...new Set(items.map((item) => item.major))]\n .filter((major): major is number => major !== null)\n .toSorted((a, b) => b - a)\n : [];\nconst paginate = majors.length > 1;\nconst majorGroups = majors.map((major) => ({\n items: items.filter((item) => item.major === major),\n label: major + \".x\",\n major,\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;\n// The canonical URL carries the deployment base (the page is served under it),\n// matching how the catch-all canonicalizes via \\`withBase(route)\\`.\nconst basedRoute = withBase(\"/changelog\");\nconst canonical = base ? base + basedRoute : null;\n\n// The page chrome (h1, title, description) comes from the same translatable\n// \\`changelog\\` group as the reveal button; optional chaining tolerates a\n// not-yet-regenerated data snapshot from before these keys existed.\nconst changelogTitle = data.ui.changelog?.title ?? \"Changelog\";\nconst changelogDescription =\n data.ui.changelog?.description ??\n \"Product updates, new features, and fixes from every release.\";\nconst pageTitle = data.config.title + \" \" + changelogTitle;\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 locale={htmlLang}\n dir={dir}\n ui={data.ui}\n page={{\n title: pageTitle,\n description: changelogDescription,\n route: \"/changelog\",\n }}\n headings={headings}\n toc={data.config.toc}\n contentLayout=\"bare\"\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={true}\n ogImage={null}\n x={data.config.x}\n canonical={canonical}\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>\n <h1>{changelogTitle}</h1>\n {\n items.length === 0 ? (\n <p>No changelog entries yet.</p>\n ) : paginate ? (\n <blume-changelog\n class=\"not-prose mt-8 block\"\n data-i18n-more={data.ui.changelog?.showReleases}\n >\n {majorGroups[0].items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n {majorGroups.slice(1).map((group) => (\n <section\n aria-label={group.label + \" releases\"}\n data-changelog-label={group.label}\n data-changelog-major={group.major}\n >\n {group.items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </section>\n ))}\n <div class=\"mt-10 flex justify-center\">\n <button\n class=\"inline-flex items-center gap-2 rounded-full border border-border bg-background px-4 py-2 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground\"\n data-changelog-more\n hidden\n type=\"button\"\n >\n Show older releases\n </button>\n </div>\n </blume-changelog>\n ) : (\n <div class=\"not-prose mt-8\">\n {items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </div>\n )\n }\n <script>\n import \"blume/components/content/changelog-element.ts\";\n </script>\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 { withBase } from \"blume/components/islands/base-path.ts\";\nimport data from \"blume:data\";\n\nexport const prerender = true;\n\nconst nf = data.ui.notFound;\n\n// The 404 page is an unlocalized route, so its chrome renders in the default\n// locale's dictionary and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the catch-all's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\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 locale={htmlLang}\n dir={dir}\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={withBase(\"/\")}>{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. */\n/**\n * A filesystem-safe, injective token for an example path. Distinct paths must\n * never share a wrapper file (`button.demo` vs `button-demo` used to collide),\n * so every non-alphanumeric character is hex-escaped rather than collapsed.\n */\nexport const exampleSlug = (path: string): string =>\n path.replaceAll(\n /[^a-zA-Z0-9]/gu,\n (char) => `_${(char.codePointAt(0) ?? 0).toString(16)}_`\n );\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 * The route prefix `<Component />` preview frames are served under:\n * `{basePath}/blume-examples/<example path>`. `deployment.base` is layered on\n * top by Astro (components apply it with `withBase`).\n */\nexport const examplesRouteBase = (basePath: string): string =>\n `${basePath}/blume-examples`;\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, and the route\n * base preview iframes point at. Reached by the shipped `Component.astro` and the\n * generated preview page via the `blume:examples` alias. Always written (an\n * empty object when there are no examples) so the alias resolves.\n */\nexport const exampleMapTemplate = (\n specs: ExampleSpec[],\n basePath: string\n): string => {\n const base = `export const examplesBase = ${JSON.stringify(\n examplesRouteBase(basePath)\n )};`;\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\n${base}\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}\n${base}\nexport const examples = {\n${entries}\n};\n`;\n};\n\n/**\n * Generate the `<Component />` preview page — one prerendered route per\n * example under `{basePath}/blume-examples/`, rendered as a bare document\n * (no layout) that an iframe in the docs page embeds. The iframe boundary is\n * what isolates examples from the docs CSS: the only stylesheet here is the\n * example entry (`blume:examples-theme` — Tailwind, the Blume tokens, and the\n * user's configured examples css), so users can preview components styled by\n * their own design system (e.g. shadcn) with no prose styles bleeding in.\n *\n * The inline script mirrors the docs theme before first paint — same-document\n * reads of the parent's `data-theme` (same origin) with a MutationObserver for\n * live toggles — and sets both `data-theme` and a `dark` class so either\n * dark-mode convention works in user CSS. When the page is opened directly\n * (no parent), it falls back to the stored preference, then the OS setting.\n */\nexport const examplesPageTemplate = (): string =>\n `---\n// Generated by Blume. Do not edit.\nimport { examples } from \"blume:examples\";\nimport \"blume:examples-theme\";\n\n// Prerendered even in server output, like docs content.\nexport const prerender = true;\n\nexport const getStaticPaths = () =>\n Object.keys(examples).map((path) => ({ params: { path } }));\n\nconst { path } = Astro.params;\nconst entry = path ? examples[path] : undefined;\nif (!entry) {\n return new Response(null, { status: 404 });\n}\nconst Example = entry.Component;\n---\n\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"robots\" content=\"noindex\" />\n <title>{path}</title>\n <script is:inline>\n (() => {\n const root = document.documentElement;\n const apply = (theme) => {\n root.dataset.theme = theme;\n root.classList.toggle(\"dark\", theme === \"dark\");\n };\n const stored = () =>\n localStorage.getItem(\"blume-theme\") ??\n (matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\");\n try {\n const host = window.parent.document.documentElement;\n apply(host.dataset.theme ?? stored());\n new MutationObserver(() => {\n apply(host.dataset.theme ?? stored());\n }).observe(host, { attributeFilter: [\"data-theme\"] });\n } catch {\n apply(stored());\n }\n })();\n </script>\n </head>\n <!-- Flex + margin:auto centers the example and, unlike place-items, keeps\n the top edge reachable when the example outgrows the frame. -->\n <body style=\"display:flex;min-height:100svh;padding:1.5rem\">\n <div style=\"margin:auto\"><Example /></div>\n </body>\n</html>\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:ask\" {\n const Ask: typeof import(\"blume/components/islands/AskAI.astro\").default;\n export default Ask;\n}\n\ndeclare module \"blume:data\" {\n const data: import(\"blume\").BlumeData;\n export default data;\n}\n\ndeclare module \"blume:examples\" {\n type Examples = typeof import(\"./generated/examples.ts\").examples;\n export const examples: Record<string, Examples[keyof Examples]>;\n export const examplesBase: string;\n}\n\ndeclare module \"blume:examples-theme\";\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",
|
|
42
|
+
"import { existsSync, readFileSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { askBackendRuntimeDep } from \"../ai/ask.ts\";\nimport type { AskBackend } from \"../ai/ask.ts\";\nimport { normalizeBasePath } from \"../core/base-path.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport { BLUME_IGNORE_DIRS } from \"../core/sources/watch.ts\";\nimport { trimChar } from \"../core/trim.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { applyBaseToAstroRedirects } from \"../deploy/redirects.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\nconst WRANGLER_CONFIG_FILES = [\n \"wrangler.jsonc\",\n \"wrangler.json\",\n \"wrangler.toml\",\n];\n\nconst resolveCloudflareAdapterArgs = (context: ProjectContext): string => {\n const args: string[] = ['prerenderEnvironment: \"node\"'];\n const wranglerPath = WRANGLER_CONFIG_FILES.map((file) =>\n join(context.root, file)\n ).find((file) => existsSync(file));\n if (wranglerPath) {\n let configPath = relative(context.outDir, wranglerPath);\n // The wrangler config always lives at the project root, above the `.blume`\n // runtime, so `relative` yields a `../…` path; normalize the theoretical\n // sibling case to an explicit `./` so it reads as a relative import.\n if (!configPath.startsWith(\".\") && !configPath.startsWith(\"/\")) {\n configPath = `./${configPath}`;\n }\n args.push(`configPath: ${JSON.stringify(configPath)}`);\n }\n return `{ ${args.join(\", \")} }`;\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-js` (OG image rendering) loads `@takumi-rs/core`, a native NAPI\n * addon that finds its platform-specific `.node` binding via\n * `createRequire(import.meta.url)`. Bundling it relocates `import.meta.url`\n * and breaks the binding lookup (\"Cannot find native binding\") on other\n * platforms (e.g. the Linux CI runner), so it must resolve from\n * `node_modules` at runtime instead. The prerender env matches these by\n * exact specifier, so every entry point Blume imports has to be listed:\n * the bare `takumi-js` (render) plus `takumi-js/helpers` (the `googleFonts`\n * OG-font loader). The `@takumi-rs/*` packages are listed too so the native\n * backend is never pulled into a chunk down any transitive path.\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 \"@takumi-rs/wasm\",\n \"github-slugger\",\n \"katex\",\n \"shiki\",\n \"simple-icons\",\n \"takumi-js\",\n \"takumi-js/helpers\",\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\n/**\n * The root a deploy adapter is shown, in place of the `.blume` runtime Astro\n * actually roots at. Adapters assume `outDir` is `<root>/dist` and resolve their\n * own output (and Vercel's dependency trace) against `root`, so the root implied\n * by Blume's `outDir` is the one that keeps that assumption true. See\n * {@link withAdapterRoot}.\n *\n * For a normal build that is the project root (`<project>/dist` -> `<project>`).\n * For a relocated runtime (`blume build --isolated`) it is the runtime dir\n * itself (`<runtime>/dist` -> `<runtime>`), keeping a verify build's adapter\n * output self-contained instead of overwriting the real `.vercel/output`.\n */\nconst adapterRoot = (context: ProjectContext): string =>\n dirname(astroOutDir(context));\n\n/**\n * Excludes Vite's pre-bundled dep cache from @vitejs/plugin-react. Astro's\n * react() replaces the plugin's default `/node_modules/` exclude with just\n * `/\\.astro$/`, so without this Babel re-parses every optimized dep chunk\n * served from `.vite/deps` — a 500KB+ vendor bundle per chunk, re-done on each\n * re-optimization. A blanket `/node_modules/` exclude would instead switch the\n * React Compiler off for Blume's own components in published installs (they\n * resolve under `node_modules/blume/src`, and exclude beats include in the\n * plugin's filter), so only the pre-bundle cache is excluded.\n */\nconst REACT_EXCLUDE = String.raw`exclude: [/\\/node_modules\\/\\.vite\\//]`;\n\n/**\n * The `react()` integration call. When `compilerPath` is set (the resolved\n * absolute path to `babel-plugin-react-compiler`), react() carries the compiler\n * as the first babel plugin — an absolute path, because @vitejs/plugin-react\n * resolves babel plugins from the *project* root, not `.blume/`, so a bare\n * specifier wouldn't resolve in a user project. `target: \"19\"` matches Blume's\n * React pin. `null`/`undefined` (compiler off or unresolvable) omits the babel\n * block. Both variants carry the pre-bundle exclude above.\n */\nconst reactIntegration = (compilerPath: string | null | undefined): string =>\n compilerPath\n ? `react({ babel: { plugins: [[${JSON.stringify(compilerPath)}, { target: \"19\" }]] }, ${REACT_EXCLUDE} })`\n : `react({ ${REACT_EXCLUDE} })`;\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 /** The generated Ask trigger (`blume:ask`); renders nothing when Ask is off. */\n askPath: string;\n dataPath: string;\n examplesPath: string;\n /** The example-preview Tailwind entry (`blume:examples-theme`). */\n examplesThemePath: string;\n themePath: string;\n searchClientPath: string;\n openapiPath: string;\n /**\n * Absolute path to `babel-plugin-react-compiler` when the React Compiler is\n * enabled (resolved from Blume's package root by the caller); null/absent\n * disables the compiler and emits a bare `react()`.\n */\n reactCompilerPath?: string | null;\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 askPath,\n contentRoutes,\n examplesPath,\n examplesThemePath,\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 if (!server || !deployment.adapter) {\n return \"\";\n }\n if (deployment.adapter === \"cloudflare\") {\n return resolveCloudflareAdapterArgs(context);\n }\n return ADAPTER_OPTIONS[deployment.adapter] ?? \"\";\n })();\n // Vercel resolves its Build Output tree and its `@vercel/nft` dependency\n // trace against the Astro root, which for Blume is the hidden `.blume`\n // runtime — leaving the traced function without its chunks or node_modules.\n // The other adapters emit into `outDir` (cloudflare, node) or are surfaced\n // afterwards (netlify), so none of them read `root` this way.\n const adapterExpr =\n deployment.adapter === \"vercel\"\n ? `withAdapterRoot(adapter(${adapterArgs}), ${JSON.stringify(adapterRoot(context))})`\n : `adapter(${adapterArgs})`;\n const adapterOption =\n server && deployment.adapter ? `\\n adapter: ${adapterExpr},` : \"\";\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 // Base the redirect paths the same way routes are based, so a redirect lands\n // under `basePath` too. Astro layers its own `base` (deployment.base) onto\n // `from` when matching, but never onto `to` — see applyBaseToAstroRedirects.\n const basedRedirects = applyBaseToAstroRedirects(\n config.redirects,\n config.basePath,\n deployment.base ?? \"\"\n );\n const redirectsOption =\n basedRedirects.length > 0\n ? `\\n redirects: ${JSON.stringify(\n Object.fromEntries(\n basedRedirects.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 blumeImports = [\n \"blumeIntegration\",\n \"prerenderDepsPlugin\",\n \"serverAppResolvePlugin\",\n ...(adapterOption.includes(\"withAdapterRoot\") ? [\"withAdapterRoot\"] : []),\n ];\n const blumeImport = `import { ${blumeImports.join(\", \")} } 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 // Blume's preconfigured transformer compiles with the package's own pinned\n // classic TypeScript, so the user's project can be on any version (see\n // markdown/twoslash.ts).\n const twoslashTransformer = \"blumeTwoslashTransformer(), \";\n\n // Content links are rewritten to their real served URL: the `deployment.base`\n // subdirectory (Astro doesn't rewrite `<a href>`) layered over the site-wide\n // `basePath` baked into routes. The layers are passed separately so a\n // hand-written `basePath` link (`/docs/x`) isn't double-prefixed (see\n // `withComposedBasePath`). The link checker validates the base-less authored\n // path against `basePath` routes separately.\n const deployBase = normalizeBasePath(deployment.base);\n\n const integrations = [\n `mdx({ processor: blumeMdxProcessor(${JSON.stringify({\n basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\n deployBase,\n headingAnchors: config.markdown.headingAnchors,\n })}) })`,\n ];\n if (needsReact) {\n integrations.push(reactIntegration(options.reactCompilerPath));\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) and wires\n // up dev-server `Accept: text/markdown` negotiation over the content routes.\n integrations.push(\n `blumeIntegration(${JSON.stringify({ 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, blumeTwoslashTransformer } from \"blume/markdown\";\n${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 basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\n deployBase,\n headingAnchors: config.markdown.headingAnchors,\n })}),\n shikiConfig: {\n themes: {\n light: ${JSON.stringify(config.markdown.codeBlocks.theme.light)},\n dark: ${JSON.stringify(config.markdown.codeBlocks.theme.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(), serverAppResolvePlugin()],\n // Mermaid (lazy-loaded client-side for diagrams) statically imports dayjs as\n // CJS (\\`dayjs/dayjs.min.js\\`). In dev, an un-pre-bundled dependency is served\n // as raw ESM, and that UMD file exposes no \\`default\\` export, so mermaid\n // throws on load and diagrams render blank. Forcing mermaid through the dep\n // optimizer bundles dayjs with correct CJS interop. In a standalone install\n // Blume's dynamic \\`import(\"mermaid\")\\` lives inside \\`node_modules/blume\\`,\n // which Vite's optimizer scan doesn't crawl, so mermaid is never discovered\n // on its own — hence the explicit include. mermaid resolves through the\n // \\`blume\\` package (it isn't a direct dep of the generated project), so the\n // nested \\`blume > mermaid\\` form is required. Production (Rollup) already\n // handles the interop, so this only affects dev.\n optimizeDeps: { include: [\"blume > mermaid\"] },\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 //\n // The SSR externals go through the legacy \\`ssr.external\\` key rather than\n // \\`environments.ssr\\`: defining a user-owned \\`environments.ssr\\` block\n // collides with the internal environment Astro 7 builds the server under and\n // detaches the adapter's server entrypoint from the rolldown input, so the\n // SSR entry is emitted as \\`index.mjs\\` instead of the \\`entry.mjs\\` the\n // Vercel adapter's \\`astro:build:done\\` hook then fails to find. \\`prerender\\`\n // is Astro-only and has no legacy equivalent, so it stays under \\`environments\\`.\n ssr: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} },\n environments: {\n prerender: { resolve: { external: ${JSON.stringify(RENDER_EXTERNAL_DEPS)} } },\n },\n resolve: {\n alias: {\n \"blume:ask\": ${JSON.stringify(askPath)},\n \"blume:data\": ${JSON.stringify(dataPath)},\n \"blume:examples\": ${JSON.stringify(examplesPath)},\n \"blume:examples-theme\": ${JSON.stringify(examplesThemePath)},\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/**\n * Astro's glob loader resolves `base` with `new URL(base, config.root)`. On\n * Windows an absolute path like `C:\\\\docs\\\\content` makes `new URL` parse the\n * drive letter as a URL scheme, so the result isn't a `file:` URL and Astro's\n * subsequent `fileURLToPath` throws \"The URL must be of scheme file\". Emit an\n * absolute base as a proper `file://` URL so the drive letter can't be mistaken\n * for a scheme; relative bases resolve against `config.root` unchanged.\n */\nconst astroGlobBase = (base: string): string =>\n isAbsolute(base) ? pathToFileURL(base).href : base;\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 * The `docs` collection's base + include/exclude globs. Defaults to\n * `content.root` and the top-level content globs; a single filesystem source\n * roots the collection at *its* root so entry ids resolve (see\n * `resolveDocsCollection`).\n */\n collection?: { base: string; include: string[]; exclude: string[] };\n /**\n * Whether any filesystem (non-staged) source feeds the `docs` collection.\n * When false (e.g. an all-staged project where every page is materialized by\n * a non-filesystem source), the 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 const collectionBase = options.collection?.base ?? context.contentRoot;\n const includeGlobs = options.collection?.include ?? config.content.include;\n const excludeGlobs = options.collection?.exclude ?? config.content.exclude;\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 // the collection base is the project root (a migrated `.`-rooted project).\n const outDirRel = relative(collectionBase, 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/`: an all-staged project roots the\n // collection 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 ...includeGlobs,\n ...(excludeGlobs ?? []).map((pattern) => `!${pattern}`),\n // Mirror the filesystem scan's baseline ignores (see BLUME_IGNORE_DIRS):\n // Astro's content layer roots at the project dir, so a `.`-wide content\n // root would otherwise re-ingest dependency trees and build output —\n // e.g. a prior `dist/*.mdx` render — and crash the content-module graph.\n // The runtime dir (`.blume`, or a custom distDir) is excluded precisely\n // by `outDirIgnore` instead, so it's left out of this baseline.\n ...BLUME_IGNORE_DIRS.flatMap((dir) =>\n dir === \".blume\" ? [] : [`!**/${dir}/**`]\n ),\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(astroGlobBase(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(astroGlobBase(collectionBase))},\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 // `streamText` returns synchronously and defers provider/auth/network errors\n // to stream consumption, so the handler's try/catch never sees them: without\n // these the client gets a 200 whose stream aborts mid-flight and nothing is\n // logged server-side. A missing credential is rejected up front as a real\n // 500; everything else is at least logged via `onError`.\n const keyCheck =\n backend.kind === \"gateway\"\n ? ` // The AI Gateway authenticates with an API key or Vercel's OIDC token.\n if (!(process.env.AI_GATEWAY_API_KEY || process.env.VERCEL_OIDC_TOKEN)) {\n return new Response(\n \"Ask AI is not configured: set AI_GATEWAY_API_KEY (or deploy on Vercel with OIDC).\",\n { status: 500 }\n );\n }`\n : ` if (!process.env[${JSON.stringify(backend.apiKeyEnv)}]) {\n return new Response(\n ${JSON.stringify(`Ask AI is not configured: set ${backend.apiKeyEnv}.`)},\n { status: 500 }\n );\n }`;\n // Provider errors surface mid-stream, after the 200 is committed; this is\n // the only place they can be observed server-side.\n const onError = ` onError({ error }) {\n console.error(\"Ask AI provider error:\", error);\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${onError}\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${onError}\n });`;\n const handler = `export const POST: APIRoute = async ({ request }) => {\n${validate}\n${keyCheck}\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/**\n * Generate `.blume/src/generated/Ask.astro` — the component behind the\n * `blume:ask` alias that the shared header renders in place of a per-page slot.\n *\n * The header can't import the Ask AI island directly: it's a React component, so\n * the import alone would drag the JSX renderer into the module graph of every\n * project — including the ones that never enable Ask AI and therefore have no\n * React integration wired into their generated Astro config (see `needsReact`).\n * Routing the import through a generated component keeps that dependency behind\n * the config switch: enabled projects get the island, disabled ones get a\n * component that renders nothing and imports no React.\n *\n * `strings` comes from the header (the active locale's dictionary); the empty-\n * state suggestions are read straight from the data snapshot, which is why no\n * page has to pass them.\n */\nexport const askComponentTemplate = (askEnabled: boolean): string =>\n askEnabled\n ? `---\n// Generated by Blume. Do not edit.\nimport AskAI from \"blume/components/islands/AskAI.astro\";\nimport data from \"blume:data\";\n\nconst { strings } = Astro.props;\n---\n\n<AskAI strings={strings ?? data.ui.ask} suggestions={data.config.ask?.suggestions ?? []} />\n`\n : `---\n// Generated by Blume. Do not edit.\n// Ask AI is off (\\`ai.ask.enabled\\`), so the header's Ask trigger renders nothing.\n// Deliberately imports no React island, keeping the JSX renderer out of projects\n// that don't need it.\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 * Both read `raw-markdown.json`, whose entries hold the verbatim source (`mdx`)\n * plus a component-downleveled variant (`md`) when the page uses components:\n * `/<route>.mdx` serves the source exactly as written, `/<route>.md` serves\n * plain Markdown with `<TypeTable>`-style components converted for consumers\n * that can't interpret JSX.\n */\nexport const rawMarkdownEndpointTemplate = (kind: \"md\" | \"mdx\"): 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 }: { props: { route: string } }) {\n const entries = raw as Record<string, { md?: string; mdx?: string }>;\n const entry = entries[props.route];\n return new Response(entry ? ${\n kind === \"md\" ? '(entry.md ?? entry.mdx ?? \"\")' : '(entry.mdx ?? \"\")'\n } : \"\", {\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 `${trimChar(route, \"/\")}.ts`;\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 = trimChar(route, \"/\");\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 }: { props: { section: string } }) {\n const bySection = feeds as Record<string, string>;\n return new Response(bySection[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 \"blume:data\";\n\nexport const prerender = true;\n\n// Custom (non-content) pages opted into a generated card, baked in at build.\n// The annotation keeps the empty-array case from being an implicit any[]\n// (ts(7034)) under a strict tsconfig.\nconst customRoutes: { slug: string; title: string }[] = ${JSON.stringify(customRoutes)};\n\nexport function getStaticPaths() {\n const seen = new Set<string>();\n const paths: { params: { slug: string }; props: { title: string } }[] = [];\n const add = (slug: string, title: string) => {\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 }: { props: { title: string } }) {\n const png = await renderOgImage({\n accent: data.config.og.palette?.accent ?? data.config.theme.accent.light,\n brand: data.config.title,\n description: data.config.description,\n fonts: data.config.og.fonts,\n logo: data.config.og.logo,\n palette: data.config.og.palette,\n repo: repoSlug,\n site: siteHost,\n title: props.title,\n });\n return new Response(new Uint8Array(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// The reference is an unlocalized route, so its chrome renders in the default\n// locale's language and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the changelog index's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\n---\n\n<ReferenceLayout\n analytics={data.config.analytics}\n banner={data.config.banner}\n dir={dir}\n fontCssVars={data.fontCssVars}\n locale={htmlLang}\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 ui={data.ui}\n>\n <ScalarComponent configuration={configuration} renderMode=\"client\" />\n</ReferenceLayout>\n`;\n\nexport const catchAllPageTemplate = (options: {\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 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 type { CollectionKey } from \"astro:content\";\nimport RootLayout from \"blume/components/layout/RootLayout.astro\";\nimport { withBase } from \"blume/components/islands/base-path.ts\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\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 Prompt from \"blume/components/content/Prompt.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 ApiTagOperations from \"blume/components/openapi/ApiTagOperations.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 \"blume:data\";\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 ApiTagOperations,\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 Prompt,\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 as CollectionKey, 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;\n// Absolute URLs also carry the deployment base (the page is served under it):\n// \\`site + base + path\\`. Only absolutize root-relative paths: \\`seo.image\\` may be\n// an external URL, which passes through verbatim (mirrors PageLayout).\nconst ogImage =\n ogRel && base && ogRel.startsWith(\"/\") ? \\`\\${base}\\${withBase(ogRel)}\\` : ogRel;\n// Blume's generated card has known dimensions the layout can declare; a user's\n// \\`seo.image\\` could be any size or format, so it gets none.\nconst ogGenerated = !seo.image && Boolean(ogPath);\n\n// X attribution: the site's account, plus a creator the page can claim for\n// itself (a guest post crediting its own author) over the configured default.\nconst x = { ...data.config.x, ...(seo.x?.creator ? { creator: seo.x.creator } : {}) };\n\nconst basedRoute = withBase(route);\nconst canonical =\n seo.canonical ??\n (base ? \\`\\${base}\\${basedRoute === \"/\" ? \"\" : basedRoute}\\` : 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: string) =>\n i18n && codeArg === i18n.defaultLocale && i18n.hideDefaultLocalePrefix\n ? \"\"\n : \\`/\\${codeArg}\\`;\nconst localizeRoute = (logical: string, codeArg: string) => {\n const prefix = localePrefix(codeArg);\n if (!prefix) {\n return logical;\n }\n return logical === \"/\" ? prefix : \\`\\${prefix}\\${logical}\\`;\n};\nconst stripLocale = (path: string, codeArg: string) => {\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: string) => {\n const p = withBase(path);\n return base + (p === \"/\" ? \"\" : p);\n};\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 ogGenerated={ogGenerated}\n x={x}\n canonical={canonical}\n editUrl={editUrl}\n feedback={data.config.feedback}\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>\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 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 clientData = options.needsReact\n ? '\\n clientData={{ config: data.config, navigation: data.navigation, page: { route: \"/changelog\", title: pageTitle } }}'\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 { withBase } from \"blume/components/islands/base-path.ts\";\nimport { resolveSlot } from \"blume/components/layout/overrides.ts\";\nimport { layoutOverrides } from \"../generated/components.ts\";\nimport data from \"blume:data\";\n\nexport const prerender = true;\n\nconst entryDate = (entry: {\n data: { date?: string | null; changelog?: { date?: string | null } | null };\n}) => entry.data.date ?? entry.data.changelog?.date ?? null;\n\nconst toTime = (value: string | null | undefined) => {\n if (!value) {\n return 0;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? 0 : date.getTime();\n};\n\n// The changelog is an unlocalized route, so its chrome renders in the default\n// locale's dictionary and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the catch-all's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\n\n// Formatted in the same locale as the chrome, and in UTC, to match the\n// per-page \"last updated\" stamp.\nconst formatDate = (value: string | null | undefined) => {\n if (!value) {\n return;\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? undefined\n : new Intl.DateTimeFormat(htmlLang, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(date);\n};\n\nconst slugify = (text: string) =>\n text.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") ||\n \"update\";\n\n// The major of a version's embedded semver (\\`1.2.3\\` -> 1, \\`pkg@2.0.0\\` -> 2), or\n// null when there is no full major.minor.patch to key on. Drives the changelog's\n// group-by-major pagination, so it tolerates the scoped tags monorepos publish.\nconst majorVersion = (version: string | null | undefined) => {\n const match = /(\\\\d+)\\\\.\\\\d+\\\\.\\\\d+/.exec(String(version ?? \"\"));\n return match ? Number(match[1]) : null;\n};\n\n// Map each entry to its own generated page so the timeline heading can deep-link\n// to it. The collection entry id matches the route manifest's \\`entryId\\`.\nconst routeByEntry = new Map(\n data.routes.map((route) => [route.entryId, route.path])\n);\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 href: routeByEntry.get(entry.id) ?? undefined,\n id: slugify(label),\n label,\n major: majorVersion(entry.data.changelog?.version),\n tags: entry.data.changelog?.category\n ? [entry.data.changelog.category]\n : [],\n };\n })\n);\n\n// Repeated labels slug to the same id (e.g. two entries with neither a title\n// nor a version both falling back to \"update\"); suffix the later ones -2, -3,\n// ... so every heading deep-links to its own entry. The first keeps the plain\n// slug, and the rendered ids stay in lockstep with the \\`headings\\` list below.\nconst seenIds = new Set();\nfor (const item of items) {\n let uniqueId = item.id;\n for (let n = 2; seenIds.has(uniqueId); n += 1) {\n uniqueId = item.id + \"-\" + n;\n }\n seenIds.add(uniqueId);\n item.id = uniqueId;\n}\n\n// A changelog is semver-paginated only when every visible release parses as\n// semver and they span more than one major line. Older majors then collapse\n// into groups the reader reveals one at a time; otherwise the timeline is flat.\nconst majors = items.every((item) => item.major !== null)\n ? [...new Set(items.map((item) => item.major))]\n .filter((major): major is number => major !== null)\n .toSorted((a, b) => b - a)\n : [];\nconst paginate = majors.length > 1;\nconst majorGroups = majors.map((major) => ({\n items: items.filter((item) => item.major === major),\n label: major + \".x\",\n major,\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;\n// The canonical URL carries the deployment base (the page is served under it),\n// matching how the catch-all canonicalizes via \\`withBase(route)\\`.\nconst basedRoute = withBase(\"/changelog\");\nconst canonical = base ? base + basedRoute : null;\n\n// The page chrome (h1, title, description) comes from the same translatable\n// \\`changelog\\` group as the reveal button; optional chaining tolerates a\n// not-yet-regenerated data snapshot from before these keys existed.\nconst changelogTitle = data.ui.changelog?.title ?? \"Changelog\";\nconst changelogDescription =\n data.ui.changelog?.description ??\n \"Product updates, new features, and fixes from every release.\";\nconst pageTitle = data.config.title + \" \" + changelogTitle;\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 locale={htmlLang}\n dir={dir}\n ui={data.ui}\n page={{\n title: pageTitle,\n description: changelogDescription,\n route: \"/changelog\",\n }}\n headings={headings}\n toc={data.config.toc}\n contentLayout=\"bare\"\n themeMode={data.config.theme.mode}\n fontCssVars={data.fontCssVars}\n searchEnabled={data.config.search.enabled}\n indexable={true}\n ogImage={null}\n x={data.config.x}\n canonical={canonical}\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>\n <h1>{changelogTitle}</h1>\n {\n items.length === 0 ? (\n <p>No changelog entries yet.</p>\n ) : paginate ? (\n <blume-changelog\n class=\"not-prose mt-8 block\"\n data-i18n-more={data.ui.changelog?.showReleases}\n >\n {majorGroups[0].items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n {majorGroups.slice(1).map((group) => (\n <section\n aria-label={group.label + \" releases\"}\n data-changelog-label={group.label}\n data-changelog-major={group.major}\n >\n {group.items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </section>\n ))}\n <div class=\"mt-10 flex justify-center\">\n <button\n class=\"inline-flex items-center gap-2 rounded-full border border-border bg-background px-4 py-2 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground\"\n data-changelog-more\n hidden\n type=\"button\"\n >\n Show older releases\n </button>\n </div>\n </blume-changelog>\n ) : (\n <div class=\"not-prose mt-8\">\n {items.map(({ Content, href, id, label, date, tags }) => (\n <Update description={date} href={href} id={id} label={label} tags={tags}>\n <Content />\n </Update>\n ))}\n </div>\n )\n }\n <script>\n import \"blume/components/content/changelog-element.ts\";\n </script>\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 { withBase } from \"blume/components/islands/base-path.ts\";\nimport data from \"blume:data\";\n\nexport const prerender = true;\n\nconst nf = data.ui.notFound;\n\n// The 404 page is an unlocalized route, so its chrome renders in the default\n// locale's dictionary and direction (\\`data.ui\\` is the default locale's resolved\n// dictionary), mirroring the catch-all's locale wiring.\nconst i18n = data.config.i18n;\nconst localeMeta = i18n\n ? i18n.locales.find((l) => l.code === i18n.defaultLocale)\n : null;\nconst dir = localeMeta?.dir ?? \"ltr\";\nconst htmlLang = i18n ? i18n.defaultLocale : \"en\";\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 locale={htmlLang}\n dir={dir}\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={withBase(\"/\")}>{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 * Frontmatter `Props` alias mirroring the wrapped component's own props, so\n * `{...Astro.props}` satisfies required props under `astro check` (the spread\n * of an untyped `Astro.props` contributes nothing to the JSX props type).\n * `infer P extends object` rather than `Record<string, unknown>` because\n * interfaces have no implicit index signature and would miss the narrower\n * constraint. Non-function component types (Vue/Svelte ambient modules) fall\n * back to an open record, keeping the untyped permissiveness they had.\n */\nconst wrapperPropsType = (name: string): string =>\n `type Props = typeof ${name} extends (\n props: infer P extends object,\n ...rest: never[]\n) => unknown\n ? P\n : Record<string, unknown>;`;\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${wrapperPropsType(\"Island\")}\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. */\n/**\n * A filesystem-safe, injective token for an example path. Distinct paths must\n * never share a wrapper file (`button.demo` vs `button-demo` used to collide),\n * so every non-alphanumeric character is hex-escaped rather than collapsed.\n */\nexport const exampleSlug = (path: string): string =>\n path.replaceAll(\n /[^a-zA-Z0-9]/gu,\n (char) => `_${(char.codePointAt(0) ?? 0).toString(16)}_`\n );\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${wrapperPropsType(\"Example\")}\n---\n<Example ${exampleDirective(spec)}{...Astro.props}><slot /></Example>\n`;\n\n/**\n * The route prefix `<Component />` preview frames are served under:\n * `{basePath}/blume-examples/<example path>`. `deployment.base` is layered on\n * top by Astro (components apply it with `withBase`).\n */\nexport const examplesRouteBase = (basePath: string): string =>\n `${basePath}/blume-examples`;\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, and the route\n * base preview iframes point at. Reached by the shipped `Component.astro` and the\n * generated preview page via the `blume:examples` alias. Always written (an\n * empty object when there are no examples) so the alias resolves.\n */\nexport const exampleMapTemplate = (\n specs: ExampleSpec[],\n basePath: string\n): string => {\n const base = `export const examplesBase = ${JSON.stringify(\n examplesRouteBase(basePath)\n )};`;\n if (specs.length === 0) {\n return `// Generated by Blume. Do not edit.\n${base}\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}\n${base}\nexport const examples = {\n${entries}\n};\n`;\n};\n\n/**\n * Generate the `<Component />` preview page — one prerendered route per\n * example under `{basePath}/blume-examples/`, rendered as a bare document\n * (no layout) that an iframe in the docs page embeds. The iframe boundary is\n * what isolates examples from the docs CSS: the only stylesheet here is the\n * example entry (`blume:examples-theme` — Tailwind, the Blume tokens, and the\n * user's configured examples css), so users can preview components styled by\n * their own design system (e.g. shadcn) with no prose styles bleeding in.\n *\n * The inline script mirrors the docs theme before first paint — same-document\n * reads of the parent's `data-theme` (same origin) with a MutationObserver for\n * live toggles — and sets both `data-theme` and a `dark` class so either\n * dark-mode convention works in user CSS. When the page is opened directly\n * (no parent), it falls back to the stored preference, then the OS setting.\n *\n * A second script reports the example's rendered height to the parent\n * (`blume:example-height` via postMessage) so the docs page can size the\n * preview pane to the content instead of guessing from the source line count.\n * A ResizeObserver keeps the report live, so examples that grow or shrink\n * after load (chat threads, accordions) stay in sync.\n */\nexport const examplesPageTemplate = (): string =>\n `---\n// Generated by Blume. Do not edit.\nimport { examples } from \"blume:examples\";\nimport \"blume:examples-theme\";\n\n// Prerendered even in server output, like docs content.\nexport const prerender = true;\n\nexport const getStaticPaths = () =>\n Object.keys(examples).map((path) => ({ params: { path } }));\n\nconst { path } = Astro.params;\nconst entry = path ? examples[path] : undefined;\nif (!entry) {\n return new Response(null, { status: 404 });\n}\nconst Example = entry.Component;\n---\n\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"robots\" content=\"noindex\" />\n <title>{path}</title>\n <script is:inline>\n (() => {\n const root = document.documentElement;\n const apply = (theme) => {\n root.dataset.theme = theme;\n root.classList.toggle(\"dark\", theme === \"dark\");\n };\n const stored = () =>\n localStorage.getItem(\"blume-theme\") ??\n (matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\");\n try {\n const host = window.parent.document.documentElement;\n apply(host.dataset.theme ?? stored());\n new MutationObserver(() => {\n apply(host.dataset.theme ?? stored());\n }).observe(host, { attributeFilter: [\"data-theme\"] });\n } catch {\n apply(stored());\n }\n })();\n </script>\n </head>\n <!-- Flex + margin:auto centers the example and, unlike place-items, keeps\n the top edge reachable when the example outgrows the frame. -->\n <body style=\"display:flex;min-height:100svh;padding:1.5rem\">\n <div data-blume-example style=\"margin:auto\"><Example /></div>\n <script is:inline>\n (() => {\n // Report the example's rendered height so the embedding docs page can\n // size the preview pane to the content. The wrapper is observed rather\n // than the body: the body stretches to the frame's own height, so it\n // would only echo the pane back. Direct opens have no distinct parent\n // and skip out; the frame is same-origin with the docs page (see the\n // theme sync above), so the origin is pinned on both ends.\n if (window.parent === window) {\n return;\n }\n const wrapper = document.querySelector(\"[data-blume-example]\");\n if (!wrapper) {\n return;\n }\n // The body's padding frames the example; fold it into the report so\n // the parent can apply the number as-is. Read from the live value —\n // the user's examples.css is injected after Blume's defaults precisely\n // so their tokens win, so a root font-size override must be honored\n // rather than assuming 1.5rem is 48px.\n const bodyStyle = getComputedStyle(document.body);\n const paddingPx =\n parseFloat(bodyStyle.paddingTop) + parseFloat(bodyStyle.paddingBottom);\n new ResizeObserver(() => {\n window.parent.postMessage(\n {\n height:\n Math.ceil(wrapper.getBoundingClientRect().height) + paddingPx,\n type: \"blume:example-height\",\n },\n window.location.origin\n );\n }).observe(wrapper);\n })();\n </script>\n </body>\n</html>\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:ask\" {\n const Ask: typeof import(\"blume/components/islands/AskAI.astro\").default;\n export default Ask;\n}\n\ndeclare module \"blume:data\" {\n const data: import(\"blume\").BlumeData;\n export default data;\n}\n\ndeclare module \"blume:examples\" {\n type Examples = typeof import(\"./generated/examples.ts\").examples;\n export const examples: Record<string, Examples[keyof Examples]>;\n export const examplesBase: string;\n}\n\ndeclare module \"blume:examples-theme\";\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",
|
|
43
43
|
"import type { AskAiConfig } from \"../core/schema.ts\";\n\n/**\n * The concrete backend the Ask AI endpoint is generated against. `gateway` uses\n * the AI SDK core (`streamText({ model })`) and the Vercel AI Gateway;\n * `openrouter` uses its dedicated provider; everything else streams through the\n * AI SDK's OpenAI-compatible provider.\n */\nexport type AskBackend =\n | { kind: \"gateway\"; model: string }\n | { apiKeyEnv: string; kind: \"openrouter\"; model: string }\n | {\n apiKeyEnv: string;\n baseUrl: string;\n kind: \"openai-compatible\";\n model: string;\n name: string;\n };\n\ninterface AskPreset {\n apiKeyEnv: string;\n baseUrl?: string;\n kind: \"openai-compatible\" | \"openrouter\";\n name: string;\n runtimeDep: string;\n}\n\n/**\n * Connection presets for the named, non-gateway providers. OpenRouter has a\n * dedicated AI SDK provider; LLMGateway and Inkeep are OpenAI-compatible\n * endpoints with no dedicated provider, so they reuse `@ai-sdk/openai-compatible`.\n */\n/** The discriminant/name shared by the OpenAI-compatible providers. */\nconst OPENAI_COMPATIBLE = \"openai-compatible\";\n/** The AI SDK provider package the OpenAI-compatible providers install. */\nconst OPENAI_COMPATIBLE_DEP = \"@ai-sdk/openai-compatible\";\n\nconst ASK_PRESETS: Record<string, AskPreset> = {\n inkeep: {\n apiKeyEnv: \"INKEEP_API_KEY\",\n baseUrl: \"https://api.inkeep.com/v1\",\n kind: OPENAI_COMPATIBLE,\n name: \"inkeep\",\n runtimeDep: OPENAI_COMPATIBLE_DEP,\n },\n llmgateway: {\n apiKeyEnv: \"LLMGATEWAY_API_KEY\",\n baseUrl: \"https://api.llmgateway.io/v1\",\n kind: OPENAI_COMPATIBLE,\n name: \"llmgateway\",\n runtimeDep: OPENAI_COMPATIBLE_DEP,\n },\n openrouter: {\n apiKeyEnv: \"OPENROUTER_API_KEY\",\n kind: \"openrouter\",\n name: \"openrouter\",\n runtimeDep: \"@openrouter/ai-sdk-provider\",\n },\n};\n\nconst DEFAULT_MODEL = \"openai/gpt-5.5\";\n\n/** Resolve the `ai.ask` config into the backend the endpoint is built against. */\nexport const resolveAskBackend = (ask?: AskAiConfig): AskBackend => {\n const provider = ask?.provider ?? \"gateway\";\n const model = ask?.model ?? DEFAULT_MODEL;\n if (provider === \"gateway\") {\n return { kind: \"gateway\", model };\n }\n const preset = ASK_PRESETS[provider];\n const apiKeyEnv = ask?.apiKeyEnv ?? preset?.apiKeyEnv ?? \"API_KEY\";\n if (provider === \"openrouter\") {\n return { apiKeyEnv, kind: \"openrouter\", model };\n }\n // `llmgateway`, `inkeep`, and the generic `openai-compatible` provider all\n // stream through the AI SDK's OpenAI-compatible provider. The schema requires\n // `baseUrl` for the generic case; the named providers fall back to a preset.\n return {\n apiKeyEnv,\n baseUrl: ask?.baseUrl ?? preset?.baseUrl ?? \"\",\n kind: OPENAI_COMPATIBLE,\n model,\n name: preset?.name ?? OPENAI_COMPATIBLE,\n };\n};\n\n/**\n * The provider SDK a project must install for the configured backend, or\n * `undefined` for `gateway` (which only needs the core `ai` package). Declared\n * in the generated runtime so a project pulls in exactly the backend it uses.\n */\nexport const askBackendRuntimeDep = (ask?: AskAiConfig): string | undefined => {\n const provider = ask?.provider ?? \"gateway\";\n if (provider === \"gateway\") {\n return undefined;\n }\n return ASK_PRESETS[provider]?.runtimeDep ?? OPENAI_COMPATIBLE_DEP;\n};\n",
|
|
44
44
|
"import type { WatchListener } from \"node:fs\";\n\n/**\n * Directory segments that are never authored content: VCS, dependency trees,\n * Blume's own generated project and build output, and framework/deploy caches.\n * Both the content scan and the dev watcher skip these unconditionally, on top\n * of the user's `content.exclude`.\n *\n * The scan needs them because a broadly-scoped `content.root` — `\".\"` or an app\n * dir that also holds `node_modules`/`dist`, the common shape when migrating a\n * docs app that lives at the repo or app root — would otherwise glob thousands\n * of stray markdown files out of dependencies and build artifacts. `content.root`\n * defaults to `docs/` where this rarely bites, but any wider root hits it.\n *\n * The watcher needs them because a recursive `fs.watch` rooted at the project\n * also sees Blume's own `.blume/` output, which the dev server rewrites on every\n * render (e.g. `.blume/.astro/data-store.json`). Left unfiltered, each such write\n * re-triggers a rescan + runtime regeneration whose writes land back under\n * `.blume/` and fire the watcher again: a self-sustaining loop that stalls page\n * renders and floods the console (and, mid-render, corrupts Astro's dev module\n * graph so `astro:server-app.js` fails to load). `fs.watch` has no ignore\n * option, so we filter by the changed path in the callback.\n */\nexport const BLUME_IGNORE_DIRS = [\n \".blume\",\n // The isolated `blume check --isolated` runtime. A sibling of `.blume`, it is\n // written while a dev server runs; without this the content-layer watcher (or\n // a `.`-rooted fs.watch) would treat its generation as a content change and\n // reload — the very thing `--isolated` promises not to do.\n \".blume-verify\",\n \".cache\",\n \".git\",\n \".next\",\n \".turbo\",\n \".vercel\",\n \"dist\",\n \"node_modules\",\n];\n\n/**\n * Baseline scan-ignore globs applied to every filesystem source, unioned with\n * the user's `content.exclude`. Kept in sync with the watcher via the shared\n * {@link BLUME_IGNORE_DIRS} so `load()` and `watch()` never disagree on what is\n * content. `**\\/<dir>/**` matches the directory at the content root or nested.\n */\nexport const baselineScanIgnore = (): string[] =>\n BLUME_IGNORE_DIRS.map((dir) => `**/${dir}/**`);\n\n/**\n * Alias retained for the dev watcher's call site and its tests; the watcher and\n * the scan share the same never-content directory set.\n */\nexport const BLUME_WATCH_IGNORE_DIRS = BLUME_IGNORE_DIRS;\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",
|
|
45
45
|
"/**\n * Single-character trimming, done without regular expressions.\n *\n * The obvious spellings — `/^\\/+/`, `/\\/+$/`, `/^\\/+|\\/+$/g` — take quadratic\n * time on a run of the trimmed character, because a failed match at one start\n * position tells the engine nothing about the next one. Every caller here trims\n * a value that comes from outside Blume (a configured route, a spec URL, a site\n * origin), so the slow path is reachable from user input rather than only from\n * our own literals. These loops are linear and allocation-free.\n */\n\n/** Drop every leading `char` (`\"///a\"` -> `\"a\"` for `\"/\"`). */\nexport const trimStart = (text: string, char: string): string => {\n let start = 0;\n while (start < text.length && text[start] === char) {\n start += 1;\n }\n return text.slice(start);\n};\n\n/** Drop every trailing `char` (`\"a///\"` -> `\"a\"` for `\"/\"`). */\nexport const trimEnd = (text: string, char: string): string => {\n let end = text.length;\n while (end > 0 && text[end - 1] === char) {\n end -= 1;\n }\n return text.slice(0, end);\n};\n\n/** Drop every leading *and* trailing `char` (`\"///a///\"` -> `\"a\"`). */\nexport const trimChar = (text: string, char: string): string =>\n trimEnd(trimStart(text, char), char);\n",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"import { createHash } from \"node:crypto\";\n\nimport type { RouteManifestEntry } from \"../core/types.ts\";\nimport { attr, metaContents, parseHtml, visibleText } from \"./html.ts\";\nimport type { HtmlDocument } from \"./html.ts\";\nimport type { PageSnapshot, SnapshotAsset, SnapshotLink } from \"./types.ts\";\n\n/** Site chrome: links here are navigation, not editorial. */\nconst CHROME = \"nav, aside, header, footer\";\n\n/** Where a page's prose lives, in preference order. */\nconst CONTENT_ROOTS = [\"main\", \"article\", \"body\"];\n\n/**\n * The elements holding the page's prose. Falls back through `main` → `article`\n * → `body` so a custom `.astro` page with no semantic landmark still yields a\n * word count and a content hash instead of silently measuring as empty.\n */\nconst contentRoot = (document: HtmlDocument) => {\n for (const selector of CONTENT_ROOTS) {\n const found = document.querySelector(selector);\n if (found) {\n return found;\n }\n }\n return null;\n};\n\n/**\n * The `<a>` elements that sit in the page's prose rather than its chrome.\n *\n * This split is what makes the link graph mean anything. Blume renders a sidebar\n * linking every nav page from every page, so a graph that treats a sidebar link\n * the same as a body link finds that every page has hundreds of inbound links\n * and no page is ever an orphan.\n */\nconst contentLinks = (document: HtmlDocument): Set<unknown> => {\n const root = contentRoot(document);\n if (!root) {\n return new Set();\n }\n return new Set(\n root.querySelectorAll(\"a[href]\").filter((anchor) => !anchor.closest(CHROME))\n );\n};\n\nconst collectAssets = (\n document: HtmlDocument,\n selector: string,\n srcAttr: string\n): SnapshotAsset[] =>\n document\n .querySelectorAll(selector)\n .map((element) => ({\n alt: element.getAttribute(\"alt\") ?? null,\n height: attr(element, \"height\"),\n src: element.getAttribute(srcAttr)?.trim() ?? \"\",\n width: attr(element, \"width\"),\n }))\n .filter((asset) => asset.src.length > 0);\n\n/** Parse each JSON-LD block, keeping the parse failures rather than dropping them. */\nconst collectJsonLd = (\n document: HtmlDocument\n): { jsonld: unknown[]; jsonldErrors: string[] } => {\n const jsonld: unknown[] = [];\n const jsonldErrors: string[] = [];\n for (const script of document.querySelectorAll(\n 'script[type=\"application/ld+json\"]'\n )) {\n try {\n jsonld.push(JSON.parse(script.rawText));\n } catch (error) {\n jsonldErrors.push(error instanceof Error ? error.message : String(error));\n }\n }\n return { jsonld, jsonldErrors };\n};\n\n/** `meta` tags whose key lives in `property` (Open Graph) or `name` (X). */\nconst prefixedMeta = (\n document: HtmlDocument,\n keyAttr: \"property\" | \"name\",\n prefix: string\n): Record<string, string> => {\n const found: Record<string, string> = {};\n for (const element of document.querySelectorAll(\n `meta[${keyAttr}^=\"${prefix}\"]`\n )) {\n const key = element.getAttribute(keyAttr)?.trim();\n const content = element.getAttribute(\"content\")?.trim();\n if (key && content) {\n found[key] = content;\n }\n }\n return found;\n};\n\n/**\n * Reduce one built HTML page to everything the checks read. Parsed once — every\n * check works off this record, so a page is never re-parsed per check.\n */\nexport const buildSnapshot = (options: {\n file: string;\n url: string;\n html: string;\n route?: RouteManifestEntry;\n}): PageSnapshot => {\n const { file, url, html, route } = options;\n const document = parseHtml(html);\n\n const inContent = contentLinks(document);\n const links: SnapshotLink[] = document\n .querySelectorAll(\"a[href]\")\n .map((anchor) => ({\n content: inContent.has(anchor),\n href: anchor.getAttribute(\"href\")?.trim() ?? \"\",\n rel: attr(anchor, \"rel\"),\n text: anchor.text.trim(),\n }))\n .filter((link) => link.href.length > 0);\n\n const root = contentRoot(document);\n const prose = root ? visibleText(root) : \"\";\n const robots = document.querySelector('meta[name=\"robots\"]');\n const { jsonld, jsonldErrors } = collectJsonLd(document);\n\n return {\n bytes: Buffer.byteLength(html, \"utf-8\"),\n canonical:\n document\n .querySelector('link[rel=\"canonical\"]')\n ?.getAttribute(\"href\")\n ?.trim() ?? null,\n contentHash: createHash(\"sha256\").update(prose).digest(\"hex\").slice(0, 16),\n descriptions: metaContents(document, 'meta[name=\"description\"]'),\n file,\n headings: document\n .querySelectorAll(\"h1, h2, h3, h4, h5, h6\")\n .map((heading) => ({\n depth: Number(heading.tagName.slice(1)),\n text: heading.text.trim(),\n })),\n hreflang: document\n .querySelectorAll(\"link[rel=alternate][hreflang]\")\n .map((link) => ({\n href: link.getAttribute(\"href\")?.trim() ?? \"\",\n lang: link.getAttribute(\"hreflang\")?.trim() ?? \"\",\n }))\n .filter((alternate) => alternate.href && alternate.lang),\n ids: new Set(\n document\n .querySelectorAll(\"[id]\")\n .map((element) => element.getAttribute(\"id\") ?? \"\")\n .filter((id) => id.length > 0)\n ),\n images: collectAssets(document, \"img[src]\", \"src\"),\n // A page is indexable unless it says otherwise. Blume only ever emits\n // `noindex` (never `nofollow`), but an ejected layout could emit either.\n indexable: !robots?.getAttribute(\"content\")?.includes(\"noindex\"),\n jsonld,\n jsonldErrors,\n lang: attr(document.querySelector(\"html\") ?? document, \"lang\"),\n links,\n metaRefresh:\n document\n .querySelector('meta[http-equiv=\"refresh\" i]')\n ?.getAttribute(\"content\")\n ?.trim() ?? null,\n og: prefixedMeta(document, \"property\", \"og:\"),\n robots: robots?.getAttribute(\"content\")?.trim() ?? null,\n route,\n scripts: collectAssets(document, \"script[src]\", \"src\"),\n source: route?.sourcePath,\n styles: collectAssets(document, 'link[rel=\"stylesheet\"][href]', \"href\"),\n titles: document\n .querySelectorAll(\"title\")\n .map((title) => title.text.trim())\n .filter((text) => text.length > 0),\n twitter: prefixedMeta(document, \"name\", \"twitter:\"),\n url,\n viewport:\n document\n .querySelector('meta[name=\"viewport\"]')\n ?.getAttribute(\"content\")\n ?.trim() ?? null,\n wordCount: prose ? prose.split(/\\s+/u).length : 0,\n };\n};\n",
|
|
51
51
|
"import { parse } from \"node-html-parser\";\nimport type { HTMLElement } from \"node-html-parser\";\n\n/**\n * A parsed HTML document. Re-exported so the rest of the audit types against\n * this module rather than the parser: `node-html-parser` is deliberately\n * quarantined here, so swapping it stays a one-file change.\n */\nexport type HtmlDocument = HTMLElement;\n\n/**\n * Parse built HTML into a queryable tree.\n *\n * `blockTextElements` keeps the raw text of `<script>`/`<style>`/`<pre>` intact\n * instead of parsing it as markup — the audit reads `<script\n * type=\"application/ld+json\">` bodies verbatim to validate structured data.\n */\nexport const parseHtml = (html: string): HtmlDocument =>\n parse(html, {\n blockTextElements: { noscript: true, pre: true, script: true, style: true },\n comment: false,\n });\n\n/** Trimmed attribute value, or null when absent or empty. */\nexport const attr = (element: HTMLElement, name: string): string | null => {\n const value = element.getAttribute(name)?.trim();\n return value || null;\n};\n\n/** `content` of every `<meta>` matching a selector, in document order. */\nexport const metaContents = (\n document: HtmlDocument,\n selector: string\n): string[] =>\n document\n .querySelectorAll(selector)\n .map((element) => element.getAttribute(\"content\")?.trim() ?? \"\")\n .filter((value) => value.length > 0);\n\n/**\n * Collapse an element's visible text. Script/style bodies and code blocks are\n * dropped: a fenced code sample isn't prose, and counting it would let a page\n * that is 90% code pass the word-count check on the strength of its snippets.\n */\nexport const visibleText = (element: HTMLElement): string => {\n const clone = parse(element.outerHTML, {\n blockTextElements: { noscript: true, pre: true, script: true, style: true },\n comment: false,\n });\n for (const node of clone.querySelectorAll(\"script, style, pre, code\")) {\n node.remove();\n }\n return clone.structuredText.replaceAll(/\\s+/gu, \" \").trim();\n};\n",
|
|
52
52
|
"import type { RedirectResolution } from \"./types.ts\";\nimport { normalizePath } from \"./url.ts\";\n\ninterface ConfiguredRedirect {\n from: string;\n to: string;\n status: number;\n}\n\n/**\n * Follow every configured redirect through to its destination, classifying what\n * it lands on.\n *\n * - `loop` — the chain revisits a hop it has already been to. Never resolves.\n * - `broken` — the chain ends somewhere that isn't a built page.\n * - `chain` — it resolves, but through at least one intermediate redirect.\n * - `ok` — one hop, straight to a real page.\n *\n * An external destination (`https://…`) is always `ok`: it's outside the site,\n * so there's no local page to check it against.\n */\nexport const resolveRedirects = (\n redirects: readonly ConfiguredRedirect[],\n pageUrls: ReadonlySet<string>\n): RedirectResolution[] => {\n const byFrom = new Map<string, ConfiguredRedirect>();\n for (const redirect of redirects) {\n byFrom.set(normalizePath(redirect.from), redirect);\n }\n\n return redirects.map((redirect) => {\n const from = normalizePath(redirect.from);\n const chain: string[] = [from];\n const seen = new Set<string>([from]);\n let current = redirect.to;\n\n for (;;) {\n // An external hop ends the walk — we can't follow it locally.\n if (/^https?:\\/\\//iu.test(current)) {\n chain.push(current);\n break;\n }\n const next = normalizePath(current);\n if (seen.has(next)) {\n chain.push(next);\n return {\n ...redirect,\n chain,\n outcome: \"loop\" as const,\n };\n }\n chain.push(next);\n seen.add(next);\n const hop = byFrom.get(next);\n if (!hop) {\n break;\n }\n current = hop.to;\n }\n\n const destination = chain.at(-1) ?? from;\n const external = /^https?:\\/\\//iu.test(destination);\n if (!(external || pageUrls.has(destination))) {\n return { ...redirect, chain, outcome: \"broken\" as const };\n }\n // `chain` is [from, …hops, destination]; more than two entries means at\n // least one intermediate redirect.\n return {\n ...redirect,\n chain,\n outcome: chain.length > 2 ? (\"chain\" as const) : (\"ok\" as const),\n };\n });\n};\n",
|
|
53
|
-
"import { relative } from \"pathe\";\n\nimport { loadConfig } from \"./config.ts\";\nimport { applyDeploymentEnv } from \"./deployment-env.ts\";\nimport { buildContentGraph } from \"./graph.ts\";\nimport { i18nDiagnostics } from \"./i18n.ts\";\nimport {\n gitLastModifiedTimes,\n resolveLastModifiedConfig,\n} from \"./last-modified.ts\";\nimport { buildManifest } from \"./manifest.ts\";\nimport { discoverFolderMeta } from \"./meta.ts\";\nimport type { FolderMetaSource } from \"./meta.ts\";\nimport { resolveProjectContext } from \"./project.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\nimport { normalizeEntry } from \"./sources/normalize.ts\";\nimport { resolveDocsCollection, resolveSources } from \"./sources/resolve.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\nimport type {\n BlumeManifest,\n ContentGraph,\n Diagnostic,\n PageRecord,\n ProjectContext,\n} from \"./types.ts\";\n\n/** Build mode: drafts are kept in `dev` and dropped in `build`. */\nexport type BuildMode = \"dev\" | \"build\";\n\n/** CLI-supplied overrides applied over the loaded config (see `scanProject`). */\nexport interface ConfigOverrides {\n /** Override `content.root` (`blume dev --content-dir`). */\n contentRoot?: string;\n /** Override `deployment.adapter` (`blume build --adapter`). */\n adapter?: ResolvedConfig[\"deployment\"][\"adapter\"];\n /** Override `deployment.base` (`blume build --base`). */\n base?: string;\n /** Override `deployment.output` (`blume build --output`). */\n output?: ResolvedConfig[\"deployment\"][\"output\"];\n}\n\n/** Apply CLI config overrides onto a resolved config (returns a new object). */\nconst applyConfigOverrides = (\n config: ResolvedConfig,\n overrides?: ConfigOverrides\n): ResolvedConfig => {\n if (!overrides) {\n return config;\n }\n return {\n ...config,\n content: {\n ...config.content,\n root: overrides.contentRoot ?? config.content.root,\n },\n deployment: {\n ...config.deployment,\n adapter: overrides.adapter ?? config.deployment.adapter,\n base: overrides.base ?? config.deployment.base,\n output: overrides.output ?? config.deployment.output,\n },\n };\n};\n\n/** Everything Blume knows about a project after a full scan. */\nexport interface BlumeProject {\n mode: BuildMode;\n context: ProjectContext;\n config: ResolvedConfig;\n graph: ContentGraph;\n manifest: BlumeManifest;\n diagnostics: Diagnostic[];\n /** The instantiated content sources, for lazy entry reads (search/AI/raw). */\n sources: ContentSource[];\n}\n\n/**\n * Guard the invariant that ties a filesystem page to the `docs` collection:\n * Astro ids each collection entry by its path relative to the collection base,\n * so `getEntry(\"docs\", entryId)` only resolves when that entry id equals\n * `relative(base, file)`. A filesystem source ids entries relative to its own\n * root; when that root can't be the collection base (e.g. a second filesystem\n * source rooted elsewhere), the ids diverge and every one of that source's pages\n * would 404 in dev (a static build silently masks it). Emit a hard error naming\n * the mismatch so it can't ship, instead of a silent runtime failure. One\n * diagnostic per file (locale duplicates share a source path).\n */\nconst entryIdDiagnostics = (\n pages: PageRecord[],\n collectionBase: string\n): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const page of pages) {\n // Only filesystem entries render through the base-rooted `docs` collection;\n // staged sources carry their own id and collection.\n if (page.collection || !page.sourcePath || seen.has(page.sourcePath)) {\n continue;\n }\n seen.add(page.sourcePath);\n const expected = relative(collectionBase, page.sourcePath)\n .split(\"\\\\\")\n .join(\"/\");\n const entryId = page.entryId ?? page.source.ref;\n if (expected !== entryId) {\n diagnostics.push({\n code: \"BLUME_ENTRY_ID_MISMATCH\",\n file: page.sourcePath,\n message: `Content source \"${page.source.name}\" is rooted outside the docs collection base, so ${page.route} resolves entry id \"${entryId}\" but the collection would generate \"${expected}\" — the page would 404 at runtime.`,\n severity: \"error\",\n suggestion:\n \"Use a single filesystem source (the docs collection roots at it), or root every filesystem source at content.root and partition them with include globs — a root at a subdirectory of content.root still mismatches.\",\n });\n }\n }\n return diagnostics;\n};\n\n/**\n * Run the full core pipeline for a project root: load config, resolve paths,\n * discover content and folder meta, build the graph, and assemble the manifest.\n * Collects all diagnostics without throwing on content-level problems so\n * callers can decide how strict to be.\n */\nexport const scanProject = async (\n root: string,\n options: {\n devServerUrl?: string;\n mode?: BuildMode;\n preview?: boolean;\n refresh?: boolean;\n /** CLI overrides applied over the loaded config (e.g. `--output`). */\n overrides?: ConfigOverrides;\n /** Relocate the generated runtime (e.g. `.blume-verify` for isolation). */\n runtimeDir?: string;\n } = {}\n): Promise<BlumeProject> => {\n const mode = options.mode ?? \"dev\";\n const preview = options.preview ?? false;\n const configResult = await loadConfig(root, {\n devServerUrl: options.devServerUrl,\n });\n // Re-run platform detection after CLI overrides: `loadConfig` already ran it,\n // but adapter inference keys off `deployment.output`, which `--output server`\n // only sets here. Idempotent for already-resolved fields — `deployment.site`\n // keeps loadConfig's explicit > platform env > devServerUrl precedence.\n const config = applyDeploymentEnv(\n applyConfigOverrides(configResult.config, options.overrides)\n );\n const context = resolveProjectContext(root, config, {\n runtimeDir: options.runtimeDir,\n });\n\n // Each source validates itself (e.g. the filesystem source checks its root\n // exists), replacing the single hard `contentRoot` check.\n const sources = resolveSources(config, context, {\n mode,\n preview,\n refresh: options.refresh,\n });\n for (const source of sources) {\n source.validate?.();\n }\n\n // Folder meta is discovered per filesystem source, under each source's own\n // root and keyed by its route prefix, so a prefixed/root-differing source's\n // `meta.ts` still lines up with its (prefixed) sidebar group path.\n const metaSources: FolderMetaSource[] = sources.flatMap((source) =>\n source.staged || !source.contentRoot\n ? []\n : [{ prefix: source.prefix, root: source.contentRoot }]\n );\n\n // Run every source's `load()` in parallel, then funnel each entry through the\n // shared `normalizeEntry` so route mapping is identical regardless of origin.\n // Under the `dir` parser, non-default locales are top-level directories whose\n // meta keys must carry the locale in front of the source prefix (see\n // `discoverFolderMeta`).\n const localeDirs =\n config.i18n && config.i18n.parser === \"dir\"\n ? config.i18n.locales.flatMap((locale) =>\n locale.code === config.i18n?.defaultLocale ? [] : [locale.code]\n )\n : undefined;\n\n const [loaded, folderMeta] = await Promise.all([\n Promise.all(\n sources.map(async (source) => ({ source, ...(await source.load()) }))\n ),\n discoverFolderMeta(metaSources, { localeDirs }),\n ]);\n\n // Only thread `frontmatter.extend` through when a project opts in, so the\n // known-key split in `normalizeEntry` stays off the default path.\n const frontmatterExtend =\n Object.keys(config.frontmatter.extend).length > 0\n ? config.frontmatter.extend\n : undefined;\n\n const allPages: PageRecord[] = [];\n const contentDiagnostics: Diagnostic[] = [];\n for (const { source, entries, diagnostics } of loaded) {\n contentDiagnostics.push(...diagnostics);\n for (const entry of entries) {\n const normalized = normalizeEntry(entry, {\n basePath: config.basePath,\n defaultType: config.content.defaultType,\n frontmatterExtend,\n i18n: config.i18n,\n source: {\n name: source.name,\n prefix: source.prefix,\n staged: source.staged,\n },\n });\n allPages.push(...normalized.pages);\n contentDiagnostics.push(...normalized.diagnostics);\n }\n }\n\n // Drafts render in dev and in preview, but are excluded from production builds.\n const pages =\n mode === \"build\" && !preview\n ? allPages.filter((page) => !page.meta.draft)\n : allPages;\n\n // Resolve \"last updated\" dates before the graph is built so the manifest\n // (which shares these page objects) picks them up. Frontmatter always wins;\n // git applies to filesystem entries, other sources supply dates on the entry.\n const lastModified = resolveLastModifiedConfig(config.lastModified);\n if (lastModified.enabled && lastModified.source === \"git\") {\n const fsPaths = pages\n .map((page) => page.sourcePath)\n .filter((path): path is string => path !== undefined);\n // The git pathspecs must cover where the pages actually live: each\n // filesystem source's own root, which diverges from the global\n // `content.root` when a source configures a non-default `root`.\n const contentRoots = sources.flatMap((source) =>\n source.staged || !source.contentRoot ? [] : [source.contentRoot]\n );\n const gitTimes = gitLastModifiedTimes(context.root, contentRoots, fsPaths);\n for (const page of pages) {\n if (!page.lastModified && page.sourcePath) {\n page.lastModified = gitTimes.get(page.sourcePath);\n }\n }\n }\n\n const graph = buildContentGraph(pages, {\n basePath: config.basePath,\n folderMeta: folderMeta.meta,\n i18n: config.i18n,\n navigation: config.navigation,\n sharedFolderMeta: folderMeta.shared,\n });\n const manifest = buildManifest({ config, context, graph });\n\n const i18nWarnings = config.i18n ? i18nDiagnostics(pages, config.i18n) : [];\n\n return {\n config,\n context,\n diagnostics: [\n ...contentDiagnostics,\n ...folderMeta.diagnostics,\n ...entryIdDiagnostics(pages, resolveDocsCollection(config, context).base),\n ...graph.diagnostics,\n ...i18nWarnings,\n ],\n graph,\n manifest,\n mode,\n sources,\n };\n};\n",
|
|
53
|
+
"import { relative } from \"pathe\";\n\nimport { loadConfig } from \"./config.ts\";\nimport { applyDeploymentEnv } from \"./deployment-env.ts\";\nimport { buildContentGraph } from \"./graph.ts\";\nimport { i18nDiagnostics } from \"./i18n.ts\";\nimport {\n gitLastModifiedTimes,\n resolveLastModifiedConfig,\n} from \"./last-modified.ts\";\nimport { buildManifest } from \"./manifest.ts\";\nimport { discoverFolderMeta } from \"./meta.ts\";\nimport type { FolderMetaSource } from \"./meta.ts\";\nimport { resolveProjectContext } from \"./project.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\nimport { normalizeEntry } from \"./sources/normalize.ts\";\nimport { resolveDocsCollection, resolveSources } from \"./sources/resolve.ts\";\nimport type { ContentSource, SourceLoadResult } from \"./sources/types.ts\";\nimport type {\n BlumeManifest,\n ContentGraph,\n Diagnostic,\n PageRecord,\n ProjectContext,\n} from \"./types.ts\";\n\n/** Build mode: drafts are kept in `dev` and dropped in `build`. */\nexport type BuildMode = \"dev\" | \"build\";\n\n/** CLI-supplied overrides applied over the loaded config (see `scanProject`). */\nexport interface ConfigOverrides {\n /** Override `content.root` (`blume dev --content-dir`). */\n contentRoot?: string;\n /** Override `deployment.adapter` (`blume build --adapter`). */\n adapter?: ResolvedConfig[\"deployment\"][\"adapter\"];\n /** Override `deployment.base` (`blume build --base`). */\n base?: string;\n /** Override `deployment.output` (`blume build --output`). */\n output?: ResolvedConfig[\"deployment\"][\"output\"];\n}\n\n/** Apply CLI config overrides onto a resolved config (returns a new object). */\nconst applyConfigOverrides = (\n config: ResolvedConfig,\n overrides?: ConfigOverrides\n): ResolvedConfig => {\n if (!overrides) {\n return config;\n }\n return {\n ...config,\n content: {\n ...config.content,\n root: overrides.contentRoot ?? config.content.root,\n },\n deployment: {\n ...config.deployment,\n adapter: overrides.adapter ?? config.deployment.adapter,\n base: overrides.base ?? config.deployment.base,\n output: overrides.output ?? config.deployment.output,\n },\n };\n};\n\n/** Everything Blume knows about a project after a full scan. */\nexport interface BlumeProject {\n mode: BuildMode;\n context: ProjectContext;\n config: ResolvedConfig;\n graph: ContentGraph;\n manifest: BlumeManifest;\n diagnostics: Diagnostic[];\n /** Entries excluded from the graph because their frontmatter failed validation. */\n droppedPages: number;\n /** The instantiated content sources, for lazy entry reads (search/AI/raw). */\n sources: ContentSource[];\n}\n\n/**\n * Guard the invariant that ties a filesystem page to the `docs` collection:\n * Astro ids each collection entry by its path relative to the collection base,\n * so `getEntry(\"docs\", entryId)` only resolves when that entry id equals\n * `relative(base, file)`. A filesystem source ids entries relative to its own\n * root; when that root can't be the collection base (e.g. a second filesystem\n * source rooted elsewhere), the ids diverge and every one of that source's pages\n * would 404 in dev (a static build silently masks it). Emit a hard error naming\n * the mismatch so it can't ship, instead of a silent runtime failure. One\n * diagnostic per file (locale duplicates share a source path).\n */\nconst entryIdDiagnostics = (\n pages: PageRecord[],\n collectionBase: string\n): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const page of pages) {\n // Only filesystem entries render through the base-rooted `docs` collection;\n // staged sources carry their own id and collection.\n if (page.collection || !page.sourcePath || seen.has(page.sourcePath)) {\n continue;\n }\n seen.add(page.sourcePath);\n const expected = relative(collectionBase, page.sourcePath)\n .split(\"\\\\\")\n .join(\"/\");\n const entryId = page.entryId ?? page.source.ref;\n if (expected !== entryId) {\n diagnostics.push({\n code: \"BLUME_ENTRY_ID_MISMATCH\",\n file: page.sourcePath,\n message: `Content source \"${page.source.name}\" is rooted outside the docs collection base, so ${page.route} resolves entry id \"${entryId}\" but the collection would generate \"${expected}\" — the page would 404 at runtime.`,\n severity: \"error\",\n suggestion:\n \"Use a single filesystem source (the docs collection roots at it), or root every filesystem source at content.root and partition them with include globs — a root at a subdirectory of content.root still mismatches.\",\n });\n }\n }\n return diagnostics;\n};\n\n/**\n * Funnel every loaded source's entries through the shared `normalizeEntry`,\n * collecting pages, diagnostics, and the count of entries dropped outright —\n * an entry that yields no pages but did yield diagnostics was rejected for\n * invalid frontmatter, and callers surface that count so a build with missing\n * pages can't read as clean.\n */\nconst normalizeLoadedEntries = (\n loaded: ({ source: ContentSource } & SourceLoadResult)[],\n config: ResolvedConfig\n): { pages: PageRecord[]; diagnostics: Diagnostic[]; droppedPages: number } => {\n // Only thread `frontmatter.extend` through when a project opts in, so the\n // known-key split in `normalizeEntry` stays off the default path.\n const frontmatterExtend =\n Object.keys(config.frontmatter.extend).length > 0\n ? config.frontmatter.extend\n : undefined;\n\n const pages: PageRecord[] = [];\n const allDiagnostics: Diagnostic[] = [];\n let droppedPages = 0;\n for (const { source, entries, diagnostics } of loaded) {\n allDiagnostics.push(...diagnostics);\n for (const entry of entries) {\n const normalized = normalizeEntry(entry, {\n basePath: config.basePath,\n defaultType: config.content.defaultType,\n frontmatterExtend,\n i18n: config.i18n,\n source: {\n name: source.name,\n prefix: source.prefix,\n staged: source.staged,\n },\n });\n if (normalized.pages.length === 0 && normalized.diagnostics.length > 0) {\n droppedPages += 1;\n }\n pages.push(...normalized.pages);\n allDiagnostics.push(...normalized.diagnostics);\n }\n }\n return { diagnostics: allDiagnostics, droppedPages, pages };\n};\n\n/**\n * Run the full core pipeline for a project root: load config, resolve paths,\n * discover content and folder meta, build the graph, and assemble the manifest.\n * Collects all diagnostics without throwing on content-level problems so\n * callers can decide how strict to be.\n */\nexport const scanProject = async (\n root: string,\n options: {\n devServerUrl?: string;\n mode?: BuildMode;\n preview?: boolean;\n refresh?: boolean;\n /** CLI overrides applied over the loaded config (e.g. `--output`). */\n overrides?: ConfigOverrides;\n /** Relocate the generated runtime (e.g. `.blume-verify` for isolation). */\n runtimeDir?: string;\n } = {}\n): Promise<BlumeProject> => {\n const mode = options.mode ?? \"dev\";\n const preview = options.preview ?? false;\n const configResult = await loadConfig(root, {\n devServerUrl: options.devServerUrl,\n });\n // Re-run platform detection after CLI overrides: `loadConfig` already ran it,\n // but adapter inference keys off `deployment.output`, which `--output server`\n // only sets here. Idempotent for already-resolved fields — `deployment.site`\n // keeps loadConfig's explicit > platform env > devServerUrl precedence.\n const config = applyDeploymentEnv(\n applyConfigOverrides(configResult.config, options.overrides)\n );\n const context = resolveProjectContext(root, config, {\n runtimeDir: options.runtimeDir,\n });\n\n // Each source validates itself (e.g. the filesystem source checks its root\n // exists), replacing the single hard `contentRoot` check.\n const sources = resolveSources(config, context, {\n mode,\n preview,\n refresh: options.refresh,\n });\n for (const source of sources) {\n source.validate?.();\n }\n\n // Folder meta is discovered per filesystem source, under each source's own\n // root and keyed by its route prefix, so a prefixed/root-differing source's\n // `meta.ts` still lines up with its (prefixed) sidebar group path.\n const metaSources: FolderMetaSource[] = sources.flatMap((source) =>\n source.staged || !source.contentRoot\n ? []\n : [{ prefix: source.prefix, root: source.contentRoot }]\n );\n\n // Run every source's `load()` in parallel, then funnel each entry through the\n // shared `normalizeEntry` so route mapping is identical regardless of origin.\n // Under the `dir` parser, non-default locales are top-level directories whose\n // meta keys must carry the locale in front of the source prefix (see\n // `discoverFolderMeta`).\n const localeDirs =\n config.i18n && config.i18n.parser === \"dir\"\n ? config.i18n.locales.flatMap((locale) =>\n locale.code === config.i18n?.defaultLocale ? [] : [locale.code]\n )\n : undefined;\n\n const [loaded, folderMeta] = await Promise.all([\n Promise.all(\n sources.map(async (source) => ({ source, ...(await source.load()) }))\n ),\n discoverFolderMeta(metaSources, { localeDirs }),\n ]);\n\n const {\n diagnostics: contentDiagnostics,\n droppedPages,\n pages: allPages,\n } = normalizeLoadedEntries(loaded, config);\n\n // Drafts render in dev and in preview, but are excluded from production builds.\n const pages =\n mode === \"build\" && !preview\n ? allPages.filter((page) => !page.meta.draft)\n : allPages;\n\n // Resolve \"last updated\" dates before the graph is built so the manifest\n // (which shares these page objects) picks them up. Frontmatter always wins;\n // git applies to filesystem entries, other sources supply dates on the entry.\n const lastModified = resolveLastModifiedConfig(config.lastModified);\n if (lastModified.enabled && lastModified.source === \"git\") {\n const fsPaths = pages\n .map((page) => page.sourcePath)\n .filter((path): path is string => path !== undefined);\n // The git pathspecs must cover where the pages actually live: each\n // filesystem source's own root, which diverges from the global\n // `content.root` when a source configures a non-default `root`.\n const contentRoots = sources.flatMap((source) =>\n source.staged || !source.contentRoot ? [] : [source.contentRoot]\n );\n const gitTimes = gitLastModifiedTimes(context.root, contentRoots, fsPaths);\n for (const page of pages) {\n if (!page.lastModified && page.sourcePath) {\n page.lastModified = gitTimes.get(page.sourcePath);\n }\n }\n }\n\n const graph = buildContentGraph(pages, {\n basePath: config.basePath,\n folderMeta: folderMeta.meta,\n i18n: config.i18n,\n navigation: config.navigation,\n sharedFolderMeta: folderMeta.shared,\n });\n const manifest = buildManifest({ config, context, graph });\n\n const i18nWarnings = config.i18n ? i18nDiagnostics(pages, config.i18n) : [];\n\n return {\n config,\n context,\n diagnostics: [\n ...contentDiagnostics,\n ...folderMeta.diagnostics,\n ...entryIdDiagnostics(pages, resolveDocsCollection(config, context).base),\n ...graph.diagnostics,\n ...i18nWarnings,\n ],\n droppedPages,\n graph,\n manifest,\n mode,\n sources,\n };\n};\n",
|
|
54
54
|
"import { existsSync, readFileSync } from \"node:fs\";\n\nimport type { BlumeConfig } from \"./config-input.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 { ResolvedConfig } from \"./schema.ts\";\nimport type { Diagnostic } from \"./types.ts\";\n\n/**\n * Define a Blume site's configuration with full type-checking and editor\n * autocomplete. Place the call in `blume.config.ts` at your project root and\n * `export default` the result:\n *\n * ```ts\n * import { defineConfig } from \"blume\";\n *\n * export default defineConfig({\n * title: \"Acme Docs\",\n * description: \"Everything you need to build with Acme.\",\n * });\n * ```\n *\n * Every field is optional — an empty `defineConfig({})` produces a working\n * site from the Markdown/MDX in your `docs/` directory. Configure only what you\n * want to change; sensible defaults fill in the rest.\n *\n * This is an identity helper: it returns its input unchanged and exists purely\n * for type inference (and as a stable home for future plugin hooks). The object\n * is validated against the Blume schema when the CLI loads it.\n *\n * ## Top-level fields\n *\n * **Site identity**\n * - `title` — site title, shown in the header, `<title>`, and OG images.\n * Defaults to `\"Documentation\"`.\n * - `description` — default meta description, used where a page sets none.\n * - `logo` — brand mark. A string is an image path/URL; the object form splits\n * an `image` mark from wordmark `text` and can override the brand `href`.\n * - `banner` — site-wide announcement bar; a string, or `{ content, link,\n * dismissible }`.\n *\n * **Content & navigation**\n * - `content` — where content lives (`root`, defaults to `docs`) and pluggable\n * `sources` (filesystem, remote MDX, GitHub Releases, Sanity, Notion, or a\n * custom `ContentSource`). Omit `sources` and the top-level `root` becomes one\n * implicit filesystem source.\n * - `navigation` — sidebar, header `tabs`, `selectors` (version/language/product\n * switchers), pinned `featured` links, and the `repo` link toggle. Omit\n * `sidebar` to generate it from the content tree.\n * - `redirects` — `{ from, to, status }` rules (301 by default).\n * - `github` — `{ owner, repo, branch, dir }`, powering \"Edit this page\" links\n * and the header repo link.\n *\n * **Appearance**\n * - `theme` — `accent` color, `fonts` (curated Google Font slugs), `radius`,\n * `mode` (`system`/`light`/`dark`), and `background`.\n * - `markdown` — `code` (language icons, inline highlighting, line wrap),\n * `headingAnchors`, `imageZoom`, and opt-in KaTeX `math`.\n * - `toc` — on-page table of contents; `true`/`false` or a heading-level range.\n * - `lastModified` — \"Last updated\" stamps from `git` history or frontmatter.\n * - `feedback` — the per-page \"Was this helpful?\" widget (on by default).\n * - `export` — reader-facing PDF/EPUB export actions (off by default).\n *\n * **Reference docs**\n * - `openapi` — native OpenAPI reference: one real page per operation, woven\n * into the sidebar and search. Point `sources`/`spec` at your spec.\n * - `asyncapi` — AsyncAPI reference via the embedded Scalar renderer.\n *\n * **Search & AI**\n * - `search` — search backend `provider` (`orama` by default; `pagefind`,\n * `algolia`, `typesense`, `orama-cloud`, `mixedbread`, or `none`) plus its\n * credential block.\n * - `ai` — `ask` (the Ask AI chat endpoint and its provider/model), `llmsTxt`\n * (emit `llms.txt`), `mcp` (expose the docs as an MCP server for connecting\n * agents), and `markdownComponents` (Markdown serializers for custom\n * components in agent-facing output).\n *\n * **SEO, feeds & analytics**\n * - `seo` — `og` images, `sitemap`, `robots`, `rss` feeds, `structuredData`\n * JSON-LD, `agentReadability`, and robots `contentSignals`.\n * - `analytics` — PostHog, Vercel, or arbitrary `scripts` (Plausible, Fathom,\n * GA, …).\n *\n * **Deployment & i18n**\n * - `deployment` — `site` URL (needed for absolute links, sitemaps, and OG),\n * `adapter` (`vercel`/`node`/`netlify`/`cloudflare`), `output`\n * (`static`/`server`), and `base` path. Auto-detected on Vercel/Netlify/\n * Cloudflare from the platform env.\n * - `i18n` — opt-in multi-locale: `locales`, `defaultLocale`, `parser`\n * (`dir` vs filename `dot` suffix), and per-locale UI overrides.\n *\n * - `examples` — `<Component path>` previews: `source` (default `examples/`;\n * supports a glob for colocated registries) and `css`, a stylesheet injected\n * into the isolated preview frames (e.g. shadcn variables).\n *\n * @example Zero-config — just render the Markdown under `docs/`.\n * ```ts\n * export default defineConfig({});\n * ```\n *\n * @example A production docs site with theming, search, and deployment.\n * ```ts\n * export default defineConfig({\n * title: \"Acme Docs\",\n * description: \"Build faster with Acme.\",\n * logo: { image: \"/logo.svg\", text: \"Acme\" },\n * github: { owner: \"acme\", repo: \"acme\" },\n * theme: { accent: \"violet\", fonts: { body: \"inter\" }, radius: \"lg\" },\n * navigation: {\n * tabs: [\n * { label: \"Guides\", path: \"/guides\" },\n * { label: \"API\", path: \"/api\" },\n * ],\n * },\n * search: { provider: \"orama\" },\n * deployment: { site: \"https://docs.acme.com\", adapter: \"vercel\" },\n * });\n * ```\n *\n * @example An OpenAPI reference with the Ask AI assistant enabled.\n * ```ts\n * export default defineConfig({\n * title: \"Acme API\",\n * openapi: {\n * enabled: true,\n * route: \"/reference\",\n * sources: [{ label: \"Core\", spec: \"./openapi.json\" }],\n * },\n * ai: { ask: { enabled: true }, llmsTxt: true },\n * });\n * ```\n *\n * @param config - The site configuration. All fields are optional.\n * @returns The same config object, typed for inference.\n * @see https://useblume.dev/docs for the full configuration reference.\n */\nexport const defineConfig = (config: BlumeConfig): BlumeConfig => config;\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 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 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 }\n\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 configFile && existsSync(configFile)\n ? readFileSync(configFile, \"utf-8\")\n : undefined;\n const diagnostics = diagnosticsFromZod(parsed.error, {\n code: \"BLUME_CONFIG_INVALID\",\n file: configFile ?? undefined,\n source,\n });\n const [first, ...rest] = diagnostics;\n const primary = first ?? {\n code: \"BLUME_CONFIG_INVALID\",\n file: configFile ?? 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 const moreIssues = rest.map((d) => ` - ${d.message}`).join(\"\\n\");\n throw new BlumeError(\n rest.length > 0\n ? {\n ...primary,\n message: `${primary.message}\\n${rest.length} more config issue(s):\\n${moreIssues}`,\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 config: {\n ...config,\n deployment: { ...config.deployment, site },\n seo: { ...config.seo, og: { ...config.seo.og, enabled: ogEnabled } },\n },\n configFile,\n diagnostics: [],\n };\n};\n",
|
|
55
55
|
"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",
|
|
56
56
|
"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",
|
|
57
|
-
"import { z } from \"zod\";\n\nimport type { ComponentMarkdown } from \"../ai/component-markdown.ts\";\nimport { normalizeRoute } from \"../openapi/references.ts\";\nimport { normalizeXHandle } from \"../seo/x-handle.ts\";\nimport { FONT_SLUGS, isFontSlug } from \"../theme/fonts.ts\";\nimport { normalizeBasePath } from \"./base-path.ts\";\nimport { uiLocaleOverridesSchema } from \"./i18n-ui.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\nimport { isStandardSchema } from \"./standard-schema.ts\";\nimport type { StandardSchema } from \"./standard-schema.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\n/** Default include glob for filesystem-backed content sources. */\nconst DEFAULT_CONTENT_GLOB = \"**/*.{md,mdx}\";\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.strictObject({\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\n/**\n * An X handle, normalized to a leading `@` — `twitter:site`/`twitter:creator`\n * require it, and a handle configured without one is the obvious typo to absorb\n * rather than reject. The layouts normalize again on the way out, since a page's\n * `seo.x.creator` reaches them straight from unvalidated frontmatter.\n */\nconst xHandleSchema = z.string().transform(normalizeXHandle).optional();\n\nconst seoMetaSchema = z.strictObject({\n // blume bundles Zod 3; top-level `z.url()` is undefined at runtime and\n // schemas must stay dual-compatible with consumer projects on Zod 4.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\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 /** Per-page X attribution — a guest post credits its own author. */\n x: z.strictObject({ creator: xHandleSchema }).optional(),\n});\n\nconst searchMetaSchema = z.strictObject({\n boost: z.number().optional(),\n exclude: z.boolean().default(false),\n tags: z.array(z.string()).optional(),\n});\n\nconst changelogMetaSchema = z.strictObject({\n category: z.string().optional(),\n date: dateSchema.optional(),\n version: z.string().optional(),\n});\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 .catchall(z.unknown()),\n]);\n\n/** Frontmatter accepted on any content page. */\nconst pageMetaBaseSchema = z.strictObject({\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 hidden: z.boolean().default(false),\n icon: iconName.optional(),\n /** Overrides the git-derived last-modified date when `lastModified` is on. */\n lastModified: dateSchema.optional(),\n noindex: z.boolean().default(false),\n search: searchMetaSchema.default({}),\n seo: seoMetaSchema.default({}),\n sidebar: sidebarMetaSchema.default({}),\n slug: z.string().optional(),\n title: z.string().optional(),\n // No default: an absent `type` must fall through to `content.defaultType`.\n type: z.string().optional(),\n});\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.strictObject({\n collapsed: z.boolean().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\nexport type FolderMeta = z.infer<typeof folderMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// Project config (blume.config.ts)\n// ---------------------------------------------------------------------------\n\n/** The logo mark: a single image path/URL, or light/dark variants with alt text. */\nconst logoImageSchema = z.union([\n z.string(),\n z.strictObject({\n alt: z.string().optional(),\n dark: z.string().optional(),\n light: z.string().optional(),\n }),\n]);\n\n/**\n * Site logo. A bare string is the image shorthand. The object form splits the\n * brand into an optional `image` mark and optional wordmark `text` so a site can\n * show an image-only logo (a mark with the wordmark baked in), a text-only logo,\n * or both. Omit `text` to fall back to the site title; set `text: \"\"` to render\n * the mark alone. `href` overrides the brand link (defaults to `/`).\n */\nconst logoConfigSchema = z.union([\n z.string(),\n z.strictObject({\n href: z.string().optional(),\n image: logoImageSchema.optional(),\n text: z.string().optional(),\n }),\n]);\n\n/** Site-wide announcement banner: a string, or text with an optional link. */\nconst bannerConfigSchema = z.union([\n z.string(),\n z.strictObject({\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.strictObject({ href: z.string(), text: z.string() }).optional(),\n }),\n]);\n\n/** A local filesystem content source. */\nconst filesystemSourceSchema = z.strictObject({\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\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.strictObject({\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 .strictObject({\n owner: z.string(),\n path: z.string().default(\"\"),\n ref: z.string().default(\"main\"),\n repo: z.string(),\n })\n .optional(),\n /** Glob patterns applied to enumerated refs. */\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\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 .strictObject({\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 .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 .strictObject({\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 .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.strictObject({\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\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 customSourceSchema,\n]);\n\n/** A resolved content-source config entry (post-defaults). */\nexport type ContentSourceConfig = z.infer<typeof contentSourceSchema>;\n\nconst contentConfigSchema = z.strictObject({\n defaultType: z.string().default(\"doc\"),\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\nconst navTabSchema = z.strictObject({\n icon: iconName.optional(),\n items: z\n .array(\n z.strictObject({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n )\n .optional(),\n label: z.string(),\n path: z.string(),\n});\n\nconst navSelectorItemSchema = z.strictObject({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n});\n\nconst navSelectorSchema = z.strictObject({\n items: z.array(navSelectorItemSchema).default([]),\n kind: z.enum([\"dropdown\", \"language\", \"product\", \"version\"]),\n label: z.string(),\n});\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.strictObject({\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 ])\n);\n\n/** A curated Google Font slug (see `theme/fonts.ts`). */\nconst fontSlug = z.string().superRefine((value, ctx) => {\n if (!isFontSlug(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Unknown font \"${value}\". Supported fonts: ${FONT_SLUGS.join(\", \")}.`,\n });\n }\n});\n\n/**\n * An optional per-mode theme value: a string applies to both color modes; a\n * `{ light, dark }` object sets each mode individually (either may be\n * omitted to override a single mode).\n */\nconst perModeValueSchema = z\n .union([\n z.string(),\n z.strictObject({\n dark: z.string().optional(),\n light: z.string().optional(),\n }),\n ])\n .optional()\n .transform((value) =>\n typeof value === \"string\" ? { dark: value, light: value } : value\n );\n\nconst themeConfigSchema = z.strictObject({\n accent: z\n .union([\n z.string(),\n z.strictObject({ dark: z.string(), light: z.string() }),\n ])\n .default(\"blue\")\n .transform((value) =>\n typeof value === \"string\" ? { dark: value, light: value } : value\n ),\n action: z.string().optional(),\n background: perModeValueSchema,\n backgroundImage: perModeValueSchema,\n fonts: z\n .strictObject({\n body: fontSlug.default(\"inter\"),\n display: fontSlug.default(\"inter-tight\"),\n mono: fontSlug.default(\"ibm-plex-mono\"),\n })\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});\n\n/** Public credentials for the Algolia search backend (sync key is an env var). */\nconst algoliaSearchSchema = z.strictObject({\n appId: z.string(),\n indexName: z.string(),\n searchApiKey: z.string(),\n});\n\n/** Public credentials for the Orama Cloud search backend. */\nconst oramaCloudSearchSchema = z.strictObject({\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\n/** Public credentials for a (self-hosted or cloud) Typesense backend. */\nconst typesenseSearchSchema = z.strictObject({\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\n/** Mixedbread semantic search: the store the server endpoint queries. */\nconst mixedbreadSearchSchema = z.strictObject({\n storeId: z.string(),\n});\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\n/** Curated link for the search dialog empty state (internal route or external URL). */\nconst searchPopularLinkSchema = z.strictObject({\n href: z.string(),\n icon: iconName.optional(),\n label: z.string(),\n});\n\nconst searchConfigSchema = z\n .strictObject({\n algolia: algoliaSearchSchema.optional(),\n indexing: z\n .strictObject({\n includeHiddenPages: z.boolean().default(false),\n })\n .default({}),\n mixedbread: mixedbreadSearchSchema.optional(),\n oramaCloud: oramaCloudSearchSchema.optional(),\n /** Curated links for the Cmd+K empty state; defaults to the first sidebar pages. */\n popular: z.array(searchPopularLinkSchema).default([]),\n provider: z.enum(searchProviders).default(\"orama\"),\n typesense: typesenseSearchSchema.optional(),\n })\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 mcpConfigSchema = z.strictObject({\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 /**\n * Normalized like `openapi.route`: a slash-less value would otherwise be\n * string-concatenated onto the site origin (`https://acme.comdocs-mcp`).\n */\n route: z.string().default(\"/mcp\").transform(normalizeRoute),\n});\n\nconst aiConfigSchema = z.strictObject({\n ask: z\n .strictObject({\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 // blume bundles Zod 3; top-level `z.url()` is undefined at runtime.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\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 // Empty-state prompts shown before the first question. Each renders as a\n // clickable suggestion; `icon` is an optional Lucide name beside it.\n suggestions: z\n .array(\n z.strictObject({\n icon: iconName.optional(),\n label: z.string().min(1),\n })\n )\n .default([]),\n })\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 /**\n * `llms.txt`/`llms-full.txt` emission. A bare boolean toggles it; the object\n * form adds `openapi: false` to keep generated API reference pages out of\n * both files (e.g. when the configured spec is example content).\n */\n llmsTxt: z\n .union([\n z.boolean(),\n z.strictObject({\n enabled: z.boolean().default(true),\n openapi: z.boolean().default(true),\n }),\n ])\n .default(true)\n .transform((value) =>\n typeof value === \"boolean\" ? { enabled: value, openapi: true } : value\n ),\n // Serializers for the agent-facing Markdown downlevel (the `.md` mirror,\n // llms-full.txt, MCP get_page), keyed by JSX name. Functions live here —\n // not in components.tsx — because the config file is executed at build\n // time while the components file is only statically analyzed. A same-name\n // entry replaces the built-in serializer.\n // Two-argument `z.record` — the single-argument form throws at\n // schema-construction time under Zod 4 (see uiStringsOverrideSchema).\n markdownComponents: z\n .record(\n z.string(),\n z.custom<ComponentMarkdown>((value) => typeof value === \"function\", {\n message: \"Expected a serializer function.\",\n })\n )\n .default({}),\n /** Expose the docs as an MCP server for connecting agents. */\n mcp: mcpConfigSchema.default({}),\n});\n\n/**\n * A pinned link rendered above the sidebar sections — a blog, changelog, or\n * contact page that should always be reachable, regardless of the active tab.\n * `href` may be an external URL or an internal route.\n */\nconst featuredLinkSchema = z.strictObject({\n href: z.string(),\n icon: iconName.optional(),\n label: z.string(),\n});\n\nconst navigationConfigSchema = z.strictObject({\n /** Pinned links shown above the generated sidebar sections. */\n featured: z.array(featuredLinkSchema).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 /**\n * Sidebar behavior. `display` sets how every group renders (a group in an\n * explicit `items` config may still override it); `items` is an explicit\n * sidebar — when omitted the sidebar is generated from the content tree.\n * A bare array is shorthand for `{ items }`.\n */\n sidebar: z\n .union([\n z.array(sidebarItemSchema),\n z.strictObject({\n display: sidebarDisplaySchema.default(\"flat\"),\n items: z.array(sidebarItemSchema).optional(),\n }),\n ])\n .default({})\n .transform((value) =>\n Array.isArray(value) ? { display: \"flat\" as const, items: value } : value\n ),\n tabs: z.array(navTabSchema).default([]),\n});\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.strictObject({\n epub: z.boolean().default(false),\n pdf: z.boolean().default(false),\n }),\n ])\n .transform((value) =>\n typeof value === \"boolean\" ? { epub: value, pdf: value } : value\n );\n\n/** A configured locale: ISO-ish code plus display metadata for the switcher. */\nconst localeSchema = z.strictObject({\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\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 .strictObject({\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 .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 .strictObject({\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 .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.strictObject({\n posthog: z\n .strictObject({\n host: z.string().optional(),\n key: z.string(),\n })\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\nconst deploymentConfigSchema = z.strictObject({\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 // blume bundles Zod 3; top-level `z.url()` is undefined at runtime.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\n site: z.string().url().optional(),\n});\n\nconst redirectSchema = z.strictObject({\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\n/**\n * X (Twitter) attribution. The account fields feed `twitter:site` (the site's\n * account) and `twitter:creator` (the author's), which is the one piece of X\n * card metadata with no Open Graph equivalent to fall back to — everything else\n * on the card is read from `og:*`.\n */\nconst xConfigSchema = z.strictObject({\n /** The author's account, overridable per page via `seo.x.creator`. */\n creator: xHandleSchema,\n /** The site's own account, e.g. `@blume`. */\n handle: xHandleSchema,\n});\n\n/**\n * Any CSS color. Takumi parses the full grammar, so this stays unvalidated\n * here and a bad value fails the OG prerender with a parse error naming it —\n * the same fail-fast the card's accent relies on. Validating hex-only here\n * would reject `oklch(…)`, which `theme.accent` (the card's default accent)\n * already accepts.\n */\nconst ogColorSchema = z.string();\n\nconst ogPaletteSchema = z.strictObject({\n accent: ogColorSchema.optional(),\n background: ogColorSchema.optional(),\n border: ogColorSchema.optional(),\n foreground: ogColorSchema.optional(),\n muted: ogColorSchema.optional(),\n});\n\n/**\n * A Google Font family to load into the OG card renderer. A bare string is the\n * family name; the object form pins the weight (a number, a list, or a variable\n * range like `\"100..900\"`) and style. Fetched from Google Fonts at build and\n * handed to Takumi, which does per-glyph fallback so a family covering a script\n * (e.g. Noto Sans JP for CJK) fixes tofu without touching how Latin renders.\n */\nconst ogFontWeightSchema = z.union([\n z.number().int().positive(),\n z.array(z.number().int().positive()),\n z.string().regex(/^\\d+\\.\\.\\d+$/u),\n]);\nconst ogFontStyleSchema = z.enum([\"normal\", \"italic\"]);\nconst ogFontSchema = z.union([\n z.string(),\n z.strictObject({\n name: z.string(),\n style: z.union([ogFontStyleSchema, z.array(ogFontStyleSchema)]).optional(),\n weight: ogFontWeightSchema.optional(),\n }),\n]);\n\nconst ogConfigSchema = z.strictObject({\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 * Google Font families for the generated card, extending Takumi's Latin-only\n * default so non-Latin titles (CJK, and so on) render instead of tofu.\n * Fetched from Google Fonts at build.\n */\n fonts: z.array(ogFontSchema).optional(),\n /** Local SVG used in the generated card instead of the site logo. */\n logo: z.string().optional(),\n /** Optional generated-card colors. */\n palette: ogPaletteSchema.optional(),\n});\n\nconst rssConfigSchema = z.strictObject({\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\n/**\n * robots.txt `Content-Signal` preferences — the emerging content-usage\n * declaration for how crawlers may reuse the site. Each field maps to one\n * signal:\n * - `search` → `search` (traditional and AI search indexing)\n * - `aiInput` → `ai-input` (grounding / RAG use at answer time)\n * - `aiTrain` → `ai-train` (model training)\n */\nconst contentSignalsObjectSchema = z.strictObject({\n aiInput: z.boolean().default(true),\n aiTrain: z.boolean().default(true),\n search: z.boolean().default(true),\n});\n\n/**\n * Content signals accept a boolean shorthand or a per-signal object, and\n * normalize to `{ search, aiInput, aiTrain }` — or `null` when disabled, so\n * robots.txt omits the declaration entirely. On by default (`true`): Blume\n * declares the docs open to search and agents. `false` opts out; an object\n * restricts individual signals (unset signals stay `yes`).\n */\nconst contentSignalsSchema = z\n .union([z.boolean(), contentSignalsObjectSchema])\n .transform((value) => {\n if (value === true) {\n return contentSignalsObjectSchema.parse({});\n }\n if (value === false) {\n return null;\n }\n return value;\n });\n\n/** Discoverability features: OG images, feeds, sitemap, structured data. */\nconst seoConfigSchema = z.strictObject({\n /**\n * Emit `agent-readability.json` at the site root: a manifest that indexes\n * the agent-facing surface (llms.txt, Markdown mirrors, MCP server, feeds)\n * so agents can discover it without scraping HTML.\n */\n agentReadability: z.boolean().default(true),\n /** robots.txt `Content-Signal` usage declaration (on by default). */\n contentSignals: contentSignalsSchema.default(true),\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 /** X (Twitter) account attribution for share cards. */\n x: xConfigSchema.default({}),\n});\n\nconst githubConfigSchema = z.strictObject({\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\nconst codeBlockThemeSchema = z.strictObject({\n dark: z.string().default(\"github-dark\"),\n light: z.string().default(\"github-light\"),\n});\n\nconst codeBlocksConfigSchema = z.strictObject({\n theme: codeBlockThemeSchema.default({}),\n});\n\n/**\n * `<Component />` example previews. A string is shorthand for `{ source }`:\n * where examples live, relative to the project root (default `examples`).\n * `source` may be a glob (anything with `*`/`?`/`[]`/`{}`/`!`), in which case\n * only matching files are discovered and each `<Component path>` key is\n * relative to the glob's static prefix — use this for a registry layout that\n * colocates component sources with their examples\n * (`registry/<pkg>/**\\/examples/*`), leaving the sources (which have no\n * default export to wrap) out.\n *\n * `css` names a stylesheet (relative to the project root) injected into every\n * preview frame after Blume's default tokens. Previews render in an isolated\n * iframe that the site's docs styles never reach, so this is where design\n * tokens for the previewed components live — e.g. shadcn variables and\n * `@theme` mappings. Tailwind itself is already provided; the file should\n * hold tokens and custom styles, not another `@import \"tailwindcss\"`.\n */\nconst examplesConfigSchema = z\n .union([\n z.string(),\n z.strictObject({\n css: z.string().optional(),\n source: z.string().default(\"examples\"),\n }),\n ])\n .transform((value): { css?: string; source: string } =>\n typeof value === \"string\" ? { source: value } : value\n );\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.strictObject({ type: z.enum([\"git\", \"frontmatter\"]).default(\"git\") }),\n]);\n\n/** Code-block rendering options (`markdown.code`). */\nconst codeConfigSchema = z.strictObject({\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 * 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\nconst markdownConfigSchema = z.strictObject({\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\n/** React island behavior (`react`). */\nconst reactConfigSchema = z.strictObject({\n /**\n * Auto-memoize React components/hooks with the React Compiler\n * (`babel-plugin-react-compiler`). On by default whenever React is enabled\n * (a project `.tsx`/`.jsx`, a React island/example/override, or Ask AI); set\n * to `false` to skip the compiler's babel pass.\n */\n compiler: z.boolean().default(true),\n});\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.strictObject({\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\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.strictObject({\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\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.strictObject({\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\n/**\n * Opt-in custom frontmatter keys. `extend` maps each extra key a project's\n * pages may carry (e.g. `owner`, `reviewedAt`) to a validation schema; the\n * page schema stays strict for everything else, so typo-catching is preserved.\n * Schemas are consumed through the Standard Schema `~standard` contract —\n * never Zod's own API — so the consumer's zod (any version), Valibot, or\n * ArkType all work (see `standard-schema.ts`). Every declared key is validated\n * on every page, absent ones included, so a required schema enforces the key\n * site-wide; mark it `.optional()` to validate only when present. Built-in\n * frontmatter fields can't be redeclared — they're load-bearing (routing,\n * sidebar, SEO), and shadowing one would silently change its semantics.\n */\nconst frontmatterConfigSchema = z.strictObject({\n extend: z\n .record(\n z.string(),\n z.custom<StandardSchema>(isStandardSchema, {\n message:\n \"Expected a Standard Schema (e.g. a Zod schema — any Zod version works).\",\n })\n )\n .default({})\n .superRefine((value, ctx) => {\n for (const key of Object.keys(value)) {\n if (Object.hasOwn(pageMetaBaseSchema.shape, key)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `\"${key}\" is a built-in frontmatter field and cannot be redeclared via frontmatter.extend.`,\n path: [key],\n });\n }\n }\n }),\n});\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.strictObject({\n maxHeadingLevel: z.number().int().min(1).max(6).optional(),\n minHeadingLevel: z.number().int().min(1).max(6).optional(),\n }),\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 // Checked after defaults apply, so `{ minHeadingLevel: 5 }` (default max 3)\n // is caught too — an inverted range would silently render an empty TOC.\n .refine((value) => value.minLevel <= value.maxLevel, {\n message:\n \"toc.minHeadingLevel must be less than or equal to toc.maxHeadingLevel.\",\n });\n\nexport const blumeConfigSchema = z.strictObject({\n ai: aiConfigSchema.default({}),\n analytics: analyticsConfigSchema.optional(),\n asyncapi: asyncapiConfigSchema.default({}),\n banner: bannerConfigSchema.optional(),\n /**\n * Site-wide mount point prepended to every generated route (e.g. `/docs`),\n * while staying invisible to the sidebar/nav tree. Distinct from a per-source\n * `prefix` (which creates a group) and from `deployment.base` (Astro's\n * host-subdirectory base); the two compose. Normalized to `\"\"` or `/seg`.\n */\n basePath: z\n .string()\n .optional()\n .transform((value) => normalizeBasePath(value)),\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 * A string is shorthand for `{ source }` — the directory (or glob, for\n * colocated registry layouts) under the project root that holds example\n * files. The object form adds `css`: a stylesheet injected into every\n * preview frame (design tokens, shadcn variables, `@theme` mappings).\n */\n examples: examplesConfigSchema.default(\"examples\"),\n export: exportConfigSchema.default(false),\n feedback: z.boolean().default(true),\n /** Opt-in custom frontmatter keys, validated by user-supplied schemas. */\n frontmatter: frontmatterConfigSchema.default({}),\n github: githubConfigSchema.optional(),\n i18n: i18nConfigSchema.optional(),\n lastModified: lastModifiedConfigSchema.default(false),\n logo: logoConfigSchema.optional(),\n markdown: markdownConfigSchema.default({}),\n navigation: navigationConfigSchema.default({}),\n openapi: openapiConfigSchema.default({}),\n react: reactConfigSchema.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});\n\n/** Resolved config: every field present after defaults are applied. */\nexport type ResolvedConfig = z.infer<typeof blumeConfigSchema>;\n/** Resolved `frontmatter.extend`: custom key → user-supplied schema. */\nexport type FrontmatterExtend = Record<string, StandardSchema>;\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/**\n * User-authored config, straight off the schema. The public, hand-documented\n * authoring type is `BlumeConfig` in `./config-input.ts`, which a compile-time\n * guard keeps structurally identical to this.\n */\nexport type BlumeConfigInput = z.input<typeof blumeConfigSchema>;\n/** A configured search backend. */\nexport type SearchProvider = (typeof searchProviders)[number];\n/** Resolved robots.txt `Content-Signal` preferences (`null` when disabled). */\nexport type ContentSignals = z.infer<typeof contentSignalsSchema>;\n/** The resolved per-signal policy object (present when signals are enabled). */\nexport type ContentSignalPolicy = NonNullable<ContentSignals>;\n",
|
|
57
|
+
"import { z } from \"zod\";\n\nimport type { ComponentMarkdown } from \"../ai/component-markdown.ts\";\nimport type { CodeTheme } from \"../markdown/themes.ts\";\nimport { normalizeRoute } from \"../openapi/references.ts\";\nimport { normalizeXHandle } from \"../seo/x-handle.ts\";\nimport { FONT_SLUGS, isFontSlug } from \"../theme/fonts.ts\";\nimport { normalizeBasePath } from \"./base-path.ts\";\nimport { uiLocaleOverridesSchema } from \"./i18n-ui.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\nimport { isStandardSchema } from \"./standard-schema.ts\";\nimport type { StandardSchema } from \"./standard-schema.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\n/** Default include glob for filesystem-backed content sources. */\nconst DEFAULT_CONTENT_GLOB = \"**/*.{md,mdx}\";\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.strictObject({\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\n/**\n * An X handle, normalized to a leading `@` — `twitter:site`/`twitter:creator`\n * require it, and a handle configured without one is the obvious typo to absorb\n * rather than reject. The layouts normalize again on the way out, since a page's\n * `seo.x.creator` reaches them straight from unvalidated frontmatter.\n */\nconst xHandleSchema = z.string().transform(normalizeXHandle).optional();\n\nconst seoMetaSchema = z.strictObject({\n // blume bundles Zod 3; top-level `z.url()` is undefined at runtime and\n // schemas must stay dual-compatible with consumer projects on Zod 4.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\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 /** Per-page X attribution — a guest post credits its own author. */\n x: z.strictObject({ creator: xHandleSchema }).optional(),\n});\n\nconst searchMetaSchema = z.strictObject({\n boost: z.number().optional(),\n exclude: z.boolean().default(false),\n tags: z.array(z.string()).optional(),\n});\n\nconst changelogMetaSchema = z.strictObject({\n category: z.string().optional(),\n date: dateSchema.optional(),\n version: z.string().optional(),\n});\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 .catchall(z.unknown()),\n]);\n\n/** Frontmatter accepted on any content page. */\nconst pageMetaBaseSchema = z.strictObject({\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 hidden: z.boolean().default(false),\n icon: iconName.optional(),\n /** Overrides the git-derived last-modified date when `lastModified` is on. */\n lastModified: dateSchema.optional(),\n noindex: z.boolean().default(false),\n search: searchMetaSchema.default({}),\n seo: seoMetaSchema.default({}),\n sidebar: sidebarMetaSchema.default({}),\n slug: z.string().optional(),\n title: z.string().optional(),\n // No default: an absent `type` must fall through to `content.defaultType`.\n type: z.string().optional(),\n});\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.strictObject({\n collapsed: z.boolean().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\nexport type FolderMeta = z.infer<typeof folderMetaSchema>;\n\n// ---------------------------------------------------------------------------\n// Project config (blume.config.ts)\n// ---------------------------------------------------------------------------\n\n/** The logo mark: a single image path/URL, or light/dark variants with alt text. */\nconst logoImageSchema = z.union([\n z.string(),\n z.strictObject({\n alt: z.string().optional(),\n dark: z.string().optional(),\n light: z.string().optional(),\n }),\n]);\n\n/**\n * Site logo. A bare string is the image shorthand. The object form splits the\n * brand into an optional `image` mark and optional wordmark `text` so a site can\n * show an image-only logo (a mark with the wordmark baked in), a text-only logo,\n * or both. Omit `text` to fall back to the site title; set `text: \"\"` to render\n * the mark alone. `href` overrides the brand link (defaults to `/`).\n */\nconst logoConfigSchema = z.union([\n z.string(),\n z.strictObject({\n href: z.string().optional(),\n image: logoImageSchema.optional(),\n text: z.string().optional(),\n }),\n]);\n\n/** Site-wide announcement banner: a string, or text with an optional link. */\nconst bannerConfigSchema = z.union([\n z.string(),\n z.strictObject({\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.strictObject({ href: z.string(), text: z.string() }).optional(),\n }),\n]);\n\n/** A local filesystem content source. */\nconst filesystemSourceSchema = z.strictObject({\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\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.strictObject({\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 .strictObject({\n owner: z.string(),\n path: z.string().default(\"\"),\n ref: z.string().default(\"main\"),\n repo: z.string(),\n })\n .optional(),\n /** Glob patterns applied to enumerated refs. */\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\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 .strictObject({\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 .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 .strictObject({\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 .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.strictObject({\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\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 customSourceSchema,\n]);\n\n/** A resolved content-source config entry (post-defaults). */\nexport type ContentSourceConfig = z.infer<typeof contentSourceSchema>;\n\nconst contentConfigSchema = z.strictObject({\n defaultType: z.string().default(\"doc\"),\n exclude: z.array(z.string()).default([\"**/_*\", \"**/.*\"]),\n include: z.array(z.string()).default([DEFAULT_CONTENT_GLOB]),\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\nconst navTabSchema = z.strictObject({\n icon: iconName.optional(),\n items: z\n .array(\n z.strictObject({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n })\n )\n .optional(),\n label: z.string(),\n path: z.string(),\n});\n\nconst navSelectorItemSchema = z.strictObject({\n description: z.string().optional(),\n icon: iconName.optional(),\n label: z.string(),\n path: z.string(),\n tag: z.string().optional(),\n});\n\nconst navSelectorSchema = z.strictObject({\n items: z.array(navSelectorItemSchema).default([]),\n kind: z.enum([\"dropdown\", \"language\", \"product\", \"version\"]),\n label: z.string(),\n});\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.strictObject({\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 ])\n);\n\n/** A curated Google Font slug (see `theme/fonts.ts`). */\nconst fontSlug = z.string().superRefine((value, ctx) => {\n if (!isFontSlug(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Unknown font \"${value}\". Supported fonts: ${FONT_SLUGS.join(\", \")}.`,\n });\n }\n});\n\n/**\n * An optional per-mode theme value: a string applies to both color modes; a\n * `{ light, dark }` object sets each mode individually (either may be\n * omitted to override a single mode).\n */\nconst perModeValueSchema = z\n .union([\n z.string(),\n z.strictObject({\n dark: z.string().optional(),\n light: z.string().optional(),\n }),\n ])\n .optional()\n .transform((value) =>\n typeof value === \"string\" ? { dark: value, light: value } : value\n );\n\nconst themeConfigSchema = z.strictObject({\n accent: z\n .union([\n z.string(),\n z.strictObject({ dark: z.string(), light: z.string() }),\n ])\n .default(\"blue\")\n .transform((value) =>\n typeof value === \"string\" ? { dark: value, light: value } : value\n ),\n action: z.string().optional(),\n background: perModeValueSchema,\n backgroundImage: perModeValueSchema,\n fonts: z\n .strictObject({\n body: fontSlug.default(\"inter\"),\n display: fontSlug.default(\"inter-tight\"),\n mono: fontSlug.default(\"ibm-plex-mono\"),\n })\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});\n\n/** Public credentials for the Algolia search backend (sync key is an env var). */\nconst algoliaSearchSchema = z.strictObject({\n appId: z.string(),\n indexName: z.string(),\n searchApiKey: z.string(),\n});\n\n/** Public credentials for the Orama Cloud search backend. */\nconst oramaCloudSearchSchema = z.strictObject({\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\n/** Public credentials for a (self-hosted or cloud) Typesense backend. */\nconst typesenseSearchSchema = z.strictObject({\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\n/** Mixedbread semantic search: the store the server endpoint queries. */\nconst mixedbreadSearchSchema = z.strictObject({\n storeId: z.string(),\n});\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\n/** Curated link for the search dialog empty state (internal route or external URL). */\nconst searchPopularLinkSchema = z.strictObject({\n href: z.string(),\n icon: iconName.optional(),\n label: z.string(),\n});\n\nconst searchConfigSchema = z\n .strictObject({\n algolia: algoliaSearchSchema.optional(),\n indexing: z\n .strictObject({\n includeHiddenPages: z.boolean().default(false),\n })\n .default({}),\n mixedbread: mixedbreadSearchSchema.optional(),\n oramaCloud: oramaCloudSearchSchema.optional(),\n /** Curated links for the Cmd+K empty state; defaults to the first sidebar pages. */\n popular: z.array(searchPopularLinkSchema).default([]),\n provider: z.enum(searchProviders).default(\"orama\"),\n typesense: typesenseSearchSchema.optional(),\n })\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 mcpConfigSchema = z.strictObject({\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 /**\n * Normalized like `openapi.route`: a slash-less value would otherwise be\n * string-concatenated onto the site origin (`https://acme.comdocs-mcp`).\n */\n route: z.string().default(\"/mcp\").transform(normalizeRoute),\n});\n\nconst aiConfigSchema = z.strictObject({\n ask: z\n .strictObject({\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 // blume bundles Zod 3; top-level `z.url()` is undefined at runtime.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\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 // Empty-state prompts shown before the first question. Each renders as a\n // clickable suggestion; `icon` is an optional Lucide name beside it.\n suggestions: z\n .array(\n z.strictObject({\n icon: iconName.optional(),\n label: z.string().min(1),\n })\n )\n .default([]),\n })\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 /**\n * `llms.txt`/`llms-full.txt` emission. A bare boolean toggles it; the object\n * form adds `openapi: false` to keep generated API reference pages out of\n * both files (e.g. when the configured spec is example content).\n */\n llmsTxt: z\n .union([\n z.boolean(),\n z.strictObject({\n enabled: z.boolean().default(true),\n openapi: z.boolean().default(true),\n }),\n ])\n .default(true)\n .transform((value) =>\n typeof value === \"boolean\" ? { enabled: value, openapi: true } : value\n ),\n // Serializers for the agent-facing Markdown downlevel (the `.md` mirror,\n // llms-full.txt, MCP get_page), keyed by JSX name. Functions live here —\n // not in components.tsx — because the config file is executed at build\n // time while the components file is only statically analyzed. A same-name\n // entry replaces the built-in serializer.\n // Two-argument `z.record` — the single-argument form throws at\n // schema-construction time under Zod 4 (see uiStringsOverrideSchema).\n markdownComponents: z\n .record(\n z.string(),\n z.custom<ComponentMarkdown>((value) => typeof value === \"function\", {\n message: \"Expected a serializer function.\",\n })\n )\n .default({}),\n /** Expose the docs as an MCP server for connecting agents. */\n mcp: mcpConfigSchema.default({}),\n});\n\n/**\n * A pinned link rendered above the sidebar sections — a blog, changelog, or\n * contact page that should always be reachable, regardless of the active tab.\n * `href` may be an external URL or an internal route.\n */\nconst featuredLinkSchema = z.strictObject({\n href: z.string(),\n icon: iconName.optional(),\n label: z.string(),\n});\n\nconst navigationConfigSchema = z.strictObject({\n /** Pinned links shown above the generated sidebar sections. */\n featured: z.array(featuredLinkSchema).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 /**\n * Sidebar behavior. `display` sets how every group renders (a group in an\n * explicit `items` config may still override it); `items` is an explicit\n * sidebar — when omitted the sidebar is generated from the content tree.\n * A bare array is shorthand for `{ items }`.\n */\n sidebar: z\n .union([\n z.array(sidebarItemSchema),\n z.strictObject({\n display: sidebarDisplaySchema.default(\"flat\"),\n items: z.array(sidebarItemSchema).optional(),\n }),\n ])\n .default({})\n .transform((value) =>\n Array.isArray(value) ? { display: \"flat\" as const, items: value } : value\n ),\n tabs: z.array(navTabSchema).default([]),\n});\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.strictObject({\n epub: z.boolean().default(false),\n pdf: z.boolean().default(false),\n }),\n ])\n .transform((value) =>\n typeof value === \"boolean\" ? { epub: value, pdf: value } : value\n );\n\n/** A configured locale: ISO-ish code plus display metadata for the switcher. */\nconst localeSchema = z.strictObject({\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\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 .strictObject({\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 .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 .strictObject({\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 .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.strictObject({\n posthog: z\n .strictObject({\n host: z.string().optional(),\n key: z.string(),\n })\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\nconst deploymentConfigSchema = z.strictObject({\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 // blume bundles Zod 3; top-level `z.url()` is undefined at runtime.\n // oxlint-disable-next-line react-doctor/zod-v4-prefer-top-level-string-formats\n site: z.string().url().optional(),\n});\n\nconst redirectSchema = z.strictObject({\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\n/**\n * X (Twitter) attribution. The account fields feed `twitter:site` (the site's\n * account) and `twitter:creator` (the author's), which is the one piece of X\n * card metadata with no Open Graph equivalent to fall back to — everything else\n * on the card is read from `og:*`.\n */\nconst xConfigSchema = z.strictObject({\n /** The author's account, overridable per page via `seo.x.creator`. */\n creator: xHandleSchema,\n /** The site's own account, e.g. `@blume`. */\n handle: xHandleSchema,\n});\n\n/**\n * Any CSS color. Takumi parses the full grammar, so this stays unvalidated\n * here and a bad value fails the OG prerender with a parse error naming it —\n * the same fail-fast the card's accent relies on. Validating hex-only here\n * would reject `oklch(…)`, which `theme.accent` (the card's default accent)\n * already accepts.\n */\nconst ogColorSchema = z.string();\n\nconst ogPaletteSchema = z.strictObject({\n accent: ogColorSchema.optional(),\n background: ogColorSchema.optional(),\n border: ogColorSchema.optional(),\n foreground: ogColorSchema.optional(),\n muted: ogColorSchema.optional(),\n});\n\n/**\n * A Google Font family to load into the OG card renderer. A bare string is the\n * family name; the object form pins the weight (a number, a list, or a variable\n * range like `\"100..900\"`) and style. Fetched from Google Fonts at build and\n * handed to Takumi, which does per-glyph fallback so a family covering a script\n * (e.g. Noto Sans JP for CJK) fixes tofu without touching how Latin renders.\n */\nconst ogFontWeightSchema = z.union([\n z.number().int().positive(),\n z.array(z.number().int().positive()),\n z.string().regex(/^\\d+\\.\\.\\d+$/u),\n]);\nconst ogFontStyleSchema = z.enum([\"normal\", \"italic\"]);\nconst ogFontSchema = z.union([\n z.string(),\n z.strictObject({\n name: z.string(),\n style: z.union([ogFontStyleSchema, z.array(ogFontStyleSchema)]).optional(),\n weight: ogFontWeightSchema.optional(),\n }),\n]);\n\nconst ogConfigSchema = z.strictObject({\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 * Google Font families for the generated card, extending Takumi's Latin-only\n * default so non-Latin titles (CJK, and so on) render instead of tofu.\n * Fetched from Google Fonts at build.\n */\n fonts: z.array(ogFontSchema).optional(),\n /** Local SVG used in the generated card instead of the site logo. */\n logo: z.string().optional(),\n /** Optional generated-card colors. */\n palette: ogPaletteSchema.optional(),\n /**\n * Card headlines for custom `.astro` pages, keyed by route (`\"/\"`, `\"/cli\"`).\n * A custom page has no frontmatter to read, so its card is otherwise titled\n * by humanizing its last URL segment (`/cli` → \"Cli\"); an entry here wins.\n * Content pages always take their card headline from the page title.\n */\n titles: z.record(z.string(), z.string()).optional(),\n});\n\nconst rssConfigSchema = z.strictObject({\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\n/**\n * robots.txt `Content-Signal` preferences — the emerging content-usage\n * declaration for how crawlers may reuse the site. Each field maps to one\n * signal:\n * - `search` → `search` (traditional and AI search indexing)\n * - `aiInput` → `ai-input` (grounding / RAG use at answer time)\n * - `aiTrain` → `ai-train` (model training)\n */\nconst contentSignalsObjectSchema = z.strictObject({\n aiInput: z.boolean().default(true),\n aiTrain: z.boolean().default(true),\n search: z.boolean().default(true),\n});\n\n/**\n * Content signals accept a boolean shorthand or a per-signal object, and\n * normalize to `{ search, aiInput, aiTrain }` — or `null` when disabled, so\n * robots.txt omits the declaration entirely. On by default (`true`): Blume\n * declares the docs open to search and agents. `false` opts out; an object\n * restricts individual signals (unset signals stay `yes`).\n */\nconst contentSignalsSchema = z\n .union([z.boolean(), contentSignalsObjectSchema])\n .transform((value) => {\n if (value === true) {\n return contentSignalsObjectSchema.parse({});\n }\n if (value === false) {\n return null;\n }\n return value;\n });\n\n/** Discoverability features: OG images, feeds, sitemap, structured data. */\nconst seoConfigSchema = z.strictObject({\n /**\n * Emit `agent-readability.json` at the site root: a manifest that indexes\n * the agent-facing surface (llms.txt, Markdown mirrors, MCP server, feeds)\n * so agents can discover it without scraping HTML.\n */\n agentReadability: z.boolean().default(true),\n /** robots.txt `Content-Signal` usage declaration (on by default). */\n contentSignals: contentSignalsSchema.default(true),\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 /** X (Twitter) account attribution for share cards. */\n x: xConfigSchema.default({}),\n});\n\nconst githubConfigSchema = z.strictObject({\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\nconst codeThemeSchema = z.custom<CodeTheme>((value) => {\n if (typeof value === \"string\") {\n return true;\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n // Token rules live in `settings` (Shiki's canonical field, also the TextMate\n // form themes like createCssVariablesTheme() produce) or `tokenColors` (the\n // VS Code spelling Shiki falls back to). A colors-only theme (editor fg/bg,\n // no token rules) is also valid — Shiki renders it from `colors` alone. Each\n // field present must have the right shape, and at least one must be present.\n const theme = value as Record<string, unknown>;\n const settingsValid =\n theme.settings === undefined || Array.isArray(theme.settings);\n const tokenColorsValid =\n theme.tokenColors === undefined || Array.isArray(theme.tokenColors);\n const colorsValid =\n theme.colors === undefined ||\n (typeof theme.colors === \"object\" &&\n theme.colors !== null &&\n !Array.isArray(theme.colors));\n const hasContent =\n theme.settings !== undefined ||\n theme.tokenColors !== undefined ||\n theme.colors !== undefined;\n return settingsValid && tokenColorsValid && colorsValid && hasContent;\n}, \"Expected a Shiki theme name or custom theme object\");\n\nconst codeBlockThemeSchema = z.strictObject({\n dark: codeThemeSchema.default(\"github-dark\"),\n light: codeThemeSchema.default(\"github-light\"),\n});\n\nconst codeBlocksConfigSchema = z.strictObject({\n theme: codeBlockThemeSchema.default({}),\n});\n\n/**\n * `<Component />` example previews. A string is shorthand for `{ source }`:\n * where examples live, relative to the project root (default `examples`).\n * `source` may be a glob (anything with `*`/`?`/`[]`/`{}`/`!`), in which case\n * only matching files are discovered and each `<Component path>` key is\n * relative to the glob's static prefix — use this for a registry layout that\n * colocates component sources with their examples\n * (`registry/<pkg>/**\\/examples/*`), leaving the sources (which have no\n * default export to wrap) out.\n *\n * `css` names a stylesheet (relative to the project root) injected into every\n * preview frame after Blume's default tokens. Previews render in an isolated\n * iframe that the site's docs styles never reach, so this is where design\n * tokens for the previewed components live — e.g. shadcn variables and\n * `@theme` mappings. Tailwind itself is already provided; the file should\n * hold tokens and custom styles, not another `@import \"tailwindcss\"`.\n */\nconst examplesConfigSchema = z\n .union([\n z.string(),\n z.strictObject({\n css: z.string().optional(),\n source: z.string().default(\"examples\"),\n }),\n ])\n .transform((value): { css?: string; source: string } =>\n typeof value === \"string\" ? { source: value } : value\n );\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.strictObject({ type: z.enum([\"git\", \"frontmatter\"]).default(\"git\") }),\n]);\n\n/** Code-block rendering options (`markdown.code`). */\nconst codeConfigSchema = z.strictObject({\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 * 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\nconst markdownConfigSchema = z.strictObject({\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\n/** React island behavior (`react`). */\nconst reactConfigSchema = z.strictObject({\n /**\n * Auto-memoize React components/hooks with the React Compiler\n * (`babel-plugin-react-compiler`). On by default whenever React is enabled\n * (a project `.tsx`/`.jsx`, a React island/example/override, or Ask AI); set\n * to `false` to skip the compiler's babel pass.\n */\n compiler: z.boolean().default(true),\n});\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.strictObject({\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\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.strictObject({\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\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.strictObject({\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\n/**\n * Opt-in custom frontmatter keys. `extend` maps each extra key a project's\n * pages may carry (e.g. `owner`, `reviewedAt`) to a validation schema; the\n * page schema stays strict for everything else, so typo-catching is preserved.\n * Schemas are consumed through the Standard Schema `~standard` contract —\n * never Zod's own API — so the consumer's zod (any version), Valibot, or\n * ArkType all work (see `standard-schema.ts`). Every declared key is validated\n * on every page, absent ones included, so a required schema enforces the key\n * site-wide; mark it `.optional()` to validate only when present. Built-in\n * frontmatter fields can't be redeclared — they're load-bearing (routing,\n * sidebar, SEO), and shadowing one would silently change its semantics.\n */\nconst frontmatterConfigSchema = z.strictObject({\n extend: z\n .record(\n z.string(),\n z.custom<StandardSchema>(isStandardSchema, {\n message:\n \"Expected a Standard Schema (e.g. a Zod schema — any Zod version works).\",\n })\n )\n .default({})\n .superRefine((value, ctx) => {\n for (const key of Object.keys(value)) {\n if (Object.hasOwn(pageMetaBaseSchema.shape, key)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `\"${key}\" is a built-in frontmatter field and cannot be redeclared via frontmatter.extend.`,\n path: [key],\n });\n }\n }\n }),\n});\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.strictObject({\n maxHeadingLevel: z.number().int().min(1).max(6).optional(),\n minHeadingLevel: z.number().int().min(1).max(6).optional(),\n }),\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 // Checked after defaults apply, so `{ minHeadingLevel: 5 }` (default max 3)\n // is caught too — an inverted range would silently render an empty TOC.\n .refine((value) => value.minLevel <= value.maxLevel, {\n message:\n \"toc.minHeadingLevel must be less than or equal to toc.maxHeadingLevel.\",\n });\n\nexport const blumeConfigSchema = z.strictObject({\n ai: aiConfigSchema.default({}),\n analytics: analyticsConfigSchema.optional(),\n asyncapi: asyncapiConfigSchema.default({}),\n banner: bannerConfigSchema.optional(),\n /**\n * Site-wide mount point prepended to every generated route (e.g. `/docs`),\n * while staying invisible to the sidebar/nav tree. Distinct from a per-source\n * `prefix` (which creates a group) and from `deployment.base` (Astro's\n * host-subdirectory base); the two compose. Normalized to `\"\"` or `/seg`.\n */\n basePath: z\n .string()\n .optional()\n .transform((value) => normalizeBasePath(value)),\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 * A string is shorthand for `{ source }` — the directory (or glob, for\n * colocated registry layouts) under the project root that holds example\n * files. The object form adds `css`: a stylesheet injected into every\n * preview frame (design tokens, shadcn variables, `@theme` mappings).\n */\n examples: examplesConfigSchema.default(\"examples\"),\n export: exportConfigSchema.default(false),\n feedback: z.boolean().default(true),\n /** Opt-in custom frontmatter keys, validated by user-supplied schemas. */\n frontmatter: frontmatterConfigSchema.default({}),\n github: githubConfigSchema.optional(),\n i18n: i18nConfigSchema.optional(),\n lastModified: lastModifiedConfigSchema.default(false),\n logo: logoConfigSchema.optional(),\n markdown: markdownConfigSchema.default({}),\n navigation: navigationConfigSchema.default({}),\n openapi: openapiConfigSchema.default({}),\n react: reactConfigSchema.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});\n\n/** Resolved config: every field present after defaults are applied. */\nexport type ResolvedConfig = z.infer<typeof blumeConfigSchema>;\n/** Resolved `frontmatter.extend`: custom key → user-supplied schema. */\nexport type FrontmatterExtend = Record<string, StandardSchema>;\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/**\n * User-authored config, straight off the schema. The public, hand-documented\n * authoring type is `BlumeConfig` in `./config-input.ts`, which a compile-time\n * guard keeps structurally identical to this.\n */\nexport type BlumeConfigInput = z.input<typeof blumeConfigSchema>;\n/** A configured search backend. */\nexport type SearchProvider = (typeof searchProviders)[number];\n/** Resolved robots.txt `Content-Signal` preferences (`null` when disabled). */\nexport type ContentSignals = z.infer<typeof contentSignalsSchema>;\n/** The resolved per-signal policy object (present when signals are enabled). */\nexport type ContentSignalPolicy = NonNullable<ContentSignals>;\n",
|
|
58
58
|
"/**\n * Normalize an X account to the leading `@` that `twitter:site`/`twitter:creator`\n * require, so `acme`, `@acme`, and ` @acme ` all land on `@acme`. Empty or\n * blank input yields undefined, which renders no tag at all.\n *\n * The layouts call this on values that never passed through the config schema:\n * Astro's collections carry no schema here, so a page's `seo.x.creator` reaches\n * them as raw frontmatter, and the schema's own transform never runs on it.\n * (Blume's page pipeline does reject a non-string `creator` before the page is\n * built, so `unknown` is defense in depth rather than the expected path.)\n */\nexport const normalizeXHandle = (value: unknown): string | undefined => {\n if (typeof value !== \"string\") {\n return;\n }\n const handle = value.trim().replace(/^@+/u, \"\");\n return handle ? `@${handle}` : undefined;\n};\n",
|
|
59
59
|
"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 copyCode: z.string().default(\"Copy code\"),\n copyCodex: z.string().default(\"Copy Codex 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 export: z.string().default(\"Export\"),\n exportEpub: z.string().default(\"Export to EPUB\"),\n exportPdf: z.string().default(\"Export to PDF\"),\n generating: z.string().default(\"Generating…\"),\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 ai: z.string().default(\"AI\"),\n clear: z.string().default(\"Clear conversation\"),\n close: z.string().default(\"Close\"),\n copy: z.string().default(\"Copy conversation\"),\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 tip: z.string().default(\"Tip: You can open and close chat with\"),\n title: z.string().default(\"Ask AI\"),\n you: z.string().default(\"You\"),\n })\n .default({}),\n banner: z\n .object({\n dismiss: z.string().default(\"Dismiss announcement\"),\n })\n .default({}),\n changelog: z\n .object({\n description: z\n .string()\n .default(\n \"Product updates, new features, and fixes from every release.\"\n ),\n // `{version}` is replaced with the major line (\"2.x\") at render time.\n showReleases: z.string().default(\"Show {version} releases\"),\n title: z.string().default(\"Changelog\"),\n })\n .default({}),\n content: z\n .object({\n diagramError: z.string().default(\"Could not render this diagram.\"),\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 nav: z\n .object({\n back: z.string().default(\"Back\"),\n breadcrumb: z.string().default(\"Breadcrumb\"),\n closeNavigation: z.string().default(\"Close navigation\"),\n deprecated: z.string().default(\"deprecated\"),\n featured: z.string().default(\"Featured\"),\n githubRepository: z.string().default(\"GitHub repository\"),\n navigation: z.string().default(\"Navigation\"),\n primary: z.string().default(\"Primary\"),\n sections: z.string().default(\"Sections\"),\n toggleNavigation: z.string().default(\"Toggle navigation\"),\n toggleTheme: z.string().default(\"Toggle color theme\"),\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 pagination: z.string().default(\"Pagination\"),\n previous: z.string().default(\"Previous\"),\n skipToContent: z.string().default(\"Skip to content\"),\n })\n .default({}),\n search: z\n .object({\n all: z.string().default(\"All\"),\n allLanguages: z.string().default(\"All languages\"),\n askAi: z.string().default(\"Ask AI\"),\n askAiHint: z.string().default(\"Get an instant answer from AI\"),\n button: z.string().default(\"Search\"),\n devOnly: z\n .string()\n .default(\"Search is available in the production build.\"),\n error: z.string().default(\"Something went wrong. Please try again.\"),\n label: z.string().default(\"Search docs\"),\n navigate: z.string().default(\"navigate\"),\n noResults: z.string().default(\"No results found.\"),\n open: z.string().default(\"open\"),\n placeholder: z.string().default(\"Search documentation…\"),\n popular: z.string().default(\"Popular\"),\n preview: z.string().default(\"preview\"),\n results: z.string().default(\"Results\"),\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/**\n * The English baseline, derived from the schema defaults.\n *\n * Each group is passed explicitly as `{}` rather than parsing a bare `{}`: a\n * group's `.default({})` only re-applies its inner field defaults when the group\n * is *present but empty*. Zod 4 changed `.default()` to return the literal\n * default value without re-parsing it through the inner type, so a bare\n * `parse({})` leaves every group undefined and collapses each to `{}` there.\n * Because these components resolve Zod from the consuming project — which may be\n * on v4 while the CLI bundles v3 — the runtime baseline would silently render\n * blank (empty search labels, aria-labels, skip link). Naming every group keeps\n * the baseline fully populated on both Zod 3 and 4.\n */\nconst EN_UI_INPUT: Record<string, unknown> = Object.fromEntries(\n Object.keys(uiStringsObject.shape).map((group) => [group, {}])\n);\nexport const EN_UI: UIStrings = uiStringsObject.parse(EN_UI_INPUT);\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 } from \"./ui-packs/index.ts\";\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",
|
|
60
60
|
"import type { UIStringsOverride } from \"../i18n-ui.ts\";\n\n/** Arabic (ar) UI strings. */\nexport const ar: UIStringsOverride = {\n actions: {\n addToCursor: \"إضافة إلى Cursor\",\n addToVscode: \"إضافة إلى VS Code\",\n askAI: \"اسأل الذكاء الاصطناعي عن هذه الصفحة\",\n connectMcp: \"الاتصال بـ MCP\",\n copied: \"تم النسخ!\",\n copyClaudeCode: \"نسخ أمر Claude Code\",\n copyMarkdown: \"نسخ بصيغة Markdown\",\n copyServerUrl: \"نسخ عنوان URL للخادم\",\n edit: \"التعديل على GitHub\",\n openInChat: \"فتح في المحادثة\",\n scrollToTop: \"العودة إلى الأعلى\",\n },\n ask: {\n empty: \"اطرح سؤالاً حول الوثائق.\",\n error: \"عذراً، حدث خطأ ما.\",\n label: \"اطرح سؤالاً\",\n placeholder: \"اطرح سؤالاً…\",\n send: \"إرسال\",\n title: \"اسأل الذكاء الاصطناعي\",\n },\n banner: { dismiss: \"إغلاق الإعلان\" },\n changelog: {\n description: \"تحديثات المنتج وملاحظات الإصدارات.\",\n title: \"سجل التغييرات\",\n },\n feedback: {\n no: \"لا\",\n question: \"هل كانت هذه الصفحة مفيدة؟\",\n thanks: \"شكراً على ملاحظاتك!\",\n yes: \"نعم\",\n },\n languageSwitcher: { label: \"اللغة\", untranslated: \"غير مترجم\" },\n nav: { breadcrumb: \"مسار التنقل\" },\n page: {\n lastUpdated: \"آخر تحديث في\",\n next: \"التالي\",\n pagination: \"ترقيم الصفحات\",\n previous: \"السابق\",\n skipToContent: \"الانتقال إلى المحتوى\",\n },\n search: {\n all: \"الكل\",\n button: \"بحث\",\n devOnly: \"البحث متاح في إصدار الإنتاج.\",\n label: \"البحث في الوثائق\",\n noResults: \"لم يتم العثور على نتائج.\",\n placeholder: \"البحث في الوثائق…\",\n },\n toc: { title: \"في هذه الصفحة\" },\n};\n",
|
|
@@ -98,8 +98,8 @@
|
|
|
98
98
|
"import type { ResolvedConfig, ResolvedI18nConfig } from \"./schema.ts\";\nimport type { Diagnostic, PageRecord } from \"./types.ts\";\nimport { UI_PACKS } from \"./ui-packs/index.ts\";\n\n/**\n * Locale logic, centralized. Every seam that needs to reason about locales\n * (content discovery, navigation, manifest, runtime generation, the catch-all)\n * goes through these helpers so the routing rules live in exactly one place.\n */\n\n/** Locale codes Blume recognizes (those it ships a UI pack for, plus English). */\nconst KNOWN_LOCALES = new Set(\n [...Object.keys(UI_PACKS), \"en\"].map((code) => code.toLowerCase())\n);\n\n/** True when the project opts into i18n. */\nexport const i18nEnabled = (\n config: ResolvedConfig\n): config is ResolvedConfig & { i18n: ResolvedI18nConfig } =>\n config.i18n !== undefined;\n\n/** All configured locale codes, default first as authored. */\nexport const localeCodes = (i18n: ResolvedI18nConfig): string[] =>\n i18n.locales.map((locale) => locale.code);\n\n/** Text direction for a locale (`ltr` when unknown). */\nexport const localeDir = (\n code: string,\n i18n: ResolvedI18nConfig\n): \"ltr\" | \"rtl\" =>\n i18n.locales.find((locale) => locale.code === code)?.dir ?? \"ltr\";\n\n/**\n * The locale a missing translation falls back to: `fallbackLocale` when set,\n * the default locale when `fallbackLocale` is omitted, or `null` (disabled)\n * when explicitly set to `null`.\n */\nexport const resolveFallbackLocale = (\n i18n: ResolvedI18nConfig\n): string | null => {\n if (i18n.fallbackLocale === null) {\n return null;\n }\n return i18n.fallbackLocale ?? i18n.defaultLocale;\n};\n\n/** URL prefix for a locale: `\"\"` for the hidden default, else `/<code>`. */\nexport const localePrefix = (code: string, i18n: ResolvedI18nConfig): string =>\n code === i18n.defaultLocale && i18n.hideDefaultLocalePrefix ? \"\" : `/${code}`;\n\n/**\n * Prefix a locale-agnostic route (e.g. `/guides/x` or `/`) with its locale.\n * `/` becomes `/fr` (or stays `/` for the hidden default).\n */\nexport const localizeRoute = (\n logicalRoute: string,\n code: string,\n i18n: ResolvedI18nConfig\n): string => {\n const prefix = localePrefix(code, i18n);\n if (!prefix) {\n return logicalRoute;\n }\n return logicalRoute === \"/\" ? prefix : `${prefix}${logicalRoute}`;\n};\n\n/**\n * Detect a leading non-default locale directory in a path's segments. The\n * default locale lives at the content root, so only non-default codes are\n * matched as a leading segment. Returns the resolved locale and the remaining\n * (locale-stripped) segments.\n */\nexport const detectLocale = (\n parts: string[],\n i18n: ResolvedI18nConfig\n): { locale: string; rest: string[] } => {\n // BCP 47 codes are case-insensitive: a conventional lowercase folder\n // (`pt-br/`) must match a configured `pt-BR`. The configured casing is what\n // flows into routes and labels.\n const first = parts[0]?.toLowerCase();\n const matched = i18n.locales.find(\n (locale) =>\n locale.code !== i18n.defaultLocale && locale.code.toLowerCase() === first\n );\n if (matched) {\n return { locale: matched.code, rest: parts.slice(1) };\n }\n return { locale: i18n.defaultLocale, rest: parts };\n};\n\n/**\n * Resolve where a content file lives across locales, by parser:\n * - `dir`: a leading locale directory (`fr/page.mdx`)\n * - `dot`: a filename suffix (`page.fr.mdx`)\n *\n * A `.$.` infix (e.g. `changelog.$.mdx`) marks a shared, locale-agnostic file\n * that is materialized into every configured locale. Returns the locale-stripped\n * path (used for nav grouping) and the locale codes the file maps to (one for a\n * normal file, all locales for a shared one).\n */\nexport const localePlacement = (\n rel: string,\n ext: string,\n i18n: ResolvedI18nConfig\n): { navPath: string; locales: string[] } => {\n const base = rel.slice(0, rel.length - ext.length);\n\n // Shared `$` file: the same content in every locale.\n if (base.endsWith(\".$\")) {\n return {\n locales: i18n.locales.map((locale) => locale.code),\n navPath: `${base.slice(0, -2)}${ext}`,\n };\n }\n\n if (i18n.parser === \"dot\") {\n const lastDot = base.lastIndexOf(\".\");\n // Only a dot inside the filename (not a directory) is a locale suffix. Any\n // configured locale counts — including the default, so the symmetric\n // authoring `intro.en.mdx` + `intro.fr.mdx` shares one translation key\n // instead of routing the default file to a literal `/intro.en`.\n if (lastDot > base.lastIndexOf(\"/\")) {\n // Case-insensitive, like `detectLocale`: `intro.pt-br.mdx` matches a\n // configured `pt-BR` and adopts its casing.\n const suffix = base.slice(lastDot + 1).toLowerCase();\n const matched = i18n.locales.find(\n (locale) => locale.code.toLowerCase() === suffix\n );\n if (matched) {\n return {\n locales: [matched.code],\n navPath: `${base.slice(0, lastDot)}${ext}`,\n };\n }\n }\n return { locales: [i18n.defaultLocale], navPath: rel };\n }\n\n const { locale, rest } = detectLocale(rel.split(\"/\"), i18n);\n return { locales: [locale], navPath: rest.join(\"/\") };\n};\n\n/**\n * Warn about top-level content folders that look like a locale (a code Blume\n * recognizes) but aren't declared in `i18n.locales`. Without this they're\n * silently treated as default-locale content under a `/<code>/…` route, which\n * is almost never intended — usually a translation that wasn't registered.\n */\nexport const i18nDiagnostics = (\n pages: PageRecord[],\n i18n: ResolvedI18nConfig\n): Diagnostic[] => {\n const configured = new Set(\n i18n.locales.map((locale) => locale.code.toLowerCase())\n );\n const seen = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n for (const page of pages) {\n // The locale-looking folder is the first segment of the source-local ref\n // (e.g. `fr/guide.md`), not the namespaced id (`filesystem:fr/guide.md`).\n const first = page.source.ref.split(\"/\")[0]?.toLowerCase();\n if (\n first &&\n !seen.has(first) &&\n KNOWN_LOCALES.has(first) &&\n !configured.has(first)\n ) {\n seen.add(first);\n diagnostics.push({\n code: \"BLUME_I18N_UNCONFIGURED_LOCALE\",\n message: `Folder \"${first}/\" looks like a locale, but \"${first}\" is not in i18n.locales — its pages are treated as \"${i18n.defaultLocale}\" content at /${first}/….`,\n severity: \"warning\",\n suggestion: `Add { code: \"${first}\", label: \"…\" } to i18n.locales, or rename the folder if it isn't a translation.`,\n });\n }\n }\n return diagnostics;\n};\n",
|
|
99
99
|
"/**\n * Icon resolution backed by the open Iconify Lucide set. 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).\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 */\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 lucide: loadSet(\"@iconify-json/lucide/icons.json\"),\n};\n\n/** Blume's only icon library. */\nconst DEFAULT_SET = \"lucide\";\n\n/** Explicit `prefix:name` prefixes. Lucide is the only bundled set. */\nconst PREFIX_SETS: Record<string, string> = {\n lucide: \"lucide\",\n};\n\n/**\n * Own-property map lookup. Icon names come from content and config, so a value\n * like `constructor:x` would otherwise resolve an Object.prototype member (a\n * function) and crash resolution deep in the build with no pointer to the\n * 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 (Lucide is 24×24). */\n viewBox: string;\n}\n\nconst normalize = (name: string): string =>\n name\n .trim()\n .toLowerCase()\n .replaceAll(/[\\s_]+/gu, \"-\");\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/**\n * Resolve an icon name to inline SVG. Honors an explicit `lucide:name` prefix;\n * a bare name resolves against Lucide.\n */\nexport const resolveIcon = (name: string): 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 return setName ? fromSet(setName, normalized.slice(colon + 1)) : null;\n }\n return fromSet(DEFAULT_SET, normalized);\n};\n\n/**\n * Whether a name resolves to a renderable icon. Exactly mirrors\n * {@link resolveIcon}: a laxer check (e.g. matching the bare name under an\n * unknown prefix) would let callers suppress their fallback and diagnostics\n * for a name `<Icon>` then renders as nothing.\n */\nexport const hasIcon = (name: string): boolean => resolveIcon(name) !== null;\n",
|
|
100
100
|
"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 for (const link of navigation.featured) {\n push(link.icon, `featured link \"${link.label}\"`);\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). */\nconst unknownIconDiagnostics = (\n icons: { icon: string; where: string }[],\n suggestion: string\n): Diagnostic[] => {\n const seen = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n for (const { icon, where } of icons) {\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 });\n }\n return diagnostics;\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 unknownIconDiagnostics(\n collectIcons(navigation),\n \"Use a built-in icon name, an image path/URL, or inline SVG markup.\"\n );\n\n/**\n * Warn about unknown icons on curated `search.popular` links. Separate from\n * {@link validateNavIcons} because these live under `search`, not the built\n * navigation — and unlike nav icons they resolve in a *client* island, so only\n * set names work (an image/SVG icon quietly falls back to the file glyph).\n */\nexport const validateSearchPopularIcons = (\n popular: { icon?: string; label: string }[]\n): Diagnostic[] => {\n const icons = popular.flatMap((link) =>\n link.icon\n ? [{ icon: link.icon, where: `popular link \"${link.label}\"` }]\n : []\n );\n // Asset icons are valid in the nav, so the shared helper skips them — but\n // here they are exactly the silent failure this validator exists to catch.\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const { icon, where } of icons) {\n if (isAssetIcon(icon) && !seen.has(icon)) {\n seen.add(icon);\n diagnostics.push({\n code: \"BLUME_UNKNOWN_ICON\",\n message: `Icon \"${icon}\" (${where}) is an image or inline SVG — popular links render in the client search island, where only built-in icon names resolve, so it falls back to the file glyph.`,\n severity: \"warning\",\n suggestion: \"Use a built-in icon name.\",\n });\n }\n }\n return [\n ...diagnostics,\n ...unknownIconDiagnostics(icons, \"Use a built-in icon name.\"),\n ];\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 ...navigation.featured.map((link) => ({\n label: link.label,\n path: link.href,\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.flatMap((page) => (page.meta.sidebar.hidden ? [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",
|
|
101
|
-
"import { extname } from \"pathe\";\n\nimport { stripBasePath, withBasePath } from \"./base-path.ts\";\nimport type {\n FolderMeta,\n SidebarDisplay,\n SidebarItemConfig,\n} from \"./schema.ts\";\nimport type {\n FeaturedLink,\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 ? Math.trunc(Number(value)) : 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\n/**\n * Whether a filename stem is a directory index, ignoring an ordering prefix:\n * route mapping strips the prefix before dropping `index`, so `01-index` routes\n * exactly like `index` and must be treated as one here too.\n */\nconst isIndexStem = (stem: string): boolean =>\n stem.replace(NUMERIC_PREFIX, \"\") === \"index\";\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 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 (isIndexStem(filename.replace(extname(filename), \"\"))) {\n return Number.NEGATIVE_INFINITY;\n }\n // Changelog entries read newest-first, matching the generated timeline. Sort\n // on the negated publish timestamp so a later date yields a smaller order\n // under the ascending comparator; undated entries fall back to filename order.\n if (page.contentType === \"changelog\") {\n const iso = page.meta.date ?? page.meta.changelog?.date;\n const time = iso ? Date.parse(iso) : Number.NaN;\n if (!Number.isNaN(time)) {\n return -time;\n }\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\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\n/**\n * Hoist loose pages above groups so root-level pages read as top-level entries\n * rather than a group's trailing children (relative order otherwise preserved).\n * All display modes hoist the root level. Flat additionally recurses into every\n * group: there a group renders as a plain section header, so a loose page sorted\n * after a group would visually read as that group's last child.\n */\nconst hoistPages = (nodes: MutableNode[], recurse: boolean): void => {\n const pages = nodes.filter((node) => node.kind === \"page\");\n const groups = nodes.filter((node) => node.kind === \"group\");\n nodes.splice(0, nodes.length, ...pages, ...groups);\n if (recurse) {\n for (const group of groups) {\n hoistPages(group.children, recurse);\n }\n }\n};\n\n/**\n * With tabs configured, the sidebar shown under a tab is that tab-section\n * group's *children*, not the tree root — so hoisting only the root leaves a\n * tab section's loose pages interleaved with its groups. Hoist the top level of\n * every group that owns a tab (matched on its URL path), mirroring the root.\n */\nconst hoistTabSections = (\n nodes: MutableNode[],\n tabPaths: Set<string>,\n recurse: boolean\n): void => {\n for (const node of nodes) {\n if (node.kind !== \"group\") {\n continue;\n }\n if (node.routePath !== undefined && tabPaths.has(node.routePath)) {\n hoistPages(node.children, recurse);\n }\n hoistTabSections(node.children, tabPaths, recurse);\n }\n};\n\nconst toNavNode = (node: MutableNode, display: SidebarDisplay): 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((child) => toNavNode(child, display)),\n collapsed: node.collapsed,\n 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 display: SidebarDisplay,\n tabPaths: Set<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 stem = filename.replace(extname(filename), \"\");\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 // An index page's route IS its folder's route (no page segment to drop),\n // and `(group)` folders contribute no route segment at all.\n const routeSegments = page.route.split(\"/\").filter(Boolean);\n const folderParts = isIndexStem(stem)\n ? routeSegments\n : routeSegments.slice(0, -1);\n const routeDirCount = dirs.filter((dir) => !GROUP_FOLDER.test(dir)).length;\n const offset = Math.max(0, folderParts.length - routeDirCount);\n\n let parent = root;\n let consumed = offset;\n for (const dir of dirs) {\n parent = ensureGroup(parent, dir);\n if (!GROUP_FOLDER.test(dir)) {\n consumed += 1;\n }\n parent.routePath ??= `/${folderParts.slice(0, consumed).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(stem),\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 hoistPages(root.children, display === \"flat\");\n hoistTabSections(root.children, tabPaths, display === \"flat\");\n return root.children.map((child) => toNavNode(child, display));\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 basePath: string\n): string | undefined => {\n if (!ref) {\n return undefined;\n }\n const normalized = normalizeRef(ref);\n // A matched page carries an already-based `route`; an unmatched ref is an\n // author-written root-relative path that still needs the base applied.\n return byRoute.get(normalized)?.route ?? withBasePath(basePath, normalized);\n};\n\n/**\n * Convert one non-group explicit-config sidebar item (string ref, `root`, or\n * `href`) to a nav node, or null to skip. Group items (`item.items`) are handled\n * by `buildConfigSidebar` itself so it owns the recursion.\n */\nconst configItemToNode = (\n item: SidebarItemConfig,\n byRoute: Map<string, PageRecord>,\n basePath: string\n): NavNode | null => {\n if (typeof item === \"string\") {\n const page = byRoute.get(normalizeRef(item));\n if (!page) {\n return null;\n }\n return {\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\n if (item.root) {\n const page = byRoute.get(normalizeRef(item.root));\n return {\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 ?? withBasePath(basePath, normalizeRef(item.root)),\n };\n }\n\n if (item.href) {\n return {\n badge: item.badge,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: \"\",\n route: withBasePath(basePath, item.href),\n };\n }\n\n return null;\n};\n\n/** Build the sidebar tree from an explicit config spec. */\nconst buildConfigSidebar = (\n items: SidebarItemConfig[],\n byRoute: Map<string, PageRecord>,\n display: SidebarDisplay,\n basePath: string\n): NavNode[] => {\n const nodes: NavNode[] = [];\n for (const item of items) {\n if (typeof item !== \"string\" && item.items) {\n nodes.push({\n badge: item.badge,\n children: buildConfigSidebar(item.items, byRoute, display, basePath),\n collapsed: item.collapsed,\n directory: item.directory,\n display: item.display ?? display,\n icon: item.icon,\n kind: \"group\",\n label: item.label,\n route: routeForRef(item.root, byRoute, basePath),\n });\n continue;\n }\n const node = configItemToNode(item, byRoute, basePath);\n if (node) {\n nodes.push(node);\n }\n }\n return nodes;\n};\n\n/**\n * Resolve a tab's clickable target. A tab's `path` scopes its sidebar section\n * but need not be a real route — a section with no index page would 404 if the\n * tab linked straight to it. Prefer an exact page/group at the path; otherwise\n * fall back to the first linkable route in the section (sidebar order).\n */\nconst resolveTabHref = (sidebar: NavNode[], path: string): string => {\n let first: string | undefined;\n const walk = (nodes: NavNode[]): boolean => {\n for (const node of nodes) {\n const { route } = node;\n if (route === path) {\n return true;\n }\n if (\n first === undefined &&\n route !== undefined &&\n route.startsWith(`${path}/`)\n ) {\n first = route;\n }\n if (node.kind === \"group\" && walk(node.children)) {\n return true;\n }\n }\n return false;\n };\n return walk(sidebar) ? path : (first ?? path);\n};\n\n/** Attach a resolved `href` to each tab whose section has no index page. */\nconst withTabHrefs = (tabs: NavTab[], sidebar: NavNode[]): NavTab[] =>\n tabs.map((tab) => {\n const href = resolveTabHref(sidebar, tab.path);\n return href === tab.path ? tab : { ...tab, href };\n });\n\n/** Build the complete navigation model from pages, meta, and config. */\nexport const buildNavigation = (\n pages: PageRecord[],\n options: {\n /** Site-wide route mount point (`\"\"` or `/seg`); applied to config paths. */\n basePath?: string;\n folderMeta: Map<string, FolderMeta>;\n /** Global display mode for every sidebar group (default `flat`). */\n display?: SidebarDisplay;\n featured?: FeaturedLink[];\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 * The tree's root route before `basePath` (`\"/\"`, or the locale prefix\n * under i18n, e.g. `/fr` — tab paths arrive already localized). The tab\n * pointing here spans the whole tree, so it is excluded from tab-section\n * scoping.\n */\n localizedRoot?: string;\n }\n): Navigation => {\n const basePath = options.basePath ?? \"\";\n const display = options.display ?? \"flat\";\n const metaPrefix = options.metaPrefix ?? \"\";\n const sharedFolderMeta = options.sharedFolderMeta ?? new Map();\n\n // Config-provided nav paths are authored as if mounted at root, so the base\n // is applied here (idempotently, and only to internal paths — external URLs\n // pass through). Content-derived sidebar routes are already based via\n // `page.route`. The based tab paths also feed tab-scoping below, so they must\n // agree with the based content routes. With no base, this is a pure pass-\n // through — the arrays keep their exact authored shape.\n const rebasePath = <T extends { path: string }>(item: T): T => ({\n ...item,\n path: withBasePath(basePath, item.path),\n });\n const featured = basePath\n ? (options.featured ?? []).map((link) => ({\n ...link,\n href: withBasePath(basePath, link.href),\n }))\n : (options.featured ?? []);\n const selectors = basePath\n ? (options.selectors ?? []).map((selector) => ({\n ...selector,\n items: selector.items.map(rebasePath),\n }))\n : (options.selectors ?? []);\n const tabs = basePath\n ? (options.tabs ?? []).map((tab) => ({\n ...tab,\n items: tab.items?.map(rebasePath),\n path: withBasePath(basePath, tab.path),\n }))\n : (options.tabs ?? []);\n const byRoute = new Map(\n pages.map((page) => [\n options.refByLogical ? page.translationKey : page.route,\n page,\n ])\n );\n // Explicit-sidebar refs (`\"foo/index\"`) are authored as if mounted at root,\n // but `page.route` carries the base — alias each page under its base-less\n // route so a bare ref still resolves. (The i18n `refByLogical` map is already\n // keyed by the base-less `translationKey`, so it needs no alias.)\n if (basePath && !options.refByLogical) {\n for (const page of pages) {\n const bare = stripBasePath(basePath, page.route);\n if (!byRoute.has(bare)) {\n byRoute.set(bare, page);\n }\n }\n }\n\n if (options.sidebar) {\n const sidebar = buildConfigSidebar(\n options.sidebar,\n byRoute,\n display,\n basePath\n );\n return {\n featured,\n selectors,\n sidebar,\n tabs: withTabHrefs(tabs, sidebar),\n };\n }\n\n // A tab pointing at the tree root spans the whole sidebar rather than one\n // section, so it must not feed tab-section hoisting. `tabs` carries final\n // paths (localized, then based), so the root is compared in the same space —\n // a root-level `(group)` folder's routePath is exactly the based/localized\n // prefix (`/docs`, `/fr`) and a bare `\"/\"` check would miss the match (or,\n // under a base, falsely scope a group named like the prefix).\n const rootTabPath = withBasePath(basePath, options.localizedRoot ?? \"/\");\n const sidebar = buildFileSystemSidebar(\n pages,\n options.folderMeta,\n sharedFolderMeta,\n metaPrefix,\n display,\n new Set(tabs.flatMap((tab) => (tab.path === rootTabPath ? [] : [tab.path])))\n );\n return {\n featured,\n selectors,\n sidebar,\n tabs: withTabHrefs(tabs, sidebar),\n };\n};\n",
|
|
102
|
-
"import { withBasePath } from \"./base-path.ts\";\nimport { 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\ninterface BuildContentGraphOptions {\n /** Site-wide route mount point (`\"\"` or `/seg`); invisible to the nav tree. */\n basePath?: string;\n folderMeta: Map<string, FolderMeta>;\n sharedFolderMeta?: Map<string, FolderMeta>;\n navigation: ResolvedConfig[\"navigation\"];\n i18n?: ResolvedI18nConfig;\n}\n\ntype FallbackLocale = ReturnType<typeof resolveFallbackLocale>;\n\n/** Build the route → page-id map, flagging any duplicate-route collisions. */\nconst collectRoutes = (\n pages: PageRecord[]\n): { diagnostics: Diagnostic[]; routes: Map<string, string> } => {\n const routes = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\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 return { diagnostics, routes };\n};\n\n/**\n * A locale's pages, padded with fallback-locale entries for any translation it\n * hasn't authored yet, so navigation mirrors the default structure instead of\n * showing an empty (or partial) tree.\n */\nconst localePagesFor = (\n code: string,\n real: PageRecord[],\n fallback: FallbackLocale,\n fallbackByKey: Map<string, PageRecord>,\n i18n: ResolvedI18nConfig,\n basePath: string\n): PageRecord[] => {\n if (!(fallback && code !== fallback)) {\n return real;\n }\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: withBasePath(basePath, localizeRoute(key, code, i18n)),\n });\n }\n }\n return [...real, ...filled];\n};\n\n/** Build one locale's navigation tree from its own pages and folder meta. */\nconst buildLocaleNavigation = (\n code: string,\n pages: PageRecord[],\n fallback: FallbackLocale,\n fallbackByKey: Map<string, PageRecord>,\n options: BuildContentGraphOptions,\n i18n: ResolvedI18nConfig\n): Navigation => {\n // Localize internal tab paths — the tab's own and its dropdown items' — so a\n // header tab points to its in-locale route (e.g. `/docs` -> `/fr/docs`);\n // external paths pass through. Selectors are left alone: a language\n // selector's items intentionally target specific locales.\n const localizePath = (path: string): string =>\n path.startsWith(\"/\") ? localizeRoute(path, code, i18n) : path;\n const tabs = options.navigation.tabs?.map((tab) => ({\n ...tab,\n items: tab.items?.map((item) => ({\n ...item,\n path: localizePath(item.path),\n })),\n path: localizePath(tab.path),\n }));\n const real = pages.filter((page) => page.locale === code);\n const localePages = localePagesFor(\n code,\n real,\n fallback,\n fallbackByKey,\n i18n,\n options.basePath ?? \"\"\n );\n return buildNavigation(localePages, {\n basePath: options.basePath ?? \"\",\n display: options.navigation.sidebar.display,\n featured: options.navigation.featured,\n folderMeta: options.folderMeta,\n // The localized tree root (\"/\" for the hidden default, \"/fr\" otherwise):\n // the tab pointing here spans the whole tree and must not be treated as a\n // tab section.\n localizedRoot: localizeRoute(\"/\", code, i18n),\n // Meta files live in locale directories only under the `dir` parser\n // (`fr/guides/meta.ts` -> key `fr/guides`). Under `dot`, translations sit\n // next to the originals and `guides/meta.ts` applies to every locale —\n // 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.items,\n tabs,\n });\n};\n\n/** Per-locale navigation trees plus the default-locale tree for i18n sites. */\nconst buildI18nNavigation = (\n pages: PageRecord[],\n options: BuildContentGraphOptions,\n i18n: ResolvedI18nConfig\n): {\n navigation: Navigation;\n navigationByLocale: Record<string, Navigation>;\n} => {\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.\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, so navigation may diverge per language.\n const navigationByLocale: Record<string, Navigation> = {};\n for (const { code } of i18n.locales) {\n navigationByLocale[code] = buildLocaleNavigation(\n code,\n pages,\n fallback,\n fallbackByKey,\n options,\n i18n\n );\n }\n const navigation = navigationByLocale[i18n.defaultLocale] ?? {\n featured: [],\n selectors: [],\n sidebar: [],\n tabs: [],\n };\n return { navigation, navigationByLocale };\n};\n\n/** Assemble the content graph: routes map, nav, and duplicate diagnostics. */\nexport const buildContentGraph = (\n pages: PageRecord[],\n options: BuildContentGraphOptions\n): ContentGraph => {\n const { diagnostics, routes } = collectRoutes(pages);\n const { i18n } = options;\n\n const { navigation, navigationByLocale } = i18n\n ? buildI18nNavigation(pages, options, i18n)\n : {\n navigation: buildNavigation(pages, {\n basePath: options.basePath ?? \"\",\n display: options.navigation.sidebar.display,\n featured: options.navigation.featured,\n folderMeta: options.folderMeta,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar.items,\n tabs: options.navigation.tabs,\n }),\n navigationByLocale: {} as Record<string, Navigation>,\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(\n ...validateNavIcons(navigation),\n ...validateNavStructure(navigation, pages)\n );\n\n return {\n diagnostics,\n navigation,\n navigationByLocale,\n pages,\n routes,\n };\n};\n",
|
|
101
|
+
"import { extname } from \"pathe\";\n\nimport { stripBasePath, withBasePath } from \"./base-path.ts\";\nimport type {\n FolderMeta,\n SidebarDisplay,\n SidebarItemConfig,\n} from \"./schema.ts\";\nimport type {\n Diagnostic,\n FeaturedLink,\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 ? Math.trunc(Number(value)) : 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\n/**\n * Whether a filename stem is a directory index, ignoring an ordering prefix:\n * route mapping strips the prefix before dropping `index`, so `01-index` routes\n * exactly like `index` and must be treated as one here too.\n */\nconst isIndexStem = (stem: string): boolean =>\n stem.replace(NUMERIC_PREFIX, \"\") === \"index\";\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 /** Absolute source path (filesystem adapter only), to anchor diagnostics. */\n file?: string;\n order: number;\n /**\n * Whether `order` reflects a deliberate authoring choice (explicit\n * `sidebar.order`, a numeric filename prefix, or a folder-meta `pages` rank)\n * rather than a derived value like a changelog entry's publish date — two\n * changelog entries published on the same day aren't an authoring mistake,\n * so they're excluded from the duplicate-order diagnostic.\n */\n orderIsAuthored: boolean;\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 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 = (\n page: PageRecord,\n filename: string\n): { order: number; orderIsAuthored: boolean } => {\n if (page.meta.sidebar.order !== undefined) {\n return { order: page.meta.sidebar.order, orderIsAuthored: true };\n }\n if (isIndexStem(filename.replace(extname(filename), \"\"))) {\n return { order: Number.NEGATIVE_INFINITY, orderIsAuthored: false };\n }\n // Changelog entries read newest-first, matching the generated timeline. Sort\n // on the negated publish timestamp so a later date yields a smaller order\n // under the ascending comparator; undated entries fall back to filename order.\n // The date is derived, not an authoring choice, so same-day entries aren't a\n // duplicate-order mistake.\n if (page.contentType === \"changelog\") {\n const iso = page.meta.date ?? page.meta.changelog?.date;\n const time = iso ? Date.parse(iso) : Number.NaN;\n if (!Number.isNaN(time)) {\n return { order: -time, orderIsAuthored: false };\n }\n }\n // An undated changelog entry's numeric filename prefix is usually a date\n // (`2024-01-05-release.md`) rather than a rank, so it is derived too.\n const order = numericOrder(filename);\n return {\n order,\n orderIsAuthored: page.contentType !== \"changelog\" && Number.isFinite(order),\n };\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\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 if (child.kind === \"page\") {\n child.orderIsAuthored = true;\n }\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\n/**\n * Warn when an index page's own frontmatter title diverges from its folder's\n * explicit `meta.title`. The sidebar label and the page's own `<title>`/heading\n * are resolved from two independent sources — under i18n, a translator can\n * update the folder's `meta.ts` and forget the index page's own frontmatter\n * (or vice versa), and a correct-looking sidebar hides the mismatch.\n *\n * Only fires when the page has an explicit frontmatter `title` of its own:\n * when it's absent, `page.title` is derived from the first heading or the\n * filename, so it almost never coincidentally matches a custom folder title —\n * flagging that would be noise on exactly the plain-landing-page case this is\n * least worth warning about. The root group's `meta.title` (an empty\n * `folderPath`) is also skipped: nothing ever renders it as a sidebar label,\n * so a mismatch there wouldn't correspond to anything visible.\n *\n * Fallback-filled pages are exempt: their title belongs to the fallback\n * locale, so comparing it against this locale's `meta.title` would flag every\n * not-yet-translated index page (once per locale) and point the suggestion at\n * the fallback locale's source file, where \"fixing\" it would break that\n * locale. The default locale's own build still checks the real page.\n */\nconst indexTitleMismatchDiagnostic = (\n page: PageRecord,\n folderPath: string,\n folderMeta: Map<string, FolderMeta>,\n sharedMeta: Map<string, FolderMeta>,\n metaPrefix: string\n): Diagnostic | undefined => {\n if (!page.meta.title || page.fallback || folderPath === \"\") {\n return undefined;\n }\n const meta =\n folderMeta.get(metaKey(folderPath, metaPrefix)) ??\n sharedMeta.get(folderPath);\n if (!meta?.title || meta.title === page.title) {\n return undefined;\n }\n return {\n code: \"BLUME_NAV_INDEX_TITLE_MISMATCH\",\n file: page.sourcePath ?? page.id,\n message: `Index page \"${page.navPath}\" has title \"${page.title}\", but its folder's meta.title is \"${meta.title}\" — the sidebar shows the folder title while the page's own <title>/heading still say \"${page.title}\".`,\n severity: \"warning\",\n suggestion: `Update the page's frontmatter title to match (\"${meta.title}\"), or leave it if the divergence is intentional.`,\n };\n};\n\n/** Whether a node's `order` reflects a deliberate authoring choice. */\nconst isAuthoredOrder = (node: MutableNode): boolean =>\n node.kind === \"group\" || node.orderIsAuthored;\n\n/**\n * Warn when two sibling nodes share an explicit/numeric order (frontmatter\n * `sidebar.order`, a numeric filename prefix, or folder-meta `order`) — they'd\n * otherwise fall back to a silent, arbitrary alphabetical tiebreak. Nodes at\n * the default fallback order (no numeric prefix, no explicit order) are\n * excluded: that's the common, intentional case of \"just sort alphabetically.\"\n * So is a derived, non-authored order (e.g. two changelog entries published\n * on the same day) — not an authoring mistake.\n */\nconst duplicateOrderDiagnostics = (nodes: MutableNode[]): Diagnostic[] => {\n const byOrder = new Map<number, MutableNode[]>();\n for (const node of nodes) {\n if (!Number.isFinite(node.order) || !isAuthoredOrder(node)) {\n continue;\n }\n const tied = byOrder.get(node.order);\n if (tied) {\n tied.push(node);\n } else {\n byOrder.set(node.order, [node]);\n }\n }\n const diagnostics: Diagnostic[] = [];\n for (const [order, tied] of byOrder) {\n if (tied.length > 1) {\n const names = tied.map((node) => `\"${node.label}\"`);\n const list =\n names.length > 2\n ? `${names.slice(0, -1).join(\", \")}, and ${names.at(-1)}`\n : names.join(\" and \");\n const verb = tied.length > 2 ? \"all have\" : \"both have\";\n // Anchor the diagnostic to one tied source file so tooling can point\n // somewhere concrete; the message names the rest. Folder-only ties\n // (folder-meta `order`) have no single file, so `file` stays unset.\n const file = tied.find(\n (node): node is MutablePage => node.kind === \"page\"\n )?.file;\n diagnostics.push({\n code: \"BLUME_DUPLICATE_SIDEBAR_ORDER\",\n file,\n message: `${list} ${verb} sidebar order ${order}; falling back to alphabetical order.`,\n severity: \"warning\",\n suggestion:\n \"Give each item a distinct sidebar.order (or folder meta order).\",\n });\n }\n }\n return diagnostics;\n};\n\nconst sortNodes = (nodes: MutableNode[], diagnostics: Diagnostic[]): void => {\n diagnostics.push(...duplicateOrderDiagnostics(nodes));\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, diagnostics);\n }\n }\n};\n\n/**\n * Hoist loose pages above groups so root-level pages read as top-level entries\n * rather than a group's trailing children (relative order otherwise preserved).\n * All display modes hoist the root level. Flat additionally recurses into every\n * group: there a group renders as a plain section header, so a loose page sorted\n * after a group would visually read as that group's last child.\n */\nconst hoistPages = (nodes: MutableNode[], recurse: boolean): void => {\n const pages = nodes.filter((node) => node.kind === \"page\");\n const groups = nodes.filter((node) => node.kind === \"group\");\n nodes.splice(0, nodes.length, ...pages, ...groups);\n if (recurse) {\n for (const group of groups) {\n hoistPages(group.children, recurse);\n }\n }\n};\n\n/**\n * With tabs configured, the sidebar shown under a tab is that tab-section\n * group's *children*, not the tree root — so hoisting only the root leaves a\n * tab section's loose pages interleaved with its groups. Hoist the top level of\n * every group that owns a tab (matched on its URL path), mirroring the root.\n */\nconst hoistTabSections = (\n nodes: MutableNode[],\n tabPaths: Set<string>,\n recurse: boolean\n): void => {\n for (const node of nodes) {\n if (node.kind !== \"group\") {\n continue;\n }\n if (node.routePath !== undefined && tabPaths.has(node.routePath)) {\n hoistPages(node.children, recurse);\n }\n hoistTabSections(node.children, tabPaths, recurse);\n }\n};\n\nconst toNavNode = (node: MutableNode, display: SidebarDisplay): 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((child) => toNavNode(child, display)),\n collapsed: node.collapsed,\n 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 display: SidebarDisplay,\n tabPaths: Set<string>,\n diagnostics: Diagnostic[] = []\n): NavNode[] => {\n const root = createGroup(\"\", \"\", \"\", 0);\n\n for (const page of pages) {\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 stem = filename.replace(extname(filename), \"\");\n const dirs = parts.slice(0, -1);\n\n // Checked before the hidden filter: a sidebar-hidden index page still\n // renders with its own <title>, so title drift matters there just the same.\n if (isIndexStem(stem)) {\n const diagnostic = indexTitleMismatchDiagnostic(\n page,\n dirs.join(\"/\"),\n folderMeta,\n sharedMeta,\n metaPrefix\n );\n if (diagnostic) {\n diagnostics.push(diagnostic);\n }\n }\n\n if (page.meta.sidebar.hidden) {\n continue;\n }\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 // An index page's route IS its folder's route (no page segment to drop),\n // and `(group)` folders contribute no route segment at all.\n const routeSegments = page.route.split(\"/\").filter(Boolean);\n const folderParts = isIndexStem(stem)\n ? routeSegments\n : routeSegments.slice(0, -1);\n const routeDirCount = dirs.filter((dir) => !GROUP_FOLDER.test(dir)).length;\n const offset = Math.max(0, folderParts.length - routeDirCount);\n\n let parent = root;\n let consumed = offset;\n for (const dir of dirs) {\n parent = ensureGroup(parent, dir);\n if (!GROUP_FOLDER.test(dir)) {\n consumed += 1;\n }\n parent.routePath ??= `/${folderParts.slice(0, consumed).join(\"/\")}`;\n }\n\n const { order, orderIsAuthored } = pageOrder(page, filename);\n parent.children.push({\n badge: page.meta.sidebar.badge,\n deprecated: page.meta.deprecated || undefined,\n description: page.description,\n file: page.sourcePath,\n icon: page.meta.sidebar.icon,\n key: segmentKey(stem),\n kind: \"page\",\n label: page.meta.sidebar.label ?? page.title,\n order,\n orderIsAuthored,\n pageId: page.id,\n route: page.route,\n });\n }\n\n applyFolderMeta(root, folderMeta, sharedMeta, metaPrefix);\n sortNodes(root.children, diagnostics);\n hoistPages(root.children, display === \"flat\");\n hoistTabSections(root.children, tabPaths, display === \"flat\");\n return root.children.map((child) => toNavNode(child, display));\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 basePath: string\n): string | undefined => {\n if (!ref) {\n return undefined;\n }\n const normalized = normalizeRef(ref);\n // A matched page carries an already-based `route`; an unmatched ref is an\n // author-written root-relative path that still needs the base applied.\n return byRoute.get(normalized)?.route ?? withBasePath(basePath, normalized);\n};\n\n/**\n * Convert one non-group explicit-config sidebar item (string ref, `root`, or\n * `href`) to a nav node, or null to skip. Group items (`item.items`) are handled\n * by `buildConfigSidebar` itself so it owns the recursion.\n */\nconst configItemToNode = (\n item: SidebarItemConfig,\n byRoute: Map<string, PageRecord>,\n basePath: string\n): NavNode | null => {\n if (typeof item === \"string\") {\n const page = byRoute.get(normalizeRef(item));\n if (!page) {\n return null;\n }\n return {\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\n if (item.root) {\n const page = byRoute.get(normalizeRef(item.root));\n return {\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 ?? withBasePath(basePath, normalizeRef(item.root)),\n };\n }\n\n if (item.href) {\n return {\n badge: item.badge,\n icon: item.icon,\n kind: \"page\",\n label: item.label,\n pageId: \"\",\n route: withBasePath(basePath, item.href),\n };\n }\n\n return null;\n};\n\n/** Build the sidebar tree from an explicit config spec. */\nconst buildConfigSidebar = (\n items: SidebarItemConfig[],\n byRoute: Map<string, PageRecord>,\n display: SidebarDisplay,\n basePath: string\n): NavNode[] => {\n const nodes: NavNode[] = [];\n for (const item of items) {\n if (typeof item !== \"string\" && item.items) {\n nodes.push({\n badge: item.badge,\n children: buildConfigSidebar(item.items, byRoute, display, basePath),\n collapsed: item.collapsed,\n directory: item.directory,\n display: item.display ?? display,\n icon: item.icon,\n kind: \"group\",\n label: item.label,\n route: routeForRef(item.root, byRoute, basePath),\n });\n continue;\n }\n const node = configItemToNode(item, byRoute, basePath);\n if (node) {\n nodes.push(node);\n }\n }\n return nodes;\n};\n\n/**\n * Resolve a tab's clickable target. A tab's `path` scopes its sidebar section\n * but need not be a real route — a section with no index page would 404 if the\n * tab linked straight to it. Prefer an exact page/group at the path; otherwise\n * fall back to the first linkable route in the section (sidebar order).\n */\nconst resolveTabHref = (sidebar: NavNode[], path: string): string => {\n let first: string | undefined;\n const walk = (nodes: NavNode[]): boolean => {\n for (const node of nodes) {\n const { route } = node;\n if (route === path) {\n return true;\n }\n if (\n first === undefined &&\n route !== undefined &&\n route.startsWith(`${path}/`)\n ) {\n first = route;\n }\n if (node.kind === \"group\" && walk(node.children)) {\n return true;\n }\n }\n return false;\n };\n return walk(sidebar) ? path : (first ?? path);\n};\n\n/** Attach a resolved `href` to each tab whose section has no index page. */\nconst withTabHrefs = (tabs: NavTab[], sidebar: NavNode[]): NavTab[] =>\n tabs.map((tab) => {\n const href = resolveTabHref(sidebar, tab.path);\n return href === tab.path ? tab : { ...tab, href };\n });\n\n/** Build the complete navigation model from pages, meta, and config. */\nexport const buildNavigation = (\n pages: PageRecord[],\n options: {\n /** Site-wide route mount point (`\"\"` or `/seg`); applied to config paths. */\n basePath?: string;\n folderMeta: Map<string, FolderMeta>;\n /** Global display mode for every sidebar group (default `flat`). */\n display?: SidebarDisplay;\n featured?: FeaturedLink[];\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 * The tree's root route before `basePath` (`\"/\"`, or the locale prefix\n * under i18n, e.g. `/fr` — tab paths arrive already localized). The tab\n * pointing here spans the whole tree, so it is excluded from tab-section\n * scoping.\n */\n localizedRoot?: string;\n /**\n * Sink for diagnostics produced while building the tree (duplicate sidebar\n * `order` values, index-page title/folder-meta-title mismatches). Pushed\n * into in place; omit to discard.\n */\n diagnostics?: Diagnostic[];\n }\n): Navigation => {\n const basePath = options.basePath ?? \"\";\n const display = options.display ?? \"flat\";\n const metaPrefix = options.metaPrefix ?? \"\";\n const sharedFolderMeta = options.sharedFolderMeta ?? new Map();\n\n // Config-provided nav paths are authored as if mounted at root, so the base\n // is applied here (idempotently, and only to internal paths — external URLs\n // pass through). Content-derived sidebar routes are already based via\n // `page.route`. The based tab paths also feed tab-scoping below, so they must\n // agree with the based content routes. With no base, this is a pure pass-\n // through — the arrays keep their exact authored shape.\n const rebasePath = <T extends { path: string }>(item: T): T => ({\n ...item,\n path: withBasePath(basePath, item.path),\n });\n const featured = basePath\n ? (options.featured ?? []).map((link) => ({\n ...link,\n href: withBasePath(basePath, link.href),\n }))\n : (options.featured ?? []);\n const selectors = basePath\n ? (options.selectors ?? []).map((selector) => ({\n ...selector,\n items: selector.items.map(rebasePath),\n }))\n : (options.selectors ?? []);\n const tabs = basePath\n ? (options.tabs ?? []).map((tab) => ({\n ...tab,\n items: tab.items?.map(rebasePath),\n path: withBasePath(basePath, tab.path),\n }))\n : (options.tabs ?? []);\n const byRoute = new Map(\n pages.map((page) => [\n options.refByLogical ? page.translationKey : page.route,\n page,\n ])\n );\n // Explicit-sidebar refs (`\"foo/index\"`) are authored as if mounted at root,\n // but `page.route` carries the base — alias each page under its base-less\n // route so a bare ref still resolves. (The i18n `refByLogical` map is already\n // keyed by the base-less `translationKey`, so it needs no alias.)\n if (basePath && !options.refByLogical) {\n for (const page of pages) {\n const bare = stripBasePath(basePath, page.route);\n if (!byRoute.has(bare)) {\n byRoute.set(bare, page);\n }\n }\n }\n\n // A tab pointing at the tree root spans the whole sidebar rather than one\n // section, so it must not feed tab-section hoisting. `tabs` carries final\n // paths (localized, then based), so the root is compared in the same space —\n // a root-level `(group)` folder's routePath is exactly the based/localized\n // prefix (`/docs`, `/fr`) and a bare `\"/\"` check would miss the match (or,\n // under a base, falsely scope a group named like the prefix). Carried on the\n // returned navigation so render-time scoping compares in the same space too.\n const rootTabPath = withBasePath(basePath, options.localizedRoot ?? \"/\");\n\n if (options.sidebar) {\n const sidebar = buildConfigSidebar(\n options.sidebar,\n byRoute,\n display,\n basePath\n );\n return {\n featured,\n root: rootTabPath,\n selectors,\n sidebar,\n tabs: withTabHrefs(tabs, sidebar),\n };\n }\n\n const sidebar = buildFileSystemSidebar(\n pages,\n options.folderMeta,\n sharedFolderMeta,\n metaPrefix,\n display,\n new Set(\n tabs.flatMap((tab) => (tab.path === rootTabPath ? [] : [tab.path]))\n ),\n options.diagnostics\n );\n return {\n featured,\n root: rootTabPath,\n selectors,\n sidebar,\n tabs: withTabHrefs(tabs, sidebar),\n };\n};\n",
|
|
102
|
+
"import { withBasePath } from \"./base-path.ts\";\nimport { 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\ninterface BuildContentGraphOptions {\n /** Site-wide route mount point (`\"\"` or `/seg`); invisible to the nav tree. */\n basePath?: string;\n folderMeta: Map<string, FolderMeta>;\n sharedFolderMeta?: Map<string, FolderMeta>;\n navigation: ResolvedConfig[\"navigation\"];\n i18n?: ResolvedI18nConfig;\n}\n\ntype FallbackLocale = ReturnType<typeof resolveFallbackLocale>;\n\n/** Build the route → page-id map, flagging any duplicate-route collisions. */\nconst collectRoutes = (\n pages: PageRecord[]\n): { diagnostics: Diagnostic[]; routes: Map<string, string> } => {\n const routes = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\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 return { diagnostics, routes };\n};\n\n/**\n * A locale's pages, padded with fallback-locale entries for any translation it\n * hasn't authored yet, so navigation mirrors the default structure instead of\n * showing an empty (or partial) tree.\n */\nconst localePagesFor = (\n code: string,\n real: PageRecord[],\n fallback: FallbackLocale,\n fallbackByKey: Map<string, PageRecord>,\n i18n: ResolvedI18nConfig,\n basePath: string\n): PageRecord[] => {\n if (!(fallback && code !== fallback)) {\n return real;\n }\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 fallback: true,\n locale: code,\n route: withBasePath(basePath, localizeRoute(key, code, i18n)),\n });\n }\n }\n return [...real, ...filled];\n};\n\n/** Build one locale's navigation tree from its own pages and folder meta. */\nconst buildLocaleNavigation = (\n code: string,\n pages: PageRecord[],\n fallback: FallbackLocale,\n fallbackByKey: Map<string, PageRecord>,\n options: BuildContentGraphOptions,\n i18n: ResolvedI18nConfig,\n diagnostics: Diagnostic[]\n): Navigation => {\n // Localize internal tab paths — the tab's own and its dropdown items' — so a\n // header tab points to its in-locale route (e.g. `/docs` -> `/fr/docs`);\n // external paths pass through. Selectors are left alone: a language\n // selector's items intentionally target specific locales.\n const localizePath = (path: string): string =>\n path.startsWith(\"/\") ? localizeRoute(path, code, i18n) : path;\n const tabs = options.navigation.tabs?.map((tab) => ({\n ...tab,\n items: tab.items?.map((item) => ({\n ...item,\n path: localizePath(item.path),\n })),\n path: localizePath(tab.path),\n }));\n const real = pages.filter((page) => page.locale === code);\n const localePages = localePagesFor(\n code,\n real,\n fallback,\n fallbackByKey,\n i18n,\n options.basePath ?? \"\"\n );\n return buildNavigation(localePages, {\n basePath: options.basePath ?? \"\",\n diagnostics,\n display: options.navigation.sidebar.display,\n featured: options.navigation.featured,\n folderMeta: options.folderMeta,\n // The localized tree root (\"/\" for the hidden default, \"/fr\" otherwise):\n // the tab pointing here spans the whole tree and must not be treated as a\n // tab section.\n localizedRoot: localizeRoute(\"/\", code, i18n),\n // Meta files live in locale directories only under the `dir` parser\n // (`fr/guides/meta.ts` -> key `fr/guides`). Under `dot`, translations sit\n // next to the originals and `guides/meta.ts` applies to every locale —\n // 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.items,\n tabs,\n });\n};\n\n/** Per-locale navigation trees plus the default-locale tree for i18n sites. */\nconst buildI18nNavigation = (\n pages: PageRecord[],\n options: BuildContentGraphOptions,\n i18n: ResolvedI18nConfig,\n diagnostics: Diagnostic[]\n): {\n navigation: Navigation;\n navigationByLocale: Record<string, Navigation>;\n} => {\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.\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, so navigation may diverge per language.\n // Untranslated pages are padded into every locale from the fallback, so a tie\n // in shared content would otherwise be re-reported once per locale — dedupe on\n // code + file + message, which are all locale-stable for padded pages. A\n // locale-specific tie names its own translated files/labels and survives.\n const navigationByLocale: Record<string, Navigation> = {};\n const seen = new Set<string>();\n for (const { code } of i18n.locales) {\n const localeDiagnostics: Diagnostic[] = [];\n navigationByLocale[code] = buildLocaleNavigation(\n code,\n pages,\n fallback,\n fallbackByKey,\n options,\n i18n,\n localeDiagnostics\n );\n for (const diagnostic of localeDiagnostics) {\n const key = `${diagnostic.code}\\n${diagnostic.file ?? \"\"}\\n${diagnostic.message}`;\n if (!seen.has(key)) {\n seen.add(key);\n diagnostics.push(diagnostic);\n }\n }\n }\n const navigation = navigationByLocale[i18n.defaultLocale] ?? {\n featured: [],\n selectors: [],\n sidebar: [],\n tabs: [],\n };\n return { navigation, navigationByLocale };\n};\n\n/** Assemble the content graph: routes map, nav, and duplicate diagnostics. */\nexport const buildContentGraph = (\n pages: PageRecord[],\n options: BuildContentGraphOptions\n): ContentGraph => {\n const { diagnostics, routes } = collectRoutes(pages);\n const { i18n } = options;\n\n const { navigation, navigationByLocale } = i18n\n ? buildI18nNavigation(pages, options, i18n, diagnostics)\n : {\n navigation: buildNavigation(pages, {\n basePath: options.basePath ?? \"\",\n diagnostics,\n display: options.navigation.sidebar.display,\n featured: options.navigation.featured,\n folderMeta: options.folderMeta,\n selectors: options.navigation.selectors,\n sharedFolderMeta: options.sharedFolderMeta,\n sidebar: options.navigation.sidebar.items,\n tabs: options.navigation.tabs,\n }),\n navigationByLocale: {} as Record<string, Navigation>,\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(\n ...validateNavIcons(navigation),\n ...validateNavStructure(navigation, pages)\n );\n\n return {\n diagnostics,\n navigation,\n navigationByLocale,\n pages,\n routes,\n };\n};\n",
|
|
103
103
|
"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 given content roots\n * (each filesystem source's own root, which may diverge from `content.root`)\n * and maps repo-root-relative paths back to the given absolute paths\n * (monorepo-safe via `rev-parse --show-toplevel`). Returns an empty map if git\n * is unavailable or the project isn't a repo — the feature then simply shows\n * no dates.\n */\nexport const gitLastModifiedTimes = (\n root: string,\n contentRoots: string[],\n sourcePaths: string[]\n): Map<string, string> => {\n // Nothing to date — don't pay for a git scan (an empty pathspec list would\n // log the entire repository).\n if (sourcePaths.length === 0) {\n return new Map();\n }\n try {\n const gitRoot = execFileSync(\n // oxlint-disable-next-line sonarjs/no-os-command-from-path -- git is a required dev-tool dependency resolved from PATH\n \"git\",\n [\"-C\", root, \"rev-parse\", \"--show-toplevel\"],\n { encoding: \"utf-8\" }\n ).trim();\n const output = execFileSync(\n // oxlint-disable-next-line sonarjs/no-os-command-from-path -- git is a required dev-tool dependency resolved from PATH\n \"git\",\n [\n \"-C\",\n root,\n \"-c\",\n \"core.quotePath=false\",\n \"log\",\n \"--format=%x00%cI\",\n \"--name-only\",\n \"--\",\n ...contentRoots,\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",
|
|
104
104
|
"import { withBasePath } from \"./base-path.ts\";\nimport { 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/**\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 */\nconst buildFallbackRoutes = (\n graph: ContentGraph,\n i18n: NonNullable<ResolvedConfig[\"i18n\"]>,\n alternatesByKey: Map<string, RouteAlternate[]>,\n basePath: string\n): RouteManifestEntry[] => {\n const fallback = resolveFallbackLocale(i18n);\n if (!fallback) {\n return [];\n }\n const fallbackPages = new Map(\n graph.pages.flatMap((page) =>\n page.locale === fallback ? [[page.translationKey, page] as const] : []\n )\n );\n const routes: RouteManifestEntry[] = [];\n for (const { code } of i18n.locales) {\n if (code === fallback) {\n continue;\n }\n const present = new Set(\n graph.pages.flatMap((page) =>\n page.locale === code ? [page.translationKey] : []\n )\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: withBasePath(basePath, localizeRoute(key, code, i18n)),\n source: source.source,\n sourcePath: source.sourcePath,\n title: source.title,\n });\n }\n }\n return routes;\n};\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 if (i18n) {\n routes.push(\n ...buildFallbackRoutes(graph, i18n, alternatesByKey, config.basePath)\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",
|
|
105
105
|
"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/** A filesystem content source to scan for folder meta: its on-disk root and\n * optional route prefix. The prefix is folded into every key so meta lines up\n * with the sidebar group path, which carries the same prefix. */\nexport interface FolderMetaSource {\n root: string;\n prefix?: string;\n}\n\n/**\n * The folder-meta key for a directory. Mirrors the sidebar group path: the\n * source's route prefix (`docs`) followed by the directory relative to the\n * source root (`provider`) — so `docs/provider/meta.ts` under a `prefix: \"docs\"`\n * source keys to `docs/provider`, exactly the group path navigation builds.\n */\nconst metaKeyFor = (prefix: string | undefined, dir: string): string => {\n const clean = prefix ? prefix.replaceAll(/^\\/+|\\/+$/gu, \"\") : \"\";\n if (!clean) {\n return dir;\n }\n return dir ? `${clean}/${dir}` : clean;\n};\n\n/**\n * Discover `meta.{ts,js,mjs}` files across the given filesystem sources. Keys are\n * the source's route prefix joined with the directory relative to that source's\n * root (`\"\"`/the prefix itself for a source's root directory), so meta matches\n * the prefixed sidebar group path. A bare string is shorthand for a single,\n * unprefixed source (the default project layout). `meta.$.*` files are returned\n * in `shared` — folder meta that applies to that directory in every locale (a\n * locale-specific `meta.*` overrides it). Each file default-exports an object or\n * a (sync/async) function returning one.\n *\n * `localeDirs` names the top-level locale directories of a `dir`-parser i18n\n * project. Navigation looks locale meta up as `locale/<group path>` where the\n * group path starts with the source prefix, so a locale directory found at a\n * source root is hoisted in front of the prefix (`docs/fr/guides/meta.ts` keys\n * to `fr/docs/guides`, not `docs/fr/guides`).\n */\nexport const discoverFolderMeta = async (\n sources: string | FolderMetaSource[],\n options: { localeDirs?: readonly string[] } = {}\n): Promise<{\n meta: Map<string, FolderMeta>;\n shared: Map<string, FolderMeta>;\n diagnostics: Diagnostic[];\n}> => {\n const list: FolderMetaSource[] =\n typeof sources === \"string\" ? [{ root: sources }] : sources;\n const localeDirs = new Set(options.localeDirs);\n\n const load = createModuleLoader();\n const meta = new Map<string, FolderMeta>();\n const shared = new Map<string, FolderMeta>();\n const diagnostics: Diagnostic[] = [];\n\n // Scan every source under its own root so a source rooted outside\n // `content.root` still contributes its folder meta.\n const perSource = await Promise.all(\n list.map(async (source) => {\n const files = await glob(META_FILES, {\n absolute: true,\n cwd: source.root,\n // Never descend into dependencies or build output — relevant when the\n // root is the project root (e.g. a `.`-rooted or all-staged project).\n ignore: [\"**/node_modules/**\", \"**/.blume/**\", \"**/dist/**\"],\n onlyFiles: true,\n });\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 {\n file,\n ok: true,\n value: await resolveMeta(await load(file)),\n };\n } catch (error) {\n return { error: error as Error, file, ok: false };\n }\n }\n )\n );\n return { loaded, source };\n })\n );\n\n for (const { loaded, source } of perSource) {\n for (const entry of loaded) {\n const dir = relative(source.root, dirname(entry.file));\n const [head, ...tail] = dir.split(\"/\");\n // A locale directory sits between the source root and the folder, but the\n // lookup key carries the locale in front of the (prefixed) group path.\n const key =\n head && localeDirs.has(head)\n ? `${head}/${metaKeyFor(source.prefix, tail.join(\"/\"))}`.replace(\n /\\/$/u,\n \"\"\n )\n : metaKeyFor(source.prefix, dir);\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.$.\")\n ? shared\n : meta;\n target.set(key, 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\n return { diagnostics, meta, shared };\n};\n",
|
|
@@ -111,27 +111,27 @@
|
|
|
111
111
|
"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 \"<\": \"<\",\n \">\": \">\",\n \"{\": \"{\",\n \"}\": \"}\",\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;\n// Backtick code — inline spans and fences alike — is already literal in MDX,\n// and entities are NOT decoded inside it, so escaping there would render the\n// entity text verbatim (`/pets/{petId}`). Matching any balanced\n// backtick run covers `code`, ``code``, and ```fences``` in one shot.\nconst BACKTICK_CODE = /(?<bt>`+)[\\s\\S]*?\\k<bt>/gu;\n\nconst escapeProse = (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/** Escape MDX-special syntax in prose while leaving backtick code verbatim. */\nconst mdxSafe = (text: string): string => {\n let out = \"\";\n let cursor = 0;\n for (const match of text.matchAll(BACKTICK_CODE)) {\n const start = match.index ?? 0;\n out += escapeProse(text.slice(cursor, start));\n out += match[0];\n cursor = start + match[0].length;\n }\n return out + escapeProse(text.slice(cursor));\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// Meta descriptions. A page that sets none falls back to the site-wide default,\n// so a spec's pages would otherwise all ship one identical description — what\n// search engines treat as duplicate content. These go in `seo.description`, not\n// `description`: the prose already renders in the body, and a `description`\n// frontmatter field would print it a second time as the page subtitle.\nconst META_DESCRIPTION_MAX = 160;\nconst PARAGRAPH_BREAK = /\\n\\s*\\n/u;\nconst MARKDOWN_LINK = /\\[(?<text>[^\\]]*)\\]\\([^)]*\\)/gu;\nconst MARKDOWN_MARKS = /[*_`#>]/gu;\nconst WHITESPACE = /\\s+/gu;\nconst TRAILING_WORD = /\\s+\\S*$/u;\n\n/** Flatten markdown prose to its first paragraph as single-line plain text. */\nconst plainProse = (markdown: string): string =>\n (markdown.trim().split(PARAGRAPH_BREAK).at(0) ?? \"\")\n .replace(MARKDOWN_LINK, \"$<text>\")\n .replace(MARKDOWN_MARKS, \"\")\n .replace(WHITESPACE, \" \")\n .trim();\n\n/** Cap `text` at `max` characters, cutting on a word boundary. */\nconst clip = (text: string, max: number): string => {\n if (max <= 0) {\n return \"\";\n }\n if (text.length <= max) {\n return text;\n }\n const head = text.slice(0, max - 1);\n const onWordBoundary = head.replace(TRAILING_WORD, \"\");\n // One very long token — an endpoint path has no spaces — would be dropped\n // whole, leaving a stub. Hard-cut it instead of losing it.\n return `${onWordBoundary.length >= max / 2 ? onWordBoundary : head}…`;\n};\n\nconst apiName = (spec: ApiSpecData): string => spec.title || spec.label;\n\n/**\n * The spec's own prose for the operation, followed by the endpoint it documents\n * — so every operation page carries a distinct, self-describing meta\n * description even when the spec's summaries are terse.\n */\nconst operationDescription = (\n spec: ApiSpecData,\n operation: ApiOperationRef\n): string => {\n const endpoint = `${operation.method.toUpperCase()} ${operation.path}`;\n const suffix = `Reference for the ${endpoint} endpoint in the ${apiName(spec)} API.`;\n const prose = clip(\n plainProse(operation.description || operation.summary),\n META_DESCRIPTION_MAX - suffix.length - 1\n );\n return clip([prose, suffix].filter(Boolean).join(\" \"), META_DESCRIPTION_MAX);\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 seo: { description: operationDescription(spec, operation) },\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 // Tag sections: declared tags in spec order, then any tag an operation\n // references that isn't declared under `tags`. The section headings are\n // emitted as real markdown `##` (not markup inside a component) so the\n // markdown pipeline gives them ids, permalink anchors, and table-of-contents\n // entries; only the operation-link list defers to a component.\n const operations = Object.values(spec.operations);\n // Dedupe by slug: two declared tags that slugify identically (`Store` and\n // `store`) must render one section, not the same operation list twice.\n const sections: typeof spec.tags = [];\n const known = new Set<string>();\n for (const tag of spec.tags) {\n if (!known.has(tag.slug)) {\n known.add(tag.slug);\n sections.push(tag);\n }\n }\n for (const operation of operations) {\n if (!known.has(operation.tagSlug)) {\n known.add(operation.tagSlug);\n sections.push({\n description: \"\",\n name: operation.tag,\n slug: operation.tagSlug,\n });\n }\n }\n const tagSections: string[] = [];\n for (const tag of sections) {\n if (!operations.some((operation) => operation.tagSlug === tag.slug)) {\n continue;\n }\n const description = tag.description.trim()\n ? [mdxSafe(tag.description.trim())]\n : [];\n tagSections.push(\n [\n `## ${mdxSafe(tag.name)}`,\n ...description,\n `<ApiTagOperations source=\"${spec.slug}\" tag=\"${tag.slug}\" />`,\n ].join(\"\\n\\n\")\n );\n }\n return {\n body: [\n withDescription(\n spec.description,\n `<ApiOverview source=\"${spec.slug}\" />`\n ),\n ...tagSections,\n ].join(\"\\n\\n\"),\n data: {\n seo: {\n description:\n clip(plainProse(spec.description), META_DESCRIPTION_MAX) ||\n `${apiName(spec)} API reference.`,\n },\n sidebar: { label: \"Overview\" },\n title: apiName(spec),\n },\n };\n};\n",
|
|
112
112
|
"import { withBasePath } from \"../core/base-path.ts\";\nimport 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 { InvalidSpecError, 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 // A root-mounted reference refs `index.mdx`, not `/index.mdx`.\n const base = routeToRef(spec.route);\n entries.push(\n toEntry(overviewMdx(spec), base ? `${base}/index.mdx` : \"index.mdx\")\n );\n return entries;\n};\n\ninterface LoadedSpec {\n slug: string;\n spec: ApiSpecData;\n entries: SourceEntry[];\n /** Non-fatal notes from the load (e.g. an offline cache fallback). */\n diagnostics: Diagnostic[];\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, warnings } = await parseSpec(\n reference.spec,\n ctx.projectRoot,\n { cacheDir: ctx.cacheDir, refresh: ctx.refresh }\n );\n const {\n operations,\n tags,\n warnings: extractWarnings,\n } = 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 // Operation pages flow through the content pipeline, which mounts them\n // under the site-wide `basePath` (staged entry refs below stay\n // base-less); serialize the served route so components link to the\n // pages' real URLs.\n operations: Object.fromEntries(\n operations.map((operation) => [\n operation.key,\n {\n ...operation,\n route: withBasePath(reference.basePath, operation.route),\n },\n ])\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 diagnostics: [\n ...warnings.map((message) => ({\n code: \"BLUME_OPENAPI_STALE\",\n message,\n severity: \"warning\" as const,\n })),\n ...extractWarnings.map((message) => ({\n code: \"BLUME_OPENAPI_REF_PATH_ITEM\",\n message: `In OpenAPI spec \"${reference.spec}\": ${message}`,\n severity: \"warning\" as const,\n })),\n // A document with no operations (say, a config file that happens to\n // parse as YAML) would otherwise build a nav tab onto an empty\n // reference with no hint why.\n ...(operations.length === 0\n ? [\n {\n code: \"BLUME_OPENAPI_EMPTY\",\n message: `OpenAPI spec \"${reference.spec}\" for ${reference.route} declares no operations; its API reference is empty.`,\n severity: \"warning\" as const,\n suggestion:\n \"Check the spec points at an OpenAPI document with operations under `paths`.\",\n },\n ]\n : []),\n ],\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 // A configured-but-unloadable spec ships a dead nav tab (a 404 route),\n // so fail loudly in build (blocks under --strict) while staying a warning\n // in dev so offline work still runs.\n severity: ctx.mode === \"build\" ? \"error\" : \"warning\",\n // A readable-but-invalid file is a content problem, not a network one;\n // only point at reachability for actual fetch/read failures.\n suggestion:\n error instanceof InvalidSpecError\n ? \"Point the spec at an OpenAPI document (a YAML or JSON file with an object at the top level).\"\n : \"Check the spec URL/path is reachable from the build environment; behind a proxy, set HTTP(S)_PROXY.\",\n };\n }\n };\n\n const load = async (): Promise<SourceLoadResult> => {\n const results = await Promise.all(references.map(loadReference));\n const entries: SourceEntry[] = [];\n // Route collisions recorded while deduping (see `blumeReferences`): a\n // dropped source loses a whole spec's pages, so warn even when the kept\n // spec loads cleanly.\n const diagnostics: Diagnostic[] = references.flatMap((reference) =>\n (reference.collisions ?? []).map((message) => ({\n code: \"BLUME_OPENAPI_ROUTE_COLLISION\",\n message,\n severity: \"warning\" as const,\n }))\n );\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 diagnostics.push(...result.diagnostics);\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",
|
|
113
113
|
"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 baselineScanIgnore,\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 // Union the user's `exclude` with the baseline never-content dirs so a\n // broadly-scoped root (`.` or an app dir) can't glob `node_modules`,\n // `dist`, `.blume`, etc. — even when the user overrode `exclude`.\n ignore: [...options.exclude, ...baselineScanIgnore()],\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 // The unstripped text: lets `normalizeEntry` offset link line numbers\n // by the frontmatter block's height, so diagnostics point at the real\n // file line (and spares a re-read on the frontmatter-error path).\n raw: source,\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",
|
|
114
|
-
"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
|
|
114
|
+
"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// `blume audit` grades meta descriptions against the 110–160 character search\n// snippet range (audit/types.ts thresholds), so the derived summary aims for\n// the longest word-boundary cut under the cap.\nconst DESCRIPTION_MAX = 160;\nconst DESCRIPTION_MIN = 110;\n\nconst CODE_FENCE = /```[\\s\\S]*?```/gu;\nconst HEADING_LINE = /^#{1,6}\\s.*$/gmu;\nconst LIST_MARK = /^\\s*(?:[-*+]|\\d+[.)])\\s+/u;\n// Changesets-generated release bullets open with the changeset's short commit\n// hash (`- cf8fa22: Fix …`) — noise in a search snippet.\nconst CHANGESET_HASH = /^[0-9a-f]{7,40}:\\s+/u;\nconst IMAGE = /!\\[[^\\]]*\\]\\([^)]*\\)/gu;\nconst LINK = /\\[(?<text>[^\\]]*)\\]\\([^)]*\\)/gu;\nconst INLINE_CODE = /`(?<code>[^`]+)`/gu;\n// Tag-shaped only: a bare `<` in prose must not swallow text up to a later `>`.\nconst HTML_OR_JSX = /<\\/?[a-zA-Z][^\\n<>]*>|<\\/?>/gu;\nconst MARKDOWN_PUNCT = /[*_~>]+/gu;\nconst WHITESPACE = /\\s+/gu;\nconst TRAILING_FRAGMENT = /[\\s,;:.—–-]+$/u;\n\n/**\n * Derive a meta description from release notes: markdown reduced to plain\n * text — section headings (\"### Patch Changes\") and changesets' commit-hash\n * bullet prefixes dropped — then cut at a word boundary to fit the search\n * snippet cap. Undefined when the notes have no prose at all.\n */\nconst releaseDescription = (body: string): string | undefined => {\n const text = body\n .replaceAll(CODE_FENCE, \" \")\n .replaceAll(HEADING_LINE, \"\")\n .split(\"\\n\")\n .map((line) => line.replace(LIST_MARK, \"\").replace(CHANGESET_HASH, \"\"))\n .join(\"\\n\")\n .replaceAll(IMAGE, \" \")\n .replaceAll(LINK, \"$<text>\")\n .replaceAll(INLINE_CODE, \"$<code>\")\n .replaceAll(HTML_OR_JSX, \" \")\n .replaceAll(MARKDOWN_PUNCT, \" \")\n .replaceAll(WHITESPACE, \" \")\n .trim();\n if (!text) {\n return undefined;\n }\n if (text.length <= DESCRIPTION_MAX) {\n return text;\n }\n // Cut before the cap at a word boundary (kept only when it doesn't drop the\n // summary under the minimum), shed any dangling punctuation, and mark the cut.\n const slice = text.slice(0, DESCRIPTION_MAX - 1);\n const boundary = slice.lastIndexOf(\" \");\n const head = (\n boundary >= DESCRIPTION_MIN ? slice.slice(0, boundary) : slice\n ).replace(TRAILING_FRAGMENT, \"\");\n return `${head}…`;\n};\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,\n * `type: changelog` frontmatter (title/date/version/category) drives the\n * generated `/changelog` timeline and RSS feed, and a summary derived from the\n * notes becomes the release page's meta description.\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 // A summary in `seo.description` gives each release page a unique meta\n // description (instead of the site-wide fallback) without also rendering the\n // visible lede paragraph a top-level `description` would add.\n const description = releaseDescription(body);\n const data = {\n changelog: { category, version },\n date,\n ...(description ? { seo: { description } } : {}),\n title,\n type: \"changelog\",\n };\n const raw = matter.stringify(`${body}\\n`, data);\n const fallbackRef = `release-${release.id}`;\n const ref = `${slugifyTag(release.tag_name) || fallbackRef}.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 (\n refresh = ctx.refresh ?? true\n ): 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 refresh\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(\n () => load(true),\n options.pollInterval,\n () => load()\n )\n : undefined,\n };\n};\n",
|
|
115
115
|
"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/** Translate one glob token at `i` into RegExp source + the next index. */\nconst globToken = (\n pattern: string,\n i: number\n): { source: string; next: number } => {\n const char = pattern[i] ?? \"\";\n if (char === \"*\") {\n if (pattern[i + 1] === \"*\") {\n // `**/` spans zero or more whole segments — `docs/**/guide.md` must\n // match `docs/guide.md` and `docs/a/guide.md` but not `docs/subguide.md`.\n if (pattern[i + 2] === \"/\") {\n return { next: i + 3, source: \"(?:.*/)?\" };\n }\n return { next: i + 2, source: \".*\" };\n }\n return { next: i + 1, source: \"[^/]*\" };\n }\n if (char === \"?\") {\n return { next: i + 1, source: \"[^/]\" };\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 return { next: end + 1, source: `(?:${options})` };\n }\n }\n return { next: i + 1, source: escapeChar(char) };\n};\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 token = globToken(pattern, i);\n source += token.source;\n i = token.next;\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 ?? []).flatMap((node) => {\n if (!(node.type === \"blob\" && node.path.startsWith(prefix))) {\n return [];\n }\n const rel = node.path.slice(prefix.length);\n if (!matchesInclude(rel, include)) {\n return [];\n }\n return [\n {\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 ];\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 // Validated up front in `load`, *before* the cached-fetch path: thrown from\n // inside `loadWithCache`'s fetch callback, a misconfiguration would be masked\n // as BLUME_SOURCE_FETCH_FAILED (no cache) or downgraded to a stale-cache\n // BLUME_SOURCE_OFFLINE warning (cache present).\n const assertConfigured = (): void => {\n if (options.github || (options.files && options.url)) {\n return;\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 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 const base = (options.url ?? \"\").replace(/\\/$/u, \"\");\n const refs = (options.files ?? []).flatMap((ref) =>\n matchesInclude(ref, options.include)\n ? [{ editUrl: `${base}/${ref}`, fetchUrl: `${base}/${ref}`, ref }]\n : []\n );\n return { refs, truncated: false };\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 (\n refresh = ctx.refresh ?? true\n ): Promise<SourceLoadResult> => {\n assertConfigured();\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 refresh\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(\n () => load(true),\n options.pollInterval,\n () => load()\n )\n : undefined,\n };\n};\n",
|
|
116
116
|
"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 * The `Status` property is treated as a publish signal: any value other than\n * this maps to `draft: true`. Defaults to `Published`; pages without a\n * Status/select property are always imported as published.\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, react-doctor/async-await-in-loop -- sequential retry attempts, not independent\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 ? `` : \"\";\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(async (block) => {\n const leaf = renderLeaf(block);\n if (leaf === null) {\n return renderContainer(client, block, renderBlocks);\n }\n // Leaf blocks can still carry children (nested list items, indented\n // paragraphs); dropping them would silently lose content.\n if (!block.has_children) {\n return leaf;\n }\n const nested = await renderBlocks(\n client,\n await childrenOf(client, block.id)\n );\n if (!nested) {\n return leaf;\n }\n if (isListItem(block)) {\n // Indent past the list marker so the children belong to the item\n // (`1. ` needs three columns, `- `/`- [x] ` two).\n const indent = \" \".repeat(\n block.type === \"numbered_list_item\" ? 3 : 2\n );\n const indented = nested\n .split(\"\\n\")\n .map((line) => (line ? `${indent}${line}` : line))\n .join(\"\\n\");\n return `${leaf}\\n${indented}`;\n }\n // Other leaves (paragraph, quote) keep their children as following\n // sibling blocks — the indentation semantics are lost but the content\n // survives.\n return `${leaf}\\n\\n${nested}`;\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.flatMap((block, i) => {\n const text = parts[i] ?? \"\";\n return text ? [{ block, text }] : [];\n });\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 const prop = page.properties[props.status ?? \"Status\"];\n const status = prop?.status?.name ?? prop?.select?.name;\n // A page without a Status/select property stays published; one with a\n // status is a draft unless it matches the published value.\n return Boolean(\n status && status !== (options.publishedValue ?? \"Published\")\n );\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 // Hoisted out of `load` so the retry closure doesn't nest past the linter's\n // 4-level limit (source factory → queryDatabase → withNotionRetry callback).\n const queryDatabase = (\n client: NotionClientLike,\n cursor?: string\n ): Promise<NotionList<NotionPage>> =>\n withNotionRetry(() =>\n client.databases.query({\n database_id: options.database,\n start_cursor: cursor,\n })\n );\n\n const load = async (\n refresh = ctx?.refresh ?? true\n ): 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 queryDatabase(client, cursor)\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 refresh\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(\n () => load(true),\n options.pollInterval,\n () => load()\n )\n : undefined,\n };\n};\n",
|
|
117
117
|
"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;\nconst CODE_FENCE_BLOCK =\n /^(?<fence>`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^\\k<fence>[^\\n]*(?=\\n|$)/gmu;\n// NUL delimiters cannot appear in authored markdown, so tokens never collide.\n// oxlint-disable-next-line no-control-regex -- the NUL is the collision guard.\nconst FENCE_TOKEN = /\\u0000blume-fence-(?<index>\\d+)\\u0000/gu;\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 // Mask fenced code blocks so an image URL inside a code sample is neither\n // downloaded nor rewritten — the sample must keep showing what the author\n // wrote.\n const fences: string[] = [];\n const masked = markdown.replace(CODE_FENCE_BLOCK, (block) => {\n fences.push(block);\n return `\\u0000blume-fence-${fences.length - 1}\\u0000`;\n });\n\n const urls = new Set<string>();\n for (const match of masked.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 // Hash the query-less URL (as `extFor` does): CMS asset URLs are\n // pre-signed, so the query changes on every fetch of the same image —\n // hashing it would mint a new file each refresh and re-dirty the\n // content digest. Two real assets sharing scheme+host+path and\n // differing only in query are rare enough to accept colliding.\n const file = `${hashText(url.split(\"?\")[0] ?? 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 = masked\n .replaceAll(MD_IMAGE, (match, alt, url) => {\n const local = rewrites.get(url);\n return local ? `` : match;\n })\n .replaceAll(FENCE_TOKEN, (token, index) => fences[Number(index)] ?? token);\n\n return { diagnostics, markdown: rewritten };\n};\n",
|
|
118
118
|
"import { join } from \"pathe\";\n\nimport { BlumeError } from \"../diagnostics.ts\";\nimport matter from \"../frontmatter.ts\";\nimport {\n hashText,\n loadWithCache,\n pollingWatch,\n snapshotCache,\n} from \"./cache.ts\";\nimport { slugify } from \"./normalize.ts\";\nimport { portableTextToMarkdown } from \"./portable-text.ts\";\nimport type { PortableTextBlock } from \"./portable-text.ts\";\nimport type {\n ContentSource,\n SourceContext,\n SourceEntry,\n SourceLoadResult,\n} from \"./types.ts\";\n\n/** The slice of `@sanity/client` this adapter relies on (so it's mockable). */\nexport interface SanityClientLike {\n fetch: <T = unknown>(query: string) => Promise<T>;\n}\n\n/** Field paths mapping a Sanity document onto Blume meta + body. */\nexport interface SanityFieldMap {\n /** Frontmatter title; default `title`. */\n title?: string;\n /** Frontmatter description; default `description`. */\n description?: string;\n /** Route slug (dot path); default `slug.current`. */\n slug?: string;\n /** Portable Text body field; default `body`. */\n body?: string;\n /** Last-modified ISO date; default `_updatedAt`. */\n lastModified?: string;\n}\n\nexport interface SanitySourceOptions {\n name: string;\n prefix?: string;\n projectId: string;\n dataset: string;\n /** Sanity API version (a date); default `2024-01-01`. */\n apiVersion?: string;\n /** GROQ query selecting the documents to import. */\n query: string;\n fields?: SanityFieldMap;\n /** Custom Portable Text block serializers, keyed by `_type`. */\n serializers?: Record<string, (block: PortableTextBlock) => string>;\n /** Read token for private datasets; defaults to `SANITY_TOKEN`. */\n token?: string;\n /** Opt-in dev polling interval (seconds); omit to freeze for the session. */\n pollInterval?: number;\n /** Injected for tests; otherwise built from `@sanity/client`. */\n client?: SanityClientLike;\n}\n\nconst IMAGE_REF = /^image-(?<id>[a-f0-9]+)-(?<dims>\\d+x\\d+)-(?<ext>\\w+)$/u;\n\n/** Resolve a dot path (`slug.current`) against a document. */\nconst getPath = (doc: Record<string, unknown>, path: string): unknown => {\n let current: unknown = doc;\n for (const key of path.split(\".\")) {\n if (current && typeof current === \"object\") {\n current = (current as Record<string, unknown>)[key];\n } else {\n return;\n }\n }\n return current;\n};\n\nconst asString = (value: unknown): string | undefined =>\n typeof value === \"string\" ? value : undefined;\n\n/** Build a Sanity CDN URL from an image asset `_ref`. */\nconst imageUrlFromRef = (\n ref: string,\n projectId: string,\n dataset: string\n): string | null => {\n const match = ref.match(IMAGE_REF);\n if (!match?.groups) {\n return null;\n }\n const { id, dims, ext } = match.groups;\n return `https://cdn.sanity.io/images/${projectId}/${dataset}/${id}-${dims}.${ext}`;\n};\n\nconst resolveClient = async (\n options: SanitySourceOptions,\n preview: boolean\n): Promise<SanityClientLike> => {\n if (options.client) {\n return options.client;\n }\n let createClient: (config: Record<string, unknown>) => SanityClientLike;\n try {\n ({ createClient } = (await import(\"@sanity/client\")) as {\n createClient: (config: Record<string, unknown>) => SanityClientLike;\n });\n } catch {\n throw new BlumeError({\n code: \"BLUME_SOURCE_SDK_MISSING\",\n message: `Source \"${options.name}\" needs \"@sanity/client\". Install it (e.g. \\`npm install @sanity/client\\`).`,\n severity: \"error\",\n });\n }\n return createClient({\n apiVersion: options.apiVersion ?? \"2024-01-01\",\n dataset: options.dataset,\n // Preview reads draft documents through the API; published builds use the CDN.\n perspective: preview ? \"previewDrafts\" : \"published\",\n projectId: options.projectId,\n token: options.token ?? process.env.SANITY_TOKEN,\n useCdn: !preview,\n });\n};\n\n/**\n * Sanity content source. Runs a GROQ query, maps each document's fields to Blume\n * frontmatter and its Portable Text body to Markdown, and stages the result.\n */\nexport const sanitySource = (\n options: SanitySourceOptions,\n ctx?: SourceContext\n): ContentSource => {\n const fields = options.fields ?? {};\n // When constructed directly (custom-source SPI) without a context, cache under\n // a name-derived dir relative to the project; the built-in type passes a ctx.\n const cache = snapshotCache(\n ctx?.cacheDir ?? join(\".blume\", \"cache\", options.name)\n );\n let snapshot = new Map<string, SourceEntry>();\n\n const toEntry = (doc: Record<string, unknown>): SourceEntry => {\n const slugValue =\n asString(getPath(doc, fields.slug ?? \"slug.current\")) ??\n asString(doc._id) ??\n \"untitled\";\n // Fall back to the unique `_id` when a slug (e.g. a non-ASCII `slug.current`)\n // slugifies to empty, so distinct documents don't all collapse to the same\n // `untitled.md` ref and silently overwrite each other.\n const slug =\n slugify(slugValue) || slugify(asString(doc._id) ?? \"\") || \"untitled\";\n\n const data: Record<string, unknown> = {};\n const title = asString(getPath(doc, fields.title ?? \"title\"));\n const description = asString(\n getPath(doc, fields.description ?? \"description\")\n );\n if (title) {\n data.title = title;\n }\n if (description) {\n data.description = description;\n }\n\n const blocks = (getPath(doc, fields.body ?? \"body\") ??\n []) as PortableTextBlock[];\n const markdown = Array.isArray(blocks)\n ? portableTextToMarkdown(blocks, {\n imageUrl: (block) => {\n const ref = (block.asset as { _ref?: string } | undefined)?._ref;\n return ref\n ? imageUrlFromRef(ref, options.projectId, options.dataset)\n : null;\n },\n serializers: options.serializers,\n })\n : \"\";\n\n const raw = matter.stringify(markdown, data);\n return {\n body: { format: \"md\", text: markdown },\n data,\n hash: hashText(raw),\n lastModified: asString(getPath(doc, fields.lastModified ?? \"_updatedAt\")),\n raw,\n ref: `${slug}.md`,\n };\n };\n\n const load = async (\n refresh = ctx?.refresh ?? true\n ): Promise<SourceLoadResult> => {\n const result = await loadWithCache(\n options.name,\n cache,\n async () => {\n const client = await resolveClient(options, ctx?.preview ?? false);\n const docs = await client.fetch<Record<string, unknown>[]>(\n options.query\n );\n return docs.map(toEntry);\n },\n refresh\n );\n snapshot = new Map(result.entries.map((entry) => [entry.ref, entry]));\n return result;\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(\n () => load(true),\n options.pollInterval,\n () => load()\n )\n : undefined,\n };\n};\n",
|
|
119
119
|
"/**\n * A minimal Portable Text → Markdown serializer. Covers the standard block,\n * list, and mark types Sanity emits; custom block/mark types fall through to a\n * user-supplied serializer or are skipped with a noted comment. Output is\n * Markdown text that flows through Blume's normal pipeline.\n */\n\n/** A single Portable Text node (block, image, or a custom type). */\nexport interface PortableTextBlock {\n _type: string;\n _key?: string;\n style?: string;\n listItem?: string;\n level?: number;\n children?: PortableTextSpan[];\n markDefs?: PortableTextMarkDef[];\n [key: string]: unknown;\n}\n\ninterface PortableTextSpan {\n _type: string;\n text?: string;\n marks?: string[];\n}\n\ninterface PortableTextMarkDef {\n _key: string;\n _type: string;\n href?: string;\n}\n\nexport interface PortableTextOptions {\n /** Resolve an image block to a URL (the adapter knows project/dataset). */\n imageUrl?: (block: PortableTextBlock) => string | null;\n /** Custom block-type serializers, keyed by `_type`; return Markdown/MDX. */\n serializers?: Record<string, (block: PortableTextBlock) => string>;\n}\n\nconst HEADING_STYLES: Record<string, string> = {\n h1: \"# \",\n h2: \"## \",\n h3: \"### \",\n h4: \"#### \",\n h5: \"##### \",\n h6: \"###### \",\n};\n\n/** Wrap a span's text in Markdown for its marks (decorators + link defs). */\nconst renderSpan = (\n span: PortableTextSpan,\n defs: Map<string, PortableTextMarkDef>\n): string => {\n let text = span.text ?? \"\";\n if (!span.marks || span.marks.length === 0) {\n return text;\n }\n // Decorators wrap inline; a link def wraps last so its label keeps emphasis.\n let link: PortableTextMarkDef | undefined;\n for (const mark of span.marks) {\n switch (mark) {\n case \"strong\": {\n text = `**${text}**`;\n break;\n }\n case \"em\": {\n text = `*${text}*`;\n break;\n }\n case \"code\": {\n text = `\\`${text}\\``;\n break;\n }\n case \"strike-through\": {\n text = `~~${text}~~`;\n break;\n }\n default: {\n const def = defs.get(mark);\n if (def?._type === \"link\") {\n link = def;\n }\n }\n }\n }\n return link?.href ? `[${text}](${link.href})` : text;\n};\n\n/** Render the inline children of a block to a single Markdown string. */\nconst renderChildren = (block: PortableTextBlock): string => {\n const defs = new Map(\n (block.markDefs ?? []).map((def) => [def._key, def] as const)\n );\n return (block.children ?? []).map((span) => renderSpan(span, defs)).join(\"\");\n};\n\nconst renderBlock = (\n block: PortableTextBlock,\n options: PortableTextOptions\n): string => {\n const custom = options.serializers?.[block._type];\n if (custom) {\n return custom(block);\n }\n if (block._type === \"image\") {\n const url = options.imageUrl?.(block);\n const alt = typeof block.alt === \"string\" ? block.alt : \"\";\n return url ? `` : \"\";\n }\n if (block._type !== \"block\") {\n return `<!-- unsupported Portable Text block: ${block._type} -->`;\n }\n\n const inline = renderChildren(block);\n if (block.listItem) {\n const indent = \" \".repeat(Math.max(0, (block.level ?? 1) - 1));\n const marker = block.listItem === \"number\" ? \"1.\" : \"-\";\n return `${indent}${marker} ${inline}`;\n }\n if (block.style === \"blockquote\") {\n return `> ${inline}`;\n }\n return `${HEADING_STYLES[block.style ?? \"normal\"] ?? \"\"}${inline}`;\n};\n\n/** Serialize a Portable Text array into a Markdown string. */\nexport const portableTextToMarkdown = (\n blocks: PortableTextBlock[],\n options: PortableTextOptions = {}\n): string => {\n const lines = blocks.map((block) => renderBlock(block, options));\n // List items are single-newline separated; everything else gets a blank line.\n const out: string[] = [];\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i] ?? \"\";\n const prevList = Boolean(blocks[i - 1]?.listItem);\n const thisList = Boolean(blocks[i]?.listItem);\n if (i > 0) {\n out.push(prevList && thisList ? \"\\n\" : \"\\n\\n\");\n }\n out.push(line);\n }\n return `${out.join(\"\")}\\n`;\n};\n",
|
|
120
120
|
"import { getBlumeVersion } from \"../core/version.ts\";\n\nconst ESC = String.fromCodePoint(27);\nconst DIM = `${ESC}[2m`;\nconst RED = `${ESC}[31m`;\nconst BOLD = `${ESC}[1m`;\nconst RESET = `${ESC}[0m`;\n\nconst ISSUES_URL = \"https://github.com/haydenbleasel/blume/issues\";\n\n// Absolute paths into the hidden generated runtime — POSIX (`…/.blume/…`) or\n// Windows drive-letter (`C:\\…\\.blume\\…`) — including any trailing `:line:col`,\n// stopping at whitespace or a closing paren.\nconst BLUME_FRAME =\n /(?<abs>(?:\\/[^\\s()]*\\/|[A-Za-z]:\\\\[^\\s()]*\\\\)\\.blume[/\\\\][^\\s()]*)/gu;\n\n// The separator immediately before `.blume/` (or `.blume\\`) in a matched path.\nconst BLUME_MARKER = /[/\\\\]\\.blume[/\\\\]/u;\n\n/**\n * Rewrite `.blume/` frames in a stack so the generated runtime reads clearly:\n * the machine-absolute prefix is dropped to a project-relative `.blume/…` path\n * and tagged `(generated)`, keeping the reader oriented instead of staring at a\n * long path into a hidden directory. Frames in the user's own source (custom\n * pages keep their real location; wrappers import user files by their real path)\n * are untouched, so the actionable frame stays intact.\n */\nexport const remapBlumeStack = (stack: string): string =>\n stack.replaceAll(BLUME_FRAME, (match) => {\n const marker = match.search(BLUME_MARKER);\n return `${match.slice(marker + 1)} (generated)`;\n });\n\n/**\n * Print an unexpected (non-{@link BlumeError}) failure in a stable, reportable\n * shape instead of a bare stack trace: a fixed `BLUME_INTERNAL` code, the\n * message, a trimmed stack, and an environment dump for bug reports. Callers\n * exit after this — it doesn't exit itself, so it's testable.\n */\nexport const reportInternalError = (error: unknown): void => {\n const err = error instanceof Error ? error : new Error(String(error));\n const lines = [\n `${RED}${BOLD}BLUME_INTERNAL${RESET} An unexpected error occurred.`,\n ` ${err.message}`,\n ];\n\n // A few frames are enough to locate the fault without burying the report;\n // `.blume/` frames are relativized so the hidden runtime reads clearly.\n const stack = remapBlumeStack(err.stack ?? \"\")\n .split(\"\\n\")\n .slice(1, 5)\n .map((line) => line.trim())\n .filter(Boolean);\n if (stack.length > 0) {\n lines.push(\"\", `${DIM}${stack.join(\"\\n\")}${RESET}`);\n }\n\n lines.push(\n \"\",\n \"This is likely a bug in Blume. Please report it with the details below:\",\n ` ${DIM}Blume: ${getBlumeVersion()}`,\n ` Node: ${process.version}`,\n ` Platform: ${process.platform} ${process.arch}${RESET}`,\n ` ${ISSUES_URL}`\n );\n\n process.stderr.write(`${lines.join(\"\\n\")}\\n`);\n};\n",
|
|
121
|
-
"import { existsSync } from \"node:fs\";\nimport { readdir, stat, writeFile } from \"node:fs/promises\";\n\nimport { build } from \"astro\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { buildAgentReadability } from \"../../ai/agent-readability.ts\";\nimport { buildLlmsFiles } from \"../../ai/llms.ts\";\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { BlumeProject } from \"../../core/project-graph.ts\";\nimport type { ResolvedConfig } from \"../../core/schema.ts\";\nimport { serverFeatures } from \"../../core/server-features.ts\";\nimport type { ProjectContext } from \"../../core/types.ts\";\nimport {\n ADAPTER_IGNORE_DIRS,\n deployStaticDir,\n surfaceAdapterOutput,\n} from \"../../deploy/adapter-output.ts\";\nimport { buildNetlifyHeaders } from \"../../deploy/headers.ts\";\nimport {\n applyBaseToPlatformRedirects,\n buildNetlifyRedirects,\n buildRedirectManifest,\n buildVercelConfig,\n} from \"../../deploy/redirects.ts\";\nimport { buildRobots } from \"../../deploy/robots.ts\";\nimport { buildSitemap } from \"../../deploy/sitemap.ts\";\nimport { buildSearchIndex } from \"../../search/build.ts\";\nimport { syncSearchProvider } from \"../../search/sync/index.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nconst ADAPTERS = [\"vercel\", \"node\", \"netlify\", \"cloudflare\"] as const;\n\nconst BUDGET_JS = \"budget-js\";\nconst BUDGET_CSS = \"budget-css\";\n\ninterface BudgetArgs {\n \"budget-css\"?: string;\n \"budget-js\"?: string;\n}\n\n/**\n * Reject a non-numeric performance budget. `Number(\"250kb\")` is `NaN` and\n * `total > NaN` is always false, so a typo'd flag would silently pass the gate;\n * fail up front instead.\n */\nconst validateBudgetFlags = (args: BudgetArgs): void => {\n for (const flag of [BUDGET_JS, BUDGET_CSS] as const) {\n const value = args[flag];\n const parsed = Number(value);\n // Equivalent to `!(parsed > 0)` but without the inverted check: this must\n // also reject `NaN` (a typo'd flag like \"250kb\"), which `parsed <= 0` alone\n // would let through since `NaN <= 0` is false.\n if (value !== undefined && (Number.isNaN(parsed) || parsed <= 0)) {\n logger.error(\n `Invalid --${flag} \"${value}\" (expected a positive number of kB).`\n );\n process.exit(1);\n }\n }\n};\n\n/**\n * Emit platform redirect files for a static build (adapters wire redirects\n * natively). Always writes the manifest; writes `_redirects`/`vercel.json` only\n * when the user hasn't shipped one via public/. Note that Vercel's\n * git-integration builds read `vercel.json` from the repository root only —\n * the copy emitted here takes effect when the dist folder itself is deployed\n * directly via the Vercel CLI.\n */\nconst emitRedirectFiles = async (\n config: ResolvedConfig,\n distDir: string\n): Promise<void> => {\n const redirects = applyBaseToPlatformRedirects(\n config.redirects,\n config.basePath,\n config.deployment.base ?? \"\"\n );\n if (redirects.length === 0 || config.deployment.output !== \"static\") {\n return;\n }\n await writeFile(\n join(distDir, \"blume-redirects.json\"),\n buildRedirectManifest(redirects),\n \"utf-8\"\n );\n const platformFiles = [\n { content: buildNetlifyRedirects(redirects), name: \"_redirects\" },\n { content: buildVercelConfig(redirects), name: \"vercel.json\" },\n ];\n await Promise.all(\n platformFiles.map((file) =>\n existsSync(join(distDir, file.name))\n ? Promise.resolve()\n : writeFile(join(distDir, file.name), file.content, \"utf-8\")\n )\n );\n logger.success(`Emitted redirect files for ${redirects.length} redirect(s)`);\n};\n\n/**\n * Emit a `_headers` file for a static build so Netlify / Cloudflare static\n * hosts serve the raw AI-ready endpoints (`*.md`, `*.mdx`, `*.txt`) with an\n * explicit `charset=utf-8`. Without it those hosts send `text/markdown` /\n * `text/plain` with no charset and browsers fall back to Windows-1252, garbling\n * any non-ASCII docs (#82). A `_headers` shipped in `public/` (copied into dist\n * by Astro before this runs) wins, exactly like `_redirects`. Server adapters\n * set the Content-Type on the Response directly, so this is static-only.\n */\nconst emitHeaderFiles = async (\n config: ResolvedConfig,\n distDir: string\n): Promise<void> => {\n if (\n config.deployment.output !== \"static\" ||\n existsSync(join(distDir, \"_headers\"))\n ) {\n return;\n }\n await writeFile(\n join(distDir, \"_headers\"),\n buildNetlifyHeaders(config),\n \"utf-8\"\n );\n logger.success(\"Emitted _headers (UTF-8 Content-Type for raw endpoints)\");\n};\n\nconst formatBytes = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n const digits = bytes < 1024 * 100 ? 1 : 0;\n return `${(bytes / 1024).toFixed(digits)} kB`;\n};\n\n/** Sizes of `dist/_astro/*.<ext>`, largest first (empty when none exist). */\nconst astroAssets = async (\n distDir: string,\n ext: string\n): Promise<{ name: string; size: number }[]> => {\n const astroDir = join(distDir, \"_astro\");\n if (!existsSync(astroDir)) {\n return [];\n }\n const entries = await readdir(astroDir);\n const files = entries.filter((name) => name.endsWith(`.${ext}`));\n const sized = await Promise.all(\n files.map(async (name) => {\n const info = await stat(join(astroDir, name));\n return { name, size: info.size };\n })\n );\n return sized.toSorted((a, b) => b.size - a.size);\n};\n\nconst totalSize = (assets: { size: number }[]): number =>\n assets.reduce((sum, asset) => sum + asset.size, 0);\n\n/**\n * Print the client JavaScript Astro shipped, largest first, plus the total. A\n * dependency-free bundle report — the interactive weight of a docs site is its\n * `_astro/*.js`, so this surfaces regressions without a visualizer.\n */\nconst reportBundleSizes = async (distDir: string): Promise<void> => {\n const sized = await astroAssets(distDir, \"js\");\n if (sized.length === 0) {\n logger.info(\"No client JavaScript emitted — the site ships zero JS.\");\n return;\n }\n const rows = sized\n .slice(0, 15)\n .map((file) => ` ${formatBytes(file.size).padStart(8)} ${file.name}`);\n logger.box(\n [\n `Client JavaScript — ${sized.length} file(s), ${formatBytes(totalSize(sized))} total`,\n \"\",\n ...rows,\n sized.length > 15 ? ` … and ${sized.length - 15} more` : null,\n ]\n .filter((line) => line !== null)\n .join(\"\\n\")\n );\n};\n\n/**\n * Enforce a performance budget on the built client assets: fail the build when\n * total `_astro/*.js` (or `*.css`) exceeds the given kB cap. Budgets that would\n * otherwise be \"documented, not measured\" become a real CI gate. Returns whether\n * every budget passed.\n */\nconst enforceBudget = async (\n distDir: string,\n args: BudgetArgs\n): Promise<\"fail\" | \"pass\" | \"skip\"> => {\n const checks: { ext: string; limitKb: number; name: string }[] = [\n ...(args[BUDGET_JS]\n ? [{ ext: \"js\", limitKb: Number(args[BUDGET_JS]), name: \"JavaScript\" }]\n : []),\n ...(args[BUDGET_CSS]\n ? [{ ext: \"css\", limitKb: Number(args[BUDGET_CSS]), name: \"CSS\" }]\n : []),\n ];\n if (checks.length === 0) {\n return \"skip\";\n }\n let passed = true;\n for (const check of checks) {\n // oxlint-disable-next-line no-await-in-loop -- a couple of sequential reads\n const total = totalSize(await astroAssets(distDir, check.ext));\n const limit = check.limitKb * 1024;\n if (total > limit) {\n passed = false;\n logger.error(\n `${check.name} budget exceeded: ${formatBytes(total)} > ${check.limitKb} kB`\n );\n } else {\n logger.success(\n `${check.name} budget: ${formatBytes(total)} / ${check.limitKb} kB`\n );\n }\n }\n return passed ? \"pass\" : \"fail\";\n};\n\n/**\n * Run the optional bundle report (`--analyze`) and performance-budget gate\n * against the directory whose `_astro/` client assets the deploy serves.\n * Shared by real and isolated builds — an isolated CI run passing\n * `--budget-js` must still fail on an exceeded budget rather than silently\n * skipping the check. Exits non-zero when a budget is exceeded.\n */\nexport const runClientAssetChecks = async (\n staticDir: string,\n args: { analyze?: boolean } & BudgetArgs\n): Promise<void> => {\n if (args.analyze) {\n await reportBundleSizes(staticDir);\n }\n if ((await enforceBudget(staticDir, args)) === \"fail\") {\n process.exit(1);\n }\n};\n\n/**\n * Root of an isolated build's output. The runtime-local `dist/`, except for a\n * Vercel server build, whose deploy bundle lands at `<runtime>/.vercel/output`\n * and is never surfaced to the project root.\n */\nexport const isolatedOutputDir = (\n config: ResolvedConfig,\n context: ProjectContext\n): string => {\n const { adapter, output } = config.deployment;\n if (output === \"server\" && adapter === \"vercel\") {\n return join(context.outDir, \".vercel\", \"output\");\n }\n return context.distDir ?? join(context.outDir, \"dist\");\n};\n\n/**\n * Directory holding an isolated build's client `_astro/` assets. Mirrors\n * `deployStaticDir`, except that an isolated build never surfaces the adapter\n * bundle to the project root — a Vercel server build's static output stays at\n * `<runtime>/.vercel/output/static`, where `deployStaticDir` would instead\n * point at the project-root copy (a previous real build's assets, or nothing).\n */\nexport const isolatedStaticDir = (\n config: ResolvedConfig,\n context: ProjectContext\n): string => {\n const { adapter, output } = config.deployment;\n const outputDir = isolatedOutputDir(config, context);\n if (output === \"server\" && adapter === \"vercel\") {\n return join(outputDir, \"static\");\n }\n if (output === \"server\" && adapter === \"node\") {\n return join(outputDir, \"client\");\n }\n return outputDir;\n};\n\n/**\n * Generate `llms.txt`/`llms-full.txt` into the dist dir. A user's own file in\n * `public/` (copied into dist by Astro before this runs, like the sitemap and\n * robots.txt) wins over the generated one — each file is checked and replaced\n * independently, so a custom `llms.txt` still gets a generated `llms-full.txt`.\n */\nconst publishLlmsFiles = async (\n project: BlumeProject,\n distDir: string\n): Promise<void> => {\n const indexPath = join(distDir, \"llms.txt\");\n const fullPath = join(distDir, \"llms-full.txt\");\n const writeIndex = !existsSync(indexPath);\n const writeFull = !existsSync(fullPath);\n if (!(writeIndex || writeFull)) {\n return;\n }\n const { index, full } = await buildLlmsFiles(project);\n const writes: Promise<void>[] = [];\n if (writeIndex) {\n writes.push(writeFile(indexPath, index, \"utf-8\"));\n }\n if (writeFull) {\n writes.push(writeFile(fullPath, full, \"utf-8\"));\n }\n await Promise.all(writes);\n logger.success(\n `Generated ${[\n writeIndex ? \"llms.txt\" : null,\n writeFull ? \"llms-full.txt\" : null,\n ]\n .filter(Boolean)\n .join(\" and \")}`\n );\n};\n\n/**\n * Run every deploy post-step of a real (non-isolated) build: the search index +\n * hosted-provider sync, llms.txt, sitemap/robots, redirect files, the summary\n * box, and the optional bundle report / budget gate. Exits non-zero if a budget\n * is exceeded. Isolated verify builds skip all of this except the bundle\n * report / budget gate, which they run against their own output.\n */\nconst publishBuildArtifacts = async (\n project: BlumeProject,\n distDir: string,\n args: { analyze?: boolean } & BudgetArgs\n): Promise<void> => {\n if (project.config.search.provider === \"pagefind\") {\n logger.start(\"Building search index\");\n const indexed = await buildSearchIndex(distDir);\n logger.success(`Indexed ${indexed} page(s) for search`);\n }\n\n // Upload the index to a hosted provider (Algolia, Orama Cloud, Typesense).\n // Skipped with a warning when its admin key isn't configured.\n await syncSearchProvider(project, {\n start: (message) => logger.start(message),\n success: (message) => logger.success(message),\n warn: (message) => logger.warn(message),\n });\n\n if (project.config.ai.llmsTxt.enabled) {\n await publishLlmsFiles(project, distDir);\n }\n\n // A user's own public/ file (copied into dist by Astro) always wins.\n const sitemap = buildSitemap(project);\n if (sitemap && !existsSync(join(distDir, \"sitemap.xml\"))) {\n await writeFile(join(distDir, \"sitemap.xml\"), sitemap, \"utf-8\");\n logger.success(\"Generated sitemap.xml\");\n }\n\n const robots = buildRobots(project);\n if (robots && !existsSync(join(distDir, \"robots.txt\"))) {\n await writeFile(join(distDir, \"robots.txt\"), robots, \"utf-8\");\n logger.success(\"Generated robots.txt\");\n }\n\n const agentReadability = buildAgentReadability(project);\n if (\n agentReadability &&\n !existsSync(join(distDir, \"agent-readability.json\"))\n ) {\n await writeFile(\n join(distDir, \"agent-readability.json\"),\n `${JSON.stringify(agentReadability, null, 2)}\\n`,\n \"utf-8\"\n );\n logger.success(\"Generated agent-readability.json\");\n }\n\n await emitRedirectFiles(project.config, distDir);\n await emitHeaderFiles(project.config, distDir);\n\n const { config } = project;\n const features = serverFeatures(config);\n // `buildSitemap` returns null both when the sitemap is disabled and when no\n // `site` is configured — only the latter deserves the remediation hint.\n const sitemapNote = config.seo.sitemap\n ? \"no (set deployment.site)\"\n : \"no (seo.sitemap is false)\";\n logger.box(\n [\n `Output ${config.deployment.output}`,\n `Adapter ${config.deployment.adapter ?? \"none\"}`,\n `Site ${config.deployment.site ?? \"not set\"}`,\n `Search ${config.search.provider}`,\n `Redirects ${config.redirects.length}`,\n `Sitemap ${sitemap ? \"yes\" : sitemapNote}`,\n `Robots ${robots ? \"yes\" : \"no\"}`,\n `Agent JSON ${agentReadability ? \"yes\" : \"no\"}`,\n `LLM files ${config.ai.llmsTxt.enabled ? \"yes\" : \"no\"}`,\n `Server features ${features.length > 0 ? features.join(\", \") : \"none\"}`,\n ].join(\"\\n\")\n );\n\n await runClientAssetChecks(distDir, args);\n\n logger.success(`Built to ${distDir}`);\n};\n\nexport const buildCommand = defineCommand({\n args: {\n adapter: {\n description: \"Server adapter: vercel | node | netlify | cloudflare.\",\n type: \"string\",\n },\n analyze: {\n description: \"Report client JavaScript bundle sizes after the build.\",\n type: \"boolean\",\n },\n base: {\n description: \"Base path the site is served under (e.g. /docs).\",\n type: \"string\",\n },\n [BUDGET_CSS]: {\n description: \"Fail if total client CSS exceeds this many kB.\",\n type: \"string\",\n },\n [BUDGET_JS]: {\n description: \"Fail if total client JavaScript exceeds this many kB.\",\n type: \"string\",\n },\n isolated: {\n description:\n \"Build into an isolated .blume-verify runtime (and its own dist) so a running dev server and the real dist/ are untouched. For verifying changes while `blume dev` runs.\",\n type: \"boolean\",\n },\n output: {\n description: \"Output mode: static | server.\",\n type: \"string\",\n },\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: \"Build the docs site for production.\",\n name: \"build\",\n },\n async run({ args }) {\n const root = process.cwd();\n\n // `--isolated` (or BLUME_RUNTIME_DIR) relocates the whole runtime to a\n // sibling dir so this build never touches a live dev server's `.blume/` or\n // the user's real `dist/`. A non-default runtime dir has no dev lock, so the\n // refusal below lets it proceed; a plain build still refuses.\n const runtimeDir = args.isolated\n ? \".blume-verify\"\n : process.env.BLUME_RUNTIME_DIR;\n refuseIfDevRunning(root, \"building\", { isolatedHint: true, runtimeDir });\n if (args.isolated) {\n await ensureGitignore(root, [\".blume-verify/\"]);\n }\n\n if (args.output && args.output !== \"static\" && args.output !== \"server\") {\n logger.error(`Invalid --output \"${args.output}\" (use static | server).`);\n process.exit(1);\n }\n if (args.adapter && !ADAPTERS.includes(args.adapter as never)) {\n logger.error(\n `Invalid --adapter \"${args.adapter}\" (use ${ADAPTERS.join(\" | \")}).`\n );\n process.exit(1);\n }\n validateBudgetFlags(args);\n\n const project = await prepareProject({\n mode: \"build\",\n overrides: {\n adapter: args.adapter as (typeof ADAPTERS)[number] | undefined,\n base: args.base,\n output: args.output as \"server\" | \"static\" | undefined,\n },\n preview: args.preview,\n root,\n runtimeDir,\n strict: args.strict,\n });\n\n logger.start(\n `Building ${project.graph.pages.length} page(s) (${project.config.deployment.output} output)`\n );\n\n await build({\n logLevel: \"info\",\n root: project.context.outDir,\n });\n\n // An isolated build is a throwaway verify: it only needs to confirm the site\n // compiles and renders. Skip the network post-steps (search sync) and\n // deploy artifacts (index/llms/sitemap/robots/redirects) that only matter\n // for a real publish and would push to hosted providers. The bundle report\n // and budget gate still run, though — `blume build --isolated --budget-js\n // 100` exiting 0 without measuring anything would be a silent false pass\n // in CI.\n if (runtimeDir) {\n await runClientAssetChecks(\n isolatedStaticDir(project.config, project.context),\n args\n );\n logger.success(\n `Isolated build OK — output at ${isolatedOutputDir(project.config, project.context)} (not published).`\n );\n return;\n }\n\n // A server adapter's deploy bundle is a build artifact — keep it out of\n // version control (Vercel's own CLI ignores `.vercel/` for the same reason).\n // Ignoring it is independent of whether the bundle had to be moved below:\n // Vercel writes straight to the project root, Netlify does not.\n const { adapter } = project.config.deployment;\n const ignoreDir = adapter ? ADAPTER_IGNORE_DIRS[adapter] : undefined;\n if (project.config.deployment.output === \"server\" && ignoreDir) {\n await ensureGitignore(root, [ignoreDir]);\n }\n\n // Netlify writes its deploy bundle relative to the Astro root — which Blume\n // points at the hidden `.blume` runtime — so the bundle lands where the\n // deploy platform never looks. Surface it up to the project root before\n // publishing artifacts into the served static dir.\n const surfaced = await surfaceAdapterOutput(\n project.config,\n project.context\n );\n if (surfaced.moved) {\n logger.success(`Surfaced ${adapter} output to ${surfaced.to}`);\n }\n\n await publishBuildArtifacts(\n project,\n deployStaticDir(project.config, project.context),\n args\n );\n },\n});\n",
|
|
121
|
+
"import { existsSync } from \"node:fs\";\nimport { readdir, stat, writeFile } from \"node:fs/promises\";\n\nimport { build } from \"astro\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { buildAgentReadability } from \"../../ai/agent-readability.ts\";\nimport { buildLlmsFiles } from \"../../ai/llms.ts\";\nimport { ensureGitignore } from \"../../core/gitignore.ts\";\nimport type { BlumeProject } from \"../../core/project-graph.ts\";\nimport type { ResolvedConfig } from \"../../core/schema.ts\";\nimport { serverFeatures } from \"../../core/server-features.ts\";\nimport type { ProjectContext } from \"../../core/types.ts\";\nimport {\n ADAPTER_IGNORE_DIRS,\n deployStaticDir,\n surfaceAdapterOutput,\n} from \"../../deploy/adapter-output.ts\";\nimport { buildNetlifyHeaders } from \"../../deploy/headers.ts\";\nimport {\n applyBaseToPlatformRedirects,\n buildNetlifyRedirects,\n buildRedirectManifest,\n buildVercelConfig,\n} from \"../../deploy/redirects.ts\";\nimport { buildRobots } from \"../../deploy/robots.ts\";\nimport { buildSitemap } from \"../../deploy/sitemap.ts\";\nimport { buildSearchIndex } from \"../../search/build.ts\";\nimport { syncSearchProvider } from \"../../search/sync/index.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nconst ADAPTERS = [\"vercel\", \"node\", \"netlify\", \"cloudflare\"] as const;\n\nconst BUDGET_JS = \"budget-js\";\nconst BUDGET_CSS = \"budget-css\";\n\ninterface BudgetArgs {\n \"budget-css\"?: string;\n \"budget-js\"?: string;\n}\n\n/**\n * Reject a non-numeric performance budget. `Number(\"250kb\")` is `NaN` and\n * `total > NaN` is always false, so a typo'd flag would silently pass the gate;\n * fail up front instead.\n */\nconst validateBudgetFlags = (args: BudgetArgs): void => {\n for (const flag of [BUDGET_JS, BUDGET_CSS] as const) {\n const value = args[flag];\n const parsed = Number(value);\n // Equivalent to `!(parsed > 0)` but without the inverted check: this must\n // also reject `NaN` (a typo'd flag like \"250kb\"), which `parsed <= 0` alone\n // would let through since `NaN <= 0` is false.\n if (value !== undefined && (Number.isNaN(parsed) || parsed <= 0)) {\n logger.error(\n `Invalid --${flag} \"${value}\" (expected a positive number of kB).`\n );\n process.exit(1);\n }\n }\n};\n\n/**\n * Emit platform redirect files for a static build (adapters wire redirects\n * natively). Always writes the manifest; writes `_redirects`/`vercel.json` only\n * when the user hasn't shipped one via public/. Note that Vercel's\n * git-integration builds read `vercel.json` from the repository root only —\n * the copy emitted here takes effect when the dist folder itself is deployed\n * directly via the Vercel CLI.\n */\nconst emitRedirectFiles = async (\n config: ResolvedConfig,\n distDir: string\n): Promise<void> => {\n const redirects = applyBaseToPlatformRedirects(\n config.redirects,\n config.basePath,\n config.deployment.base ?? \"\"\n );\n if (redirects.length === 0 || config.deployment.output !== \"static\") {\n return;\n }\n await writeFile(\n join(distDir, \"blume-redirects.json\"),\n buildRedirectManifest(redirects),\n \"utf-8\"\n );\n const platformFiles = [\n { content: buildNetlifyRedirects(redirects), name: \"_redirects\" },\n { content: buildVercelConfig(redirects), name: \"vercel.json\" },\n ];\n await Promise.all(\n platformFiles.map((file) =>\n existsSync(join(distDir, file.name))\n ? Promise.resolve()\n : writeFile(join(distDir, file.name), file.content, \"utf-8\")\n )\n );\n logger.success(`Emitted redirect files for ${redirects.length} redirect(s)`);\n};\n\n/**\n * Emit a `_headers` file for a static build so Netlify / Cloudflare static\n * hosts serve the raw AI-ready endpoints (`*.md`, `*.mdx`, `*.txt`) with an\n * explicit `charset=utf-8`. Without it those hosts send `text/markdown` /\n * `text/plain` with no charset and browsers fall back to Windows-1252, garbling\n * any non-ASCII docs (#82). A `_headers` shipped in `public/` (copied into dist\n * by Astro before this runs) wins, exactly like `_redirects`. Server adapters\n * set the Content-Type on the Response directly, so this is static-only.\n */\nconst emitHeaderFiles = async (\n config: ResolvedConfig,\n distDir: string\n): Promise<void> => {\n if (\n config.deployment.output !== \"static\" ||\n existsSync(join(distDir, \"_headers\"))\n ) {\n return;\n }\n await writeFile(\n join(distDir, \"_headers\"),\n buildNetlifyHeaders(config),\n \"utf-8\"\n );\n logger.success(\"Emitted _headers (UTF-8 Content-Type for raw endpoints)\");\n};\n\nconst formatBytes = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n const digits = bytes < 1024 * 100 ? 1 : 0;\n return `${(bytes / 1024).toFixed(digits)} kB`;\n};\n\n/** Sizes of `dist/_astro/*.<ext>`, largest first (empty when none exist). */\nconst astroAssets = async (\n distDir: string,\n ext: string\n): Promise<{ name: string; size: number }[]> => {\n const astroDir = join(distDir, \"_astro\");\n if (!existsSync(astroDir)) {\n return [];\n }\n const entries = await readdir(astroDir);\n const files = entries.filter((name) => name.endsWith(`.${ext}`));\n const sized = await Promise.all(\n files.map(async (name) => {\n const info = await stat(join(astroDir, name));\n return { name, size: info.size };\n })\n );\n return sized.toSorted((a, b) => b.size - a.size);\n};\n\nconst totalSize = (assets: { size: number }[]): number =>\n assets.reduce((sum, asset) => sum + asset.size, 0);\n\n/**\n * Print the client JavaScript Astro shipped, largest first, plus the total. A\n * dependency-free bundle report — the interactive weight of a docs site is its\n * `_astro/*.js`, so this surfaces regressions without a visualizer.\n */\nconst reportBundleSizes = async (distDir: string): Promise<void> => {\n const sized = await astroAssets(distDir, \"js\");\n if (sized.length === 0) {\n logger.info(\"No client JavaScript emitted — the site ships zero JS.\");\n return;\n }\n const rows = sized\n .slice(0, 15)\n .map((file) => ` ${formatBytes(file.size).padStart(8)} ${file.name}`);\n logger.box(\n [\n `Client JavaScript — ${sized.length} file(s), ${formatBytes(totalSize(sized))} total`,\n \"\",\n ...rows,\n sized.length > 15 ? ` … and ${sized.length - 15} more` : null,\n ]\n .filter((line) => line !== null)\n .join(\"\\n\")\n );\n};\n\n/**\n * Enforce a performance budget on the built client assets: fail the build when\n * total `_astro/*.js` (or `*.css`) exceeds the given kB cap. Budgets that would\n * otherwise be \"documented, not measured\" become a real CI gate. Returns whether\n * every budget passed.\n */\nconst enforceBudget = async (\n distDir: string,\n args: BudgetArgs\n): Promise<\"fail\" | \"pass\" | \"skip\"> => {\n const checks: { ext: string; limitKb: number; name: string }[] = [\n ...(args[BUDGET_JS]\n ? [{ ext: \"js\", limitKb: Number(args[BUDGET_JS]), name: \"JavaScript\" }]\n : []),\n ...(args[BUDGET_CSS]\n ? [{ ext: \"css\", limitKb: Number(args[BUDGET_CSS]), name: \"CSS\" }]\n : []),\n ];\n if (checks.length === 0) {\n return \"skip\";\n }\n let passed = true;\n for (const check of checks) {\n // oxlint-disable-next-line no-await-in-loop -- a couple of sequential reads\n const total = totalSize(await astroAssets(distDir, check.ext));\n const limit = check.limitKb * 1024;\n if (total > limit) {\n passed = false;\n logger.error(\n `${check.name} budget exceeded: ${formatBytes(total)} > ${check.limitKb} kB`\n );\n } else {\n logger.success(\n `${check.name} budget: ${formatBytes(total)} / ${check.limitKb} kB`\n );\n }\n }\n return passed ? \"pass\" : \"fail\";\n};\n\n/**\n * Run the optional bundle report (`--analyze`) and performance-budget gate\n * against the directory whose `_astro/` client assets the deploy serves.\n * Shared by real and isolated builds — an isolated CI run passing\n * `--budget-js` must still fail on an exceeded budget rather than silently\n * skipping the check. Exits non-zero when a budget is exceeded.\n */\nexport const runClientAssetChecks = async (\n staticDir: string,\n args: { analyze?: boolean } & BudgetArgs\n): Promise<void> => {\n if (args.analyze) {\n await reportBundleSizes(staticDir);\n }\n if ((await enforceBudget(staticDir, args)) === \"fail\") {\n process.exit(1);\n }\n};\n\n/**\n * Root of an isolated build's output. The runtime-local `dist/`, except for a\n * Vercel server build, whose deploy bundle lands at `<runtime>/.vercel/output`\n * and is never surfaced to the project root.\n */\nexport const isolatedOutputDir = (\n config: ResolvedConfig,\n context: ProjectContext\n): string => {\n const { adapter, output } = config.deployment;\n if (output === \"server\" && adapter === \"vercel\") {\n return join(context.outDir, \".vercel\", \"output\");\n }\n return context.distDir ?? join(context.outDir, \"dist\");\n};\n\n/**\n * Directory holding an isolated build's client `_astro/` assets. Mirrors\n * `deployStaticDir`, except that an isolated build never surfaces the adapter\n * bundle to the project root — a Vercel server build's static output stays at\n * `<runtime>/.vercel/output/static`, where `deployStaticDir` would instead\n * point at the project-root copy (a previous real build's assets, or nothing).\n */\nexport const isolatedStaticDir = (\n config: ResolvedConfig,\n context: ProjectContext\n): string => {\n const { adapter, output } = config.deployment;\n const outputDir = isolatedOutputDir(config, context);\n if (output === \"server\" && adapter === \"vercel\") {\n return join(outputDir, \"static\");\n }\n if (output === \"server\" && adapter === \"node\") {\n return join(outputDir, \"client\");\n }\n return outputDir;\n};\n\n/**\n * Generate `llms.txt`/`llms-full.txt` into the dist dir. A user's own file in\n * `public/` (copied into dist by Astro before this runs, like the sitemap and\n * robots.txt) wins over the generated one — each file is checked and replaced\n * independently, so a custom `llms.txt` still gets a generated `llms-full.txt`.\n */\nconst publishLlmsFiles = async (\n project: BlumeProject,\n distDir: string\n): Promise<void> => {\n const indexPath = join(distDir, \"llms.txt\");\n const fullPath = join(distDir, \"llms-full.txt\");\n const writeIndex = !existsSync(indexPath);\n const writeFull = !existsSync(fullPath);\n if (!(writeIndex || writeFull)) {\n return;\n }\n const { index, full } = await buildLlmsFiles(project);\n const writes: Promise<void>[] = [];\n if (writeIndex) {\n writes.push(writeFile(indexPath, index, \"utf-8\"));\n }\n if (writeFull) {\n writes.push(writeFile(fullPath, full, \"utf-8\"));\n }\n await Promise.all(writes);\n logger.success(\n `Generated ${[\n writeIndex ? \"llms.txt\" : null,\n writeFull ? \"llms-full.txt\" : null,\n ]\n .filter(Boolean)\n .join(\" and \")}`\n );\n};\n\n/**\n * Run every deploy post-step of a real (non-isolated) build: the search index +\n * hosted-provider sync, llms.txt, sitemap/robots, redirect files, the summary\n * box, and the optional bundle report / budget gate. Exits non-zero if a budget\n * is exceeded. Isolated verify builds skip all of this except the bundle\n * report / budget gate, which they run against their own output.\n */\nconst publishBuildArtifacts = async (\n project: BlumeProject,\n distDir: string,\n args: { analyze?: boolean } & BudgetArgs\n): Promise<void> => {\n if (project.config.search.provider === \"pagefind\") {\n logger.start(\"Building search index\");\n const indexed = await buildSearchIndex(distDir);\n logger.success(`Indexed ${indexed} page(s) for search`);\n }\n\n // Upload the index to a hosted provider (Algolia, Orama Cloud, Typesense).\n // Skipped with a warning when its admin key isn't configured.\n await syncSearchProvider(project, {\n start: (message) => logger.start(message),\n success: (message) => logger.success(message),\n warn: (message) => logger.warn(message),\n });\n\n if (project.config.ai.llmsTxt.enabled) {\n await publishLlmsFiles(project, distDir);\n }\n\n // A user's own public/ file (copied into dist by Astro) always wins.\n const sitemap = buildSitemap(project);\n if (sitemap && !existsSync(join(distDir, \"sitemap.xml\"))) {\n await writeFile(join(distDir, \"sitemap.xml\"), sitemap, \"utf-8\");\n logger.success(\"Generated sitemap.xml\");\n }\n\n const robots = buildRobots(project);\n if (robots && !existsSync(join(distDir, \"robots.txt\"))) {\n await writeFile(join(distDir, \"robots.txt\"), robots, \"utf-8\");\n logger.success(\"Generated robots.txt\");\n }\n\n const agentReadability = buildAgentReadability(project);\n if (\n agentReadability &&\n !existsSync(join(distDir, \"agent-readability.json\"))\n ) {\n await writeFile(\n join(distDir, \"agent-readability.json\"),\n `${JSON.stringify(agentReadability, null, 2)}\\n`,\n \"utf-8\"\n );\n logger.success(\"Generated agent-readability.json\");\n }\n\n await emitRedirectFiles(project.config, distDir);\n await emitHeaderFiles(project.config, distDir);\n\n const { config } = project;\n const features = serverFeatures(config);\n // `buildSitemap` returns null both when the sitemap is disabled and when no\n // `site` is configured — only the latter deserves the remediation hint.\n const sitemapNote = config.seo.sitemap\n ? \"no (set deployment.site)\"\n : \"no (seo.sitemap is false)\";\n logger.box(\n [\n `Output ${config.deployment.output}`,\n `Adapter ${config.deployment.adapter ?? \"none\"}`,\n `Site ${config.deployment.site ?? \"not set\"}`,\n `Search ${config.search.provider}`,\n `Redirects ${config.redirects.length}`,\n `Sitemap ${sitemap ? \"yes\" : sitemapNote}`,\n `Robots ${robots ? \"yes\" : \"no\"}`,\n `Agent JSON ${agentReadability ? \"yes\" : \"no\"}`,\n `LLM files ${config.ai.llmsTxt.enabled ? \"yes\" : \"no\"}`,\n `Server features ${features.length > 0 ? features.join(\", \") : \"none\"}`,\n ].join(\"\\n\")\n );\n\n await runClientAssetChecks(distDir, args);\n\n // Only reachable with --no-strict (strict aborts earlier): repeat the missing\n // count next to the success banner so it can't scroll away unseen.\n if (project.droppedPages > 0) {\n logger.warn(\n `${project.droppedPages} page(s) failed frontmatter validation and are missing from this build.`\n );\n }\n logger.success(`Built to ${distDir}`);\n};\n\nexport const buildCommand = defineCommand({\n args: {\n adapter: {\n description: \"Server adapter: vercel | node | netlify | cloudflare.\",\n type: \"string\",\n },\n analyze: {\n description: \"Report client JavaScript bundle sizes after the build.\",\n type: \"boolean\",\n },\n base: {\n description: \"Base path the site is served under (e.g. /docs).\",\n type: \"string\",\n },\n [BUDGET_CSS]: {\n description: \"Fail if total client CSS exceeds this many kB.\",\n type: \"string\",\n },\n [BUDGET_JS]: {\n description: \"Fail if total client JavaScript exceeds this many kB.\",\n type: \"string\",\n },\n isolated: {\n description:\n \"Build into an isolated .blume-verify runtime (and its own dist) so a running dev server and the real dist/ are untouched. For verifying changes while `blume dev` runs.\",\n type: \"boolean\",\n },\n output: {\n description: \"Output mode: static | server.\",\n type: \"string\",\n },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: {\n default: true,\n description:\n \"Fail on error diagnostics (default; pass --no-strict to build anyway, dropping pages that fail validation).\",\n type: \"boolean\",\n },\n },\n meta: {\n description: \"Build the docs site for production.\",\n name: \"build\",\n },\n async run({ args }) {\n const root = process.cwd();\n\n // `--isolated` (or BLUME_RUNTIME_DIR) relocates the whole runtime to a\n // sibling dir so this build never touches a live dev server's `.blume/` or\n // the user's real `dist/`. A non-default runtime dir has no dev lock, so the\n // refusal below lets it proceed; a plain build still refuses.\n const runtimeDir = args.isolated\n ? \".blume-verify\"\n : process.env.BLUME_RUNTIME_DIR;\n refuseIfDevRunning(root, \"building\", { isolatedHint: true, runtimeDir });\n if (args.isolated) {\n await ensureGitignore(root, [\".blume-verify/\"]);\n }\n\n if (args.output && args.output !== \"static\" && args.output !== \"server\") {\n logger.error(`Invalid --output \"${args.output}\" (use static | server).`);\n process.exit(1);\n }\n if (args.adapter && !ADAPTERS.includes(args.adapter as never)) {\n logger.error(\n `Invalid --adapter \"${args.adapter}\" (use ${ADAPTERS.join(\" | \")}).`\n );\n process.exit(1);\n }\n validateBudgetFlags(args);\n\n const project = await prepareProject({\n mode: \"build\",\n overrides: {\n adapter: args.adapter as (typeof ADAPTERS)[number] | undefined,\n base: args.base,\n output: args.output as \"server\" | \"static\" | undefined,\n },\n preview: args.preview,\n root,\n runtimeDir,\n strict: args.strict,\n });\n\n logger.start(\n `Building ${project.graph.pages.length} page(s) (${project.config.deployment.output} output)`\n );\n\n await build({\n logLevel: \"info\",\n root: project.context.outDir,\n });\n\n // An isolated build is a throwaway verify: it only needs to confirm the site\n // compiles and renders. Skip the network post-steps (search sync) and\n // deploy artifacts (index/llms/sitemap/robots/redirects) that only matter\n // for a real publish and would push to hosted providers. The bundle report\n // and budget gate still run, though — `blume build --isolated --budget-js\n // 100` exiting 0 without measuring anything would be a silent false pass\n // in CI.\n if (runtimeDir) {\n await runClientAssetChecks(\n isolatedStaticDir(project.config, project.context),\n args\n );\n logger.success(\n `Isolated build OK — output at ${isolatedOutputDir(project.config, project.context)} (not published).`\n );\n return;\n }\n\n // A server adapter's deploy bundle is a build artifact — keep it out of\n // version control (Vercel's own CLI ignores `.vercel/` for the same reason).\n // Ignoring it is independent of whether the bundle had to be moved below:\n // Vercel writes straight to the project root, Netlify does not.\n const { adapter } = project.config.deployment;\n const ignoreDir = adapter ? ADAPTER_IGNORE_DIRS[adapter] : undefined;\n if (project.config.deployment.output === \"server\" && ignoreDir) {\n await ensureGitignore(root, [ignoreDir]);\n }\n\n // Netlify writes its deploy bundle relative to the Astro root — which Blume\n // points at the hidden `.blume` runtime — so the bundle lands where the\n // deploy platform never looks. Surface it up to the project root before\n // publishing artifacts into the served static dir.\n const surfaced = await surfaceAdapterOutput(\n project.config,\n project.context\n );\n if (surfaced.moved) {\n logger.success(`Surfaced ${adapter} output to ${surfaced.to}`);\n }\n\n await publishBuildArtifacts(\n project,\n deployStaticDir(project.config, project.context),\n args\n );\n },\n});\n",
|
|
122
122
|
"/** Escape a string for safe inclusion in XML text or attribute content. */\nexport const escapeXml = (value: string): string =>\n value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n",
|
|
123
123
|
"import { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport 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 // Routes carry `basePath`; a `deployment.base` subdirectory is layered on top.\n // The feed's own `link`/self URL points at the docs root under that base, while\n // `path` stays base-less (it's also the on-disk output location).\n const deployBase = normalizeBasePath(config.deployment.base);\n const rootLink = `${base}${deployBase}`;\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 // Encode like the sitemap does: a route with spaces or non-ASCII\n // must still yield a valid <link>/<guid> URL after XML decoding.\n link: encodeURI(`${base}${withBasePath(deployBase, 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: rootLink,\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 feedSelfHref = `${feed.link}${feed.path}`;\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(feedSelfHref)}\" 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",
|
|
124
124
|
"import { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { ContentSignalPolicy, ContentSignals } from \"../core/schema.ts\";\nimport { buildRssFeeds } from \"../deploy/rss.ts\";\n\n/** Token map for the machine-readable content-usage echo. */\nconst USAGE_TOKENS: [keyof ContentSignalPolicy, string][] = [\n [\"search\", \"search\"],\n [\"aiInput\", \"ai-input\"],\n [\"aiTrain\", \"ai-train\"],\n];\n\n/**\n * The configured usage preferences as a `{ token: allowed }` object, or null\n * when the declaration is disabled (`contentSignals: false`). Mirrors the\n * robots.txt `Content-Signal` line so an agent that reads the manifest instead\n * of robots.txt sees the same policy.\n */\nconst usagePolicy = (\n signals: ContentSignals\n): Record<string, boolean> | null => {\n if (!signals) {\n return null;\n }\n return Object.fromEntries(\n USAGE_TOKENS.map(([key, token]) => [token, signals[key]] as const)\n );\n};\n\n/**\n * Build `agent-readability.json`: a root manifest that indexes the project's\n * agent-facing surface — llms.txt, the raw-Markdown mirrors, the MCP server,\n * Ask AI, sitemap, and feeds — so agents can discover and cite the docs without\n * scraping HTML. URLs are absolute when a `site` is configured and root-relative\n * (still under `deployment.base`) otherwise. Returns null when the manifest is\n * disabled.\n */\nexport const buildAgentReadability = (\n project: BlumeProject\n): Record<string, unknown> | null => {\n const { config } = project;\n if (!config.seo.agentReadability) {\n return null;\n }\n\n const site = config.deployment.site ?? null;\n // Every artifact is served under `deployment.base` — with or without a\n // `site`; concatenate rather than `new URL()` so the subpath is preserved.\n const deployBase = normalizeBasePath(config.deployment.base);\n const abs = (path: string): string => {\n const based = withBasePath(deployBase, path);\n return site ? `${site.replace(/\\/+$/u, \"\")}${based}` : based;\n };\n\n const artifacts: Record<string, unknown> = {\n markdown: {\n contentNegotiation: \"text/markdown\",\n pattern: abs(\"/{route}.md\"),\n },\n };\n if (config.ai.llmsTxt.enabled) {\n artifacts.llmsFullTxt = abs(\"/llms-full.txt\");\n artifacts.llmsTxt = abs(\"/llms.txt\");\n }\n if (config.ai.mcp.enabled) {\n artifacts.mcp = {\n discovery: abs(\"/.well-known/mcp.json\"),\n url: abs(config.ai.mcp.route),\n };\n }\n if (config.ai.ask?.enabled) {\n artifacts.askApi = abs(\"/api/ask\");\n }\n if (site && config.seo.sitemap) {\n artifacts.sitemap = abs(\"/sitemap.xml\");\n }\n const feeds =\n site && config.seo.rss.enabled\n ? buildRssFeeds(project).map((feed) => abs(feed.path))\n : [];\n if (feeds.length > 0) {\n artifacts.feeds = feeds;\n }\n\n const version = project.manifest?.blumeVersion;\n const manifest: Record<string, unknown> = {\n artifacts,\n description: config.description,\n generator: version ? `blume@${version}` : undefined,\n name: config.ai.mcp.name ?? config.title,\n site,\n };\n\n const usage = usagePolicy(config.seo.contentSignals);\n if (usage) {\n manifest.contentUsage = usage;\n }\n if (config.github) {\n manifest.repository = `https://github.com/${config.github.owner}/${config.github.repo}`;\n }\n\n return manifest;\n};\n",
|
|
125
125
|
"import { readFile } from \"node:fs/promises\";\n\nimport type { PageRecord } from \"../types.ts\";\nimport type { ContentSource } from \"./types.ts\";\n\n/** The subset of a scanned project the entry reader needs. */\nexport interface EntryReadContext {\n /** The instantiated sources, keyed for `read()` lookups. */\n sources?: ContentSource[];\n}\n\n/**\n * Read an entry's raw body text without assuming a filesystem path. Prefers the\n * body captured at scan time (staged sources), then the owning source's lazy\n * `read()`, then the back-compat `sourcePath` (filesystem). Returns `\"\"` when an\n * entry can't be resolved, so callers degrade gracefully.\n */\nexport const readEntryText = async (\n ctx: EntryReadContext,\n page: PageRecord\n): Promise<string> => {\n if (page.body) {\n return page.body.text;\n }\n const name = page.source?.name;\n const source = name\n ? ctx.sources?.find((candidate) => candidate.name === name)\n : undefined;\n if (source?.read) {\n return await source.read(page.source.ref);\n }\n if (page.sourcePath) {\n return await readFile(page.sourcePath, \"utf-8\");\n }\n return \"\";\n};\n",
|
|
126
|
-
"import { mdxToMdast } from \"satteri\";\n\nimport { parseYouTubeId } from \"../components/content/youtube.ts\";\n\n/**\n * Downlevel Blume's MDX components to plain Markdown for agent-facing output\n * (the `/<route>.md` mirror, llms-full.txt, MCP `get_page`). Each supported\n * component has a serializer — its \"toString\" — that renders the same\n * information as the Astro component, but as portable Markdown: `<TypeTable>`\n * becomes a GFM table, `<Callout>` a blockquote, `<Steps>` an ordered list,\n * `<Tabs>` labeled sections, `<YouTube>` a link.\n *\n * The transform is a position splice, not a re-stringify: the MDX source is\n * parsed to MDAST (via Satteri, which stamps byte offsets on every node) and\n * only the matched component ranges are replaced, so all surrounding Markdown\n * stays byte-identical to what the author wrote. Anything the serializers\n * can't faithfully convert — an unknown component, a prop bound to an import —\n * is left as JSX, and fenced code that merely *shows* component markup is\n * naturally untouched because it parses as a `code` node.\n */\n\n/** Minimal structural MDAST types — we model only what this module reads. */\ninterface Offset {\n offset: number;\n}\n\ninterface MdastNode {\n attributes?: MdxAttribute[];\n children?: MdastNode[];\n name?: string;\n position?: { end: Offset; start: Offset };\n type: string;\n}\n\ninterface MdxAttribute {\n name?: string;\n type: string;\n value?: string | { type: string; value: string } | null;\n}\n\n/** A single source replacement: `[start, end)` byte range → `text`. */\ninterface Splice {\n end: number;\n start: number;\n text: string;\n}\n\n/** Evaluated props plus whether any attribute resisted static evaluation. */\ninterface EvaluatedProps {\n lossy: boolean;\n props: Record<string, unknown>;\n}\n\n/** A child component extracted by name (e.g. each `<Step>` under `<Steps>`). */\nexport interface ComponentMarkdownChild extends EvaluatedProps {\n /** The child's body, downleveled and dedented. */\n children: string;\n}\n\n/** What a serializer receives for one component usage. */\nexport interface ComponentMarkdownContext extends EvaluatedProps {\n /** Direct child components of `name`, each with evaluated props and body. */\n childComponents: (name: string) => ComponentMarkdownChild[];\n /** The element's body, downleveled and dedented (empty if self-closing). */\n children: string;\n}\n\n/**\n * A component's Markdown serializer. Return the replacement Markdown, or\n * `null` to leave the component's JSX in the output verbatim (the safe\n * fallback when the props can't be recovered statically).\n */\nexport type ComponentMarkdown = (\n context: ComponentMarkdownContext\n) => string | null;\n\n/**\n * Statically evaluate an MDX attribute expression (`prop={...}`). Component\n * data props are object/array/number literals in practice; evaluation runs at\n * build time over the author's own content — the same trust level as the MDX\n * itself, which Astro compiles and executes. Expressions that reference\n * imports or scope throw and report as not evaluable.\n */\nconst evaluateExpression = (raw: string): { ok: boolean; value: unknown } => {\n try {\n // Build-time eval of the author's own attribute literals; a throw falls\n // back to leaving the JSX verbatim.\n // oxlint-disable-next-line no-new-func\n const value = new Function(`\"use strict\"; return (${raw});`)();\n return { ok: true, value };\n } catch {\n return { ok: false, value: undefined };\n }\n};\n\n/** Evaluate an element's attributes into a plain props object. */\nconst readProps = (node: MdastNode): EvaluatedProps => {\n const props: Record<string, unknown> = {};\n let lossy = false;\n for (const attribute of node.attributes ?? []) {\n // A spread ({...props}) can't be recovered statically.\n if (attribute.type !== \"mdxJsxAttribute\" || !attribute.name) {\n lossy = true;\n continue;\n }\n if (attribute.value === null || attribute.value === undefined) {\n // Boolean shorthand: `<Steps compact>`.\n props[attribute.name] = true;\n } else if (typeof attribute.value === \"string\") {\n props[attribute.name] = attribute.value;\n } else {\n const result = evaluateExpression(attribute.value.value);\n if (result.ok) {\n props[attribute.name] = result.value;\n } else {\n lossy = true;\n }\n }\n }\n return { lossy, props };\n};\n\nconst hasOffsets = (\n node: MdastNode\n): node is MdastNode & { position: { end: Offset; start: Offset } } =>\n typeof node.position?.start?.offset === \"number\" &&\n typeof node.position?.end?.offset === \"number\";\n\n/** Apply non-overlapping splices to `text` (offsets relative to `text`). */\nconst applySplices = (text: string, splices: Splice[]): string => {\n let result = text;\n for (const splice of [...splices].toSorted((a, b) => b.start - a.start)) {\n // An element indented under a parent starts mid-line after whitespace;\n // repeat that indent on the replacement's continuation lines so the block\n // stays uniformly indented (and dedents cleanly with its siblings).\n const lineStart = result.lastIndexOf(\"\\n\", splice.start - 1) + 1;\n const prefix = result.slice(lineStart, splice.start);\n const indent = /^[\\t ]+$/u.test(prefix) ? prefix : \"\";\n const replacement = indent\n ? splice.text\n .split(\"\\n\")\n .map((line, index) =>\n index === 0 || line === \"\" ? line : `${indent}${line}`\n )\n .join(\"\\n\")\n : splice.text;\n result =\n result.slice(0, splice.start) + replacement + result.slice(splice.end);\n }\n return result;\n};\n\n/**\n * Strip the common indentation JSX children carry in source (`<Step>` bodies\n * are typically indented two spaces under their tag). The first line starts\n * mid-line at the slice boundary, so the common prefix is measured on the\n * following lines only.\n */\nconst dedent = (text: string): string => {\n const lines = text.split(\"\\n\");\n const rest = lines.slice(1).filter((line) => line.trim() !== \"\");\n if (rest.length === 0) {\n return text;\n }\n const indent = Math.min(\n ...rest.map((line) => line.length - line.trimStart().length)\n );\n if (indent === 0) {\n return text;\n }\n return [\n lines[0],\n ...lines\n .slice(1)\n .map((line) => (line.trim() === \"\" ? \"\" : line.slice(indent))),\n ].join(\"\\n\");\n};\n\nconst isJsxElement = (node: MdastNode): boolean =>\n node.type === \"mdxJsxFlowElement\" || node.type === \"mdxJsxTextElement\";\n\n/** Flatten a value to a single Markdown table cell (pipes escaped). */\nconst cellText = (value: unknown): string =>\n String(value ?? \"\")\n .replaceAll(/\\s*\\n\\s*/gu, \" \")\n .replaceAll(\"|\", \"\\\\|\")\n .trim();\n\n/** A cell rendered as inline code, unless the value itself uses backticks. */\nconst cellCode = (value: unknown): string => {\n const text = cellText(value);\n return text && !text.includes(\"`\") ? `\\`${text}\\`` : text;\n};\n\n/** One `<TypeTable type={{...}}>` entry, matching the component's shape. */\ninterface TypeEntry {\n default?: unknown;\n description?: unknown;\n required?: unknown;\n type?: unknown;\n typeDescription?: unknown;\n typeDescriptionLink?: unknown;\n}\n\nconst typeTable: ComponentMarkdown = ({ children, props }) => {\n const { type } = props;\n if (type === null || typeof type !== \"object\") {\n // The data prop is missing or wasn't statically evaluable.\n return null;\n }\n const entries = Object.entries(type as Record<string, TypeEntry>);\n const rows = entries.map(([name, info]) => {\n const prop = cellCode(`${name}${info.required ? \"\" : \"?\"}`);\n const typeCell = info.typeDescriptionLink\n ? `[${cellCode(info.type)}](${cellText(info.typeDescriptionLink)})`\n : cellCode(info.type);\n const defaultCell =\n info.default === undefined ? \"-\" : cellCode(info.default);\n const description = cellText(\n [info.description, info.typeDescription]\n .filter((part) => typeof part === \"string\" && part !== \"\")\n .join(\" \")\n );\n return `| ${prop} | ${typeCell} | ${defaultCell} | ${description} |`;\n });\n const table =\n rows.length > 0\n ? [\n \"| Prop | Type | Default | Description |\",\n \"| --- | --- | --- | --- |\",\n ...rows,\n ].join(\"\\n\")\n : \"\";\n // The component renders its slot after the table.\n return [table, children].filter(Boolean).join(\"\\n\\n\");\n};\n\nconst callout: ComponentMarkdown = ({ children, props }) => {\n const type = typeof props.type === \"string\" ? props.type : \"info\";\n const label =\n typeof props.title === \"string\" && props.title !== \"\"\n ? props.title\n : type.charAt(0).toUpperCase() + type.slice(1);\n if (!children) {\n return `> **${label}**`;\n }\n const body = children\n .split(\"\\n\")\n .map((line) => (line.trim() === \"\" ? \">\" : `> ${line}`))\n .join(\"\\n\");\n return `> **${label}**\\n>\\n${body}`;\n};\n\n/** Format `content` as one ordered-list item, continuation lines indented. */\nconst listItem = (index: number, content: string): string => {\n const marker = `${index}. `;\n return content\n .split(\"\\n\")\n .map((line, lineIndex) => {\n if (lineIndex === 0) {\n return `${marker}${line}`;\n }\n return line === \"\" ? \"\" : ` ${line}`;\n })\n .join(\"\\n\");\n};\n\nconst steps: ComponentMarkdown = ({ childComponents, children }) => {\n const items = childComponents(\"Step\");\n if (items.length === 0) {\n return children;\n }\n return items\n .map((step, index) => {\n const title =\n typeof step.props.title === \"string\" && step.props.title !== \"\"\n ? `**${step.props.title}**`\n : \"\";\n const content = [title, step.children].filter(Boolean).join(\"\\n\\n\");\n return listItem(index + 1, content);\n })\n .join(\"\\n\\n\");\n};\n\nconst tabs: ComponentMarkdown = ({ childComponents, children }) => {\n const items = childComponents(\"Tab\");\n if (items.length === 0) {\n return children;\n }\n return items\n .map((tab, index) => {\n const title =\n typeof tab.props.title === \"string\" && tab.props.title !== \"\"\n ? tab.props.title\n : `Tab ${index + 1}`;\n return tab.children ? `**${title}**\\n\\n${tab.children}` : `**${title}**`;\n })\n .join(\"\\n\\n\");\n};\n\nconst youtube: ComponentMarkdown = ({ props }) => {\n let input = \"\";\n if (typeof props.id === \"string\") {\n input = props.id;\n } else if (typeof props.url === \"string\") {\n input = props.url;\n }\n const videoId = parseYouTubeId(input);\n if (!videoId) {\n return null;\n }\n const start =\n typeof props.start === \"number\" && props.start > 0\n ? `&t=${Math.floor(props.start)}s`\n : \"\";\n const title =\n typeof props.title === \"string\" && props.title !== \"\"\n ? props.title\n : \"Watch on YouTube\";\n return `[${title}](https://www.youtube.com/watch?v=${videoId}${start})`;\n};\n\n/**\n * The built-in serializer registry, keyed by JSX name. `Step` and `Tab` are\n * intentionally absent: they only carry meaning inside their containers,\n * which extract them via `childComponents`; a stray one stays verbatim.\n */\nconst SERIALIZERS: Record<string, ComponentMarkdown> = {\n Callout: callout,\n Steps: steps,\n Tabs: tabs,\n TypeTable: typeTable,\n YouTube: youtube,\n};\n\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/gu, String.raw`\\$&`);\n\n// Skip the MDX parse when no serializable component name appears at all —\n// the common case for prose pages, and it keeps plain-Markdown sources (where\n// `<`/`{` may be literal text MDX would reject) out of the parser entirely.\nconst componentHint = (registry: Record<string, ComponentMarkdown>): RegExp =>\n new RegExp(\n `<(?:${Object.keys(registry).map(escapeRegExp).join(\"|\")})[\\\\s/>]`,\n \"u\"\n );\n\nconst BUILT_IN_HINT = componentHint(SERIALIZERS);\n\n/** One downlevel pass's inputs: the full source and the active registry. */\ninterface Walk {\n registry: Record<string, ComponentMarkdown>;\n source: string;\n}\n\n/**\n * The element's body as Markdown: the verbatim source slice covering its\n * children, with any serializable descendant components downleveled in place.\n * Mutually recursive with {@link collectSplices} (a container's children may\n * hold further serializable components), hence the forward reference.\n */\nconst renderChildren = (walk: Walk, node: MdastNode): string => {\n const children = (node.children ?? []).filter(hasOffsets);\n const [first] = children;\n if (!first) {\n return \"\";\n }\n const start = first.position.start.offset;\n const end = children.at(-1)?.position.end.offset ?? start;\n const splices: Splice[] = [];\n // oxlint-disable-next-line no-use-before-define\n collectSplices(walk, children, splices);\n const spliced = applySplices(\n walk.source.slice(start, end),\n splices.map((splice) => ({\n ...splice,\n end: splice.end - start,\n start: splice.start - start,\n }))\n );\n return dedent(spliced).trim();\n};\n\n/** Serialize one component usage, or `null` to keep its JSX verbatim. */\nconst serializeElement = (\n serializer: ComponentMarkdown,\n walk: Walk,\n node: MdastNode\n): string | null =>\n serializer({\n ...readProps(node),\n childComponents: (name) =>\n (node.children ?? [])\n .filter((child) => isJsxElement(child) && child.name === name)\n .map((child) => ({\n ...readProps(child),\n children: renderChildren(walk, child),\n })),\n children: renderChildren(walk, node),\n });\n\n/**\n * Walk the tree collecting replacements. A replaced element's subtree is\n * owned by its serializer (which downlevels its own children), so the walk\n * doesn't descend into it; when a serializer declines, the walk continues\n * inside so nested serializable components still convert.\n */\nconst collectSplices = (\n walk: Walk,\n nodes: MdastNode[],\n out: Splice[]\n): void => {\n for (const node of nodes) {\n const serializer =\n node.type === \"mdxJsxFlowElement\" && node.name\n ? walk.registry[node.name]\n : undefined;\n if (serializer && hasOffsets(node)) {\n const text = serializeElement(serializer, walk, node);\n if (text !== null) {\n out.push({\n end: node.position.end.offset,\n start: node.position.start.offset,\n text,\n });\n continue;\n }\n }\n collectSplices(walk, node.children ?? [], out);\n }\n};\n\n/**\n * Downlevel supported components in an MDX source to plain Markdown. Sources\n * with no supported components — and sources Satteri can't parse as MDX, e.g.\n * plain `.md` with literal `<`/`{` — are returned byte-identical.\n *\n * `components` adds user serializers from `ai.markdownComponents`, layered\n * over the built-ins: a same-name entry replaces the built-in serializer, and\n * one that always returns `null` effectively opts that component out.\n */\nexport const downlevelComponents = (\n source: string,\n components?: Record<string, ComponentMarkdown>\n): string => {\n const custom = components && Object.keys(components).length > 0;\n const registry = custom ? { ...SERIALIZERS, ...components } : SERIALIZERS;\n const hint = custom ? componentHint(registry) : BUILT_IN_HINT;\n if (!hint.test(source)) {\n return source;\n }\n let tree: MdastNode;\n try {\n tree = mdxToMdast(source) as MdastNode;\n } catch {\n return source;\n }\n const splices: Splice[] = [];\n collectSplices({ registry, source }, tree.children ?? [], splices);\n return splices.length > 0 ? applySplices(source, splices) : source;\n};\n",
|
|
126
|
+
"import { mdxToMdast } from \"satteri\";\n\nimport { parseYouTubeId } from \"../components/content/youtube.ts\";\n\n/**\n * Downlevel Blume's MDX components to plain Markdown for agent-facing output\n * (the `/<route>.md` mirror, llms-full.txt, MCP `get_page`). Each supported\n * component has a serializer — its \"toString\" — that renders the same\n * information as the Astro component, but as portable Markdown: `<TypeTable>`\n * becomes a GFM table, `<Callout>` a blockquote, `<Steps>` an ordered list,\n * `<Tabs>` labeled sections, `<YouTube>` a link.\n *\n * The transform is a position splice, not a re-stringify: the MDX source is\n * parsed to MDAST (via Satteri, which stamps byte offsets on every node) and\n * only the matched component ranges are replaced, so all surrounding Markdown\n * stays byte-identical to what the author wrote. Anything the serializers\n * can't faithfully convert — an unknown component, a prop bound to an import —\n * is left as JSX, and fenced code that merely *shows* component markup is\n * naturally untouched because it parses as a `code` node.\n */\n\n/** Minimal structural MDAST types — we model only what this module reads. */\ninterface Offset {\n offset: number;\n}\n\ninterface MdastNode {\n attributes?: MdxAttribute[];\n children?: MdastNode[];\n name?: string;\n position?: { end: Offset; start: Offset };\n type: string;\n}\n\ninterface MdxAttribute {\n name?: string;\n type: string;\n value?: string | { type: string; value: string } | null;\n}\n\n/** A single source replacement: `[start, end)` byte range → `text`. */\ninterface Splice {\n end: number;\n start: number;\n text: string;\n}\n\n/** Evaluated props plus whether any attribute resisted static evaluation. */\ninterface EvaluatedProps {\n lossy: boolean;\n props: Record<string, unknown>;\n}\n\n/** A child component extracted by name (e.g. each `<Step>` under `<Steps>`). */\nexport interface ComponentMarkdownChild extends EvaluatedProps {\n /** The child's body, downleveled and dedented. */\n children: string;\n}\n\n/** What a serializer receives for one component usage. */\nexport interface ComponentMarkdownContext extends EvaluatedProps {\n /** Direct child components of `name`, each with evaluated props and body. */\n childComponents: (name: string) => ComponentMarkdownChild[];\n /** The element's body, downleveled and dedented (empty if self-closing). */\n children: string;\n /**\n * The page's parsed front-matter (empty when the caller has none). Lets a\n * serializer read page metadata directly, even when a prop expression is\n * not statically evaluable.\n */\n frontmatter: Record<string, unknown>;\n}\n\n/**\n * A component's Markdown serializer. Return the replacement Markdown, or\n * `null` to leave the component's JSX in the output verbatim (the safe\n * fallback when the props can't be recovered statically).\n */\nexport type ComponentMarkdown = (\n context: ComponentMarkdownContext\n) => string | null;\n\n/**\n * Statically evaluate an MDX attribute expression (`prop={...}`). Component\n * data props are object/array/number literals in practice; evaluation runs at\n * build time over the author's own content — the same trust level as the MDX\n * itself, which Astro compiles and executes. The page's `frontmatter` is in\n * scope, mirroring what Astro provides an MDX body at render time, so\n * `prop={frontmatter.status}` resolves; expressions that reference imports or\n * other scope throw and report as not evaluable.\n */\nconst evaluateExpression = (\n raw: string,\n frontmatter: Record<string, unknown> | undefined\n): { ok: boolean; value: unknown } => {\n try {\n // Build-time eval of the author's own attribute literals; a throw falls\n // back to leaving the JSX verbatim.\n // oxlint-disable-next-line no-new-func\n const value = new Function(\"frontmatter\", `\"use strict\"; return (${raw});`)(\n frontmatter\n );\n return { ok: true, value };\n } catch {\n return { ok: false, value: undefined };\n }\n};\n\n/** Evaluate an element's attributes into a plain props object. */\nconst readProps = (\n node: MdastNode,\n frontmatter: Record<string, unknown> | undefined\n): EvaluatedProps => {\n const props: Record<string, unknown> = {};\n let lossy = false;\n for (const attribute of node.attributes ?? []) {\n // A spread ({...props}) can't be recovered statically.\n if (attribute.type !== \"mdxJsxAttribute\" || !attribute.name) {\n lossy = true;\n continue;\n }\n if (attribute.value === null || attribute.value === undefined) {\n // Boolean shorthand: `<Steps compact>`.\n props[attribute.name] = true;\n } else if (typeof attribute.value === \"string\") {\n props[attribute.name] = attribute.value;\n } else {\n const result = evaluateExpression(attribute.value.value, frontmatter);\n if (result.ok) {\n props[attribute.name] = result.value;\n } else {\n lossy = true;\n }\n }\n }\n return { lossy, props };\n};\n\nconst hasOffsets = (\n node: MdastNode\n): node is MdastNode & { position: { end: Offset; start: Offset } } =>\n typeof node.position?.start?.offset === \"number\" &&\n typeof node.position?.end?.offset === \"number\";\n\n/** Apply non-overlapping splices to `text` (offsets relative to `text`). */\nconst applySplices = (text: string, splices: Splice[]): string => {\n let result = text;\n for (const splice of [...splices].toSorted((a, b) => b.start - a.start)) {\n // An element indented under a parent starts mid-line after whitespace;\n // repeat that indent on the replacement's continuation lines so the block\n // stays uniformly indented (and dedents cleanly with its siblings).\n const lineStart = result.lastIndexOf(\"\\n\", splice.start - 1) + 1;\n const prefix = result.slice(lineStart, splice.start);\n const indent = /^[\\t ]+$/u.test(prefix) ? prefix : \"\";\n const replacement = indent\n ? splice.text\n .split(\"\\n\")\n .map((line, index) =>\n index === 0 || line === \"\" ? line : `${indent}${line}`\n )\n .join(\"\\n\")\n : splice.text;\n result =\n result.slice(0, splice.start) + replacement + result.slice(splice.end);\n }\n return result;\n};\n\n/**\n * Strip the common indentation JSX children carry in source (`<Step>` bodies\n * are typically indented two spaces under their tag). The first line starts\n * mid-line at the slice boundary, so the common prefix is measured on the\n * following lines only.\n */\nconst dedent = (text: string): string => {\n const lines = text.split(\"\\n\");\n const rest = lines.slice(1).filter((line) => line.trim() !== \"\");\n if (rest.length === 0) {\n return text;\n }\n const indent = Math.min(\n ...rest.map((line) => line.length - line.trimStart().length)\n );\n if (indent === 0) {\n return text;\n }\n return [\n lines[0],\n ...lines\n .slice(1)\n .map((line) => (line.trim() === \"\" ? \"\" : line.slice(indent))),\n ].join(\"\\n\");\n};\n\nconst isJsxElement = (node: MdastNode): boolean =>\n node.type === \"mdxJsxFlowElement\" || node.type === \"mdxJsxTextElement\";\n\n/** Flatten a value to a single Markdown table cell (pipes escaped). */\nconst cellText = (value: unknown): string =>\n String(value ?? \"\")\n .replaceAll(/\\s*\\n\\s*/gu, \" \")\n .replaceAll(\"|\", \"\\\\|\")\n .trim();\n\n/** A cell rendered as inline code, unless the value itself uses backticks. */\nconst cellCode = (value: unknown): string => {\n const text = cellText(value);\n return text && !text.includes(\"`\") ? `\\`${text}\\`` : text;\n};\n\n/** One `<TypeTable type={{...}}>` entry, matching the component's shape. */\ninterface TypeEntry {\n default?: unknown;\n description?: unknown;\n required?: unknown;\n type?: unknown;\n typeDescription?: unknown;\n typeDescriptionLink?: unknown;\n}\n\nconst typeTable: ComponentMarkdown = ({ children, props }) => {\n const { type } = props;\n if (type === null || typeof type !== \"object\") {\n // The data prop is missing or wasn't statically evaluable.\n return null;\n }\n const entries = Object.entries(type as Record<string, TypeEntry>);\n const rows = entries.map(([name, info]) => {\n const prop = cellCode(`${name}${info.required ? \"\" : \"?\"}`);\n const typeCell = info.typeDescriptionLink\n ? `[${cellCode(info.type)}](${cellText(info.typeDescriptionLink)})`\n : cellCode(info.type);\n const defaultCell =\n info.default === undefined ? \"-\" : cellCode(info.default);\n const description = cellText(\n [info.description, info.typeDescription]\n .filter((part) => typeof part === \"string\" && part !== \"\")\n .join(\" \")\n );\n return `| ${prop} | ${typeCell} | ${defaultCell} | ${description} |`;\n });\n const table =\n rows.length > 0\n ? [\n \"| Prop | Type | Default | Description |\",\n \"| --- | --- | --- | --- |\",\n ...rows,\n ].join(\"\\n\")\n : \"\";\n // The component renders its slot after the table.\n return [table, children].filter(Boolean).join(\"\\n\\n\");\n};\n\nconst callout: ComponentMarkdown = ({ children, props }) => {\n const type = typeof props.type === \"string\" ? props.type : \"info\";\n const label =\n typeof props.title === \"string\" && props.title !== \"\"\n ? props.title\n : type.charAt(0).toUpperCase() + type.slice(1);\n if (!children) {\n return `> **${label}**`;\n }\n const body = children\n .split(\"\\n\")\n .map((line) => (line.trim() === \"\" ? \">\" : `> ${line}`))\n .join(\"\\n\");\n return `> **${label}**\\n>\\n${body}`;\n};\n\n/** Format `content` as one ordered-list item, continuation lines indented. */\nconst listItem = (index: number, content: string): string => {\n const marker = `${index}. `;\n return content\n .split(\"\\n\")\n .map((line, lineIndex) => {\n if (lineIndex === 0) {\n return `${marker}${line}`;\n }\n return line === \"\" ? \"\" : ` ${line}`;\n })\n .join(\"\\n\");\n};\n\nconst steps: ComponentMarkdown = ({ childComponents, children }) => {\n const items = childComponents(\"Step\");\n if (items.length === 0) {\n return children;\n }\n return items\n .map((step, index) => {\n const title =\n typeof step.props.title === \"string\" && step.props.title !== \"\"\n ? `**${step.props.title}**`\n : \"\";\n const content = [title, step.children].filter(Boolean).join(\"\\n\\n\");\n return listItem(index + 1, content);\n })\n .join(\"\\n\\n\");\n};\n\nconst tabs: ComponentMarkdown = ({ childComponents, children }) => {\n const items = childComponents(\"Tab\");\n if (items.length === 0) {\n return children;\n }\n return items\n .map((tab, index) => {\n const title =\n typeof tab.props.title === \"string\" && tab.props.title !== \"\"\n ? tab.props.title\n : `Tab ${index + 1}`;\n return tab.children ? `**${title}**\\n\\n${tab.children}` : `**${title}**`;\n })\n .join(\"\\n\\n\");\n};\n\nconst youtube: ComponentMarkdown = ({ props }) => {\n let input = \"\";\n if (typeof props.id === \"string\") {\n input = props.id;\n } else if (typeof props.url === \"string\") {\n input = props.url;\n }\n const videoId = parseYouTubeId(input);\n if (!videoId) {\n return null;\n }\n const start =\n typeof props.start === \"number\" && props.start > 0\n ? `&t=${Math.floor(props.start)}s`\n : \"\";\n const title =\n typeof props.title === \"string\" && props.title !== \"\"\n ? props.title\n : \"Watch on YouTube\";\n return `[${title}](https://www.youtube.com/watch?v=${videoId}${start})`;\n};\n\n/**\n * The built-in serializer registry, keyed by JSX name. `Step` and `Tab` are\n * intentionally absent: they only carry meaning inside their containers,\n * which extract them via `childComponents`; a stray one stays verbatim.\n */\nconst SERIALIZERS: Record<string, ComponentMarkdown> = {\n Callout: callout,\n Steps: steps,\n Tabs: tabs,\n TypeTable: typeTable,\n YouTube: youtube,\n};\n\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(/[$()*+.?[\\\\\\]^{|}]/gu, String.raw`\\$&`);\n\n// Skip the MDX parse when no serializable component name appears at all —\n// the common case for prose pages, and it keeps plain-Markdown sources (where\n// `<`/`{` may be literal text MDX would reject) out of the parser entirely.\nconst componentHint = (registry: Record<string, ComponentMarkdown>): RegExp =>\n new RegExp(\n `<(?:${Object.keys(registry).map(escapeRegExp).join(\"|\")})[\\\\s/>]`,\n \"u\"\n );\n\nconst BUILT_IN_HINT = componentHint(SERIALIZERS);\n\n/** One downlevel pass's inputs: the source, registry, and page metadata. */\ninterface Walk {\n frontmatter: Record<string, unknown> | undefined;\n registry: Record<string, ComponentMarkdown>;\n source: string;\n}\n\n/**\n * The element's body as Markdown: the verbatim source slice covering its\n * children, with any serializable descendant components downleveled in place.\n * Mutually recursive with {@link collectSplices} (a container's children may\n * hold further serializable components), hence the forward reference.\n */\nconst renderChildren = (walk: Walk, node: MdastNode): string => {\n const children = (node.children ?? []).filter(hasOffsets);\n const [first] = children;\n if (!first) {\n return \"\";\n }\n const start = first.position.start.offset;\n const end = children.at(-1)?.position.end.offset ?? start;\n const splices: Splice[] = [];\n // oxlint-disable-next-line no-use-before-define\n collectSplices(walk, children, splices);\n const spliced = applySplices(\n walk.source.slice(start, end),\n splices.map((splice) => ({\n ...splice,\n end: splice.end - start,\n start: splice.start - start,\n }))\n );\n return dedent(spliced).trim();\n};\n\n/** Serialize one component usage, or `null` to keep its JSX verbatim. */\nconst serializeElement = (\n serializer: ComponentMarkdown,\n walk: Walk,\n node: MdastNode\n): string | null =>\n serializer({\n ...readProps(node, walk.frontmatter),\n childComponents: (name) =>\n (node.children ?? [])\n .filter((child) => isJsxElement(child) && child.name === name)\n .map((child) => ({\n ...readProps(child, walk.frontmatter),\n children: renderChildren(walk, child),\n })),\n children: renderChildren(walk, node),\n frontmatter: walk.frontmatter ?? {},\n });\n\n/**\n * Walk the tree collecting replacements. A replaced element's subtree is\n * owned by its serializer (which downlevels its own children), so the walk\n * doesn't descend into it; when a serializer declines, the walk continues\n * inside so nested serializable components still convert.\n */\nconst collectSplices = (\n walk: Walk,\n nodes: MdastNode[],\n out: Splice[]\n): void => {\n for (const node of nodes) {\n const serializer =\n node.type === \"mdxJsxFlowElement\" && node.name\n ? walk.registry[node.name]\n : undefined;\n if (serializer && hasOffsets(node)) {\n const text = serializeElement(serializer, walk, node);\n if (text !== null) {\n out.push({\n end: node.position.end.offset,\n start: node.position.start.offset,\n text,\n });\n continue;\n }\n }\n collectSplices(walk, node.children ?? [], out);\n }\n};\n\n/**\n * Downlevel supported components in an MDX source to plain Markdown. Sources\n * with no supported components — and sources Satteri can't parse as MDX, e.g.\n * plain `.md` with literal `<`/`{` — are returned byte-identical.\n *\n * `components` adds user serializers from `ai.markdownComponents`, layered\n * over the built-ins: a same-name entry replaces the built-in serializer, and\n * one that always returns `null` effectively opts that component out.\n *\n * `frontmatter` is the page's parsed front-matter data. It is put in scope\n * when evaluating attribute expressions — so `prop={frontmatter.status}`\n * resolves the way it does when Astro renders the page — and handed to\n * serializers on their context.\n */\nexport const downlevelComponents = (\n source: string,\n components?: Record<string, ComponentMarkdown>,\n frontmatter?: Record<string, unknown>\n): string => {\n const custom = components && Object.keys(components).length > 0;\n const registry = custom ? { ...SERIALIZERS, ...components } : SERIALIZERS;\n const hint = custom ? componentHint(registry) : BUILT_IN_HINT;\n if (!hint.test(source)) {\n return source;\n }\n let tree: MdastNode;\n try {\n tree = mdxToMdast(source) as MdastNode;\n } catch {\n return source;\n }\n const splices: Splice[] = [];\n collectSplices(\n { frontmatter, registry, source },\n tree.children ?? [],\n splices\n );\n return splices.length > 0 ? applySplices(source, splices) : source;\n};\n",
|
|
127
127
|
"/**\n * Helpers for the `<YouTube>` content component. Kept in a sibling `.ts` (like\n * `diff.ts`/`github-info.ts`) so the id parsing and embed-URL building are pure,\n * unit-testable functions — the `.astro` file stays a thin presentational shell.\n */\n\n// A YouTube video id is 11 characters of [A-Za-z0-9_-].\nconst BARE_ID = /^[\\w-]{11}$/u;\n\n// Pull the id out of any common YouTube URL: youtu.be/<id>, watch?v=<id>,\n// /embed/<id>, /shorts/<id>, /live/<id>.\nconst URL_ID =\n /(?:youtu\\.be\\/|\\/embed\\/|\\/shorts\\/|\\/live\\/|[?&]v=)(?<id>[\\w-]{11})/u;\n\n/**\n * Resolve a YouTube video id from either a bare id or a full URL. Returns `null`\n * when nothing that looks like an id can be found, so the component can render\n * nothing rather than a broken embed.\n */\nexport const parseYouTubeId = (input: string): string | null => {\n const value = input.trim();\n if (!value) {\n return null;\n }\n if (BARE_ID.test(value)) {\n return value;\n }\n return URL_ID.exec(value)?.groups?.id ?? null;\n};\n\n/**\n * Build a privacy-enhanced (`youtube-nocookie.com`) embed URL, optionally\n * starting at `start` seconds.\n */\nexport const youtubeEmbedUrl = (\n id: string,\n options: { start?: number } = {}\n): string => {\n const base = `https://www.youtube-nocookie.com/embed/${id}`;\n const { start } = options;\n if (start && start > 0) {\n const params = new URLSearchParams({ start: String(Math.floor(start)) });\n return `${base}?${params.toString()}`;\n }\n return base;\n};\n",
|
|
128
128
|
"// Mirrors the fence masking in `core/sources/assets.ts`: a fenced code sample\n// that *shows* `<Visibility>` markup must keep showing what the author wrote.\nconst CODE_FENCE_BLOCK =\n /^(?<fence>`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^\\k<fence>[^\\n]*(?=\\n|$)/gmu;\n// NUL delimiters cannot appear in authored markdown, so tokens never collide.\n// oxlint-disable-next-line no-control-regex -- the NUL is the collision guard.\nconst FENCE_TOKEN = /\\u0000blume-fence-(?<index>\\d+)\\u0000/gu;\n\n/** The audience an output surface serves — the component's two `for` values. */\nexport type VisibilityAudience = \"agents\" | \"web\";\n\n// `<Visibility for=\"…\">…</Visibility>` in either quote style, tolerant of\n// whitespace around the attribute and inside the tags. Non-greedy bodies stop\n// at the first close tag, so nesting is not supported: a nested block closes\n// the outer match early and any remainder passes through verbatim.\nconst visibilityBlock = (audience: VisibilityAudience): RegExp =>\n new RegExp(\n `<Visibility\\\\s+for\\\\s*=\\\\s*(?:\"${audience}\"|'${audience}')\\\\s*>(?<inner>[\\\\s\\\\S]*?)</Visibility\\\\s*>`,\n \"gu\"\n );\n\nconst BLOCKS: Record<VisibilityAudience, RegExp> = {\n agents: visibilityBlock(\"agents\"),\n web: visibilityBlock(\"web\"),\n};\n\n/**\n * Resolve `<Visibility>` blocks for one audience: blocks addressed to the\n * other audience are removed entirely and blocks addressed to `audience` are\n * unwrapped (tags dropped, body kept), matching what the Astro component\n * renders on the web. Other `for` values (the component's default) are left\n * untouched, and markdown with no matching blocks is returned byte-identical,\n * so raw sources stay raw.\n */\nexport const applyAudienceVisibility = (\n markdown: string,\n audience: VisibilityAudience\n): string => {\n // Mask fenced code blocks so documentation *about* Visibility survives.\n const fences: string[] = [];\n const masked = markdown.replace(CODE_FENCE_BLOCK, (block) => {\n fences.push(block);\n return `\\u0000blume-fence-${fences.length - 1}\\u0000`;\n });\n\n let touched = false;\n const filtered = masked\n .replaceAll(BLOCKS[audience === \"agents\" ? \"web\" : \"agents\"], () => {\n touched = true;\n return \"\";\n })\n .replaceAll(BLOCKS[audience], (_match, inner: string) => {\n touched = true;\n return inner;\n });\n\n // Removing/unwrapping block-level tags leaves runs of blank lines behind;\n // collapse them only when something matched so untouched files round-trip\n // exactly. Fences are masked as single-line tokens, so they are unaffected.\n const tidied = touched ? filtered.replaceAll(/\\n{3,}/gu, \"\\n\\n\") : filtered;\n\n return tidied.replaceAll(\n FENCE_TOKEN,\n (token, index) => fences[Number(index)] ?? token\n );\n};\n\n/**\n * Resolve `<Visibility>` blocks for agent-facing Markdown (llms-full.txt, the\n * `.md`/`.mdx` mirrors, MCP tools, Ask AI grounding): `for=\"web\"` content is\n * removed and `for=\"agents\"` content is unwrapped.\n */\nexport const applyAgentVisibility = (markdown: string): string =>\n applyAudienceVisibility(markdown, \"agents\");\n",
|
|
129
|
-
"import { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport matter from \"../core/frontmatter.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { readEntryText } from \"../core/sources/read.ts\";\nimport type { NavNode, Navigation, PageRecord } from \"../core/types.ts\";\nimport { buildRssFeeds } from \"../deploy/rss.ts\";\nimport { downlevelComponents } from \"./component-markdown.ts\";\nimport { applyAgentVisibility } from \"./visibility.ts\";\n\n// Routes carry `basePath`; a `deployment.base` subdirectory is layered on top —\n// with or without a `site` (the mcp.json convention) — so the emitted URL\n// matches where the page is served. Encoded like the sitemap: a route with\n// spaces or non-ASCII must still yield a valid Markdown link.\nconst pageUrl = (route: string, site?: string, base = \"\"): string => {\n const path = withBasePath(base, route);\n return encodeURI(site ? `${site.replace(/\\/$/u, \"\")}${path}` : path);\n};\n\n// Drafts, hidden, and `noindex` pages are excluded, matching the sitemap.\n// Generated API reference pages are excluded when `ai.llmsTxt.openapi` is off\n// (they arrive through the internal staged \"openapi\" source).\nconst eligiblePages = (project: BlumeProject): PageRecord[] =>\n project.graph.pages.filter(\n (page) =>\n !(page.meta.draft || page.meta.sidebar.hidden || page.meta.seo.noindex) &&\n (project.config.ai.llmsTxt.openapi || page.source.name !== \"openapi\")\n );\n\n/**\n * The navigation trees the index mirrors: the site tree, or one per locale\n * under i18n (each labeled with the locale except the default, so sections\n * don't repeat ambiguously).\n */\nconst indexedNavigations = (\n project: BlumeProject\n): { label?: string; nav: Navigation }[] => {\n const { i18n } = project.config;\n if (i18n) {\n return i18n.locales.flatMap(({ code, label }) => {\n const nav = project.graph.navigationByLocale[code];\n if (!nav) {\n return [];\n }\n return [{ label: code === i18n.defaultLocale ? undefined : label, nav }];\n });\n }\n return [{ nav: project.graph.navigation }];\n};\n\n/**\n * Build the compact `llms.txt` index: title and summary, then the sidebar tree\n * rendered as sections — group labels become headings, pages become link lists —\n * so the file mirrors how the docs are organized rather than one flat blob.\n */\nconst buildIndex = (project: BlumeProject): string => {\n const { config } = project;\n const { site } = config.deployment;\n const base = normalizeBasePath(config.deployment.base);\n const eligible = eligiblePages(project);\n const byRoute = new Map(eligible.map((page) => [page.route, page]));\n const seen = new Set<string>();\n\n const line = (page: PageRecord): string => {\n seen.add(page.route);\n const summary = page.description ? `: ${page.description}` : \"\";\n return `- [${page.title}](${pageUrl(page.route, site, base)})${summary}`;\n };\n\n // One nav level -> Markdown blocks: the level's loose pages as a link list,\n // then each group as a heading (depth-capped at h6) followed by its own\n // blocks. Nav entries whose route has no eligible page — external links,\n // padded i18n fallbacks, `noindex` pages, excluded API references — are\n // skipped, and a group left with nothing emits no heading at all.\n const renderLevel = (nodes: NavNode[], depth: number): string[] => {\n const list: string[] = [];\n const groupBlocks: string[] = [];\n for (const node of nodes) {\n if (node.kind === \"page\") {\n const page = byRoute.get(node.route);\n if (page && !seen.has(page.route)) {\n list.push(line(page));\n }\n continue;\n }\n // An explicit-config group may link its index page on the group itself\n // (`root`) rather than as a child; keep it at the top of the section.\n const rootPage = node.route ? byRoute.get(node.route) : undefined;\n const blocks = renderLevel(node.children, depth + 1);\n if (rootPage && !seen.has(rootPage.route)) {\n blocks.unshift(line(rootPage));\n }\n if (blocks.length > 0) {\n groupBlocks.push(\n `${\"#\".repeat(Math.min(depth, 6))} ${node.label}`,\n ...blocks\n );\n }\n }\n return list.length > 0 ? [list.join(\"\\n\"), ...groupBlocks] : groupBlocks;\n };\n\n // Loose pages at a tree's root get a \"Docs\" section of their own, so every\n // link sits under an h2 as llms.txt consumers expect.\n const renderNav = (nav: Navigation, depth: number): string[] => {\n const loose = nav.sidebar.filter((node) => node.kind === \"page\");\n const groups = nav.sidebar.filter((node) => node.kind === \"group\");\n const looseBlocks = renderLevel(loose, depth + 1);\n return [\n ...(looseBlocks.length > 0\n ? [`${\"#\".repeat(depth)} Docs`, ...looseBlocks]\n : []),\n ...renderLevel(groups, depth),\n ];\n };\n\n const blocks: string[] = [];\n for (const { label, nav } of indexedNavigations(project)) {\n if (label) {\n const localized = renderNav(nav, 3);\n if (localized.length > 0) {\n blocks.push(`## ${label}`, ...localized);\n }\n continue;\n }\n blocks.push(...renderNav(nav, 2));\n }\n\n // Pages the navigation doesn't reach (an explicit sidebar that omits them,\n // or a hand-rolled tree) still belong in the index.\n const leftover = eligible\n .filter((page) => !seen.has(page.route))\n .toSorted((a, b) => a.route.localeCompare(b.route));\n if (leftover.length > 0) {\n blocks.push(\n blocks.length > 0 ? \"## Other\" : \"## Docs\",\n leftover.map(line).join(\"\\n\")\n );\n }\n\n // Surface the RSS feeds so agents can find fresh content (new blog posts,\n // changelog entries) without re-crawling the index. `buildRssFeeds` is empty\n // unless RSS is enabled and an absolute `site` is set — the same condition\n // under which agent-readability.json lists `artifacts.feeds`.\n const feeds = buildRssFeeds(project);\n if (feeds.length > 0) {\n blocks.push(\n \"## RSS Feeds\",\n feeds\n .map((feed) => `- [${feed.title}](${pageUrl(feed.path, site, base)})`)\n .join(\"\\n\")\n );\n }\n\n const header = config.description\n ? `# ${config.title}\\n\\n> ${config.description}`\n : `# ${config.title}`;\n return `${[header, ...blocks].join(\"\\n\\n\")}\\n`;\n};\n\n/** Build `llms-full.txt`: the full Markdown body of every page. */\nconst buildFull = async (project: BlumeProject): Promise<string> => {\n const { config } = project;\n const pages = eligiblePages(project).toSorted((a, b) =>\n a.route.localeCompare(b.route)\n );\n\n const sections = await Promise.all(\n pages.map(async (page) => {\n const raw = await readEntryText(project, page);\n // Resolve `<Visibility>` audiences (web-only content omitted from the\n // agent-facing output, agents-only unwrapped), then downlevel supported\n // components to plain Markdown.\n const body = downlevelComponents(\n applyAgentVisibility(
|
|
129
|
+
"import { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport matter from \"../core/frontmatter.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { readEntryText } from \"../core/sources/read.ts\";\nimport type { NavNode, Navigation, PageRecord } from \"../core/types.ts\";\nimport { buildRssFeeds } from \"../deploy/rss.ts\";\nimport { downlevelComponents } from \"./component-markdown.ts\";\nimport { applyAgentVisibility } from \"./visibility.ts\";\n\n// Routes carry `basePath`; a `deployment.base` subdirectory is layered on top —\n// with or without a `site` (the mcp.json convention) — so the emitted URL\n// matches where the page is served. Encoded like the sitemap: a route with\n// spaces or non-ASCII must still yield a valid Markdown link.\nconst pageUrl = (route: string, site?: string, base = \"\"): string => {\n const path = withBasePath(base, route);\n return encodeURI(site ? `${site.replace(/\\/$/u, \"\")}${path}` : path);\n};\n\n// Drafts, hidden, and `noindex` pages are excluded, matching the sitemap.\n// Generated API reference pages are excluded when `ai.llmsTxt.openapi` is off\n// (they arrive through the internal staged \"openapi\" source).\nconst eligiblePages = (project: BlumeProject): PageRecord[] =>\n project.graph.pages.filter(\n (page) =>\n !(page.meta.draft || page.meta.sidebar.hidden || page.meta.seo.noindex) &&\n (project.config.ai.llmsTxt.openapi || page.source.name !== \"openapi\")\n );\n\n/**\n * The navigation trees the index mirrors: the site tree, or one per locale\n * under i18n (each labeled with the locale except the default, so sections\n * don't repeat ambiguously).\n */\nconst indexedNavigations = (\n project: BlumeProject\n): { label?: string; nav: Navigation }[] => {\n const { i18n } = project.config;\n if (i18n) {\n return i18n.locales.flatMap(({ code, label }) => {\n const nav = project.graph.navigationByLocale[code];\n if (!nav) {\n return [];\n }\n return [{ label: code === i18n.defaultLocale ? undefined : label, nav }];\n });\n }\n return [{ nav: project.graph.navigation }];\n};\n\n/**\n * Build the compact `llms.txt` index: title and summary, then the sidebar tree\n * rendered as sections — group labels become headings, pages become link lists —\n * so the file mirrors how the docs are organized rather than one flat blob.\n */\nconst buildIndex = (project: BlumeProject): string => {\n const { config } = project;\n const { site } = config.deployment;\n const base = normalizeBasePath(config.deployment.base);\n const eligible = eligiblePages(project);\n const byRoute = new Map(eligible.map((page) => [page.route, page]));\n const seen = new Set<string>();\n\n const line = (page: PageRecord): string => {\n seen.add(page.route);\n const summary = page.description ? `: ${page.description}` : \"\";\n return `- [${page.title}](${pageUrl(page.route, site, base)})${summary}`;\n };\n\n // One nav level -> Markdown blocks: the level's loose pages as a link list,\n // then each group as a heading (depth-capped at h6) followed by its own\n // blocks. Nav entries whose route has no eligible page — external links,\n // padded i18n fallbacks, `noindex` pages, excluded API references — are\n // skipped, and a group left with nothing emits no heading at all.\n const renderLevel = (nodes: NavNode[], depth: number): string[] => {\n const list: string[] = [];\n const groupBlocks: string[] = [];\n for (const node of nodes) {\n if (node.kind === \"page\") {\n const page = byRoute.get(node.route);\n if (page && !seen.has(page.route)) {\n list.push(line(page));\n }\n continue;\n }\n // An explicit-config group may link its index page on the group itself\n // (`root`) rather than as a child; keep it at the top of the section.\n const rootPage = node.route ? byRoute.get(node.route) : undefined;\n const blocks = renderLevel(node.children, depth + 1);\n if (rootPage && !seen.has(rootPage.route)) {\n blocks.unshift(line(rootPage));\n }\n if (blocks.length > 0) {\n groupBlocks.push(\n `${\"#\".repeat(Math.min(depth, 6))} ${node.label}`,\n ...blocks\n );\n }\n }\n return list.length > 0 ? [list.join(\"\\n\"), ...groupBlocks] : groupBlocks;\n };\n\n // Loose pages at a tree's root get a \"Docs\" section of their own, so every\n // link sits under an h2 as llms.txt consumers expect.\n const renderNav = (nav: Navigation, depth: number): string[] => {\n const loose = nav.sidebar.filter((node) => node.kind === \"page\");\n const groups = nav.sidebar.filter((node) => node.kind === \"group\");\n const looseBlocks = renderLevel(loose, depth + 1);\n return [\n ...(looseBlocks.length > 0\n ? [`${\"#\".repeat(depth)} Docs`, ...looseBlocks]\n : []),\n ...renderLevel(groups, depth),\n ];\n };\n\n const blocks: string[] = [];\n for (const { label, nav } of indexedNavigations(project)) {\n if (label) {\n const localized = renderNav(nav, 3);\n if (localized.length > 0) {\n blocks.push(`## ${label}`, ...localized);\n }\n continue;\n }\n blocks.push(...renderNav(nav, 2));\n }\n\n // Pages the navigation doesn't reach (an explicit sidebar that omits them,\n // or a hand-rolled tree) still belong in the index.\n const leftover = eligible\n .filter((page) => !seen.has(page.route))\n .toSorted((a, b) => a.route.localeCompare(b.route));\n if (leftover.length > 0) {\n blocks.push(\n blocks.length > 0 ? \"## Other\" : \"## Docs\",\n leftover.map(line).join(\"\\n\")\n );\n }\n\n // Surface the RSS feeds so agents can find fresh content (new blog posts,\n // changelog entries) without re-crawling the index. `buildRssFeeds` is empty\n // unless RSS is enabled and an absolute `site` is set — the same condition\n // under which agent-readability.json lists `artifacts.feeds`.\n const feeds = buildRssFeeds(project);\n if (feeds.length > 0) {\n blocks.push(\n \"## RSS Feeds\",\n feeds\n .map((feed) => `- [${feed.title}](${pageUrl(feed.path, site, base)})`)\n .join(\"\\n\")\n );\n }\n\n const header = config.description\n ? `# ${config.title}\\n\\n> ${config.description}`\n : `# ${config.title}`;\n return `${[header, ...blocks].join(\"\\n\\n\")}\\n`;\n};\n\n/** Build `llms-full.txt`: the full Markdown body of every page. */\nconst buildFull = async (project: BlumeProject): Promise<string> => {\n const { config } = project;\n const pages = eligiblePages(project).toSorted((a, b) =>\n a.route.localeCompare(b.route)\n );\n\n const sections = await Promise.all(\n pages.map(async (page) => {\n const raw = await readEntryText(project, page);\n // Resolve `<Visibility>` audiences (web-only content omitted from the\n // agent-facing output, agents-only unwrapped), then downlevel supported\n // components to plain Markdown.\n const parsed = matter(raw);\n const body = downlevelComponents(\n applyAgentVisibility(parsed.content),\n config.ai.markdownComponents,\n parsed.data\n ).trim();\n const url = pageUrl(\n page.route,\n config.deployment.site,\n normalizeBasePath(config.deployment.base)\n );\n return [`# ${page.title}`, `Source: ${url}`, \"\", body].join(\"\\n\");\n })\n );\n\n const header = config.description\n ? `# ${config.title}\\n\\n> ${config.description}\\n`\n : `# ${config.title}\\n`;\n\n return `${header}\\n${sections.join(\"\\n\\n---\\n\\n\")}\\n`;\n};\n\n/** Build both LLM text artifacts for a project. */\nexport const buildLlmsFiles = async (\n project: BlumeProject\n): Promise<{ index: string; full: string }> => ({\n full: await buildFull(project),\n index: buildIndex(project),\n});\n",
|
|
130
130
|
"import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\n/** A `.gitignore` line, normalized for comparison (trailing slashes dropped). */\nconst gitignoreKey = (line: string): string => line.trim().replace(/\\/+$/u, \"\");\n\n/**\n * Ensure `.gitignore` ignores each of `entries`, appending any that are missing\n * (creating the file when absent). Trailing-slash differences (`dist` vs\n * `dist/`) count as already present. Returns the entries actually added.\n */\nexport const ensureGitignore = async (\n root: string,\n entries: string[]\n): Promise<string[]> => {\n const path = join(root, \".gitignore\");\n const existing = existsSync(path) ? await readFile(path, \"utf-8\") : \"\";\n const present = new Set(\n existing.split(\"\\n\").flatMap((line) => {\n const key = gitignoreKey(line);\n return key ? [key] : [];\n })\n );\n const added = entries.filter((entry) => !present.has(gitignoreKey(entry)));\n if (added.length === 0) {\n return [];\n }\n const gap = existing.length > 0 && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n await writeFile(path, `${existing}${gap}${added.join(\"\\n\")}\\n`, \"utf-8\");\n return added;\n};\n",
|
|
131
131
|
"import { searchProviderMeta } from \"../search/providers.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\n\n/**\n * List the enabled features that require Astro server output. Static builds\n * fail clearly when any of these are enabled.\n */\nexport const serverFeatures = (config: ResolvedConfig): string[] => {\n const features: string[] = [];\n if (config.ai.ask?.enabled) {\n features.push(\"Ask AI\");\n }\n // The hosted MCP server is a live JSON-RPC endpoint, so it needs a runtime.\n if (config.ai.mcp.enabled) {\n features.push(\"MCP server\");\n }\n // Mixedbread (and any future provider) that proxies queries through a secret\n // server endpoint can't run on a static build.\n if (searchProviderMeta(config.search.provider).requiresServer) {\n features.push(`Search (${config.search.provider})`);\n }\n return features;\n};\n",
|
|
132
132
|
"import { normalizeBasePath } from \"../core/base-path.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\n\n/**\n * The `_headers` file for a static build (Netlify + Cloudflare Pages/Workers\n * static assets). Blume's raw AI-ready endpoints — `/<route>.md`, `/<route>.mdx`,\n * and the `.txt` files (`llms.txt`, `llms-full.txt`) — are valid UTF-8, but a\n * static host serves them from the file extension alone, and common hosts send\n * `text/markdown` / `text/plain` with **no** `charset`. Browsers then fall back\n * to Windows-1252 for non-HTML text, so any non-ASCII docs (Japanese, accented\n * Latin, …) render as mojibake when the raw URL is opened directly. HTML pages\n * escape this because they carry `<meta charset>`; the raw endpoints have only\n * the HTTP header. Pinning `charset=utf-8` here matches the Content-Type these\n * same routes already send from the dev/server runtime (see\n * `astro/templates.ts`). Hosts that don't read `_headers` (Vercel, S3) ignore\n * the file harmlessly.\n */\n\n/**\n * One rule per served extension. `.mdx` uses `text/markdown` to match the\n * runtime endpoint, which serves both variants as `text/markdown`. The raw\n * Markdown mirrors live under the page routes (which carry `basePath`), while\n * the `.txt` files (`llms.txt`, `llms-full.txt`) are written to the dist root\n * and served at the deployment base — so only the `.md`/`.mdx` rules take the\n * `basePath` layer.\n */\nconst HEADER_RULES: readonly {\n contentType: string;\n ext: string;\n underBasePath: boolean;\n}[] = [\n {\n contentType: \"text/markdown; charset=utf-8\",\n ext: \"md\",\n underBasePath: true,\n },\n {\n contentType: \"text/markdown; charset=utf-8\",\n ext: \"mdx\",\n underBasePath: true,\n },\n {\n contentType: \"text/plain; charset=utf-8\",\n ext: \"txt\",\n underBasePath: false,\n },\n];\n\n/**\n * `_headers` contents: a `/*.<ext>` glob per rule with an indented\n * `Content-Type` line, in the two-space format Netlify and Cloudflare read. The\n * glob carries the served prefix (`{deployment.base}{basePath}` for the\n * Markdown mirrors, `{deployment.base}` for the root `.txt` files) so the rules\n * still match once the site is mounted under a subpath (`/docs/*.md`); the\n * wildcard spans path segments, so a nested route like `/docs/ja/intro.md`\n * matches too.\n */\nexport const buildNetlifyHeaders = (config: ResolvedConfig): string => {\n const deployBase = normalizeBasePath(config.deployment.base);\n return `${HEADER_RULES.map((rule) => {\n const prefix = rule.underBasePath\n ? `${deployBase}${config.basePath}`\n : deployBase;\n return `${prefix}/*.${rule.ext}\\n Content-Type: ${rule.contentType}`;\n }).join(\"\\n\")}\\n`;\n};\n",
|
|
133
133
|
"import { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { ContentSignalPolicy, ContentSignals } from \"../core/schema.ts\";\n\n/**\n * Ordered mapping from config field to its `Content-Signal` token. The order\n * fixes the emitted sequence (`search`, then `ai-input`, then `ai-train`).\n */\nconst SIGNAL_TOKENS: [keyof ContentSignalPolicy, string][] = [\n [\"search\", \"search\"],\n [\"aiInput\", \"ai-input\"],\n [\"aiTrain\", \"ai-train\"],\n];\n\n/**\n * The `Content-Signal:` line declaring how crawlers may reuse the site, or null\n * when the declaration is disabled (`contentSignals: false`). Otherwise every\n * signal is emitted with its resolved yes/no value.\n */\nconst contentSignalLine = (signals: ContentSignals): string | null => {\n if (!signals) {\n return null;\n }\n const tokens = SIGNAL_TOKENS.map(\n ([key, token]) => `${token}=${signals[key] ? \"yes\" : \"no\"}`\n );\n return `Content-Signal: ${tokens.join(\", \")}`;\n};\n\n/**\n * Build a robots.txt that allows all crawlers, declares any configured\n * `Content-Signal` usage preferences, and points to the sitemap when one is\n * available (a `site` is set and the sitemap is enabled). Returns null when\n * robots generation is disabled.\n */\nexport const buildRobots = (project: BlumeProject): string | null => {\n const { config } = project;\n if (!config.seo.robots) {\n return null;\n }\n\n const lines = [\"User-agent: *\"];\n const signal = contentSignalLine(config.seo.contentSignals);\n if (signal) {\n lines.push(signal);\n }\n lines.push(\"Allow: /\");\n\n const { site } = config.deployment;\n if (site && config.seo.sitemap) {\n const sitemapPath = withBasePath(\n normalizeBasePath(config.deployment.base),\n \"/sitemap.xml\"\n );\n lines.push(\"\", `Sitemap: ${site.replace(/\\/$/u, \"\")}${sitemapPath}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n};\n",
|
|
134
|
-
"import { extname, relative } from \"pathe\";\nimport { glob, globSync } from \"tinyglobby\";\n\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { BlumePageRoute } from \"./integration.ts\";\n\nconst PAGE_GLOB = [\"**/*.astro\"];\n\n/**\n * Astro's routing convention: a file or folder whose name starts with `_` is a\n * private partial — importable (shared layouts, home-page sections), but never\n * built into a route. Blume injects pages itself, so it must reproduce the same\n * exclusion or every `pages/_home/Hero.astro`-style component ships as an HTML\n * page.\n */\nconst isPrivatePage = (rel: string): boolean =>\n rel.split(\"/\").some((segment) => segment.startsWith(\"_\"));\n\n/** Map discovered page files to routes; shared by the async/sync discoverers. */\nconst toPageRoutes = (pagesRoot: string, files: string[]): BlumePageRoute[] => {\n files.sort();\n const routes: BlumePageRoute[] = [];\n for (const file of files) {\n const rel = relative(pagesRoot, file);\n if (isPrivatePage(rel)) {\n continue;\n }\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 routes.push({ entrypoint: file, pattern });\n }\n return routes;\n};\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 toPageRoutes(\n pagesRoot,\n await glob(PAGE_GLOB, { absolute: true, cwd: pagesRoot, onlyFiles: true })\n );\n\n/** {@link discoverPages} for synchronous callers (e.g. the sitemap builder). */\nexport const discoverPagesSync = (pagesRoot: string): BlumePageRoute[] =>\n toPageRoutes(\n pagesRoot,\n globSync(PAGE_GLOB, { absolute: true, cwd: pagesRoot, onlyFiles: true })\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\n/** Segments of a static, shareable page pattern; null for dynamic/private ones. */\nconst staticSegments = (pattern: string): string[] | null => {\n const segments = pattern.split(\"/\").filter(Boolean);\n return segments.some(\n (part) => PRIVATE_SEGMENT.test(part) || part.includes(\"[\")\n )\n ? null\n : segments;\n};\n\n/**\n * The static routes served by custom `.astro` pages — the same filtering as\n * {@link customOgRoutes}, but yielding the routes themselves. Feeds the route\n * sets that must know every servable page beyond the content graph (the link\n * checker, the sitemap); dynamic (`[param]`) and private segments are skipped\n * because their concrete URLs can't be enumerated statically.\n */\nexport const customStaticRoutes = (pages: { pattern: string }[]): string[] => {\n const routes = new Set<string>();\n for (const { pattern } of pages) {\n const segments = staticSegments(pattern);\n if (segments !== null) {\n routes.add(segments.length === 0 ? \"/\" : `/${segments.join(\"/\")}`);\n }\n }\n return [...routes];\n};\n\n/**\n * Whether the generated `/changelog` index route exists for this project —\n * `generate.ts` (which writes the page) and the sitemap/link validator all\n * share this check: there are visible `type: changelog` entries — or a\n * release-backed changelog source, whose route must resolve even when a fetch\n * fails — and no user content or custom page already owns `/changelog`.\n */\nexport const hasGeneratedChangelog = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): 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 return (\n (hasChangelog || hasChangelogSource) &&\n !routeIsTaken(userPages, project.graph.pages, \"/changelog\")\n );\n};\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.
|
|
134
|
+
"import { extname, relative } from \"pathe\";\nimport { glob, globSync } from \"tinyglobby\";\n\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { BlumePageRoute } from \"./integration.ts\";\n\nconst PAGE_GLOB = [\"**/*.astro\"];\n\n/**\n * Astro's routing convention: a file or folder whose name starts with `_` is a\n * private partial — importable (shared layouts, home-page sections), but never\n * built into a route. Blume injects pages itself, so it must reproduce the same\n * exclusion or every `pages/_home/Hero.astro`-style component ships as an HTML\n * page.\n */\nconst isPrivatePage = (rel: string): boolean =>\n rel.split(\"/\").some((segment) => segment.startsWith(\"_\"));\n\n/** Map discovered page files to routes; shared by the async/sync discoverers. */\nconst toPageRoutes = (pagesRoot: string, files: string[]): BlumePageRoute[] => {\n files.sort();\n const routes: BlumePageRoute[] = [];\n for (const file of files) {\n const rel = relative(pagesRoot, file);\n if (isPrivatePage(rel)) {\n continue;\n }\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 routes.push({ entrypoint: file, pattern });\n }\n return routes;\n};\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 toPageRoutes(\n pagesRoot,\n await glob(PAGE_GLOB, { absolute: true, cwd: pagesRoot, onlyFiles: true })\n );\n\n/** {@link discoverPages} for synchronous callers (e.g. the sitemap builder). */\nexport const discoverPagesSync = (pagesRoot: string): BlumePageRoute[] =>\n toPageRoutes(\n pagesRoot,\n globSync(PAGE_GLOB, { absolute: true, cwd: pagesRoot, onlyFiles: true })\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\n/** Segments of a static, shareable page pattern; null for dynamic/private ones. */\nconst staticSegments = (pattern: string): string[] | null => {\n const segments = pattern.split(\"/\").filter(Boolean);\n return segments.some(\n (part) => PRIVATE_SEGMENT.test(part) || part.includes(\"[\")\n )\n ? null\n : segments;\n};\n\n/**\n * The static routes served by custom `.astro` pages — the same filtering as\n * {@link customOgRoutes}, but yielding the routes themselves. Feeds the route\n * sets that must know every servable page beyond the content graph (the link\n * checker, the sitemap); dynamic (`[param]`) and private segments are skipped\n * because their concrete URLs can't be enumerated statically.\n */\nexport const customStaticRoutes = (pages: { pattern: string }[]): string[] => {\n const routes = new Set<string>();\n for (const { pattern } of pages) {\n const segments = staticSegments(pattern);\n if (segments !== null) {\n routes.add(segments.length === 0 ? \"/\" : `/${segments.join(\"/\")}`);\n }\n }\n return [...routes];\n};\n\n/**\n * Whether the generated `/changelog` index route exists for this project —\n * `generate.ts` (which writes the page) and the sitemap/link validator all\n * share this check: there are visible `type: changelog` entries — or a\n * release-backed changelog source, whose route must resolve even when a fetch\n * fails — and no user content or custom page already owns `/changelog`.\n */\nexport const hasGeneratedChangelog = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): 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 return (\n (hasChangelog || hasChangelogSource) &&\n !routeIsTaken(userPages, project.graph.pages, \"/changelog\")\n );\n};\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. A `titles` entry (`seo.og.titles`,\n * keyed by route) names a card outright — the only way to say \"CLI\" when the\n * segment humanizes to \"Cli\". Otherwise the home is titled with the site title\n * and a deeper page from its last path segment. The card's brand lockup,\n * description, and footer come from the resolved config at render time.\n */\nexport const customOgRoutes = (\n pages: BlumePageRoute[],\n siteTitle: string,\n titles: Record<string, string> = {}\n): OgCustomRoute[] => {\n // Keys normalized to `/`-joined segments so `cli`, `/cli`, and `/cli/` all\n // address the page served at `/cli` (and `/` addresses the home).\n const overrides = new Map(\n Object.entries(titles).map(([route, title]) => [\n `/${route.split(\"/\").filter(Boolean).join(\"/\")}`,\n title,\n ])\n );\n const seen = new Set<string>();\n const routes: OgCustomRoute[] = [];\n // Extracted so the skip paths become early `return`s (one `continue` budget\n // per loop under the lint rule) instead of `continue` statements.\n const collectRoute = (pattern: string): void => {\n const segments = staticSegments(pattern);\n if (segments === null) {\n return;\n }\n const slug = segments.length === 0 ? \"index\" : segments.join(\"/\");\n if (seen.has(slug)) {\n return;\n }\n seen.add(slug);\n const last = segments.at(-1);\n routes.push({\n slug,\n title:\n overrides.get(`/${segments.join(\"/\")}`) ??\n (last ? humanizeSegment(last) : siteTitle),\n });\n };\n for (const { pattern } of pages) {\n collectRoute(pattern);\n }\n return routes;\n};\n",
|
|
135
135
|
"import {\n customStaticRoutes,\n discoverPagesSync,\n hasGeneratedChangelog,\n} from \"../astro/pages.ts\";\nimport { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { escapeXml } from \"./xml.ts\";\n\n/**\n * Astro's reserved error routes. A user-authored override (`pages/404.astro`,\n * `pages/500.astro`, or a `404.md` content page — see `writeNotFoundPage` in\n * `astro/generate.ts`) is neither dynamic nor private, so it would otherwise\n * be emitted — but error pages aren't crawlable destinations and must stay out\n * of the sitemap.\n */\nconst ERROR_ROUTES = new Set([\"/404\", \"/500\"]);\n\n/** A `<lastmod>` element (W3C date) when the page has a valid modified date. */\nconst lastmodTag = (value: string | undefined): string => {\n if (!value) {\n return \"\";\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? \"\"\n : `<lastmod>${date.toISOString().slice(0, 10)}</lastmod>`;\n};\n\n/**\n * Build a sitemap.xml from the route manifest plus the routes the manifest\n * can't see: custom `.astro` pages (most importantly a custom landing `/`) and\n * the generated `/changelog` index. Returns null when the sitemap is disabled\n * or no `site` is configured (absolute URLs are required for a valid sitemap).\n * Drafts, hidden, and `noindex` pages are excluded.\n */\nexport const buildSitemap = (project: BlumeProject): string | null => {\n const { site } = project.config.deployment;\n if (!(site && project.config.seo.sitemap)) {\n return null;\n }\n\n const base = site.replace(/\\/$/u, \"\");\n // Routes carry `basePath`; a `deployment.base` subdirectory is layered on top.\n const deployBase = normalizeBasePath(project.config.deployment.base);\n const seen = new Set<string>();\n const urls: string[] = [];\n const pushUrl = (route: string, lastModified?: string): void => {\n // `<loc>` must be a well-formed, XML-escaped URL: percent-encode the path,\n // then escape XML metacharacters (notably `&`) so a route like\n // `/Tips & Tricks` doesn't produce invalid XML that gets the whole sitemap\n // rejected.\n const loc = escapeXml(encodeURI(`${base}${route}`));\n if (seen.has(loc)) {\n return;\n }\n seen.add(loc);\n urls.push(` <url><loc>${loc}</loc>${lastmodTag(lastModified)}</url>`);\n };\n for (const page of project.graph.pages) {\n if (\n page.meta.draft ||\n page.meta.sidebar.hidden ||\n page.meta.seo.noindex ||\n ERROR_ROUTES.has(page.route)\n ) {\n continue;\n }\n pushUrl(withBasePath(deployBase, page.route), page.lastModified);\n }\n // Custom `.astro` pages and the generated changelog index mount outside\n // `basePath` (they're injected at their pattern — see `blumeIntegration`), so\n // only the deployment base layers onto their URLs.\n const userPages = project.context.pagesRoot\n ? discoverPagesSync(project.context.pagesRoot)\n : [];\n const extraRoutes = customStaticRoutes(userPages).filter(\n (route) => !ERROR_ROUTES.has(route)\n );\n if (hasGeneratedChangelog(project, userPages)) {\n extraRoutes.push(\"/changelog\");\n }\n for (const route of extraRoutes) {\n pushUrl(withBasePath(deployBase, route));\n }\n urls.sort();\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${urls.join(\"\\n\")}\n</urlset>\n`;\n};\n",
|
|
136
136
|
"import { join } from \"pathe\";\n\n/**\n * Build a local Pagefind search index over the built site. Pagefind only\n * indexes elements marked with `data-pagefind-body`, which Blume adds to the\n * content of indexable pages, so nav chrome and excluded pages are skipped.\n *\n * Returns the number of pages indexed.\n */\nexport const buildSearchIndex = async (outDir: string): Promise<number> => {\n const pagefind = await import(\"pagefind\");\n\n const { index } = await pagefind.createIndex({});\n if (!index) {\n throw new Error(\"Failed to create Pagefind index.\");\n }\n\n // These awaits are strictly ordered, not independent: the directory must be\n // indexed before its files are written, and the index closed only after.\n // oxlint-disable-next-line react-doctor/async-parallel\n const result = await index.addDirectory({ path: outDir });\n await index.writeFiles({ outputPath: join(outDir, \"pagefind\") });\n await pagefind.close();\n\n return result.page_count;\n};\n",
|
|
137
137
|
"import { applyAudienceVisibility } from \"../ai/visibility.ts\";\nimport type { VisibilityAudience } from \"../ai/visibility.ts\";\nimport 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;\n// Tag-shaped only: a name (or closing slash/fragment) right after `<`, and no\n// newline inside. A bare `<` in prose (\"costs < 5 credits\") must not swallow\n// everything up to some later `>` — potentially whole paragraphs.\nconst HTML_OR_JSX = /<\\/?[a-zA-Z][^\\n<>]*>|<\\/?>/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 match.groups?.code ?? \"\"\n );\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 // A config-sidebar section's landing page (the group's `root`) lives on the\n // *group* node, not on any page leaf — record it under the group's own label\n // so the section's landing page carries the same facet as its children. A\n // real page leaf for the route (filesystem sidebars emit index pages as\n // leaves) wins, so group routes are merged in only where no leaf claimed one.\n const groupRoutes = new Map<string, Crumbs>();\n const walk = (nodes: NavNode[], trail: string[]): void => {\n for (const node of nodes) {\n if (node.kind === \"group\") {\n if (node.route && !groupRoutes.has(node.route)) {\n groupRoutes.set(node.route, {\n breadcrumb: [...trail, node.label],\n section: node.label,\n });\n }\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 for (const [route, crumbs] of groupRoutes) {\n if (!index.has(route)) {\n index.set(route, crumbs);\n }\n }\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 *\n * `content` selects the extraction: `\"plain\"` (default) strips Markdown to bare\n * searchable text; `\"markdown\"` keeps the body's Markdown — code blocks, lists,\n * headings — for Ask AI grounding, where fenced examples are often the answer\n * and stripping them makes the model unable to cite content the docs do contain.\n *\n * `audience` resolves `<Visibility>` blocks before extraction: `\"web\"`\n * (default) keeps web-only content and drops agents-only blocks — the site\n * search and hosted syncs must not surface content the page hides — while\n * `\"agents\"` mirrors llms-full.txt/MCP `get_page` (web removed, agents kept).\n */\nexport const buildSearchDocuments = async (\n project: BlumeProject,\n options?: {\n includeWhenDisabled?: boolean;\n content?: \"markdown\" | \"plain\";\n audience?: VisibilityAudience;\n }\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 source = raw ? matter(raw).content : \"\";\n const visible = applyAudienceVisibility(\n source,\n options?.audience ?? \"web\"\n );\n const body =\n options?.content === \"markdown\" ? visible.trim() : toPlainText(visible);\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",
|
|
@@ -140,9 +140,9 @@
|
|
|
140
140
|
"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 let exists = true;\n try {\n await collection.retrieve();\n } catch {\n exists = false;\n }\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",
|
|
141
141
|
"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",
|
|
142
142
|
"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 second `dev` 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 — and, because it records the server's\n * port, point the caller (often an agent that just tried to start its own\n * server) at the URL to reuse instead.\n */\n\nexport interface DevLockInfo {\n pid: number;\n /** Port the dev server is bound to, when known. */\n port?: number;\n}\n\nconst lockPath = (outDir: string): string => join(outDir, \"dev.lock\");\n\nconst isValidPid = (pid: unknown): pid is number =>\n typeof pid === \"number\" && Number.isInteger(pid) && pid > 0;\n\n/**\n * Parse a lock file body. Current locks are JSON (`{\"pid\":123,\"port\":3001}`);\n * a bare integer (the pre-port format) still parses as a pid-only lock.\n */\nconst parseLock = (raw: string): DevLockInfo | null => {\n let data: unknown;\n try {\n data = JSON.parse(raw.trim());\n } catch {\n return null;\n }\n if (isValidPid(data)) {\n return { pid: data };\n }\n if (typeof data === \"object\" && data !== null) {\n const { pid, port } = data as { pid?: unknown; port?: unknown };\n if (isValidPid(pid)) {\n return typeof port === \"number\" ? { pid, port } : { pid };\n }\n }\n return null;\n};\n\nconst isProcessAlive = (pid: number): boolean => {\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 * Read the lock on `outDir` held by a live `blume dev`, or null. A lock left\n * by a process that has since exited (stale) is treated as absent.\n */\nexport const readDevLock = (outDir: string): DevLockInfo | null => {\n const path = lockPath(outDir);\n if (!existsSync(path)) {\n return null;\n }\n const lock = parseLock(readFileSync(path, \"utf-8\"));\n return lock && isProcessAlive(lock.pid) ? lock : null;\n};\n\n/** Whether another live `blume dev` holds the lock on `outDir`. */\nexport const isDevLocked = (outDir: string): boolean =>\n readDevLock(outDir) !== null;\n\nconst lockPayload = (port?: number): string =>\n JSON.stringify({\n pid: process.pid,\n ...(port === undefined ? {} : { port }),\n });\n\nconst writeLock = (outDir: string, port?: number): void => {\n writeFileSync(lockPath(outDir), lockPayload(port));\n};\n\n/** Thrown when another live `blume dev` already holds the lock. */\nexport class DevLockHeldError extends Error {\n readonly lock: DevLockInfo;\n\n constructor(lock: DevLockInfo) {\n super(`A blume dev server (pid ${lock.pid}) already holds the lock.`);\n this.name = \"DevLockHeldError\";\n this.lock = lock;\n }\n}\n\nconst ownsLock = (outDir: string): boolean => {\n const path = lockPath(outDir);\n if (!existsSync(path)) {\n return false;\n }\n try {\n return parseLock(readFileSync(path, \"utf-8\"))?.pid === process.pid;\n } catch {\n return false;\n }\n};\n\n/**\n * One atomic claim attempt. Returns `true` when this process wins the `wx`\n * write, `false` when the dir held a stale or our-own leftover lock (now\n * cleared, so the caller should retry). Throws {@link DevLockHeldError} when a\n * live foreign holder owns the dir.\n */\nconst tryClaimLock = (outDir: string, port?: number): boolean => {\n try {\n writeFileSync(lockPath(outDir), lockPayload(port), { flag: \"wx\" });\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n const existing = readDevLock(outDir);\n if (existing && existing.pid !== process.pid) {\n throw new DevLockHeldError(existing);\n }\n // Stale or our own leftover: clear it and race for the claim again.\n rmSync(lockPath(outDir), { force: true });\n return false;\n }\n};\n\n/**\n * Write the current process's dev lock into `outDir` and return a release\n * function. The claim is atomic (`wx`): two `blume dev` processes racing the\n * same dir can't both pass a check-then-write — the loser gets a\n * {@link DevLockHeldError} naming the live holder. A stale lock (dead pid) or\n * this process's own leftover is cleared and re-claimed. The release only\n * removes the file if it's still ours, so a newer dev server's lock is never\n * clobbered.\n */\nexport const acquireDevLock = (outDir: string, port?: number): (() => void) => {\n mkdirSync(outDir, { recursive: true });\n while (!tryClaimLock(outDir, port)) {\n // Retry until we win the claim or a live holder makes us throw.\n }\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n try {\n if (ownsLock(outDir)) {\n rmSync(lockPath(outDir), { force: true });\n }\n } catch {\n // Best-effort cleanup; a stale lock is handled by the liveness check.\n }\n };\n};\n\n/**\n * Rewrite this process's lock with the port the server actually bound (the\n * lock is acquired before the server starts, and Vite may bump a busy port).\n * A lock owned by another process is left alone.\n */\nexport const updateDevLockPort = (outDir: string, port: number): void => {\n if (ownsLock(outDir)) {\n writeLock(outDir, port);\n }\n};\n\n/** Human-readable location of a locked dev server, e.g. \" at http://localhost:3001\". */\nexport const describeDevLock = (lock: DevLockInfo): string =>\n lock.port === undefined ? \"\" : ` at http://localhost:${lock.port}`;\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. Only commands that actually accept `--isolated` (build, check) should\n * set `isolatedHint`, so the refusal never suggests a flag the command ignores.\n */\nexport const refuseIfDevRunning = (\n root: string,\n action: string,\n options: { runtimeDir?: string; isolatedHint?: boolean } = {}\n): void => {\n const lock = readDevLock(resolveRuntimeDir(root, options.runtimeDir));\n if (lock) {\n const remedies = options.isolatedHint\n ? \"Reuse that server, stop it first, or re-run with --isolated to build/verify against .blume-verify without touching it.\"\n : \"Reuse that server or stop it first.\";\n logger.error(\n `A \\`blume dev\\` server is running${describeDevLock(lock)}; ${action} would corrupt its .blume runtime. ${remedies}`\n );\n process.exit(1);\n }\n};\n",
|
|
143
|
-
"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 {\n validateNavTargets,\n validateSearchPopularIcons,\n} 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 { resolveDocsCollection } from \"../core/sources/resolve.ts\";\nimport { resolveTsconfigAliases } from \"../core/tsconfig-aliases.ts\";\nimport type { Navigation } from \"../core/types.ts\";\nimport { buildRssFeeds, renderRssFeed } from \"../deploy/rss.ts\";\nimport { resolveOgLogo } from \"../og/logo.ts\";\nimport { hasScalarReferences, referenceRoutes } 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 { resolveSearchPopular } from \"../search/popular.ts\";\nimport { searchProviderMeta, servesStaticIndex } from \"../search/providers.ts\";\nimport {\n examplesEntryTemplate,\n tailwindEntryTemplate,\n} 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 {\n customOgRoutes,\n discoverPages,\n hasGeneratedChangelog,\n routeIsTaken,\n} from \"./pages.ts\";\nimport {\n askComponentTemplate,\n askEndpointTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n examplesPageTemplate,\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 * Absolute path to `babel-plugin-react-compiler`, resolved from Blume's own\n * package root (Blume ships it). Returns null when React or the compiler is off.\n *\n * The path must be absolute: @vitejs/plugin-react resolves babel plugins from\n * the *project* root, not `.blume/`, so a bare specifier fails in a user project\n * that never installed the plugin directly. Resolving from `packageRoot()` binds\n * to Blume's shipped copy regardless of the user's package manager or hoisting.\n */\nconst resolveReactCompiler = (\n config: ResolvedConfig,\n needsReact: boolean\n): string | null => {\n if (!(needsReact && config.react.compiler)) {\n return null;\n }\n try {\n return createRequire(\n pathToFileURL(join(packageRoot(), \"_.js\")).href\n ).resolve(\"babel-plugin-react-compiler\");\n } catch {\n return null;\n }\n};\n\n/**\n * Warning (as a spreadable list) for the case where the React Compiler was\n * requested but its plugin couldn't be resolved — so the build silently drops\n * to uncompiled output rather than failing.\n */\nconst reactCompilerWarnings = (\n config: ResolvedConfig,\n needsReact: boolean,\n compilerPath: string | null\n): string[] =>\n needsReact && config.react.compiler && !compilerPath\n ? [\n \"React Compiler is enabled but `babel-plugin-react-compiler` could not be resolved; falling back to an uncompiled build. Reinstall Blume, or set `react: { compiler: false }` to silence this.\",\n ]\n : [];\n\n/** Resolve Astro's package.json directly inside a node_modules directory. */\nconst resolveAstroPackageJson = (modulesDir: string): string | null => {\n try {\n return realpathSync(join(modulesDir, \"astro\", \"package.json\"));\n } catch {\n return null;\n }\n};\n\n/**\n * Realpath of the `astro` package reachable through the normal node_modules\n * ancestor walk from a generated runtime, or null when none resolves.\n *\n * This deliberately does not use `createRequire().resolve()`. pnpm's generated\n * bin shim adds Blume's virtual-store dependencies to `NODE_PATH`, which\n * CommonJS resolution honors but ESM package resolution ignores. The generated\n * Astro config uses ESM imports, so treating a NODE_PATH-only result as\n * reachable skips the dependency link and makes `import \"astro/config\"` fail.\n * Walking the physical node_modules ancestors mirrors the lookup that config\n * actually gets.\n */\nconst resolvedAstroPath = (fromDir: string): string | null => {\n let dir = normalize(fromDir);\n while (true) {\n const resolved = resolveAstroPackageJson(join(dir, \"node_modules\"));\n if (resolved) {\n return resolved;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return null;\n }\n dir = parent;\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 let existing: Awaited<ReturnType<typeof lstat>> | null;\n try {\n existing = await lstat(link);\n } catch {\n existing = null;\n }\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 = resolveAstroPackageJson(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-js`, …) 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/** The subset of Rollup's plugin context `blume:server-app-resolve` needs. */\ninterface ServerAppResolveContext {\n resolve: (source: string) => Promise<{ id: string } | null>;\n}\n\n/**\n * Work around an Astro + Vite dev bug that breaks content renames.\n *\n * Astro's dev SSR entry is the virtual module `astro:server-app`, but its\n * resolver only matches the exact id (`/^astro:server-app$/`). Whenever the\n * route set changes — a content add, remove, or rename — Astro triggers a full\n * page reload, during which Vite re-requests the entry as `astro:server-app.js`.\n * The trailing `.js` misses Astro's filter, so the load fails (\"Failed to load\n * url astro:server-app.js\") and Vite's SSR module runner is left corrupted: the\n * in-memory content store never reconnects, so `getEntry` returns undefined and\n * the renamed page 404s until the dev server is manually restarted.\n *\n * Stripping the spurious `.js` and delegating back to Astro's resolver lets the\n * reload complete cleanly, so the renamed route resolves without a restart.\n */\nexport const serverAppResolvePlugin = (): {\n enforce: \"pre\";\n name: string;\n resolveId: (\n this: ServerAppResolveContext,\n id: string\n ) => Promise<string | null>;\n} => ({\n enforce: \"pre\",\n name: \"blume:server-app-resolve\",\n async resolveId(id) {\n if (id === \"astro:server-app.js\") {\n const resolved = await this.resolve(\"astro:server-app\");\n return resolved?.id ?? null;\n }\n return null;\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 * Adapter package the project must install itself for each deployment\n * platform whose adapter Blume doesn't ship. Node and Vercel ship with Blume,\n * so they never need this.\n */\nconst DEPLOYMENT_ADAPTER_DEPS: Record<string, string> = {\n cloudflare: \"@astrojs/cloudflare\",\n netlify: \"@astrojs/netlify\",\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/**\n * Warn when the resolved server-output adapter is one the project must install\n * itself (Netlify/Cloudflare; Node and Vercel ship with Blume). The generated\n * astro.config.mjs imports the adapter package directly — and on those\n * platforms the adapter is even auto-selected from env vars — so warn early\n * rather than let the build die with an opaque ERR_MODULE_NOT_FOUND from the\n * hidden generated config. Availability mirrors the search-provider check: a\n * dep resolves from the project root or from the Blume package itself.\n */\nconst deploymentAdapterWarnings = (\n deployment: ResolvedConfig[\"deployment\"],\n root: string\n): string[] => {\n const dep =\n deployment.output === \"server\" && deployment.adapter\n ? DEPLOYMENT_ADAPTER_DEPS[deployment.adapter]\n : undefined;\n if (\n dep &&\n !(canResolveFrom(root, dep) || canResolveFrom(packageRoot(), dep))\n ) {\n return [\n `Deployment adapter \"${deployment.adapter}\" needs \"${dep}\", which isn't installed. Run \\`npm install ${dep}\\` (or your package manager's equivalent).`,\n ];\n }\n return [];\n};\n\n/** Absolute path to the configured `examples.css`, or null when unset. */\nconst examplesCssFile = (root: string, config: ResolvedConfig): string | null =>\n config.examples.css ? join(root, config.examples.css) : null;\n\n/**\n * Write the per-example preview route (`{basePath}/blume-examples/<path>`)\n * that `<Component />` iframes embed — the iframe boundary is what isolates\n * previews from the docs CSS. Nested under `basePath` in the filesystem so\n * the routes stay reachable behind a proxy that only forwards the base;\n * pruneOrphans clears a stale copy when `basePath` changes or the last\n * example is removed. Returns (as a spreadable list) a warning when the\n * configured `examples.css` doesn't exist.\n */\nconst writeExamplesPreview = async (options: {\n config: ResolvedConfig;\n hasExamples: boolean;\n root: string;\n srcDir: string;\n write: (path: string, content: string) => Promise<boolean>;\n}): Promise<string[]> => {\n const { config, hasExamples, root, srcDir, write } = options;\n if (hasExamples) {\n await write(\n join(\n srcDir,\n \"pages\",\n ...config.basePath.split(\"/\").filter(Boolean),\n \"blume-examples\",\n \"[...path].astro\"\n ),\n examplesPageTemplate()\n );\n }\n const cssFile = examplesCssFile(root, config);\n return cssFile && !existsSync(cssFile)\n ? [\n `examples.css points at \"${config.examples.css}\", which doesn't exist; previews render without it.`,\n ]\n : [];\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\n/** Block math (`$$…$$`) or an explicitly authored `<Math …>` component. */\nconst containsMath = (content: string): boolean =>\n content.includes(\"$$\") || content.includes(\"<Math\");\n\n/**\n * Detect whether the project can render math: block math (`$$…$$`) or an\n * explicit `<Math>` tag in any local `.md`/`.mdx`, or in staged (non-filesystem)\n * source bodies. Drives whether the generated runtime imports the `<Math>`\n * component and KaTeX's stylesheet, so a math-free site ships no KaTeX CSS.\n * Math parsing itself is always on but block-only, so one of those literals is\n * a necessary condition — no false negatives. A stray `$$` (e.g. inside a code\n * fence) merely over-includes the idempotent import, which is harmless.\n */\nexport const detectUsesMath = async (\n root: string,\n staged: Iterable<string> = []\n): Promise<boolean> => {\n const files = await glob([\"**/*.{md,mdx}\"], {\n cwd: root,\n ignore: [\"**/node_modules/**\", \"**/.blume/**\", \"**/dist/**\"],\n onlyFiles: true,\n });\n const contents = await Promise.all(\n files.map((file) => readOptional(join(root, file)))\n );\n return [...contents, ...staged].some(containsMath);\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 const removals: Promise<void>[] = [];\n for (const path of existing) {\n const normalized = normalize(path);\n if (!written.has(normalized)) {\n removals.push(rm(normalized, { force: true }));\n }\n }\n await Promise.all(removals);\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\ninterface LogoDimensions {\n height: number;\n width: number;\n}\n\nconst SVG_ROOT = /<svg\\b(?<attributes>[^>]*)>/u;\nconst SVG_WIDTH = /\\bwidth\\s*=\\s*[\"'](?<value>[^\"']+)[\"']/u;\nconst SVG_HEIGHT = /\\bheight\\s*=\\s*[\"'](?<value>[^\"']+)[\"']/u;\nconst SVG_LENGTH = /^\\s*(?<value>[\\d.]+)(?:px)?\\s*$/u;\nconst SVG_VIEW_BOX =\n /\\bviewBox\\s*=\\s*[\"'][\\d.-]+[\\s,]+[\\d.-]+[\\s,]+(?<width>[\\d.]+)[\\s,]+(?<height>[\\d.]+)[\"']/u;\n\nconst parseSvgLength = (value: string | undefined): number | undefined => {\n const length = Number(value?.match(SVG_LENGTH)?.groups?.value);\n return length > 0 ? length : undefined;\n};\n\n/** Read dimensions from an SVG's explicit size or its view box. */\nconst svgDimensions = (svg: string | undefined): LogoDimensions | undefined => {\n const attributes = svg?.match(SVG_ROOT)?.groups?.attributes;\n const width = parseSvgLength(attributes?.match(SVG_WIDTH)?.groups?.value);\n const height = parseSvgLength(attributes?.match(SVG_HEIGHT)?.groups?.value);\n if (width && height) {\n return { height, width };\n }\n\n const viewBox = attributes?.match(SVG_VIEW_BOX);\n const viewBoxWidth = Number(viewBox?.groups?.width);\n const viewBoxHeight = Number(viewBox?.groups?.height);\n return viewBoxWidth > 0 && viewBoxHeight > 0\n ? { height: viewBoxHeight, width: viewBoxWidth }\n : undefined;\n};\n\n/** Read a local SVG logo from the project root or public directory. */\nconst readLogoSvg = (\n project: BlumeProject,\n source: string | undefined\n): string | undefined => {\n if (!source?.toLowerCase().endsWith(\".svg\")) {\n return;\n }\n const rel = source.replace(/^\\//u, \"\");\n const file = [\n join(project.context.root, \"public\", rel),\n join(project.context.root, rel),\n ].find((path) => existsSync(path));\n return file ? readFileSync(file, \"utf-8\") : undefined;\n};\n\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\" ? { image: logo } : logo;\n // `text` is passed through verbatim: `undefined` lets the brand fall back to\n // the site title, `\"\"` renders the mark alone (a logo with the wordmark baked\n // in).\n const { href, image: source, text } = config;\n const image = typeof source === \"string\" ? { light: source } : source;\n const light = image?.light ?? image?.dark;\n const dark = image?.dark ?? image?.light;\n const alt = image?.alt ?? \"\";\n const brandHref = href ?? \"/\";\n const lightSvg = readLogoSvg(project, light);\n const darkSvg = dark === light ? lightSvg : readLogoSvg(project, dark);\n\n if (light && light === dark && lightSvg) {\n return { alt, href: brandHref, svg: lightSvg, text };\n }\n\n const lightDimensions = svgDimensions(lightSvg);\n const darkDimensions = svgDimensions(darkSvg);\n const dimensions =\n lightDimensions || darkDimensions\n ? { dark: darkDimensions, light: lightDimensions }\n : undefined;\n return { alt, dark, dimensions, href: brandHref, light, text };\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 const logo = resolveLogo(project);\n const ogLogo = config.seo.og.logo\n ? resolveOgLogo(project, config.seo.og.logo)\n : logo?.svg;\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 const editPath = github?.dir ? `${github.dir}/${rel}` : rel;\n return `${editBase}/${editPath}`;\n };\n\n const { i18n } = config;\n\n // Resolve the header repo link per locale. API references no longer add a tab\n // automatically — authors point a `navigation.tabs` entry at the reference\n // route to surface it (see `referenceRoutes`).\n const withRepoUrl = (nav: Navigation): Navigation => ({\n ...nav,\n repoUrl: config.navigation.repo && repoUrl ? repoUrl : null,\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 withRepoUrl(\n graph.navigationByLocale[code] ?? {\n featured: [],\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 ask: config.ai.ask?.enabled\n ? { suggestions: config.ai.ask.suggestions }\n : null,\n banner: resolveBanner(config),\n basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\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 imageZoom: config.markdown.imageZoom,\n logo,\n mcp: config.ai.mcp.enabled\n ? {\n name: config.ai.mcp.name ?? config.title,\n route: config.ai.mcp.route,\n }\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: {\n enabled: config.seo.og.enabled ?? false,\n fonts: config.seo.og.fonts ?? [],\n logo: ogLogo,\n palette: config.seo.og.palette,\n },\n repoUrl,\n search: {\n enabled: config.search.provider !== \"none\",\n popular: resolveSearchPopular(config.search.popular, config.basePath),\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 x: config.seo.x,\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: withRepoUrl(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 or a custom `.astro` page already occupies its\n * route, so the user's page keeps working instead of colliding.\n */\nconst planMcp = (\n project: BlumeProject,\n srcDir: string,\n userPages: { pattern: string }[]\n): McpPlan => {\n const { config } = project;\n const { route } = config.ai.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.ai.mcp.enabled) {\n return base;\n }\n if (routeIsTaken(userPages, project.graph.pages, route)) {\n return {\n ...base,\n warnings: [\n `MCP server route \"${route}\" is already used by a content or custom page; the MCP server was not generated. Set a different \"ai.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 base: data.base,\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 * 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 askPath = join(srcDir, \"generated\", \"Ask.astro\");\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 examplesThemePath = join(srcDir, \"generated\", \"examples.css\");\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 // Staged (non-filesystem) sources materialize into `.blume/content`; keyed by\n // entryId so i18n duplicates of one entry write a single file. Collected here\n // so math detection also sees staged bodies (they never live under root).\n const staged = collectStaged(project);\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. Independent of\n // the discovery reads, so it joins the same parallel batch.\n const [\n pages,\n detectedReact,\n usesMath,\n userTheme,\n userExamplesCss,\n islandDiscovery,\n exampleDiscovery,\n componentSlots,\n ] = await Promise.all([\n context.pagesRoot ? discoverPages(context.pagesRoot) : Promise.resolve([]),\n detectNeedsReact(context.root),\n detectUsesMath(context.root, staged.values()),\n readOptional(context.themeFile),\n readOptional(examplesCssFile(context.root, config)),\n discoverIslands(context.root),\n discoverExamples(context.root, config.examples.source),\n buildComponentSlots(context.componentsFile),\n ]);\n const {\n plan: slotPlan,\n tags: overrideTags,\n warnings: overrideWarnings,\n } = componentSlots;\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 // Absolute path to the React Compiler babel plugin (null when off). Resolved\n // here, Node-side, so the generated config points babel straight at Blume's\n // shipped copy — see resolveReactCompiler. Any unresolved-but-requested\n // warning is folded into `warnings` below (declared later).\n const reactCompilerPath = resolveReactCompiler(config, needsReact);\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, pages);\n pages.push(...mcp.discoveryPages);\n\n const hasStaged = staged.size > 0;\n // Only emit a project-scanning `docs` collection when a filesystem source\n // actually feeds it. An all-staged project (openapi/notion/…) has only staged\n // sources, so the `docs` glob would otherwise scan (and watch) the whole\n // project root for nothing — see contentConfigTemplate.\n const hasFilesystemSource = project.sources.some((source) => !source.staged);\n\n // All of these write to distinct generated paths and never read one another's\n // output, so the structural files, the per-convention hydration wrappers, and\n // the Ask/MCP writers all run in one parallel batch. Only the structural\n // writes' change flags feed `structuralChange`, so they stay a nested group.\n const [structural] = await Promise.all([\n Promise.all([\n write(\n join(out, \"astro.config.mjs\"),\n astroConfigTemplate({\n aliases: resolveTsconfigAliases(context.root),\n askPath,\n config,\n contentRoutes: project.manifest.routes.map((route) => route.path),\n context,\n dataPath,\n examplesPath,\n examplesThemePath,\n needsReact,\n needsSvelte,\n needsVue,\n openapiPath,\n pages,\n reactCompilerPath,\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 collection: resolveDocsCollection(config, context),\n config,\n context,\n filesystem: hasFilesystemSource,\n staged: hasStaged,\n })\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].astro\"),\n catchAllPageTemplate({\n exportEpub,\n exportPdf,\n mathEnabled: usesMath,\n needsReact,\n })\n ),\n // The header's Ask trigger, behind the `blume:ask` alias. Always written\n // (even when Ask is off, as a component that renders nothing) so the alias\n // resolves — the same contract as `blume:search-client`.\n write(askPath, askComponentTemplate(askEnabled)),\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, config.basePath)\n ),\n // The isolated Tailwind entry for `<Component />` preview frames: only\n // example files (and the project sources they import) are scanned, so\n // the docs theme never reaches a preview.\n write(\n examplesThemePath,\n examplesEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n sources: [`${context.root}/**/*.{astro,jsx,svelte,ts,tsx,vue}`],\n userCss: userExamplesCss,\n })\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 // Per-island hydration wrappers for the `islands/` convention. The map\n // module (written above, always) imports these; orphans from removed\n // islands are pruned at the end of the pass.\n Promise.all(\n islandDiscovery.islands.map((island) =>\n write(\n join(srcDir, \"generated\", \"islands\", `${island.name}.astro`),\n islandWrapperTemplate(island)\n )\n )\n ),\n // Per-override hydration wrappers for `defineComponents` islands and\n // `client:*` layout/mdx overrides. The generated `components.ts` (written\n // above) imports these; orphans from removed overrides are pruned at the\n // end of the pass.\n 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 // Per-example live wrappers for the `examples/` convention, resolved by\n // `<Component path>` through the `examples.ts` map (written above, always).\n 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 writeAskFiles(project, srcDir, write),\n writeMcpFiles(project, mcp, write),\n ]);\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 (hasGeneratedChangelog(project, pages)) {\n await write(\n join(srcDir, \"pages\", \"changelog.astro\"),\n changelogIndexTemplate({\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\n })\n );\n }\n\n // Three independent writes: the per-example preview routes that\n // `<Component />` iframes embed (returning a warning when the configured\n // examples.css is missing), the default 404 page (`/404`, unless the project\n // already owns the route), and the provider-specific client loader behind\n // the `blume:search-client` alias — always (re)generated so the alias\n // resolves even when search is disabled.\n const [examplesWarnings] = await Promise.all([\n writeExamplesPreview({\n config,\n hasExamples: exampleDiscovery.examples.length > 0,\n root: context.root,\n srcDir,\n write,\n }),\n writeNotFoundPage(write, srcDir, pages, project.graph.pages),\n write(searchClientPath, searchClientTemplate(config)),\n ]);\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(\"md\")\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].mdx.ts\"),\n rawMarkdownEndpointTemplate(\"mdx\")\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 ...reactCompilerWarnings(config, needsReact, reactCompilerPath),\n ...mcp.warnings,\n ...islandDiscovery.warnings,\n ...exampleDiscovery.warnings,\n ...examplesWarnings,\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 routes (so a tab an author points at one still validates).\n const navTargetRoutes = new Set<string>([\n ...project.graph.routes.keys(),\n ...pages.map((page) => page.pattern),\n ...referenceRoutes(config),\n ]);\n if (hasGeneratedChangelog(project, pages)) {\n navTargetRoutes.add(\"/changelog\");\n }\n // Curated `search.popular` icons live outside the navigation model, so they\n // miss `validateNavIcons` in the graph build — they're checked here too,\n // where the search config is known. A typo otherwise just renders the\n // default glyph.\n warnings.push(\n ...[\n ...validateNavTargets(project.graph.navigation, navTargetRoutes),\n ...validateSearchPopularIcons(config.search.popular),\n ].map((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(\n ...deploymentAdapterWarnings(config.deployment, context.root),\n ...islandFrameworkWarnings(frameworks, context.root)\n );\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 // 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 // These write to distinct trees and never read one another, so they batch.\n // `data.json`/`openapi.json` and the manifest are not \"structural\" for Astro;\n // they hot-reload. `writeStagedContent` owns the `.blume/content` tree (its\n // own pruning), outside `.blume/src`, so a removed remote entry doesn't linger.\n await Promise.all([\n write(join(srcDir, \"generated\", \"data.json\"), buildRuntimeData(project)),\n write(\n openapiPath,\n `${JSON.stringify(openApiSource ? openApiSource.openApiData() : {})}\\n`\n ),\n write(\n join(out, \"blume.manifest.json\"),\n `${JSON.stringify(project.manifest, null, 2)}\\n`\n ),\n writeStagedContent(out, staged),\n ]);\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",
|
|
143
|
+
"import { existsSync, readFileSync, realpathSync } from \"node:fs\";\nimport {\n lstat,\n mkdir,\n readFile,\n realpath,\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 {\n validateNavTargets,\n validateSearchPopularIcons,\n} 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 { resolveDocsCollection } from \"../core/sources/resolve.ts\";\nimport { resolveTsconfigAliases } from \"../core/tsconfig-aliases.ts\";\nimport type { Navigation } from \"../core/types.ts\";\nimport { buildRssFeeds, renderRssFeed } from \"../deploy/rss.ts\";\nimport { resolveOgLogo } from \"../og/logo.ts\";\nimport { hasScalarReferences, referenceRoutes } 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 { resolveSearchPopular } from \"../search/popular.ts\";\nimport { searchProviderMeta, servesStaticIndex } from \"../search/providers.ts\";\nimport {\n examplesEntryTemplate,\n tailwindEntryTemplate,\n} 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 {\n customOgRoutes,\n discoverPages,\n hasGeneratedChangelog,\n routeIsTaken,\n} from \"./pages.ts\";\nimport {\n askComponentTemplate,\n askEndpointTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n examplesPageTemplate,\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 * Absolute path to `babel-plugin-react-compiler`, resolved from Blume's own\n * package root (Blume ships it). Returns null when React or the compiler is off.\n *\n * The path must be absolute: @vitejs/plugin-react resolves babel plugins from\n * the *project* root, not `.blume/`, so a bare specifier fails in a user project\n * that never installed the plugin directly. Resolving from `packageRoot()` binds\n * to Blume's shipped copy regardless of the user's package manager or hoisting.\n */\nconst resolveReactCompiler = (\n config: ResolvedConfig,\n needsReact: boolean\n): string | null => {\n if (!(needsReact && config.react.compiler)) {\n return null;\n }\n try {\n return createRequire(\n pathToFileURL(join(packageRoot(), \"_.js\")).href\n ).resolve(\"babel-plugin-react-compiler\");\n } catch {\n return null;\n }\n};\n\n/**\n * Warning (as a spreadable list) for the case where the React Compiler was\n * requested but its plugin couldn't be resolved — so the build silently drops\n * to uncompiled output rather than failing.\n */\nconst reactCompilerWarnings = (\n config: ResolvedConfig,\n needsReact: boolean,\n compilerPath: string | null\n): string[] =>\n needsReact && config.react.compiler && !compilerPath\n ? [\n \"React Compiler is enabled but `babel-plugin-react-compiler` could not be resolved; falling back to an uncompiled build. Reinstall Blume, or set `react: { compiler: false }` to silence this.\",\n ]\n : [];\n\n/** Resolve Astro's package.json directly inside a node_modules directory. */\nconst resolveAstroPackageJson = (modulesDir: string): string | null => {\n try {\n return realpathSync(join(modulesDir, \"astro\", \"package.json\"));\n } catch {\n return null;\n }\n};\n\n/**\n * Realpath of the `astro` package reachable through the normal node_modules\n * ancestor walk from a generated runtime, or null when none resolves.\n *\n * This deliberately does not use `createRequire().resolve()`. pnpm's generated\n * bin shim adds Blume's virtual-store dependencies to `NODE_PATH`, which\n * CommonJS resolution honors but ESM package resolution ignores. The generated\n * Astro config uses ESM imports, so treating a NODE_PATH-only result as\n * reachable skips the dependency link and makes `import \"astro/config\"` fail.\n * Walking the physical node_modules ancestors mirrors the lookup that config\n * actually gets.\n */\nconst resolvedAstroPath = (fromDir: string): string | null => {\n let dir = normalize(fromDir);\n while (true) {\n const resolved = resolveAstroPackageJson(join(dir, \"node_modules\"));\n if (resolved) {\n return resolved;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return null;\n }\n dir = parent;\n }\n};\n\n/**\n * The two places an installer can put Blume's dependencies:\n * - `<blume>/node_modules` — deps nested under the package (workspace source,\n * or npm nesting them away from a conflicting hoisted copy)\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.\n */\nconst depsCandidates = (pkgDir: string): string[] => [\n join(pkgDir, \"node_modules\"),\n dirname(pkgDir),\n];\n\n/** First dependency candidate containing the package dir `segments`, or null. */\nconst candidateHolding = (\n pkgDir: string,\n ...segments: string[]\n): string | null =>\n depsCandidates(pkgDir).find((dir) => existsSync(join(dir, ...segments))) ??\n null;\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/` — so probe the {@link depsCandidates}.\n *\n * Astro alone is a bad probe: an npm split install (an `overrides` pin plus an\n * incremental install) hoists `astro` to the project root while Blume's other\n * deps stay nested, and probing for astro then picks the root directory — one\n * that holds none of them. Prefer a candidate with the full set (astro beside\n * `@astrojs/mdx`, the integration every generated runtime declares), then one\n * with the integrations (astro hoisted away — the rest of Blume's deps sit\n * there too), then one with astro alone.\n */\nconst holdsAstro = (dir: string): boolean => existsSync(join(dir, \"astro\"));\nconst holdsMdx = (dir: string): boolean =>\n existsSync(join(dir, \"@astrojs\", \"mdx\"));\n\nexport const blumeDepsDir = (pkgDir: string = packageRoot()): string | null => {\n const candidates = depsCandidates(pkgDir);\n return (\n candidates.find((dir) => holdsAstro(dir) && holdsMdx(dir)) ??\n candidates.find(holdsMdx) ??\n candidates.find(holdsAstro) ??\n null\n );\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 let existing: Awaited<ReturnType<typeof lstat>> | null;\n try {\n existing = await lstat(link);\n } catch {\n existing = null;\n }\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 * Drop a `.blume/node_modules` junction that resolves a *different* Blume than\n * the one running. A restored build cache (e.g. Vercel's) can resurrect the\n * junction pointing into a superseded store directory — blume@1.1.0's isolated\n * deps dir after 1.1.1 was installed. Releases rarely bump Astro, so the stale\n * target still resolves the very same astro and every astro-based probe in\n * {@link ensureDepsLink} passes through the link — while the `blume/*` imports\n * in the freshly generated config load the previous release, crashing on any\n * export added since. Staleness is judged by realpath: the link is stale\n * exactly when the directory behind it holds a `blume` that isn't `pkgDir`.\n * A target with no `blume` entry (the workspace layout links\n * `packages/blume/node_modules`, which holds only the deps) resolves Blume\n * through the normal ancestor walk and stays. Real directories stay too,\n * mirroring {@link linkDepsJunction} — we only ever remove a link we own.\n */\nconst dropStaleDepsLink = async (\n link: string,\n pkgDir: string\n): Promise<void> => {\n let existing: Awaited<ReturnType<typeof lstat>>;\n try {\n existing = await lstat(link);\n } catch {\n return;\n }\n if (!existing.isSymbolicLink()) {\n return;\n }\n let linkedBlume: string;\n let runningBlume: string;\n try {\n linkedBlume = await realpath(join(link, \"blume\"));\n runningBlume = await realpath(pkgDir);\n } catch {\n return;\n }\n if (linkedBlume !== runningBlume) {\n await rm(link, { force: true });\n }\n};\n\n/**\n * Make the generated runtime resolve Astro and its integrations against Blume's\n * own dependency set. Three 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 * - The *integrations* are unreachable while astro is fine — npm's split\n * install. An `overrides` pin plus an incremental `npm install` hoists\n * astro to the project root (deleting Blume's nested copy) but leaves\n * `@astrojs/mdx` and friends nested under `blume/node_modules`, where the\n * upward walk from `.blume/` can't see them.\n *\n * The repair is the same symlink: Blume's dependency directory linked in as\n * `.blume/node_modules` so the generated config's bare specifiers (`astro`,\n * `@astrojs/mdx`, …) bind to a consistent set. That's safe when the linked\n * directory holds the full set, or when it holds only the integrations but the\n * runtime already resolves Blume's astro — the junction has no `astro` entry,\n * so astro lookups fall through to the hoisted copy the integrations bind to\n * anyway. What it can't fix is the inverse split: Blume's astro nested under a\n * *conflicting* hoisted astro with the integrations hoisted away from it. No\n * single directory yields a consistent set there; only a root `overrides`/\n * `resolutions` pin does, so we return a diagnostic naming the conflict rather\n * than silently shipping a runtime that crashes downstream. Returns the\n * 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 astroDir = candidateHolding(pkgDir, \"astro\");\n if (!astroDir) {\n return null;\n }\n const mdxDir = candidateHolding(pkgDir, \"@astrojs\", \"mdx\");\n const blumeAstro = resolveAstroPackageJson(astroDir);\n // Before probing what `.blume/` resolves, drop a cache-restored junction\n // that binds it to a superseded Blume — the probes below would otherwise\n // pass right through it (same astro, older blume) and leave it in place.\n await dropStaleDepsLink(join(outDir, \"node_modules\"), pkgDir);\n const outDirAstro = resolvedAstroPath(outDir);\n // `.blume/` resolves the very same astro Blume's deps provide.\n const astroCorrect = blumeAstro !== null && outDirAstro === blumeAstro;\n // Clean hoisted install: astro is correct and the integrations sit beside\n // it, so they resolve through the same walk — nothing to do.\n if (astroCorrect && mdxDir === astroDir) {\n return null;\n }\n // Linking the integrations' directory yields a consistent set when it also\n // holds Blume's astro (the unreachable and repairable-conflict cases) or\n // when the correct astro is reachable without it (the npm split install).\n // Any existing link here is stale and gets replaced.\n if (mdxDir && (mdxDir === astroDir || astroCorrect)) {\n await linkDepsJunction(join(outDir, \"node_modules\"), mdxDir);\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-js`, …) 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/** The subset of Rollup's plugin context `blume:server-app-resolve` needs. */\ninterface ServerAppResolveContext {\n resolve: (source: string) => Promise<{ id: string } | null>;\n}\n\n/**\n * Work around an Astro + Vite dev bug that breaks content renames.\n *\n * Astro's dev SSR entry is the virtual module `astro:server-app`, but its\n * resolver only matches the exact id (`/^astro:server-app$/`). Whenever the\n * route set changes — a content add, remove, or rename — Astro triggers a full\n * page reload, during which Vite re-requests the entry as `astro:server-app.js`.\n * The trailing `.js` misses Astro's filter, so the load fails (\"Failed to load\n * url astro:server-app.js\") and Vite's SSR module runner is left corrupted: the\n * in-memory content store never reconnects, so `getEntry` returns undefined and\n * the renamed page 404s until the dev server is manually restarted.\n *\n * Stripping the spurious `.js` and delegating back to Astro's resolver lets the\n * reload complete cleanly, so the renamed route resolves without a restart.\n */\nexport const serverAppResolvePlugin = (): {\n enforce: \"pre\";\n name: string;\n resolveId: (\n this: ServerAppResolveContext,\n id: string\n ) => Promise<string | null>;\n} => ({\n enforce: \"pre\",\n name: \"blume:server-app-resolve\",\n async resolveId(id) {\n if (id === \"astro:server-app.js\") {\n const resolved = await this.resolve(\"astro:server-app\");\n return resolved?.id ?? null;\n }\n return null;\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 * Adapter package the project must install itself for each deployment\n * platform whose adapter Blume doesn't ship. Node and Vercel ship with Blume,\n * so they never need this.\n */\nconst DEPLOYMENT_ADAPTER_DEPS: Record<string, string> = {\n cloudflare: \"@astrojs/cloudflare\",\n netlify: \"@astrojs/netlify\",\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/**\n * Warn when the resolved server-output adapter is one the project must install\n * itself (Netlify/Cloudflare; Node and Vercel ship with Blume). The generated\n * astro.config.mjs imports the adapter package directly — and on those\n * platforms the adapter is even auto-selected from env vars — so warn early\n * rather than let the build die with an opaque ERR_MODULE_NOT_FOUND from the\n * hidden generated config. Availability mirrors the search-provider check: a\n * dep resolves from the project root or from the Blume package itself.\n */\nconst deploymentAdapterWarnings = (\n deployment: ResolvedConfig[\"deployment\"],\n root: string\n): string[] => {\n const dep =\n deployment.output === \"server\" && deployment.adapter\n ? DEPLOYMENT_ADAPTER_DEPS[deployment.adapter]\n : undefined;\n if (\n dep &&\n !(canResolveFrom(root, dep) || canResolveFrom(packageRoot(), dep))\n ) {\n return [\n `Deployment adapter \"${deployment.adapter}\" needs \"${dep}\", which isn't installed. Run \\`npm install ${dep}\\` (or your package manager's equivalent).`,\n ];\n }\n return [];\n};\n\n/** Absolute path to the configured `examples.css`, or null when unset. */\nconst examplesCssFile = (root: string, config: ResolvedConfig): string | null =>\n config.examples.css ? join(root, config.examples.css) : null;\n\n/**\n * Write the per-example preview route (`{basePath}/blume-examples/<path>`)\n * that `<Component />` iframes embed — the iframe boundary is what isolates\n * previews from the docs CSS. Nested under `basePath` in the filesystem so\n * the routes stay reachable behind a proxy that only forwards the base;\n * pruneOrphans clears a stale copy when `basePath` changes or the last\n * example is removed. Returns (as a spreadable list) a warning when the\n * configured `examples.css` doesn't exist.\n */\nconst writeExamplesPreview = async (options: {\n config: ResolvedConfig;\n hasExamples: boolean;\n root: string;\n srcDir: string;\n write: (path: string, content: string) => Promise<boolean>;\n}): Promise<string[]> => {\n const { config, hasExamples, root, srcDir, write } = options;\n if (hasExamples) {\n await write(\n join(\n srcDir,\n \"pages\",\n ...config.basePath.split(\"/\").filter(Boolean),\n \"blume-examples\",\n \"[...path].astro\"\n ),\n examplesPageTemplate()\n );\n }\n const cssFile = examplesCssFile(root, config);\n return cssFile && !existsSync(cssFile)\n ? [\n `examples.css points at \"${config.examples.css}\", which doesn't exist; previews render without it.`,\n ]\n : [];\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\n/** Block math (`$$…$$`) or an explicitly authored `<Math …>` component. */\nconst containsMath = (content: string): boolean =>\n content.includes(\"$$\") || content.includes(\"<Math\");\n\n/**\n * Detect whether the project can render math: block math (`$$…$$`) or an\n * explicit `<Math>` tag in any local `.md`/`.mdx`, or in staged (non-filesystem)\n * source bodies. Drives whether the generated runtime imports the `<Math>`\n * component and KaTeX's stylesheet, so a math-free site ships no KaTeX CSS.\n * Math parsing itself is always on but block-only, so one of those literals is\n * a necessary condition — no false negatives. A stray `$$` (e.g. inside a code\n * fence) merely over-includes the idempotent import, which is harmless.\n */\nexport const detectUsesMath = async (\n root: string,\n staged: Iterable<string> = []\n): Promise<boolean> => {\n const files = await glob([\"**/*.{md,mdx}\"], {\n cwd: root,\n ignore: [\"**/node_modules/**\", \"**/.blume/**\", \"**/dist/**\"],\n onlyFiles: true,\n });\n const contents = await Promise.all(\n files.map((file) => readOptional(join(root, file)))\n );\n return [...contents, ...staged].some(containsMath);\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 const removals: Promise<void>[] = [];\n for (const path of existing) {\n const normalized = normalize(path);\n if (!written.has(normalized)) {\n removals.push(rm(normalized, { force: true }));\n }\n }\n await Promise.all(removals);\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\ninterface LogoDimensions {\n height: number;\n width: number;\n}\n\nconst SVG_ROOT = /<svg\\b(?<attributes>[^>]*)>/u;\nconst SVG_WIDTH = /\\bwidth\\s*=\\s*[\"'](?<value>[^\"']+)[\"']/u;\nconst SVG_HEIGHT = /\\bheight\\s*=\\s*[\"'](?<value>[^\"']+)[\"']/u;\nconst SVG_LENGTH = /^\\s*(?<value>[\\d.]+)(?:px)?\\s*$/u;\nconst SVG_VIEW_BOX =\n /\\bviewBox\\s*=\\s*[\"'][\\d.-]+[\\s,]+[\\d.-]+[\\s,]+(?<width>[\\d.]+)[\\s,]+(?<height>[\\d.]+)[\"']/u;\n\nconst parseSvgLength = (value: string | undefined): number | undefined => {\n const length = Number(value?.match(SVG_LENGTH)?.groups?.value);\n return length > 0 ? length : undefined;\n};\n\n/** Read dimensions from an SVG's explicit size or its view box. */\nconst svgDimensions = (svg: string | undefined): LogoDimensions | undefined => {\n const attributes = svg?.match(SVG_ROOT)?.groups?.attributes;\n const width = parseSvgLength(attributes?.match(SVG_WIDTH)?.groups?.value);\n const height = parseSvgLength(attributes?.match(SVG_HEIGHT)?.groups?.value);\n if (width && height) {\n return { height, width };\n }\n\n const viewBox = attributes?.match(SVG_VIEW_BOX);\n const viewBoxWidth = Number(viewBox?.groups?.width);\n const viewBoxHeight = Number(viewBox?.groups?.height);\n return viewBoxWidth > 0 && viewBoxHeight > 0\n ? { height: viewBoxHeight, width: viewBoxWidth }\n : undefined;\n};\n\n/** Read a local SVG logo from the project root or public directory. */\nconst readLogoSvg = (\n project: BlumeProject,\n source: string | undefined\n): string | undefined => {\n if (!source?.toLowerCase().endsWith(\".svg\")) {\n return;\n }\n const rel = source.replace(/^\\//u, \"\");\n const file = [\n join(project.context.root, \"public\", rel),\n join(project.context.root, rel),\n ].find((path) => existsSync(path));\n return file ? readFileSync(file, \"utf-8\") : undefined;\n};\n\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\" ? { image: logo } : logo;\n // `text` is passed through verbatim: `undefined` lets the brand fall back to\n // the site title, `\"\"` renders the mark alone (a logo with the wordmark baked\n // in).\n const { href, image: source, text } = config;\n const image = typeof source === \"string\" ? { light: source } : source;\n const light = image?.light ?? image?.dark;\n const dark = image?.dark ?? image?.light;\n const alt = image?.alt ?? \"\";\n const brandHref = href ?? \"/\";\n const lightSvg = readLogoSvg(project, light);\n const darkSvg = dark === light ? lightSvg : readLogoSvg(project, dark);\n\n if (light && light === dark && lightSvg) {\n return { alt, href: brandHref, svg: lightSvg, text };\n }\n\n const lightDimensions = svgDimensions(lightSvg);\n const darkDimensions = svgDimensions(darkSvg);\n const dimensions =\n lightDimensions || darkDimensions\n ? { dark: darkDimensions, light: lightDimensions }\n : undefined;\n return { alt, dark, dimensions, href: brandHref, light, text };\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 const logo = resolveLogo(project);\n const ogLogo = config.seo.og.logo\n ? resolveOgLogo(project, config.seo.og.logo)\n : logo?.svg;\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 const editPath = github?.dir ? `${github.dir}/${rel}` : rel;\n return `${editBase}/${editPath}`;\n };\n\n const { i18n } = config;\n\n // Resolve the header repo link per locale. API references no longer add a tab\n // automatically — authors point a `navigation.tabs` entry at the reference\n // route to surface it (see `referenceRoutes`).\n const withRepoUrl = (nav: Navigation): Navigation => ({\n ...nav,\n repoUrl: config.navigation.repo && repoUrl ? repoUrl : null,\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 withRepoUrl(\n graph.navigationByLocale[code] ?? {\n featured: [],\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 ask: config.ai.ask?.enabled\n ? { suggestions: config.ai.ask.suggestions }\n : null,\n banner: resolveBanner(config),\n basePath: config.basePath,\n codeThemes: config.markdown.codeBlocks.theme,\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 imageZoom: config.markdown.imageZoom,\n logo,\n mcp: config.ai.mcp.enabled\n ? {\n name: config.ai.mcp.name ?? config.title,\n route: config.ai.mcp.route,\n }\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: {\n enabled: config.seo.og.enabled ?? false,\n fonts: config.seo.og.fonts ?? [],\n logo: ogLogo,\n palette: config.seo.og.palette,\n },\n repoUrl,\n search: {\n enabled: config.search.provider !== \"none\",\n popular: resolveSearchPopular(config.search.popular, config.basePath),\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 x: config.seo.x,\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: withRepoUrl(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 or a custom `.astro` page already occupies its\n * route, so the user's page keeps working instead of colliding.\n */\nconst planMcp = (\n project: BlumeProject,\n srcDir: string,\n userPages: { pattern: string }[]\n): McpPlan => {\n const { config } = project;\n const { route } = config.ai.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.ai.mcp.enabled) {\n return base;\n }\n if (routeIsTaken(userPages, project.graph.pages, route)) {\n return {\n ...base,\n warnings: [\n `MCP server route \"${route}\" is already used by a content or custom page; the MCP server was not generated. Set a different \"ai.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 base: data.base,\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 * 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 askPath = join(srcDir, \"generated\", \"Ask.astro\");\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 examplesThemePath = join(srcDir, \"generated\", \"examples.css\");\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 // Staged (non-filesystem) sources materialize into `.blume/content`; keyed by\n // entryId so i18n duplicates of one entry write a single file. Collected here\n // so math detection also sees staged bodies (they never live under root).\n const staged = collectStaged(project);\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. Independent of\n // the discovery reads, so it joins the same parallel batch.\n const [\n pages,\n detectedReact,\n usesMath,\n userTheme,\n userExamplesCss,\n islandDiscovery,\n exampleDiscovery,\n componentSlots,\n ] = await Promise.all([\n context.pagesRoot ? discoverPages(context.pagesRoot) : Promise.resolve([]),\n detectNeedsReact(context.root),\n detectUsesMath(context.root, staged.values()),\n readOptional(context.themeFile),\n readOptional(examplesCssFile(context.root, config)),\n discoverIslands(context.root),\n discoverExamples(context.root, config.examples.source),\n buildComponentSlots(context.componentsFile),\n ]);\n const {\n plan: slotPlan,\n tags: overrideTags,\n warnings: overrideWarnings,\n } = componentSlots;\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 // Absolute path to the React Compiler babel plugin (null when off). Resolved\n // here, Node-side, so the generated config points babel straight at Blume's\n // shipped copy — see resolveReactCompiler. Any unresolved-but-requested\n // warning is folded into `warnings` below (declared later).\n const reactCompilerPath = resolveReactCompiler(config, needsReact);\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, config.seo.og.titles);\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, pages);\n pages.push(...mcp.discoveryPages);\n\n const hasStaged = staged.size > 0;\n // Only emit a project-scanning `docs` collection when a filesystem source\n // actually feeds it. An all-staged project (openapi/notion/…) has only staged\n // sources, so the `docs` glob would otherwise scan (and watch) the whole\n // project root for nothing — see contentConfigTemplate.\n const hasFilesystemSource = project.sources.some((source) => !source.staged);\n\n // All of these write to distinct generated paths and never read one another's\n // output, so the structural files, the per-convention hydration wrappers, and\n // the Ask/MCP writers all run in one parallel batch. Only the structural\n // writes' change flags feed `structuralChange`, so they stay a nested group.\n const [structural] = await Promise.all([\n Promise.all([\n write(\n join(out, \"astro.config.mjs\"),\n astroConfigTemplate({\n aliases: resolveTsconfigAliases(context.root),\n askPath,\n config,\n contentRoutes: project.manifest.routes.map((route) => route.path),\n context,\n dataPath,\n examplesPath,\n examplesThemePath,\n needsReact,\n needsSvelte,\n needsVue,\n openapiPath,\n pages,\n reactCompilerPath,\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 collection: resolveDocsCollection(config, context),\n config,\n context,\n filesystem: hasFilesystemSource,\n staged: hasStaged,\n })\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].astro\"),\n catchAllPageTemplate({\n exportEpub,\n exportPdf,\n mathEnabled: usesMath,\n needsReact,\n })\n ),\n // The header's Ask trigger, behind the `blume:ask` alias. Always written\n // (even when Ask is off, as a component that renders nothing) so the alias\n // resolves — the same contract as `blume:search-client`.\n write(askPath, askComponentTemplate(askEnabled)),\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, config.basePath)\n ),\n // The isolated Tailwind entry for `<Component />` preview frames: only\n // example files (and the project sources they import) are scanned, so\n // the docs theme never reaches a preview.\n write(\n examplesThemePath,\n examplesEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n sources: [`${context.root}/**/*.{astro,jsx,svelte,ts,tsx,vue}`],\n userCss: userExamplesCss,\n })\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 // Per-island hydration wrappers for the `islands/` convention. The map\n // module (written above, always) imports these; orphans from removed\n // islands are pruned at the end of the pass.\n Promise.all(\n islandDiscovery.islands.map((island) =>\n write(\n join(srcDir, \"generated\", \"islands\", `${island.name}.astro`),\n islandWrapperTemplate(island)\n )\n )\n ),\n // Per-override hydration wrappers for `defineComponents` islands and\n // `client:*` layout/mdx overrides. The generated `components.ts` (written\n // above) imports these; orphans from removed overrides are pruned at the\n // end of the pass.\n 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 // Per-example live wrappers for the `examples/` convention, resolved by\n // `<Component path>` through the `examples.ts` map (written above, always).\n 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 writeAskFiles(project, srcDir, write),\n writeMcpFiles(project, mcp, write),\n ]);\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 (hasGeneratedChangelog(project, pages)) {\n await write(\n join(srcDir, \"pages\", \"changelog.astro\"),\n changelogIndexTemplate({\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\n })\n );\n }\n\n // Three independent writes: the per-example preview routes that\n // `<Component />` iframes embed (returning a warning when the configured\n // examples.css is missing), the default 404 page (`/404`, unless the project\n // already owns the route), and the provider-specific client loader behind\n // the `blume:search-client` alias — always (re)generated so the alias\n // resolves even when search is disabled.\n const [examplesWarnings] = await Promise.all([\n writeExamplesPreview({\n config,\n hasExamples: exampleDiscovery.examples.length > 0,\n root: context.root,\n srcDir,\n write,\n }),\n writeNotFoundPage(write, srcDir, pages, project.graph.pages),\n write(searchClientPath, searchClientTemplate(config)),\n ]);\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(\"md\")\n ),\n write(\n join(srcDir, \"pages\", \"[...slug].mdx.ts\"),\n rawMarkdownEndpointTemplate(\"mdx\")\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 ...reactCompilerWarnings(config, needsReact, reactCompilerPath),\n ...mcp.warnings,\n ...islandDiscovery.warnings,\n ...exampleDiscovery.warnings,\n ...examplesWarnings,\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 routes (so a tab an author points at one still validates).\n const navTargetRoutes = new Set<string>([\n ...project.graph.routes.keys(),\n ...pages.map((page) => page.pattern),\n ...referenceRoutes(config),\n ]);\n if (hasGeneratedChangelog(project, pages)) {\n navTargetRoutes.add(\"/changelog\");\n }\n // Curated `search.popular` icons live outside the navigation model, so they\n // miss `validateNavIcons` in the graph build — they're checked here too,\n // where the search config is known. A typo otherwise just renders the\n // default glyph.\n warnings.push(\n ...[\n ...validateNavTargets(project.graph.navigation, navTargetRoutes),\n ...validateSearchPopularIcons(config.search.popular),\n ].map((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(\n ...deploymentAdapterWarnings(config.deployment, context.root),\n ...islandFrameworkWarnings(frameworks, context.root)\n );\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 // 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 // These write to distinct trees and never read one another, so they batch.\n // `data.json`/`openapi.json` and the manifest are not \"structural\" for Astro;\n // they hot-reload. `writeStagedContent` owns the `.blume/content` tree (its\n // own pruning), outside `.blume/src`, so a removed remote entry doesn't linger.\n await Promise.all([\n write(join(srcDir, \"generated\", \"data.json\"), buildRuntimeData(project)),\n write(\n openapiPath,\n `${JSON.stringify(openApiSource ? openApiSource.openApiData() : {})}\\n`\n ),\n write(\n join(out, \"blume.manifest.json\"),\n `${JSON.stringify(project.manifest, null, 2)}\\n`\n ),\n writeStagedContent(out, staged),\n ]);\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",
|
|
144
144
|
"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, and\n * content is kept as Markdown so grounding sees fenced code examples — the model\n * answers \"what does the config look like?\" from the docs instead of declining.\n * The reader is an AI agent, so `<Visibility>` resolves for the agents audience\n * (web-only content removed, agents-only unwrapped), matching llms-full.txt.\n */\nexport const buildAskData = async (project: BlumeProject): Promise<AskData> => {\n const documents = await buildSearchDocuments(project, {\n audience: \"agents\",\n content: \"markdown\",\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",
|
|
145
|
-
"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\";\nimport { downlevelComponents } from \"./component-markdown.ts\";\nimport { applyAgentVisibility } from \"./visibility.ts\";\n\n/** One route's raw-Markdown variants. */\nexport interface RawMarkdownEntry {\n /**\n * The agent-facing Markdown served at `/<route>.md`: supported components\n * downleveled to plain Markdown (`<TypeTable>` → table, `<Callout>` →\n * blockquote, …). Present only when downleveling changed something, so\n * component-free pages aren't stored twice.\n */\n md?: string;\n /** The original source, served verbatim at `/<route>.mdx`. */\n mdx: string;\n}\n\n/** The Markdown an agent should read for a route. */\nexport const agentMarkdown = (entry: RawMarkdownEntry): string =>\n entry.md ?? entry.mdx;\n\n/**\n * Map every route to its raw source Markdown. Powers the `<route>.md` and\n * `<route>.mdx` endpoints: `.mdx` serves the original source so tools can see\n * exactly what the author wrote, while `.md` downlevels supported components\n * to plain Markdown for consumers that can't interpret JSX. `<Visibility>`\n * audiences are resolved for agents in both variants: web-only content is\n * removed, agents-only unwrapped.\n */\nexport const buildRawMarkdown = async (\n project: BlumeProject\n): Promise<Record<string, RawMarkdownEntry>> => {\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(async (route) => {\n const source = applyAgentVisibility(await readRoute(route));\n const md = downlevelComponents(\n source,\n project.config.ai.markdownComponents\n );\n const entry: RawMarkdownEntry =\n md === source ? { mdx: source } : { md, mdx: source };\n return [route.path, entry] as const;\n })\n );\n return Object.fromEntries(entries);\n};\n",
|
|
145
|
+
"import { readFile } from \"node:fs/promises\";\n\nimport matter from \"../core/frontmatter.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport { readEntryText } from \"../core/sources/read.ts\";\nimport type { RouteManifestEntry } from \"../core/types.ts\";\nimport { downlevelComponents } from \"./component-markdown.ts\";\nimport { applyAgentVisibility } from \"./visibility.ts\";\n\n/** One route's raw-Markdown variants. */\nexport interface RawMarkdownEntry {\n /**\n * The agent-facing Markdown served at `/<route>.md`: supported components\n * downleveled to plain Markdown (`<TypeTable>` → table, `<Callout>` →\n * blockquote, …). Present only when downleveling changed something, so\n * component-free pages aren't stored twice.\n */\n md?: string;\n /** The original source, served verbatim at `/<route>.mdx`. */\n mdx: string;\n}\n\n/** The Markdown an agent should read for a route. */\nexport const agentMarkdown = (entry: RawMarkdownEntry): string =>\n entry.md ?? entry.mdx;\n\n/**\n * Map every route to its raw source Markdown. Powers the `<route>.md` and\n * `<route>.mdx` endpoints: `.mdx` serves the original source so tools can see\n * exactly what the author wrote, while `.md` downlevels supported components\n * to plain Markdown for consumers that can't interpret JSX. `<Visibility>`\n * audiences are resolved for agents in both variants: web-only content is\n * removed, agents-only unwrapped.\n */\nexport const buildRawMarkdown = async (\n project: BlumeProject\n): Promise<Record<string, RawMarkdownEntry>> => {\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(async (route) => {\n const source = applyAgentVisibility(await readRoute(route));\n // The `.md` variant keeps the front-matter block in the output, but its\n // data must also be in scope for `prop={frontmatter.*}` expressions.\n const md = downlevelComponents(\n source,\n project.config.ai.markdownComponents,\n matter(source).data\n );\n const entry: RawMarkdownEntry =\n md === source ? { mdx: source } : { md, mdx: source };\n return [route.path, entry] as const;\n })\n );\n return Object.fromEntries(entries);\n};\n",
|
|
146
146
|
"import { normalizeBasePath } from \"../../core/base-path.ts\";\nimport 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 { agentMarkdown, 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 /**\n * Normalized `deployment.base` (`\"\"` or `/seg`), layered onto routes when\n * emitting URLs — the site is base-less and routes are base-less manifest\n * paths, matching the sitemap/llms.txt convention.\n */\n base: string;\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, rawMarkdown] = await Promise.all([\n // The MCP server is independent of on-page search, so index docs even when\n // the search provider is `none`. Documents are agent-facing, so\n // `<Visibility>` resolves like `get_page`/llms-full.txt (web-only content\n // removed, agents-only kept).\n buildSearchDocuments(project, {\n audience: \"agents\",\n includeWhenDisabled: true,\n }),\n buildRawMarkdown(project),\n ]);\n\n // `get_page` serves the agent variant: components downleveled to Markdown.\n const pages = Object.fromEntries(\n Object.entries(rawMarkdown).map(([route, entry]) => [\n route,\n agentMarkdown(entry),\n ])\n );\n\n const descriptionById = new Map(\n graph.pages.map((page) => [page.id, page.description])\n );\n\n const routes: McpRoute[] = [];\n for (const route of manifest.routes) {\n if (route.hidden) {\n continue;\n }\n routes.push({\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\n return {\n base: normalizeBasePath(config.deployment.base),\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.ai.mcp.instructions,\n name: config.ai.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",
|
|
147
147
|
"/**\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 agent-optimized Markdown (frontmatter included, components downleveled to plain Markdown). 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",
|
|
148
148
|
"import { withBasePath } from \"../../core/base-path.ts\";\nimport { trimEnd } from \"../../core/trim.ts\";\nimport { MCP_TOOLS } from \"./tools.ts\";\n\n/** Inputs needed to describe the MCP server in discovery documents. */\nexport interface McpDiscoveryInput {\n /** Normalized `deployment.base` (`\"\"` or `/seg`); the route is base-less. */\n base: string;\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 // The endpoint is a generated Astro page, so it's served under\n // `deployment.base` like every other route (the sitemap/llms.txt convention).\n const path = withBasePath(input.base, input.route);\n // Concatenate rather than `new URL(path, site)` — a root-absolute path\n // would drop the base path of a subpath deployment (`acme.com/docs`).\n return input.site ? `${trimEnd(input.site, \"/\")}${path}` : path;\n};\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",
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"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 // Extracted so the skip paths become early `return`s (one `continue` budget\n // per loop under the lint rule) instead of `continue` statements.\n const collectIsland = (file: string, source: string): void => {\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 return;\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 return;\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 return;\n }\n seen.set(name, file);\n islands.push({\n client: readClientMode(source, file, warnings),\n file,\n framework,\n name,\n });\n };\n\n for (const [index, file] of files.entries()) {\n collectIsland(file, sources[index] ?? \"\");\n }\n\n return { islands, warnings };\n};\n",
|
|
162
162
|
"import { existsSync, readFileSync } from \"node:fs\";\n\nimport { dirname, join, resolve } from \"pathe\";\n\n// Blume's remote sources (GitHub Releases, mdx-remote, Sanity, Notion…) read\n// their tokens from `process.env` during the content scan — which runs before\n// Astro/Vite boots, so Vite's own `.env` loading is too late. This loader fills\n// that gap: it cascades `.env`/`.env.local` from the working dir up to the repo\n// root, so a monorepo can keep one `.env` at the root and every app picks it up.\n\nconst ENV_LINE =\n /^\\s*(?:export\\s+)?(?<key>[A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?<value>.*?)\\s*$/u;\nconst DOUBLE_QUOTED = /^\"(?<body>[\\s\\S]*)\"$/u;\nconst SINGLE_QUOTED = /^'(?<body>[\\s\\S]*)'$/u;\n\nconst ESCAPE = /\\\\(?<char>[\\\\nt\"])/gu;\nconst UNESCAPED: Record<string, string> = {\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n n: \"\\n\",\n t: \"\\t\",\n};\n\n/** Unquote a value, expanding `\\n`/`\\t`/escapes inside double quotes only. */\nconst unquote = (raw: string): string => {\n const double = raw.match(DOUBLE_QUOTED)?.groups?.body;\n if (double !== undefined) {\n // A single pass so each backslash is consumed exactly once — sequential\n // replaceAll calls would expand the `n` in `\\\\n` (an escaped backslash\n // followed by a literal `n`) into a newline.\n return double.replaceAll(\n ESCAPE,\n (match, char: string) => UNESCAPED[char] ?? match\n );\n }\n const single = raw.match(SINGLE_QUOTED)?.groups?.body;\n if (single !== undefined) {\n return single;\n }\n // dotenv/Vite treat an unquoted `#` as the start of an inline comment (a\n // value containing `#` must be quoted) — keeping the comment would hand\n // consumers a silently corrupted value.\n const hash = raw.indexOf(\"#\");\n return (hash === -1 ? raw : raw.slice(0, hash)).trim();\n};\n\n/** Parse `.env` text into key/value pairs, skipping blanks and `#` comments. */\nexport const parseEnv = (content: string): Record<string, string> => {\n const env: Record<string, string> = {};\n for (const line of content.split(/\\r?\\n/u)) {\n if (line.trim() === \"\" || line.trimStart().startsWith(\"#\")) {\n continue;\n }\n const groups = line.match(ENV_LINE)?.groups;\n if (groups?.key !== undefined && groups.value !== undefined) {\n env[groups.key] = unquote(groups.value);\n }\n }\n return env;\n};\n\n/** Apply parsed vars without clobbering anything already in `process.env`. */\nconst applyEnv = (parsed: Record<string, string>): void => {\n for (const [key, value] of Object.entries(parsed)) {\n if (!(key in process.env)) {\n process.env[key] = value;\n }\n }\n};\n\nconst loadFile = (path: string): void => {\n try {\n if (existsSync(path)) {\n applyEnv(parseEnv(readFileSync(path, \"utf-8\")));\n }\n } catch {\n // Env files are best-effort; a read/parse failure must not abort a build.\n }\n};\n\n/**\n * Load `.env`/`.env.local`, cascading from `startDir` up to the repository root\n * (the first ancestor containing a `.git`) or the filesystem root. Nearer files\n * and existing `process.env` values win, so shell/CI overrides are never lost\n * and `.env.local` layers over `.env`.\n */\nexport const loadEnvFiles = (startDir: string): void => {\n let dir = resolve(startDir);\n let done = false;\n while (!done) {\n loadFile(join(dir, \".env.local\"));\n loadFile(join(dir, \".env\"));\n const parent = dirname(dir);\n // Stop at the repo root (nearest `.git`) or the filesystem root.\n done = existsSync(join(dir, \".git\")) || parent === dir;\n dir = parent;\n }\n};\n",
|
|
163
163
|
"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 const noteSuffix = note ? ` (${note})` : \"\";\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${noteSuffix}.`,\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",
|
|
164
|
-
"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 // Load `.env` files from the project root before the scan: remote sources\n // read their tokens from `process.env` during `scanProject`, and\n // `loadEnvFiles` never overrides variables that are already set.\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(\
|
|
164
|
+
"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 // Load `.env` files from the project root before the scan: remote sources\n // read their tokens from `process.env` during `scanProject`, and\n // `loadEnvFiles` never overrides variables that are already set.\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 const dropped =\n project.droppedPages > 0\n ? `${project.droppedPages} page(s) failed frontmatter validation and were dropped from the site. `\n : \"\";\n if (hadErrors && options.strict) {\n logger.error(\n `Aborting due to errors. ${dropped}Fix the diagnostics above, or pass --no-strict to continue despite them.`\n );\n process.exit(1);\n }\n if (hasErrors(project.diagnostics) && !options.strict) {\n logger.warn(\n `Continuing despite errors. ${dropped}Use --strict to fail instead.`\n );\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",
|
|
165
165
|
"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\", { isolatedHint: true, 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",
|
|
166
166
|
"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 { resolveRuntimeDir } from \"../../core/project.ts\";\nimport { parsePort } from \"../args.ts\";\nimport { coalescedRunner } from \"../coalesce.ts\";\nimport {\n acquireDevLock,\n describeDevLock,\n DevLockHeldError,\n updateDevLockPort,\n} from \"../dev-lock.ts\";\nimport { logger, reportDiagnostics } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\n/**\n * Resolve a `--host` flag value into what Astro/Vite's `server.host` expects.\n * citty (0.1) has no mixed string/boolean arg type, so `host` is declared as a\n * string and a bare `--host` parses as `\"\"` — Node would bind all interfaces\n * for `\"\"`, but Vite's `resolveHostname` treats it as a literal hostname and\n * prints malformed URLs like `http://:4321/`. Match Astro's own `--host`\n * semantics instead: bare flag → `true` (bind all interfaces), `--host\n * 10.0.0.1` → that address, absent → `false` (localhost only).\n */\nexport const normalizeHost = (host: string | undefined): boolean | string =>\n host === \"\" ? true : (host ?? false);\n\n/**\n * A fingerprint of the route set: the sorted `path entryId` pairs. It changes\n * when a page is added, removed, or renamed (a folder rename shifts many at\n * once) but stays equal across pure body edits — so the dev loop can tell a\n * \"structural\" change (needs a cold restart) from a hot-reloadable one.\n */\nconst routeSignature = (\n routes: readonly { entryId: string; path: string }[]\n): string =>\n routes\n .map((route) => `${route.path} ${route.entryId}`)\n .toSorted()\n .join(\"\\n\");\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 let devServerUrl = `http://localhost:${port}`;\n\n // Claim the shared `.blume` dir BEFORE preparing: `prepareProject`\n // regenerates the runtime, so even a refused second dev server would\n // otherwise clobber the running one's generated tree (with this\n // invocation's port baked in) on its way out. The claim is atomic, so two\n // simultaneous starts can't both win. Dev never relocates the runtime dir,\n // so the lock always lives at `<root>/.blume`.\n const outDir = resolveRuntimeDir(root);\n let releaseLock: () => void;\n try {\n releaseLock = acquireDevLock(outDir, port);\n } catch (error) {\n if (error instanceof DevLockHeldError) {\n logger.error(\n `A \\`blume dev\\` server is already running${describeDevLock(error.lock)} in this project. Reuse that server instead of starting a second one — two dev servers would corrupt the shared .blume dir. If it crashed, delete .blume/dev.lock.`\n );\n process.exit(1);\n }\n throw error;\n }\n process.on(\"exit\", releaseLock);\n\n const project = await prepareProject({\n devServerUrl,\n mode: \"dev\",\n overrides,\n preview,\n root,\n strict: args.strict,\n });\n\n // A factory so `runRegenerate` can recreate the server on a structural\n // (route-set) change: only a cold container re-globs Astro's content store,\n // which its in-place config restart doesn't. `open` is honored on first\n // boot only — a restart must not reopen the browser.\n const createServer = (listenPort: number | undefined, open: boolean) =>\n dev({\n logLevel: args.debug ? \"debug\" : \"info\",\n root: project.context.outDir,\n server: { host: normalizeHost(args.host), open, port: listenPort },\n });\n\n let server = await createServer(explicitPort, args.open ?? false);\n\n // Vite bumps to the next free port when the default is taken, so record\n // the port the server actually bound — the lock's URL is what a refused\n // second invocation tells its caller to reuse. The site fallback baked\n // into the runtime also carries the port, so it must follow suit (below,\n // once the regeneration closure exists).\n const boundPort = server.address.port;\n if (boundPort !== port) {\n updateDevLockPort(outDir, boundPort);\n devServerUrl = `http://localhost:${boundPort}`;\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 let lastSignature = routeSignature(project.manifest.routes);\n\n // Watch user inputs and regenerate the runtime data on change. A body edit\n // hot-reloads via Vite (fast path). A route-set change instead forces a cold\n // server restart: Astro's in-place content sync never re-globs on a Blume\n // route change (it strips `integrations` from its cache digest) and its glob\n // watcher misses directory renames, so a renamed page 404s (`getEntry` reads\n // a stale in-memory store) until the server is restarted. We restart it\n // ourselves — stop, regenerate while down (no watcher races), then bring up\n // a fresh container whose cold sync re-globs everything. `coalescedRunner`\n // single-flights the scan so a burst of watch events can never stack\n // overlapping regenerations (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 const nextSignature = routeSignature(next.manifest.routes);\n const structural = nextSignature !== lastSignature;\n if (structural) {\n await server.stop();\n await generateRuntime(next);\n server = await createServer(boundPort, false);\n } else {\n await generateRuntime(next);\n }\n // Commit the signature only after the (re)generation succeeded. If the\n // restart above throws mid-sequence, the signature stays stale so the\n // next watch event retries the structural path — committing early would\n // route it to the non-structural branch with the server still down.\n lastSignature = nextSignature;\n // Surface any content/config errors in the terminal AND the browser\n // overlay. The terminal report must not be skipped: on a published\n // install the CLI bundle holds its own copy of the integration module,\n // separate from the Vite module graph that registers the overlay, so\n // the overlay call below can be a no-op there.\n reportDiagnostics(next.diagnostics, root);\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 // The runtime prepared above baked the *requested* port into the site\n // fallback; if Vite bumped it, regenerate so OG images, canonicals, and\n // other site-gated URLs point at the port actually serving.\n if (boundPort !== port) {\n void runRegenerate();\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",
|
|
167
167
|
"import type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { AstroIntegration } from \"astro\";\n\nimport { enrichDiagnostic } from \"../core/diagnostics.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport { markdownVariantUrl, prefersMarkdown } from \"./markdown-negotiation.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: Diagnostic[] = [];\n for (const diagnostic of diagnostics) {\n if (diagnostic.severity === \"error\") {\n errors.push(enrichDiagnostic(diagnostic));\n }\n }\n const channel = overlayChannel();\n if (errors.length === 0 || !channel) {\n return;\n }\n const body = errors\n .map((diagnostic) => {\n const lineSuffix = diagnostic.line ? `:${diagnostic.line}` : \"\";\n const where = diagnostic.file\n ? `\\n at ${diagnostic.file}${lineSuffix}`\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\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 honor `Accept: text/markdown`.\n */\nexport const blumeIntegration = (\n options: BlumeIntegrationOptions\n): AstroIntegration => ({\n hooks: {\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 },\n },\n name: \"blume\",\n});\n",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"/**\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",
|
|
170
170
|
"import { readFileSync } from \"node:fs\";\n\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { packageRoot } from \"../../core/package-root.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 FALLBACK_MIN_NODE = \"22.12.0\";\nconst LEADING_RANGE = /^[^\\d]*/u;\n\n/** The minimum Node version, read from the package's own `engines` field so\n * doctor can never drift from what the package actually declares. */\nconst minSupportedNode = (): string => {\n try {\n const pkg = JSON.parse(\n readFileSync(join(packageRoot(), \"package.json\"), \"utf-8\")\n ) as { engines?: { node?: string } };\n const range = pkg.engines?.node ?? \"\";\n return range.replace(LEADING_RANGE, \"\") || FALLBACK_MIN_NODE;\n } catch {\n return FALLBACK_MIN_NODE;\n }\n};\n\nconst versionBelow = (current: string, minimum: string): boolean => {\n const a = current.split(\".\").map((part) => Math.trunc(Number(part)));\n const b = minimum.split(\".\").map((part) => Math.trunc(Number(part)));\n for (let i = 0; i < 3; i += 1) {\n const delta = (a[i] ?? 0) - (b[i] ?? 0);\n if (delta !== 0) {\n return delta < 0;\n }\n }\n return false;\n};\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 minNode = minSupportedNode();\n if (versionBelow(process.versions.node, minNode)) {\n diagnostics.push({\n code: \"BLUME_NODE_VERSION\",\n message: `Node ${process.versions.node} is below the supported minimum (${minNode}).`,\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",
|
|
171
171
|
"import { defineCommand } from \"citty\";\nimport { relative } from \"pathe\";\n\nimport { loadConfig } from \"../../core/config.ts\";\nimport { eject } from \"../../registry/eject.ts\";\nimport { refuseIfDevRunning } from \"../dev-lock.ts\";\nimport {\n droppedArtifactNotices,\n updatePackageScripts,\n} from \"../eject-scripts.ts\";\nimport { commandsFor, detectPackageManager } from \"../init/scaffold.ts\";\nimport { logger } from \"../log.ts\";\n\n/**\n * Warn which `blume build` post-build artifacts the ejected app stops\n * producing. Printed both at the confirmation (so the decision is informed)\n * and after `--yes` (so a direct eject still sees it). No-op when the config\n * activates none of them.\n */\nconst reportDroppedArtifacts = (notices: string[]): void => {\n if (notices.length === 0) {\n return;\n }\n logger.warn(\n [\n \"The ejected build script runs plain `astro build`, which stops producing these `blume build` artifacts:\",\n ...notices.map((notice) => ` - ${notice}`),\n ].join(\"\\n\")\n );\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 // Config-aware drop list: only the artifacts this project actually\n // produces are mentioned (e.g. the Pagefind index only for\n // `search.provider: \"pagefind\"`).\n let notices: string[] = [];\n try {\n const { config } = await loadConfig(root);\n notices = droppedArtifactNotices(config);\n } catch {\n // A config that fails to load can't gate the notice; the eject itself\n // surfaces the load error.\n }\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 reportDroppedArtifacts(notices);\n logger.info(\"Re-run with --yes to proceed.\");\n return;\n }\n\n const { files, warnings } = await eject(root);\n await updatePackageScripts(root);\n\n // The same surface as the generated-runtime path (prepare.ts): one warn\n // per generation warning, e.g. a Scalar reference spec that wasn't found.\n for (const warning of warnings) {\n logger.warn(warning);\n }\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 reportDroppedArtifacts(notices);\n // Print run commands matching the user's package manager, detected the\n // same way as `blume init`'s next-steps hint.\n const pm = detectPackageManager(process.env.npm_config_user_agent);\n const { build, dev } = commandsFor(pm);\n logger.box(\n `Your project is now a standalone Astro app.\\n\\n ${dev}\\n ${build}\\n\\nThe blume package remains importable.`\n );\n },\n});\n",
|
|
172
|
-
"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 { buildMcpData } from \"../ai/mcp/data.ts\";\nimport { buildMcpDiscovery, buildMcpServerCard } from \"../ai/mcp/discovery.ts\";\nimport { planComponentSlots } from \"../astro/component-slots.ts\";\nimport { discoverExamples } from \"../astro/examples.ts\";\nimport {\n buildRuntimeData,\n collectStaged,\n detectNeedsReact,\n detectUsesMath,\n} from \"../astro/generate.ts\";\nimport { discoverIslands } from \"../astro/islands.ts\";\nimport { customOgRoutes, discoverPages, routeIsTaken } from \"../astro/pages.ts\";\nimport {\n askEndpointTemplate,\n askComponentTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n examplesPageTemplate,\n exampleSlug,\n islandMapTemplate,\n islandWrapperTemplate,\n mcpEndpointTemplate,\n mcpPageFile,\n mixedbreadSearchEndpointTemplate,\n notFoundPageTemplate,\n ogEndpointTemplate,\n rawMarkdownEndpointTemplate,\n rssEndpointTemplate,\n runtimeTsconfigTemplate,\n searchClientTemplate,\n searchEndpointTemplate,\n staticJsonEndpointTemplate,\n} from \"../astro/templates.ts\";\nimport { packageRoot } from \"../core/package-root.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 {\n examplesEntryTemplate,\n tailwindEntryTemplate,\n} from \"../theme/entry.ts\";\nimport { buildThemeCss } from \"../theme/palette.ts\";\nimport { twoslashCss } from \"../theme/twoslash.ts\";\n\nconst toPosix = (path: string): string => path.split(\"\\\\\").join(\"/\");\n\n/** The portable `@source` guess: blume in the project's own node_modules. */\nconst LOCAL_BLUME_SOURCE = \"../../node_modules/blume/src/**/*.{astro,ts,tsx}\";\n\n/**\n * The `@source` glob pointing Tailwind at Blume's own source, relative to the\n * ejected `src/generated/app.css`. The project-local `node_modules/blume` is\n * preferred (portable, and under pnpm the symlink survives version bumps), but\n * hoisted installs (npm/yarn workspaces lift blume into the workspace root's\n * node_modules) would make that guess match nothing and silently drop utility\n * classes — so fall back to the package's real installed location, and when\n * even that fails, warn instead of failing silently.\n *\n * Exported for testing.\n */\nexport const blumeSourceGlob = (\n root: string,\n genDir: string,\n resolveBlumeRoot: () => string = packageRoot\n): string => {\n if (existsSync(join(root, \"node_modules\", \"blume\"))) {\n return LOCAL_BLUME_SOURCE;\n }\n try {\n const src = join(resolveBlumeRoot(), \"src\");\n return `${toPosix(relative(genDir, src))}/**/*.{astro,ts,tsx}`;\n } catch {\n console.warn(\n 'blume: could not locate the installed blume package; src/generated/app.css keeps its default `@source \"../../node_modules/blume/...\"` glob. If blume is hoisted elsewhere, point that glob at its install location or Blume\\'s utility classes will be missing.'\n );\n return LOCAL_BLUME_SOURCE;\n }\n};\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/** Whether the ejected app hosts the MCP server (enabled and route free). */\nconst hostsMcp = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): boolean =>\n project.config.ai.mcp.enabled &&\n !routeIsTaken(userPages, project.graph.pages, project.config.ai.mcp.route);\n\n/**\n * The `.well-known` MCP discovery routes, injected as prerendered pages\n * alongside the user's own so the ejected Astro config wires them in. Empty\n * when the server is disabled or its route is already owned by a page.\n */\nconst mcpDiscoveryPages = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): { entrypoint: string; pattern: string }[] =>\n hostsMcp(project, userPages)\n ? [\n {\n entrypoint: \"src/blume-mcp/discovery.ts\",\n pattern: \"/.well-known/mcp.json\",\n },\n {\n entrypoint: \"src/blume-mcp/server-card.ts\",\n pattern: \"/.well-known/mcp/server-card.json\",\n },\n ]\n : [];\n\n/**\n * The MCP data snapshot, server endpoint, and `.well-known` discovery\n * documents, mirroring `writeMcpFiles` in generate.ts. Empty when the server\n * is disabled or its route is already owned by a page.\n */\nconst mcpFiles = async (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n genDir: string\n): Promise<{ content: string; path: string }[]> => {\n if (!hostsMcp(project, userPages)) {\n return [];\n }\n const { route } = project.config.ai.mcp;\n const data = await buildMcpData(project);\n const discoveryInput = {\n base: data.base,\n name: data.name,\n route,\n site: data.site,\n version: data.version,\n };\n return [\n {\n content: `${JSON.stringify(data)}\\n`,\n path: join(genDir, \"mcp-data.json\"),\n },\n {\n content: mcpEndpointTemplate(route),\n path: join(srcDir, \"pages\", mcpPageFile(route)),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpDiscovery(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"discovery.ts\"),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpServerCard(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"server-card.ts\"),\n },\n ];\n};\n\n/**\n * The `/changelog` index page, mirroring `shouldGenerateChangelog` in\n * generate.ts: emitted when `type: changelog` entries or a release-backed\n * changelog source exist, unless a user page already owns the route.\n */\nconst changelogFiles = (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n options: Parameters<typeof changelogIndexTemplate>[0]\n): { content: string; path: string }[] => {\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 if (\n !(hasChangelog || hasChangelogSource) ||\n routeIsTaken(userPages, project.graph.pages, \"/changelog\")\n ) {\n return [];\n }\n return [\n {\n content: changelogIndexTemplate(options),\n path: join(srcDir, \"pages\", \"changelog.astro\"),\n },\n ];\n};\n\n/** Contents of the configured `examples.css`, or `\"\"` when unset/absent. */\nconst readExamplesCss = (\n root: string,\n css: string | undefined\n): Promise<string> =>\n css && existsSync(join(root, css))\n ? readFile(join(root, css), \"utf-8\")\n : Promise.resolve(\"\");\n\n/**\n * The per-example preview route `<Component />` iframes embed, nested under\n * `basePath` so it stays reachable behind a proxy that only forwards the\n * base. Empty when the project has no examples.\n */\nconst examplesPreviewFiles = (\n srcDir: string,\n basePath: string,\n hasExamples: boolean\n): { content: string; path: string }[] =>\n hasExamples\n ? [\n {\n content: examplesPageTemplate(),\n path: join(\n srcDir,\n \"pages\",\n ...basePath.split(\"/\").filter(Boolean),\n \"blume-examples\",\n \"[...path].astro\"\n ),\n },\n ]\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 written files plus non-fatal warnings, mirroring the generated\n * runtime (e.g. a Scalar reference spec that wasn't found, or a reference\n * route colliding with a content page).\n */\nexport const eject = async (\n root: string\n): Promise<{ files: string[]; warnings: 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 [\n pages,\n needsReactRaw,\n usesMath,\n userTheme,\n userExamplesCss,\n rawMarkdown,\n islands,\n examples,\n ] = await Promise.all([\n context.pagesRoot ? discoverPages(context.pagesRoot) : Promise.resolve([]),\n detectNeedsReact(root),\n detectUsesMath(root),\n context.themeFile\n ? readFile(context.themeFile, \"utf-8\")\n : Promise.resolve(\"\"),\n readExamplesCss(root, config.examples.css),\n buildRawMarkdown(project),\n discoverIslands(root),\n discoverExamples(root, config.examples.source),\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: toPosix(relative(root, context.contentRoot)),\n outDir: \".\",\n root: \".\",\n };\n\n const componentsImport = context.componentsFile\n ? `../../${toPosix(relative(root, context.componentsFile))}`\n : null;\n const relPages = [\n ...pages.map((page) => ({\n entrypoint: toPosix(relative(root, page.entrypoint)),\n pattern: page.pattern,\n })),\n ...mcpDiscoveryPages(project, pages),\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 askPath: \"./src/generated/Ask.astro\",\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 examplesThemePath: \"./src/generated/examples.css\",\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 exportEpub,\n exportPdf,\n mathEnabled: usesMath,\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, config.basePath),\n path: join(genDir, \"examples.ts\"),\n },\n {\n // The isolated Tailwind entry for `<Component />` preview frames.\n // Relative sources keep the ejected app portable.\n content: examplesEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n sources: [\"../../**/*.{astro,jsx,svelte,ts,tsx,vue}\"],\n userCss: userExamplesCss,\n }),\n path: join(genDir, \"examples.css\"),\n },\n {\n content: tailwindEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n // Relative paths from src/generated/app.css keep the ejected app\n // portable; the blume glob resolves the real install location when\n // the package is hoisted out of the project's own node_modules.\n sources: [\n blumeSourceGlob(root, genDir),\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 // The header's Ask trigger behind the `blume:ask` alias. Always written — it\n // renders nothing when Ask is off — so the alias always resolves.\n {\n content: askComponentTemplate(askEnabled),\n path: join(genDir, \"Ask.astro\"),\n },\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(\"md\"),\n path: join(srcDir, \"pages\", \"[...slug].md.ts\"),\n },\n {\n content: rawMarkdownEndpointTemplate(\"mdx\"),\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 // The hosted MCP server and the `/changelog` index, mirrored from the\n // generated runtime (each helper returns `[]` when its feature is off).\n files.push(\n ...(await mcpFiles(project, pages, srcDir, genDir)),\n ...changelogFiles(project, pages, srcDir, {\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\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 — including the warnings (a\n // missing spec file, a route collision), which the caller surfaces exactly\n // like the generated-runtime path does.\n const warnings: string[] = [];\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 warnings.push(...references.warnings);\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 ...examplesPreviewFiles(\n srcDir,\n config.basePath,\n examples.examples.length > 0\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 { files: written.map((file) => file.path), warnings };\n};\n",
|
|
172
|
+
"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 { buildMcpData } from \"../ai/mcp/data.ts\";\nimport { buildMcpDiscovery, buildMcpServerCard } from \"../ai/mcp/discovery.ts\";\nimport { planComponentSlots } from \"../astro/component-slots.ts\";\nimport { discoverExamples } from \"../astro/examples.ts\";\nimport {\n buildRuntimeData,\n collectStaged,\n detectNeedsReact,\n detectUsesMath,\n} from \"../astro/generate.ts\";\nimport { discoverIslands } from \"../astro/islands.ts\";\nimport { customOgRoutes, discoverPages, routeIsTaken } from \"../astro/pages.ts\";\nimport {\n askEndpointTemplate,\n askComponentTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentConfigTemplate,\n envTemplate,\n exampleMapTemplate,\n exampleWrapperTemplate,\n examplesPageTemplate,\n exampleSlug,\n islandMapTemplate,\n islandWrapperTemplate,\n mcpEndpointTemplate,\n mcpPageFile,\n mixedbreadSearchEndpointTemplate,\n notFoundPageTemplate,\n ogEndpointTemplate,\n rawMarkdownEndpointTemplate,\n rssEndpointTemplate,\n runtimeTsconfigTemplate,\n searchClientTemplate,\n searchEndpointTemplate,\n staticJsonEndpointTemplate,\n} from \"../astro/templates.ts\";\nimport { packageRoot } from \"../core/package-root.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 {\n examplesEntryTemplate,\n tailwindEntryTemplate,\n} from \"../theme/entry.ts\";\nimport { buildThemeCss } from \"../theme/palette.ts\";\nimport { twoslashCss } from \"../theme/twoslash.ts\";\n\nconst toPosix = (path: string): string => path.split(\"\\\\\").join(\"/\");\n\n/** The portable `@source` guess: blume in the project's own node_modules. */\nconst LOCAL_BLUME_SOURCE = \"../../node_modules/blume/src/**/*.{astro,ts,tsx}\";\n\n/**\n * The `@source` glob pointing Tailwind at Blume's own source, relative to the\n * ejected `src/generated/app.css`. The project-local `node_modules/blume` is\n * preferred (portable, and under pnpm the symlink survives version bumps), but\n * hoisted installs (npm/yarn workspaces lift blume into the workspace root's\n * node_modules) would make that guess match nothing and silently drop utility\n * classes — so fall back to the package's real installed location, and when\n * even that fails, warn instead of failing silently.\n *\n * Exported for testing.\n */\nexport const blumeSourceGlob = (\n root: string,\n genDir: string,\n resolveBlumeRoot: () => string = packageRoot\n): string => {\n if (existsSync(join(root, \"node_modules\", \"blume\"))) {\n return LOCAL_BLUME_SOURCE;\n }\n try {\n const src = join(resolveBlumeRoot(), \"src\");\n return `${toPosix(relative(genDir, src))}/**/*.{astro,ts,tsx}`;\n } catch {\n console.warn(\n 'blume: could not locate the installed blume package; src/generated/app.css keeps its default `@source \"../../node_modules/blume/...\"` glob. If blume is hoisted elsewhere, point that glob at its install location or Blume\\'s utility classes will be missing.'\n );\n return LOCAL_BLUME_SOURCE;\n }\n};\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/** Whether the ejected app hosts the MCP server (enabled and route free). */\nconst hostsMcp = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): boolean =>\n project.config.ai.mcp.enabled &&\n !routeIsTaken(userPages, project.graph.pages, project.config.ai.mcp.route);\n\n/**\n * The `.well-known` MCP discovery routes, injected as prerendered pages\n * alongside the user's own so the ejected Astro config wires them in. Empty\n * when the server is disabled or its route is already owned by a page.\n */\nconst mcpDiscoveryPages = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): { entrypoint: string; pattern: string }[] =>\n hostsMcp(project, userPages)\n ? [\n {\n entrypoint: \"src/blume-mcp/discovery.ts\",\n pattern: \"/.well-known/mcp.json\",\n },\n {\n entrypoint: \"src/blume-mcp/server-card.ts\",\n pattern: \"/.well-known/mcp/server-card.json\",\n },\n ]\n : [];\n\n/**\n * The MCP data snapshot, server endpoint, and `.well-known` discovery\n * documents, mirroring `writeMcpFiles` in generate.ts. Empty when the server\n * is disabled or its route is already owned by a page.\n */\nconst mcpFiles = async (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n genDir: string\n): Promise<{ content: string; path: string }[]> => {\n if (!hostsMcp(project, userPages)) {\n return [];\n }\n const { route } = project.config.ai.mcp;\n const data = await buildMcpData(project);\n const discoveryInput = {\n base: data.base,\n name: data.name,\n route,\n site: data.site,\n version: data.version,\n };\n return [\n {\n content: `${JSON.stringify(data)}\\n`,\n path: join(genDir, \"mcp-data.json\"),\n },\n {\n content: mcpEndpointTemplate(route),\n path: join(srcDir, \"pages\", mcpPageFile(route)),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpDiscovery(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"discovery.ts\"),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpServerCard(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"server-card.ts\"),\n },\n ];\n};\n\n/**\n * The `/changelog` index page, mirroring `shouldGenerateChangelog` in\n * generate.ts: emitted when `type: changelog` entries or a release-backed\n * changelog source exist, unless a user page already owns the route.\n */\nconst changelogFiles = (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n options: Parameters<typeof changelogIndexTemplate>[0]\n): { content: string; path: string }[] => {\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 if (\n !(hasChangelog || hasChangelogSource) ||\n routeIsTaken(userPages, project.graph.pages, \"/changelog\")\n ) {\n return [];\n }\n return [\n {\n content: changelogIndexTemplate(options),\n path: join(srcDir, \"pages\", \"changelog.astro\"),\n },\n ];\n};\n\n/** Contents of the configured `examples.css`, or `\"\"` when unset/absent. */\nconst readExamplesCss = (\n root: string,\n css: string | undefined\n): Promise<string> =>\n css && existsSync(join(root, css))\n ? readFile(join(root, css), \"utf-8\")\n : Promise.resolve(\"\");\n\n/**\n * The per-example preview route `<Component />` iframes embed, nested under\n * `basePath` so it stays reachable behind a proxy that only forwards the\n * base. Empty when the project has no examples.\n */\nconst examplesPreviewFiles = (\n srcDir: string,\n basePath: string,\n hasExamples: boolean\n): { content: string; path: string }[] =>\n hasExamples\n ? [\n {\n content: examplesPageTemplate(),\n path: join(\n srcDir,\n \"pages\",\n ...basePath.split(\"/\").filter(Boolean),\n \"blume-examples\",\n \"[...path].astro\"\n ),\n },\n ]\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 written files plus non-fatal warnings, mirroring the generated\n * runtime (e.g. a Scalar reference spec that wasn't found, or a reference\n * route colliding with a content page).\n */\nexport const eject = async (\n root: string\n): Promise<{ files: string[]; warnings: 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 [\n pages,\n needsReactRaw,\n usesMath,\n userTheme,\n userExamplesCss,\n rawMarkdown,\n islands,\n examples,\n ] = await Promise.all([\n context.pagesRoot ? discoverPages(context.pagesRoot) : Promise.resolve([]),\n detectNeedsReact(root),\n detectUsesMath(root),\n context.themeFile\n ? readFile(context.themeFile, \"utf-8\")\n : Promise.resolve(\"\"),\n readExamplesCss(root, config.examples.css),\n buildRawMarkdown(project),\n discoverIslands(root),\n discoverExamples(root, config.examples.source),\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: toPosix(relative(root, context.contentRoot)),\n outDir: \".\",\n root: \".\",\n };\n\n const componentsImport = context.componentsFile\n ? `../../${toPosix(relative(root, context.componentsFile))}`\n : null;\n const relPages = [\n ...pages.map((page) => ({\n entrypoint: toPosix(relative(root, page.entrypoint)),\n pattern: page.pattern,\n })),\n ...mcpDiscoveryPages(project, pages),\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 askPath: \"./src/generated/Ask.astro\",\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 examplesThemePath: \"./src/generated/examples.css\",\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 exportEpub,\n exportPdf,\n mathEnabled: usesMath,\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, config.basePath),\n path: join(genDir, \"examples.ts\"),\n },\n {\n // The isolated Tailwind entry for `<Component />` preview frames.\n // Relative sources keep the ejected app portable.\n content: examplesEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n sources: [\"../../**/*.{astro,jsx,svelte,ts,tsx,vue}\"],\n userCss: userExamplesCss,\n }),\n path: join(genDir, \"examples.css\"),\n },\n {\n content: tailwindEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n // Relative paths from src/generated/app.css keep the ejected app\n // portable; the blume glob resolves the real install location when\n // the package is hoisted out of the project's own node_modules.\n sources: [\n blumeSourceGlob(root, genDir),\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 // The header's Ask trigger behind the `blume:ask` alias. Always written — it\n // renders nothing when Ask is off — so the alias always resolves.\n {\n content: askComponentTemplate(askEnabled),\n path: join(genDir, \"Ask.astro\"),\n },\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(\"md\"),\n path: join(srcDir, \"pages\", \"[...slug].md.ts\"),\n },\n {\n content: rawMarkdownEndpointTemplate(\"mdx\"),\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(\n customOgRoutes(pages, config.title, config.seo.og.titles)\n ),\n path: join(srcDir, \"pages\", \"og\", \"[...slug].png.ts\"),\n });\n }\n\n // The hosted MCP server and the `/changelog` index, mirrored from the\n // generated runtime (each helper returns `[]` when its feature is off).\n files.push(\n ...(await mcpFiles(project, pages, srcDir, genDir)),\n ...changelogFiles(project, pages, srcDir, {\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\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 — including the warnings (a\n // missing spec file, a route collision), which the caller surfaces exactly\n // like the generated-runtime path does.\n const warnings: string[] = [];\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 warnings.push(...references.warnings);\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 ...examplesPreviewFiles(\n srcDir,\n config.basePath,\n examples.examples.length > 0\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 { files: written.map((file) => file.path), warnings };\n};\n",
|
|
173
173
|
"import { readFile, writeFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport { searchProviderMeta } from \"../search/providers.ts\";\n\n/**\n * The `blume build`-only artifacts this project's config actually produces, as\n * notice lines for the eject command. After an eject the build script runs\n * plain `astro build`, which emits none of them — printing the config-aware\n * list makes the loss explicit instead of silent (a Pagefind site would\n * otherwise eject into a build whose search fails at runtime). Each gate\n * mirrors the artifact's producer in `blume build` (cli/commands/build.ts).\n */\nexport const droppedArtifactNotices = (config: ResolvedConfig): string[] => {\n const notices: string[] = [];\n if (config.search.provider === \"pagefind\") {\n notices.push(\n 'the Pagefind search index — the search UI loads it from the built site, so search will break in production. Add a post-build step: `\"build\": \"astro build && pagefind --site dist\"` (with `pagefind` installed as a devDependency).'\n );\n }\n if (searchProviderMeta(config.search.provider).syncs) {\n notices.push(\n `the hosted ${config.search.provider} index sync — new and updated pages stop being pushed; re-upload your search records after each build with the provider's API or CLI.`\n );\n }\n if (config.ai.llmsTxt.enabled) {\n notices.push(\"llms.txt and llms-full.txt\");\n }\n if (config.deployment.site && config.seo.sitemap) {\n notices.push(\n \"sitemap.xml — recreate it with the @astrojs/sitemap integration.\"\n );\n }\n if (config.seo.robots) {\n notices.push(\"robots.txt — recreate it as a public/robots.txt file.\");\n }\n if (config.seo.agentReadability) {\n notices.push(\"agent-readability.json\");\n }\n if (config.redirects.length > 0 && config.deployment.output === \"static\") {\n notices.push(\n \"the platform redirect files (_redirects, vercel.json) — your redirects still work as Astro-generated meta-refresh pages.\"\n );\n }\n return notices;\n};\n\n/**\n * Rewrite the project's package.json scripts to run Astro directly. After an\n * eject the Blume CLI no longer manages the runtime, so scaffolded scripts like\n * `\"dev\": \"blume dev\"` would rebuild the removed `.blume` tree instead of\n * serving the ejected app. A missing or unreadable package.json is left alone.\n */\nexport const 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",
|
|
174
174
|
"import { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\n\nimport { basename, dirname, isAbsolute, join, relative } from \"pathe\";\n\nimport { blumePackageJson, toPackageName } from \"../../core/package-json.ts\";\n\nexport const TEMPLATES = [\"docs\", \"api\", \"sdk\", \"changelog\"] as const;\nexport type Template = (typeof TEMPLATES)[number];\n\nexport const PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\", \"bun\"] as const;\nexport type PackageManager = (typeof PACKAGE_MANAGERS)[number];\n\n/** The content-source kinds `init` can scaffold a config block for. */\nexport const SOURCE_KINDS = [\n \"filesystem\",\n \"github-releases\",\n \"notion\",\n \"sanity\",\n \"mdx-remote\",\n] as const;\nexport type SourceKind = (typeof SOURCE_KINDS)[number];\n\n/** Everything the scaffolder needs, whether prompted or derived from flags. */\nexport interface InitAnswers {\n contentDir: string;\n /** Target directory as the user gave it (`.` = current directory). */\n directory: string;\n packageManager: PackageManager;\n sources: SourceKind[];\n template: Template;\n title: string;\n}\n\n/** One file the scaffold plan will write; `path` is absolute. */\nexport interface ScaffoldFile {\n content: string;\n path: string;\n}\n\n/** Log sink for scaffold output — satisfied by both consola and clack's `log`. */\nexport interface ScaffoldLog {\n info: (message: string) => void;\n success: (message: string) => void;\n}\n\n/** A starter: a config fragment plus seed content files (paths relative to root). */\ninterface Starter {\n configExtra: string;\n files: (contentDir: string) => { content: string; path: string }[];\n}\n\nconst page = (title: string, description: string, body: string): string =>\n `---\\ntitle: ${title}\\ndescription: ${description}\\n---\\n\\n${body}\\n`;\n\nexport const STARTERS: Record<Template, Starter> = {\n api: {\n configExtra: `\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 configExtra: `\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 configExtra: \"\",\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 configExtra: \"\",\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/**\n * Install + dev commands to print for the chosen package manager, plus the\n * prefix that runs a locally installed bin (`exec`, e.g. `npx blume eject`) —\n * dependency bins aren't on PATH, so a bare `blume …` hint would not run.\n */\nexport const commandsFor = (\n pm: PackageManager\n): { build: string; dev: string; exec: string; install: string } => ({\n // `bun build` invokes Bun's bundler, not the package.json `build` script —\n // unlike `bun dev`, the script name is shadowed by a builtin subcommand.\n build: pm === \"npm\" || pm === \"bun\" ? `${pm} run build` : `${pm} build`,\n dev: pm === \"npm\" ? \"npm run dev\" : `${pm} dev`,\n exec: { bun: \"bunx\", npm: \"npx\", pnpm: \"pnpm exec\", yarn: \"yarn\" }[pm],\n install: `${pm} install`,\n});\n\n/**\n * Derive the package manager from an npm user-agent string (the first\n * `name/version` token of `npm_config_user_agent`), falling back to npm.\n */\nexport const detectPackageManager = (userAgent?: string): PackageManager => {\n const name = userAgent?.split(\"/\")[0] as PackageManager | undefined;\n return name !== undefined && PACKAGE_MANAGERS.includes(name) ? name : \"npm\";\n};\n\n/**\n * The content dir is joined into every scaffolded file path, so an absolute or\n * `../`-escaping value would write outside the project. Returns an error\n * message, or `undefined` when the dir is safe.\n */\nexport const validateContentDir = (\n root: string,\n dir: string\n): string | undefined =>\n isAbsolute(dir) || relative(root, join(root, dir)).startsWith(\"..\")\n ? \"Must be a relative path inside the project.\"\n : undefined;\n\n/** Turn a directory name into a display title: `my-docs` → `My Docs`. */\nexport const titleize = (raw: string): string => {\n const words = raw\n .replaceAll(/[-_.]+/gu, \" \")\n .split(/\\s+/u)\n .filter(Boolean);\n return words.length === 0\n ? \"My Docs\"\n : words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\n/** True when any selected source is remote (everything except `filesystem`). */\nconst hasRemoteSource = (sources: SourceKind[]): boolean =>\n sources.some((source) => source !== \"filesystem\");\n\n/**\n * Config snippets for each remote source kind, with placeholder values to\n * replace and comments naming the env var each source authenticates with.\n */\nconst sourceSnippetFor = (kind: Exclude<SourceKind, \"filesystem\">): string => {\n switch (kind) {\n case \"github-releases\": {\n return ` // Changelog entries from GitHub Releases. Private repos read\n // GITHUB_TOKEN from the environment.\n {\n type: \"github-releases\",\n owner: \"your-org\",\n repo: \"your-repo\",\n prefix: \"changelog\",\n },`;\n }\n case \"notion\": {\n return ` // Pages from a Notion database. Reads NOTION_TOKEN from the environment.\n {\n type: \"notion\",\n database: \"your-database-id\",\n prefix: \"notion\",\n },`;\n }\n case \"sanity\": {\n return ` // Documents from a Sanity dataset. Private datasets read SANITY_TOKEN\n // from the environment.\n {\n type: \"sanity\",\n projectId: \"your-project-id\",\n dataset: \"production\",\n query: \\`*[_type == \"doc\"]\\`,\n prefix: \"sanity\",\n },`;\n }\n case \"mdx-remote\": {\n return ` // MDX fetched from a GitHub repo. Private repos read GITHUB_TOKEN\n // from the environment.\n {\n type: \"mdx-remote\",\n github: { owner: \"your-org\", repo: \"your-repo\", path: \"docs\" },\n prefix: \"remote\",\n },`;\n }\n default: {\n return kind satisfies never;\n }\n }\n};\n\n/**\n * The `content` block for the generated config, or an empty string when the\n * defaults (filesystem source, `docs` root) apply — keeping the default\n * scaffold byte-identical to a config with no `content` key at all.\n */\nconst contentBlockFor = (answers: InitAnswers): string => {\n const sources =\n answers.sources.length === 0 ? [\"filesystem\" as const] : answers.sources;\n if (!hasRemoteSource(sources)) {\n return answers.contentDir === \"docs\"\n ? \"\"\n : `\n content: {\n root: ${JSON.stringify(answers.contentDir)},\n },`;\n }\n // Explicit sources replace the implicit filesystem desugar, so the local\n // content dir must be listed alongside the remote sources to stay included.\n const entries = SOURCE_KINDS.filter((kind) => sources.includes(kind)).map(\n (kind) =>\n kind === \"filesystem\"\n ? ` { type: \"filesystem\", root: ${JSON.stringify(answers.contentDir)} },`\n : sourceSnippetFor(kind)\n );\n return `\n content: {\n sources: [\n${entries.join(\"\\n\")}\n ],\n },`;\n};\n\n/** The full `blume.config.ts` text for the chosen answers. */\nexport const buildConfig = (\n answers: InitAnswers\n): string => `import { defineConfig } from \"blume\";\n\nexport default defineConfig({\n title: ${JSON.stringify(answers.title)},\n description: \"Documentation powered by Blume.\",${STARTERS[answers.template].configExtra}${contentBlockFor(answers)}\n});\n`;\n\n/** SDK dependencies required by the selected remote sources. */\nconst extraDepsFor = (sources: SourceKind[]): Record<string, string> => ({\n ...(sources.includes(\"notion\") && { \"@notionhq/client\": \"^2.2.15\" }),\n ...(sources.includes(\"sanity\") && { \"@sanity/client\": \"^6.21.0\" }),\n});\n\n/** Every file `init` should write for the given answers, package.json first. */\nexport const buildPlan = (\n root: string,\n answers: InitAnswers\n): ScaffoldFile[] => {\n const files: ScaffoldFile[] = [\n {\n content: blumePackageJson(\n toPackageName(basename(root)),\n extraDepsFor(answers.sources)\n ),\n path: join(root, \"package.json\"),\n },\n { content: buildConfig(answers), path: join(root, \"blume.config.ts\") },\n ];\n // Seed pages only make sense when a local filesystem source will read them.\n if (answers.sources.length === 0 || answers.sources.includes(\"filesystem\")) {\n files.push(\n ...STARTERS[answers.template]\n .files(answers.contentDir)\n .map((file) => ({ ...file, path: join(root, file.path) }))\n );\n }\n return files;\n};\n\nconst writeFileSafe = async (\n file: ScaffoldFile,\n log: ScaffoldLog\n): Promise<boolean> => {\n if (existsSync(file.path)) {\n log.info(`Skipped existing ${file.path}`);\n return false;\n }\n await mkdir(dirname(file.path), { recursive: true });\n await writeFile(file.path, file.content, \"utf-8\");\n log.success(`Created ${file.path}`);\n return true;\n};\n\n/**\n * Write the plan's files, skipping any that already exist. Reports whether a\n * `package.json` was newly created (it decides the install next-step).\n */\nexport const applyPlan = async (\n files: ScaffoldFile[],\n log: ScaffoldLog\n): Promise<{ createdPackage: boolean }> => {\n const created = await Promise.all(\n files.map((file) => writeFileSafe(file, log))\n );\n const createdPackage = files.some(\n (file, index) => created[index] && basename(file.path) === \"package.json\"\n );\n return { createdPackage };\n};\n\n/** Env vars the selected sources read, in a stable order. */\nconst envVarsFor = (sources: SourceKind[]): string[] =>\n [\n [\"GITHUB_TOKEN\", [\"github-releases\", \"mdx-remote\"]] as const,\n [\"NOTION_TOKEN\", [\"notion\"]] as const,\n [\"SANITY_TOKEN\", [\"sanity\"]] as const,\n ]\n .filter(([, kinds]) => kinds.some((kind) => sources.includes(kind)))\n .map(([envVar]) => envVar);\n\n/** The next-steps message: `cd` hint, install/dev commands, and token setup. */\nexport const nextSteps = (\n answers: InitAnswers,\n createdPackage: boolean\n): string => {\n const commands = commandsFor(answers.packageManager);\n const lines: string[] = [];\n if (answers.directory !== \".\") {\n lines.push(`cd ${answers.directory}`);\n }\n if (createdPackage) {\n lines.push(commands.install);\n }\n lines.push(commands.dev);\n const envVars = envVarsFor(answers.sources);\n const auth =\n envVars.length > 0\n ? `\\nSet ${envVars.join(\" and \")} in .env.local so your sources can authenticate.\\n`\n : \"\";\n return `Next steps:\\n\\n ${lines.join(\"\\n \")}\\n${auth}`;\n};\n",
|
|
175
175
|
"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 * `extraDeps` adds source SDKs (e.g. `@notionhq/client`) beside `blume`.\n */\nexport const blumePackageJson = (\n name: string,\n extraDeps: Record<string, string> = {}\n): string => {\n const dependencies = Object.entries({\n blume: `^${getBlumeVersion()}`,\n ...extraDeps,\n })\n .toSorted(([a], [b]) => (a < b ? -1 : 1))\n .map(\n ([dep, range]) => ` ${JSON.stringify(dep)}: ${JSON.stringify(range)}`\n )\n .join(\",\\n\");\n return `{\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${dependencies}\n }\n}\n`;\n};\n",
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
"import { existsSync } from \"node:fs\";\n\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport {\n customStaticRoutes,\n discoverPages,\n hasGeneratedChangelog,\n} from \"../../astro/pages.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { validateLinks } from \"../../core/links.ts\";\nimport { buildManifest } from \"../../core/manifest.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 // Custom `.astro` pages and the generated changelog index are servable\n // routes the content graph can't see — without them, a docs link to e.g.\n // a custom landing page fails as BLUME_BROKEN_LINK.\n const userPages = project.context.pagesRoot\n ? await discoverPages(project.context.pagesRoot)\n : [];\n const extraRoutes = customStaticRoutes(userPages);\n if (hasGeneratedChangelog(project, userPages)) {\n extraRoutes.push(\"/changelog\");\n }\n\n // Fallback-materialized locale routes (an untranslated page prerendered\n // at its localized URL) are servable but absent from the content graph —\n // without them a link to an untranslated sibling under a non-default\n // locale fails as BLUME_BROKEN_LINK even though the built site serves it.\n if (project.config.i18n) {\n const manifest = buildManifest({\n config: project.config,\n context: project.context,\n graph: project.graph,\n });\n extraRoutes.push(\n ...manifest.routes.flatMap((route) =>\n route.fallback ? [route.path] : []\n )\n );\n }\n\n const publicDir = join(root, \"public\");\n diagnostics.push(\n ...(await validateLinks(project.graph, {\n basePath: project.config.basePath,\n checkExternal: Boolean(args.external),\n extraRoutes,\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 // `--strict` escalates warnings to failures; info-level notes (e.g.\n // BLUME_ASSETS_UNCHECKED when there is no public/ dir) stay advisory.\n const strictFailure =\n Boolean(args.strict) &&\n diagnostics.some((diagnostic) => diagnostic.severity !== \"info\");\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 || strictFailure) {\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 || strictFailure) {\n process.exit(1);\n }\n },\n});\n",
|
|
181
181
|
"import { existsSync } from \"node:fs\";\n\nimport { basename, join } from \"pathe\";\n\nimport { stripBasePath, withBasePath } from \"./base-path.ts\";\nimport { gradeExternal, probeAll } from \"./probe.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;\n\n/** Percent-decode a link piece; malformed sequences stay verbatim. */\nconst decodePercent = (value: string): string => {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\nconst DOC_EXT = /\\.(?:md|mdx)$/iu;\nconst FILE_EXT = /\\.[a-z0-9]+$/iu;\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 /** Site-wide route mount point (`\"\"` or `/seg`); routes carry it, assets don't. */\n basePath: string;\n /** Servable routes outside the graph (custom pages, generated routes); their\n * headings are unknown, so anchors there are accepted unchecked. */\n extraRoutes: Set<string>;\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/`. */\nconst assetIsPresent = (resolved: string, ctx: LinkContext): boolean =>\n ctx.publicDir !== null && existsSync(join(ctx.publicDir, resolved));\n\n/** Outcome of classifying one link target. */\ntype LinkResult = Diagnostic | \"asset-unchecked\" | null;\n\n// Mirrors the ordering-prefix strip in `sources/normalize.ts`: route mapping\n// drops the prefix before recognizing `index`, so `01-index.mdx` is an index.\nconst NUMERIC_PREFIX = /^\\d+[-_.]/u;\n\n/**\n * Whether a page is a directory index (`…/index.md(x)`, ordering prefix\n * ignored). Its route already *is* its directory, so a relative link must\n * resolve against the route itself, not its parent — otherwise `./sibling`\n * from `guides/index.mdx` (route `/guides`) would resolve to `/sibling` and be\n * falsely flagged as broken. Tested against `navPath` — the locale-stripped\n * path — so a dot-parser localized index (`index.fr.mdx`) and a shared\n * locale-agnostic one (`index.$.mdx`) count too, matching how route mapping\n * recognizes them.\n */\nconst isIndexPage = (page: PageRecord): boolean =>\n /^index\\.(?:md|mdx)$/iu.test(\n basename(page.navPath).replace(NUMERIC_PREFIX, \"\")\n );\n\n/** Apply one relative-path segment to the accumulated route segments. */\nconst applyRelativePart = (segments: string[], part: string): void => {\n if (part === \"\" || part === \".\") {\n return;\n }\n if (part === \"..\") {\n segments.pop();\n return;\n }\n segments.push(part);\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 applyRelativePart(segments, 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 // Page routes carry the site-wide base; an absolute author path is written\n // as if mounted at root, so base it for the route lookup (idempotent — a\n // relative link already resolved against the based `page.route`). A real\n // route always wins over the asset-extension heuristic, so a dotted route\n // (e.g. `/releases/v1.0`) isn't misread as a missing asset.\n const route = toRoute(withBasePath(ctx.basePath, resolved));\n if (ctx.routes.has(route)) {\n return fragment ? checkAnchor(route, fragment, site, ctx) : null;\n }\n // A custom `.astro` page or generated route serves this path, but its\n // headings aren't indexed — accept any fragment rather than false-flag it.\n if (ctx.extraRoutes.has(route)) {\n return 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 // Assets live in `public/` at the site root, unaffected by the base, so strip\n // it back off before probing the filesystem.\n const assetPath = stripBasePath(ctx.basePath, resolved);\n if (FILE_EXT.test(assetPath) && !DOC_EXT.test(assetPath)) {\n if (assetIsPresent(assetPath, ctx)) {\n return null;\n }\n // Nowhere to look: no `public/` directory.\n if (ctx.publicDir === null) {\n return \"asset-unchecked\";\n }\n return {\n ...site,\n code: \"BLUME_BROKEN_ASSET\",\n message: `Asset ${assetPath} was not found in the public directory.`,\n severity: \"warning\",\n suggestion: `Add the file at public${assetPath} 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 queued external links with bounded concurrency. */\nconst checkExternalLinks = async (\n refs: ExternalRef[]\n): Promise<Diagnostic[]> => {\n const results = await probeAll(refs.map((ref) => ref.url));\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 // Browser-copied links arrive percent-encoded (`/caf%C3%A9`, `#caf%C3%A9`)\n // while routes and anchor slugs are stored decoded — decode before comparing\n // so valid links aren't reported broken.\n const fragment = decodePercent(\n hashIndex === -1 ? \"\" : target.slice(hashIndex + 1)\n );\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 rawPath = decodePercent(rawPath);\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 /** Site-wide route mount point (`\"\"` or `/seg`); routes and redirects carry it. */\n basePath?: string;\n /**\n * Servable routes the graph can't know: custom `.astro` pages and generated\n * routes (e.g. the `/changelog` index). Mounted outside `basePath` (they're\n * injected at their pattern), so they are *not* based here — mirroring the\n * full-route-set resolution in `nav-diagnostics.ts`/`generateRuntime`.\n */\n extraRoutes?: string[];\n publicDir: string | null;\n checkExternal?: boolean;\n /** Configured redirects; their `from` paths count as valid link targets. */\n redirects?: { from: string }[];\n }\n): Promise<Diagnostic[]> => {\n const basePath = options.basePath ?? \"\";\n const ctx: LinkContext = {\n anchors: buildAnchorIndex(graph.pages),\n basePath,\n extraRoutes: new Set((options.extraRoutes ?? []).map(toRoute)),\n publicDir: options.publicDir,\n redirects: new Set(\n (options.redirects ?? []).map((redirect) =>\n toRoute(withBasePath(basePath, redirect.from))\n )\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"
|
|
182
182
|
],
|
|
183
|
-
"mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6CP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgDE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAwHwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eA8Bb,QAAQ;AAAA,gB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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",
|
|
184
|
-
"debugId": "
|
|
183
|
+
"mappings": "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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6CP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgDE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAwHwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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",
|
|
184
|
+
"debugId": "7D02660AA9B8797064756E2164756E21",
|
|
185
185
|
"names": []
|
|
186
186
|
}
|