@forge-ts/gen 0.3.1 → 0.5.0
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/dist/index.d.ts +268 -67
- package/dist/index.js +702 -19
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/llms.ts","../src/markdown.ts","../src/readme-sync.ts","../src/site-generator.ts","../src/ssg-config.ts","../src/index.ts"],"sourcesContent":["import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Derives a compact one-line signature for routing manifest entries.\n * @internal\n */\nfunction compactEntry(symbol: ForgeSymbol): string {\n\tif (symbol.signature) {\n\t\treturn symbol.signature;\n\t}\n\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\treturn `${symbol.kind} ${symbol.name}${ext}`;\n}\n\n/**\n * Generates an `llms.txt` routing manifest from the extracted symbols.\n *\n * The file follows the llms.txt specification: a compact, structured overview\n * designed to help large language models navigate a project's documentation.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsTxt } from \"@forge-ts/gen\";\n * const txt = generateLlmsTxt(symbols, config);\n * console.log(txt.startsWith(\"# \")); // true\n * ```\n * @public\n */\nexport function generateLlmsTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName}`);\n\tlines.push(`> Auto-generated API documentation`);\n\tlines.push(\"\");\n\n\t// Sections block — link to generated files\n\tlines.push(\"## Sections\");\n\tlines.push(\"\");\n\tif (config.gen.formats.includes(\"markdown\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.md): Full API documentation\");\n\t}\n\tif (config.gen.formats.includes(\"mdx\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.mdx): Full API documentation (MDX)\");\n\t}\n\tif (config.gen.llmsTxt) {\n\t\tlines.push(\"- [Full Context](./llms-full.txt): Dense context for LLM consumption\");\n\t}\n\tlines.push(\"\");\n\n\t// Quick Reference block\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Quick Reference\");\n\t\tlines.push(\"\");\n\t\tfor (const symbol of exported) {\n\t\t\tconst summary = symbol.documentation?.summary ?? \"\";\n\t\t\tconst entry = compactEntry(symbol);\n\t\t\tlines.push(summary ? `${entry} - ${summary}` : entry);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a full parameter list section.\n * @internal\n */\nfunction renderParams(params: NonNullable<ForgeSymbol[\"documentation\"]>[\"params\"]): string {\n\tif (!params || params.length === 0) return \"\";\n\tconst lines: string[] = [\"\", \"Parameters:\"];\n\tfor (const p of params) {\n\t\tconst typeStr = p.type ? ` (${p.type})` : \"\";\n\t\tlines.push(`- ${p.name}${typeStr}: ${p.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a single symbol section for llms-full.txt.\n * @internal\n */\nfunction renderFullSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} ${symbol.name}${ext}`);\n\n\tif (symbol.signature) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.signature);\n\t}\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(\"\");\n\t\tlines.push(`DEPRECATED: ${symbol.documentation.deprecated}`);\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.documentation.summary);\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tconst paramBlock = renderParams(params);\n\tif (paramBlock) {\n\t\tlines.push(paramBlock);\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (${symbol.documentation.returns.type})`\n\t\t\t: \"\";\n\t\tlines.push(\"\");\n\t\tlines.push(`Returns${retType}: ${symbol.documentation.returns.description}`);\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Example:\");\n\t\tfor (const ex of examples) {\n\t\t\tconst exLines = ex.code.trim().split(\"\\n\");\n\t\t\tfor (const l of exLines) {\n\t\t\t\tlines.push(` ${l}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render children inline\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Members:\");\n\t\tfor (const child of children) {\n\t\t\tlines.push(\"\");\n\t\t\tconst childSection = renderFullSymbol(child, depth + 1);\n\t\t\t// indent child one level\n\t\t\tfor (const cl of childSection.split(\"\\n\")) {\n\t\t\t\tlines.push(cl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates an `llms-full.txt` dense context file from the extracted symbols.\n *\n * Unlike `llms.txt`, this file contains complete documentation for every\n * exported symbol, intended for LLM ingestion that requires full context.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms-full.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsFullTxt } from \"@forge-ts/gen\";\n * const fullTxt = generateLlmsFullTxt(symbols, config);\n * console.log(fullTxt.includes(\"Full Context\")); // true\n * ```\n * @public\n */\nexport function generateLlmsFullTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName} - Full Context`);\n\tlines.push(\"\");\n\tlines.push(`Root: ${config.rootDir}`);\n\tlines.push(`Generated: ${new Date().toISOString()}`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst kindGroups: Record<string, ForgeSymbol[]> = {};\n\tfor (const symbol of exported) {\n\t\tconst list = kindGroups[symbol.kind] ?? [];\n\t\tlist.push(symbol);\n\t\tkindGroups[symbol.kind] = list;\n\t}\n\n\tconst kindOrder: Array<ForgeSymbol[\"kind\"]> = [\n\t\t\"function\",\n\t\t\"class\",\n\t\t\"interface\",\n\t\t\"type\",\n\t\t\"enum\",\n\t\t\"variable\",\n\t];\n\n\tconst kindLabels: Record<string, string> = {\n\t\tfunction: \"Functions\",\n\t\tclass: \"Classes\",\n\t\tinterface: \"Interfaces\",\n\t\ttype: \"Types\",\n\t\tenum: \"Enums\",\n\t\tvariable: \"Variables\",\n\t};\n\n\tfor (const kind of kindOrder) {\n\t\tconst group = kindGroups[kind];\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${kindLabels[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const symbol of group) {\n\t\t\tlines.push(renderFullSymbol(symbol, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Options controlling Markdown output.\n * @public\n */\nexport interface MarkdownOptions {\n\t/** Whether to use MDX syntax (default: Markdown). */\n\tmdx?: boolean;\n}\n\n/** Display labels for each symbol kind. */\nconst KIND_LABELS: Record<ForgeSymbol[\"kind\"], string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n\tmethod: \"Methods\",\n\tproperty: \"Properties\",\n};\n\n/** Canonical ordering for top-level kind groups. */\nconst KIND_ORDER: Array<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Build the frontmatter block for the configured SSG target. */\nfunction buildFrontmatter(config: ForgeConfig, mdx: boolean): string {\n\tconst target = config.gen.ssgTarget;\n\tif (!target) return \"\";\n\n\tconst lines: string[] = [\"---\"];\n\n\tswitch (target) {\n\t\tcase \"docusaurus\":\n\t\t\tlines.push(\"sidebar_position: 1\");\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"mintlify\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"nextra\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"description: Auto-generated API reference\");\n\t\t\tbreak;\n\t\tcase \"vitepress\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"outline: deep\");\n\t\t\tbreak;\n\t}\n\n\tlines.push(\"---\");\n\tif (mdx) {\n\t\tlines.push(\"\");\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\n/** Build MDX import block for custom components. */\nfunction buildMdxImports(): string {\n\treturn 'import { Callout } from \"@components/Callout\";\\n\\n';\n}\n\n/**\n * Render a deprecation notice banner.\n * @internal\n */\nfunction renderDeprecation(deprecated: string): string {\n\treturn `> **Deprecated**: ${deprecated}\\n`;\n}\n\n/**\n * Render source location line.\n * @internal\n */\nfunction renderSourceLink(symbol: ForgeSymbol, rootDir: string): string {\n\tconst rel = relative(rootDir, symbol.filePath);\n\treturn `_Defined in \\`${rel}:${symbol.line}\\`_\\n`;\n}\n\n/**\n * Renders a symbol at H3 level (used for both top-level and children).\n * @internal\n */\nfunction renderSymbolSection(\n\tsymbol: ForgeSymbol,\n\trootDir: string,\n\tmdx: boolean,\n\tdepth: number,\n): string {\n\tconst lines: string[] = [];\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(renderDeprecation(symbol.documentation.deprecated));\n\t}\n\n\tlines.push(renderSourceLink(symbol, rootDir));\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Render children (class members, enum values, interface properties)\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tconst childDepth = depth + 1;\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderSymbolSection(child, rootDir, mdx, childDepth));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a Table of Contents from grouped symbols.\n * @internal\n */\nfunction buildToc(groups: Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>): string {\n\tconst lines: string[] = [];\n\tlines.push(\"## Table of Contents\");\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tconst anchor = toAnchor(label);\n\t\tlines.push(`- [${label}](#${anchor})`);\n\n\t\tfor (const symbol of group) {\n\t\t\tconst ext = kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst displayName = `${symbol.name}${ext}`;\n\t\t\tconst symAnchor = toAnchor(displayName);\n\t\t\tlines.push(` - [\\`${displayName}\\`](#${symAnchor})`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates a Markdown (or MDX) string from a list of symbols.\n *\n * @param symbols - The symbols to document.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Rendering options.\n * @returns The generated Markdown string.\n * @example\n * ```typescript\n * import { generateMarkdown } from \"@forge-ts/gen\";\n * const md = generateMarkdown(symbols, config, { mdx: false });\n * console.log(md.startsWith(\"# API Reference\")); // true\n * ```\n * @public\n */\nexport function generateMarkdown(\n\tsymbols: ForgeSymbol[],\n\tconfig: ForgeConfig,\n\toptions: MarkdownOptions = {},\n): string {\n\tconst mdx = options.mdx ?? false;\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Group by kind (top-level only — children are nested under their parent)\n\tconst topLevel = exported.filter((s) => s.kind !== \"method\" && s.kind !== \"property\");\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const symbol of topLevel) {\n\t\tconst list = groups.get(symbol.kind) ?? [];\n\t\tlist.push(symbol);\n\t\tgroups.set(symbol.kind, list);\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Frontmatter\n\tconst frontmatter = buildFrontmatter(config, mdx);\n\tif (frontmatter) {\n\t\tparts.push(frontmatter);\n\t}\n\n\t// MDX imports\n\tif (mdx) {\n\t\tparts.push(buildMdxImports());\n\t}\n\n\t// Page title + preamble\n\tparts.push(\"# API Reference\\n\");\n\tparts.push(\n\t\t`Generated by [forge-ts](https://github.com/forge-ts/forge-ts) from \\`${config.rootDir}\\`.\\n`,\n\t);\n\n\t// Table of Contents\n\tif (topLevel.length > 0) {\n\t\tparts.push(buildToc(groups));\n\t}\n\n\t// Symbol groups\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tparts.push(`## ${label}\\n`);\n\n\t\tfor (const symbol of group) {\n\t\t\tparts.push(renderSymbolSection(symbol, config.rootDir, mdx, 3));\n\t\t\tparts.push(\"\");\n\t\t}\n\t}\n\n\treturn `${parts\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type { ForgeSymbol } from \"@forge-ts/core\";\n\nconst SECTION_START = \"<!-- forge-ts:start -->\";\nconst SECTION_END = \"<!-- forge-ts:end -->\";\n\n/** Options controlling README sync behaviour. */\nexport interface ReadmeSyncOptions {\n\t/** Include a \"Documented with forge-ts\" badge above the API table. */\n\tbadge?: boolean;\n\t/** Include first @example from each top-level symbol. */\n\tincludeExamples?: boolean;\n}\n\n/**\n * Derives a compact type signature string for the table.\n * @internal\n */\nfunction tableSignature(symbol: ForgeSymbol): string {\n\tif (!symbol.signature) {\n\t\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\t\treturn `\\`${symbol.name}${ext}\\``;\n\t}\n\t// Keep it short: show at most 60 characters of the signature\n\tconst sig =\n\t\tsymbol.signature.length > 60 ? `${symbol.signature.slice(0, 57)}...` : symbol.signature;\n\treturn `\\`${sig}\\``;\n}\n\n/**\n * Renders the first @example block as a fenced code snippet.\n * @internal\n */\nfunction renderFirstExample(symbol: ForgeSymbol): string {\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length === 0) return \"\";\n\tconst ex = examples[0];\n\treturn [\"\", `\\`\\`\\`${ex.language}`, ex.code.trim(), \"```\"].join(\"\\n\");\n}\n\n/**\n * Builds the markdown table rows for the API overview.\n * @internal\n */\nfunction buildApiTable(symbols: ForgeSymbol[], includeExamples: boolean): string[] {\n\tconst lines: string[] = [\"| Symbol | Kind | Description |\", \"|--------|------|-------------|\"];\n\n\tfor (const s of symbols) {\n\t\tconst sig = tableSignature(s);\n\t\tconst summary = s.documentation?.summary ?? \"\";\n\t\tlines.push(`| ${sig} | ${s.kind} | ${summary} |`);\n\t}\n\n\tif (includeExamples) {\n\t\tconst withExamples = symbols.filter((s) => (s.documentation?.examples ?? []).length > 0);\n\t\tif (withExamples.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"### Examples\");\n\t\t\tfor (const s of withExamples) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tlines.push(`#### \\`${s.name}${ext}\\``);\n\t\t\t\tlines.push(renderFirstExample(s));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Injects a summary of exported symbols into a `README.md` file.\n *\n * The content is placed between `<!-- forge-ts:start -->` and\n * `<!-- forge-ts:end -->` comment markers. If neither marker exists, the\n * summary is appended to the end of the file.\n *\n * @param readmePath - Absolute path to the `README.md` to update.\n * @param symbols - Symbols to summarise in the README.\n * @param options - Options controlling sync behaviour.\n * @returns `true` if the file was modified, `false` otherwise.\n * @example\n * ```typescript\n * import { syncReadme } from \"@forge-ts/gen\";\n * const modified = await syncReadme(\"/path/to/README.md\", symbols);\n * console.log(modified); // true if README was updated\n * ```\n * @public\n */\nexport async function syncReadme(\n\treadmePath: string,\n\tsymbols: ForgeSymbol[],\n\toptions: ReadmeSyncOptions = {},\n): Promise<boolean> {\n\tconst exported = symbols.filter((s) => s.exported);\n\tif (exported.length === 0) return false;\n\n\tconst badge = options.badge ?? false;\n\tconst includeExamples = options.includeExamples ?? false;\n\n\tconst innerLines: string[] = [];\n\tinnerLines.push(\"## API Overview\");\n\tinnerLines.push(\"\");\n\n\tif (badge) {\n\t\tinnerLines.push(\n\t\t\t\"[](https://github.com/forge-ts/forge-ts)\",\n\t\t);\n\t\tinnerLines.push(\"\");\n\t}\n\n\tinnerLines.push(...buildApiTable(exported, includeExamples));\n\n\tconst summaryLines = [SECTION_START, \"\", ...innerLines, \"\", SECTION_END];\n\tconst injection = summaryLines.join(\"\\n\");\n\n\tlet existing = existsSync(readmePath) ? await readFile(readmePath, \"utf8\") : \"\";\n\n\tconst startIdx = existing.indexOf(SECTION_START);\n\tconst endIdx = existing.indexOf(SECTION_END);\n\n\tif (startIdx !== -1 && endIdx !== -1) {\n\t\texisting =\n\t\t\texisting.slice(0, startIdx) + injection + existing.slice(endIdx + SECTION_END.length);\n\t} else {\n\t\texisting = `${existing.trimEnd()}\\n\\n${injection}\\n`;\n\t}\n\n\tawait writeFile(readmePath, existing, \"utf8\");\n\treturn true;\n}\n","import { basename, relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * A single generated documentation page.\n * @public\n */\nexport interface DocPage {\n\t/** Relative path from outDir (e.g., \"packages/core/index.md\") */\n\tpath: string;\n\t/** Page content (Markdown or MDX) */\n\tcontent: string;\n\t/** Frontmatter fields */\n\tfrontmatter: Record<string, string | number | boolean>;\n}\n\n/**\n * Options controlling the doc site generator.\n * @public\n */\nexport interface SiteGeneratorOptions {\n\t/** Output format */\n\tformat: \"markdown\" | \"mdx\";\n\t/** SSG target for frontmatter */\n\tssgTarget?: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\";\n\t/** Project name */\n\tprojectName: string;\n\t/** Project description */\n\tprojectDescription?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Escape pipe characters for use inside Markdown table cells. */\nfunction escapePipe(text: string): string {\n\treturn text.replace(/\\|/g, \"\\\\|\");\n}\n\n/** Build a frontmatter block string from the fields map. */\nfunction serializeFrontmatter(fields: Record<string, string | number | boolean>): string {\n\tif (Object.keys(fields).length === 0) return \"\";\n\tconst lines = [\"---\"];\n\tfor (const [key, value] of Object.entries(fields)) {\n\t\tlines.push(`${key}: ${value}`);\n\t}\n\tlines.push(\"---\");\n\treturn `${lines.join(\"\\n\")}\\n\\n`;\n}\n\n/**\n * Build frontmatter fields for the given SSG target.\n * @internal\n */\nfunction buildFrontmatterFields(\n\ttitle: string,\n\tdescription: string,\n\tssgTarget: SiteGeneratorOptions[\"ssgTarget\"],\n\tsidebarPosition?: number,\n): Record<string, string | number | boolean> {\n\tif (!ssgTarget) return {};\n\n\tswitch (ssgTarget) {\n\t\tcase \"docusaurus\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = {\n\t\t\t\ttitle,\n\t\t\t\tsidebar_label: title,\n\t\t\t};\n\t\t\tif (sidebarPosition !== undefined) {\n\t\t\t\tfields.sidebar_position = sidebarPosition;\n\t\t\t}\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"mintlify\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"nextra\":\n\t\t\treturn { title };\n\t\tcase \"vitepress\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title, outline: \"deep\" };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Package grouping\n// ---------------------------------------------------------------------------\n\n/**\n * Groups symbols by their package based on file path.\n *\n * For monorepos (symbols under `packages/<name>/`) the package name is\n * derived from the directory segment immediately after `packages/`.\n * For non-monorepo projects all symbols fall under the project name.\n *\n * @param symbols - All extracted symbols.\n * @param rootDir - Absolute path to the project root.\n * @returns A map from package name to symbol list.\n * @example\n * ```typescript\n * import { groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, \"/path/to/project\");\n * console.log(grouped.has(\"core\")); // true for monorepo\n * ```\n * @public\n */\nexport function groupSymbolsByPackage(\n\tsymbols: ForgeSymbol[],\n\trootDir: string,\n): Map<string, ForgeSymbol[]> {\n\tconst result = new Map<string, ForgeSymbol[]>();\n\n\tfor (const symbol of symbols) {\n\t\tconst rel = relative(rootDir, symbol.filePath);\n\t\t// Detect monorepo structure: packages/<name>/...\n\t\tconst monorepoMatch = /^packages[\\\\/]([^\\\\/]+)[\\\\/]/.exec(rel);\n\t\tconst packageName = monorepoMatch ? monorepoMatch[1] : basename(rootDir);\n\n\t\tconst list = result.get(packageName) ?? [];\n\t\tlist.push(symbol);\n\t\tresult.set(packageName, list);\n\t}\n\n\treturn result;\n}\n\n// ---------------------------------------------------------------------------\n// Page renderers\n// ---------------------------------------------------------------------------\n\nconst TYPE_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"interface\", \"type\", \"enum\"]);\n\nconst FUNCTION_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"function\", \"class\"]);\n\n/** Render a property table row. */\nfunction renderPropertyRow(child: ForgeSymbol): string {\n\tconst name = `\\`${child.name}\\``;\n\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t// Heuristic: optional if signature contains `?` or `| undefined`\n\tconst optional =\n\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\tconst description = escapePipe(child.documentation?.summary ?? \"\");\n\treturn `| ${name} | ${type} | ${optional} | ${description} |`;\n}\n\n/**\n * Renders the overview (index) page for a package.\n * @internal\n */\nfunction renderOverviewPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\t// Find @packageDocumentation summary from tags\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName}`);\n\tlines.push(\"\");\n\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t}\n\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Exported Symbols\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\tlines.push(\"|--------|------|-------------|\");\n\t\tfor (const s of exported) {\n\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst name = `[\\`${s.name}${ext}\\`](./api-reference.md#${toAnchor(`${s.name}${ext}`)})`;\n\t\t\tconst summary = escapePipe(s.documentation?.summary ?? \"\");\n\t\t\tlines.push(`| ${name} | ${s.kind} | ${summary} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the types page for a package (interfaces, type aliases, enums).\n * @internal\n */\nfunction renderTypesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst typeSymbols = symbols.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Types`);\n\tlines.push(\"\");\n\tlines.push(\"Type contracts exported by this package: interfaces, type aliases, and enums.\");\n\tlines.push(\"\");\n\n\tfor (const s of typeSymbols) {\n\t\tlines.push(`## ${s.name}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature && s.kind !== \"interface\") {\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = (s.children ?? []).filter((c) => c.kind === \"property\" || c.kind === \"method\");\n\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tlines.push(renderPropertyRow(child));\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the functions page for a package (functions and classes).\n * @internal\n */\nfunction renderFunctionsPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst fnSymbols = symbols.filter((s) => s.exported && FUNCTION_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Functions & Classes`);\n\tlines.push(\"\");\n\tlines.push(\"Functions and classes exported by this package.\");\n\tlines.push(\"\");\n\n\tfor (const s of fnSymbols) {\n\t\tconst _ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tconst paramSig =\n\t\t\ts.kind === \"function\" && s.documentation?.params\n\t\t\t\t? s.documentation.params.map((p) => p.name).join(\", \")\n\t\t\t\t: \"\";\n\t\tconst heading = s.kind === \"function\" ? `${s.name}(${paramSig})` : s.name;\n\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature) {\n\t\t\tlines.push(\"**Signature**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst params = s.documentation?.params ?? [];\n\t\tif (params.length > 0) {\n\t\t\tlines.push(\"**Parameters**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Name | Type | Description |\");\n\t\t\tlines.push(\"|------|------|-------------|\");\n\t\t\tfor (const p of params) {\n\t\t\t\tconst type = p.type ? `\\`${escapePipe(p.type)}\\`` : \"—\";\n\t\t\t\tlines.push(`| \\`${p.name}\\` | ${type} | ${escapePipe(p.description)} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.returns) {\n\t\t\tconst retType = s.documentation.returns.type ? ` \\`${s.documentation.returns.type}\\`` : \"\";\n\t\t\tlines.push(`**Returns**${retType} — ${s.documentation.returns.description}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst throws = s.documentation?.throws ?? [];\n\t\tif (throws.length > 0) {\n\t\t\tlines.push(\"**Throws**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const t of throws) {\n\t\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length > 0) {\n\t\t\tconst ex = examples[0];\n\t\t\tlines.push(\"**Example**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Render class methods\n\t\tconst methods = (s.children ?? []).filter((c) => c.kind === \"method\");\n\t\tif (methods.length > 0) {\n\t\t\tlines.push(\"**Methods**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const method of methods) {\n\t\t\t\tlines.push(`### ${method.name}()`);\n\t\t\t\tlines.push(\"\");\n\t\t\t\tif (method.documentation?.summary) {\n\t\t\t\t\tlines.push(method.documentation.summary);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tif (method.signature) {\n\t\t\t\t\tlines.push(\"```typescript\");\n\t\t\t\t\tlines.push(method.signature);\n\t\t\t\t\tlines.push(\"```\");\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the examples page for a package — aggregates all @example blocks.\n * @internal\n */\nfunction renderExamplesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Examples`);\n\tlines.push(\"\");\n\tlines.push(\"All usage examples from the package, aggregated for quick reference.\");\n\tlines.push(\"\");\n\n\tlet hasExamples = false;\n\n\tfor (const s of exported) {\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length === 0) continue;\n\n\t\thasExamples = true;\n\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tlines.push(`## \\`${s.name}${ext}\\``);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(`_${s.documentation.summary}_`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(`[View in API reference](./api-reference.md#${toAnchor(s.name)})`);\n\t\tlines.push(\"\");\n\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tif (!hasExamples) {\n\t\tlines.push(\"_No examples documented yet._\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// API reference renderer (full, scoped to one package)\n// ---------------------------------------------------------------------------\n\nconst KIND_ORDER: ReadonlyArray<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\nconst KIND_LABELS: Record<string, string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n};\n\n/** Render a single symbol section at the given heading depth. */\nfunction renderApiSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(`> **Deprecated**: ${symbol.documentation.deprecated}`);\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderApiSymbol(child, depth + 1));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/** Render a full API reference page for one package. */\nfunction renderApiReferencePage(packageName: string, symbols: ForgeSymbol[]): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const s of exported) {\n\t\tconst list = groups.get(s.kind) ?? [];\n\t\tlist.push(s);\n\t\tgroups.set(s.kind, list);\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — API Reference`);\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${KIND_LABELS[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const s of group) {\n\t\t\tlines.push(renderApiSymbol(s, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Project-level pages\n// ---------------------------------------------------------------------------\n\n/** Render the root index page listing all packages. */\nfunction renderProjectIndexPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`# ${options.projectName}`);\n\tlines.push(\"\");\n\n\tif (options.projectDescription) {\n\t\tlines.push(options.projectDescription);\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Packages\");\n\tlines.push(\"\");\n\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst exported = symbols.filter(\n\t\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t\t);\n\t\tconst pkgDoc = symbols\n\t\t\t.map((s) => s.documentation?.tags?.packageDocumentation?.[0])\n\t\t\t.find(Boolean);\n\t\tconst summary = pkgDoc ?? `${exported.length} exported symbol(s).`;\n\t\tlines.push(`### [${pkgName}](./packages/${pkgName}/index.md)`);\n\t\tlines.push(\"\");\n\t\tlines.push(summary);\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/** Render a getting-started page using the first @example from any exported function. */\nfunction renderGettingStartedPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Find the first exported function with an example\n\tlet firstExample: { code: string; language: string } | undefined;\n\tlet firstSymbolName = \"\";\n\tlet firstPackageName = \"\";\n\n\touter: for (const [pkgName, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tfirstSymbolName = s.name;\n\t\t\t\tfirstPackageName = pkgName;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"# Getting Started\");\n\tlines.push(\"\");\n\tlines.push(`Welcome to **${options.projectName}**.`);\n\n\tif (options.projectDescription) {\n\t\tlines.push(\"\");\n\t\tlines.push(options.projectDescription);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"## Installation\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install ${options.projectName}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (firstExample) {\n\t\tlines.push(\"## Quick Start\");\n\t\tlines.push(\"\");\n\t\tlines.push(\n\t\t\t`The following example demonstrates \\`${firstSymbolName}\\` from the \\`${firstPackageName}\\` package.`,\n\t\t);\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Next Steps\");\n\tlines.push(\"\");\n\tlines.push(\"- Browse the [API Reference](./packages/)\");\n\tfor (const pkgName of symbolsByPackage.keys()) {\n\t\tlines.push(` - [${pkgName}](./packages/${pkgName}/api-reference.md)`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a full multi-page documentation site from symbols grouped by package.\n *\n * Produces an index page, a getting-started page, and per-package pages for\n * the API reference, types, functions, and examples.\n *\n * @param symbolsByPackage - Symbols grouped by package name.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Site generation options.\n * @returns An array of {@link DocPage} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateDocSite, groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, config.rootDir);\n * const pages = generateDocSite(grouped, config, { format: \"markdown\", projectName: \"my-project\" });\n * console.log(pages.length > 0); // true\n * ```\n * @public\n */\nexport function generateDocSite(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\tconfig: ForgeConfig,\n\toptions: SiteGeneratorOptions,\n): DocPage[] {\n\tconst ext = options.format === \"mdx\" ? \"mdx\" : \"md\";\n\tconst pages: DocPage[] = [];\n\n\t// Project index\n\tconst indexContent = renderProjectIndexPage(symbolsByPackage, options);\n\tconst indexFrontmatter = buildFrontmatterFields(\n\t\toptions.projectName,\n\t\toptions.projectDescription ?? \"\",\n\t\toptions.ssgTarget,\n\t\t1,\n\t);\n\tpages.push({\n\t\tpath: `index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(indexFrontmatter)}${indexContent.trimEnd()}\\n`,\n\t\tfrontmatter: indexFrontmatter,\n\t});\n\n\t// Getting started\n\tconst gettingStartedContent = renderGettingStartedPage(symbolsByPackage, options);\n\tconst gettingStartedFrontmatter = buildFrontmatterFields(\n\t\t\"Getting Started\",\n\t\t`Quick start guide for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t2,\n\t);\n\tpages.push({\n\t\tpath: `getting-started.${ext}`,\n\t\tcontent: `${serializeFrontmatter(gettingStartedFrontmatter)}${gettingStartedContent.trimEnd()}\\n`,\n\t\tfrontmatter: gettingStartedFrontmatter,\n\t});\n\n\t// Per-package pages\n\tlet pkgPosition = 1;\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst pkgBase = `packages/${pkgName}`;\n\n\t\t// Package index\n\t\tconst overviewContent = renderOverviewPage(pkgName, symbols, options);\n\t\tconst overviewFrontmatter = buildFrontmatterFields(\n\t\t\tpkgName,\n\t\t\t`${pkgName} package overview`,\n\t\t\toptions.ssgTarget,\n\t\t\tpkgPosition,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(overviewFrontmatter)}${overviewContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: overviewFrontmatter,\n\t\t});\n\n\t\t// API reference\n\t\tconst apiContent = renderApiReferencePage(pkgName, symbols);\n\t\tconst apiFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — API Reference`,\n\t\t\t`Full API reference for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api-reference.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(apiFrontmatter)}${apiContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: apiFrontmatter,\n\t\t});\n\n\t\t// Types page\n\t\tconst typesContent = renderTypesPage(pkgName, symbols, options);\n\t\tconst typesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Types`,\n\t\t\t`Type contracts for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/types.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(typesFrontmatter)}${typesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: typesFrontmatter,\n\t\t});\n\n\t\t// Functions page\n\t\tconst functionsContent = renderFunctionsPage(pkgName, symbols, options);\n\t\tconst functionsFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Functions`,\n\t\t\t`Functions and classes for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/functions.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(functionsFrontmatter)}${functionsContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: functionsFrontmatter,\n\t\t});\n\n\t\t// Examples page\n\t\tconst examplesContent = renderExamplesPage(pkgName, symbols, options);\n\t\tconst examplesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Examples`,\n\t\t\t`Usage examples for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/examples.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(examplesFrontmatter)}${examplesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: examplesFrontmatter,\n\t\t});\n\n\t\tpkgPosition++;\n\t}\n\n\t// Suppress unused variable warning — config is available for future use\n\tvoid config;\n\n\treturn pages;\n}\n","import type { DocPage } from \"./site-generator.js\";\n\n/**\n * A single generated SSG configuration file.\n * @public\n */\nexport interface SSGConfigFile {\n\t/** Relative path from outDir (e.g., \"mint.json\", \"_meta.json\") */\n\tpath: string;\n\t/** File content */\n\tcontent: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/**\n * Partition pages into top-level pages and package pages.\n *\n * Top-level pages are those not nested under `packages/`.\n * Package pages are grouped by their package directory segment.\n */\nfunction partitionPages(pages: DocPage[]): {\n\ttopLevel: string[];\n\tbyPackage: Map<string, string[]>;\n} {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\treturn { topLevel, byPackage };\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n// ---------------------------------------------------------------------------\n// Mintlify\n// ---------------------------------------------------------------------------\n\ninterface MintlifyNavigationPage {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavigationPage>;\n}\n\ninterface MintlifyConfig {\n\t$schema: string;\n\tname: string;\n\tnavigation: MintlifyNavigationPage[];\n}\n\nfunction generateMintlifyConfig(pages: DocPage[], projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst navigation: MintlifyNavigationPage[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tnavigation.push({\n\t\t\tgroup: \"Getting Started\",\n\t\t\tpages: topLevel,\n\t\t});\n\t}\n\n\tif (byPackage.size > 0) {\n\t\tconst packageGroups: MintlifyNavigationPage[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\tpackageGroups.push({\n\t\t\t\tgroup: pkgName,\n\t\t\t\tpages: slugs,\n\t\t\t});\n\t\t}\n\t\tnavigation.push({\n\t\t\tgroup: \"Packages\",\n\t\t\tpages: packageGroups as unknown as Array<string | MintlifyNavigationPage>,\n\t\t});\n\t}\n\n\tconst config: MintlifyConfig = {\n\t\t$schema: \"https://mintlify.com/schema.json\",\n\t\tname: projectName,\n\t\tnavigation,\n\t};\n\n\treturn {\n\t\tpath: \"mint.json\",\n\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Docusaurus\n// ---------------------------------------------------------------------------\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\nfunction generateDocusaurusConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\tconst content =\n\t\t`/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\\n` +\n\t\t`const sidebars = ${json};\\n` +\n\t\t`module.exports = sidebars;\\n`;\n\n\treturn {\n\t\tpath: \"sidebars.js\",\n\t\tcontent,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Nextra\n// ---------------------------------------------------------------------------\n\nfunction generateNextraConfigs(pages: DocPage[], _projectName: string): SSGConfigFile[] {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst files: SSGConfigFile[] = [];\n\n\t// Root _meta.json\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\n\tfiles.push({\n\t\tpath: \"_meta.json\",\n\t\tcontent: `${JSON.stringify(rootMeta, null, 2)}\\n`,\n\t});\n\n\t// Per-package _meta.json files\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\t// slug is e.g. \"packages/core/api-reference\"\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\n\t\t// packages/<pkgName>/_meta.json\n\t\tfiles.push({\n\t\t\tpath: `packages/${pkgName}/_meta.json`,\n\t\t\tcontent: `${JSON.stringify(pkgMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\t// If there are multiple packages, also write a packages/_meta.json\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"packages/_meta.json\",\n\t\t\tcontent: `${JSON.stringify(packagesMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\treturn files;\n}\n\n// ---------------------------------------------------------------------------\n// VitePress\n// ---------------------------------------------------------------------------\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\nfunction generateVitePressConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn {\n\t\tpath: \".vitepress/sidebar.json\",\n\t\tcontent: `${JSON.stringify(sidebar, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Public entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generate navigation configuration file(s) for the given SSG target.\n *\n * Returns one file for most targets, but multiple files for Nextra (which\n * uses per-directory `_meta.json` files).\n *\n * @param pages - The {@link DocPage} array produced by `generateDocSite`.\n * @param target - The SSG target.\n * @param projectName - The project name (used in config metadata).\n * @returns An array of {@link SSGConfigFile} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateSSGConfigs } from \"@forge-ts/gen\";\n * const configs = generateSSGConfigs(pages, \"vitepress\", \"my-project\");\n * console.log(configs[0].path); // \".vitepress/sidebar.json\"\n * ```\n * @public\n */\nexport function generateSSGConfigs(\n\tpages: DocPage[],\n\ttarget: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\",\n\tprojectName: string,\n): SSGConfigFile[] {\n\tswitch (target) {\n\t\tcase \"mintlify\":\n\t\t\treturn [generateMintlifyConfig(pages, projectName)];\n\t\tcase \"docusaurus\":\n\t\t\treturn [generateDocusaurusConfig(pages, projectName)];\n\t\tcase \"nextra\":\n\t\t\treturn generateNextraConfigs(pages, projectName);\n\t\tcase \"vitepress\":\n\t\t\treturn [generateVitePressConfig(pages, projectName)];\n\t\tdefault: {\n\t\t\t// Exhaustiveness guard — TypeScript will catch unhandled variants at\n\t\t\t// compile time, but we want a safe runtime fallback too.\n\t\t\tconst _exhaustive: never = target;\n\t\t\tvoid _exhaustive;\n\t\t\treturn [];\n\t\t}\n\t}\n}\n","/**\n * @forge-ts/gen — Markdown/MDX documentation and llms.txt generator.\n *\n * Generates human- and machine-readable documentation from the forge-ts\n * symbol graph, with optional README injection.\n *\n * @packageDocumentation\n * @public\n */\n\nexport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nexport {\n\tgenerateMarkdown,\n\ttype MarkdownOptions,\n} from \"./markdown.js\";\nexport { type ReadmeSyncOptions, syncReadme } from \"./readme-sync.js\";\nexport {\n\ttype DocPage,\n\tgenerateDocSite,\n\tgroupSymbolsByPackage,\n\ttype SiteGeneratorOptions,\n} from \"./site-generator.js\";\nexport { generateSSGConfigs, type SSGConfigFile } from \"./ssg-config.js\";\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { createWalker, type ForgeConfig, type ForgeResult } from \"@forge-ts/core\";\nimport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nimport { generateMarkdown } from \"./markdown.js\";\nimport { syncReadme } from \"./readme-sync.js\";\nimport { generateDocSite, groupSymbolsByPackage } from \"./site-generator.js\";\nimport { generateSSGConfigs } from \"./ssg-config.js\";\n\n/**\n * Runs the full generation pipeline: walk → render → write.\n *\n * @param config - The resolved {@link ForgeConfig} for the project.\n * @returns A {@link ForgeResult} describing the outcome.\n * @example\n * ```typescript\n * import { generate } from \"@forge-ts/gen\";\n * const result = await generate(config);\n * console.log(result.success); // true if all files were written\n * ```\n * @public\n * @packageDocumentation\n */\nexport async function generate(config: ForgeConfig): Promise<ForgeResult> {\n\tconst start = Date.now();\n\n\tconst walker = createWalker(config);\n\tconst symbols = walker.walk();\n\n\tawait mkdir(config.outDir, { recursive: true });\n\n\t// Legacy flat output — kept for backward compatibility\n\tfor (const format of config.gen.formats) {\n\t\tconst content = generateMarkdown(symbols, config, {\n\t\t\tmdx: format === \"mdx\",\n\t\t});\n\t\tconst ext = format === \"mdx\" ? \"mdx\" : \"md\";\n\t\tawait writeFile(join(config.outDir, `api-reference.${ext}`), content, \"utf8\");\n\t}\n\n\t// Multi-page site output — writes directly to outDir\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst symbolsByPackage = groupSymbolsByPackage(symbols, config.rootDir);\n\n\tfor (const format of config.gen.formats) {\n\t\tconst pages = generateDocSite(symbolsByPackage, config, {\n\t\t\tformat,\n\t\t\tssgTarget: config.gen.ssgTarget,\n\t\t\tprojectName,\n\t\t});\n\n\t\tfor (const page of pages) {\n\t\t\tconst pagePath = join(config.outDir, page.path);\n\t\t\tconst pageDir = pagePath.substring(0, pagePath.lastIndexOf(\"/\"));\n\t\t\tawait mkdir(pageDir, { recursive: true });\n\t\t\tawait writeFile(pagePath, page.content, \"utf8\");\n\t\t}\n\n\t\tif (config.gen.ssgTarget) {\n\t\t\tconst configFiles = generateSSGConfigs(pages, config.gen.ssgTarget, projectName);\n\t\t\tfor (const configFile of configFiles) {\n\t\t\t\tconst configPath = join(config.outDir, configFile.path);\n\t\t\t\tconst configDir = configPath.substring(0, configPath.lastIndexOf(\"/\"));\n\t\t\t\tawait mkdir(configDir, { recursive: true });\n\t\t\t\tawait writeFile(configPath, configFile.content, \"utf8\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.llmsTxt) {\n\t\tconst llms = generateLlmsTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms.txt\"), llms, \"utf8\");\n\n\t\tconst llmsFull = generateLlmsFullTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms-full.txt\"), llmsFull, \"utf8\");\n\t}\n\n\tif (config.gen.readmeSync) {\n\t\tawait syncReadme(join(config.rootDir, \"README.md\"), symbols);\n\t}\n\n\treturn {\n\t\tsuccess: true,\n\t\tsymbols,\n\t\terrors: [],\n\t\twarnings: [],\n\t\tduration: Date.now() - start,\n\t};\n}\n"],"mappings":"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","names":["relative","toAnchor","KIND_ORDER","KIND_LABELS","writeFile","writeFile"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/registry.ts","../src/adapters/mintlify.ts","../src/adapters/docusaurus.ts","../src/adapters/nextra.ts","../src/adapters/vitepress.ts","../src/llms.ts","../src/markdown.ts","../src/readme-sync.ts","../src/site-generator.ts","../src/ssg-config.ts","../src/index.ts"],"sourcesContent":["import type { SSGAdapter, SSGTarget } from \"./types.js\";\n\n/** Registry of all available SSG adapters. */\nconst adapters = new Map<SSGTarget, SSGAdapter>();\n\n/**\n * Register an SSG adapter.\n * Called once per provider at module load time.\n *\n * @param adapter - The adapter to register.\n * @example\n * ```typescript\n * import { registerAdapter } from \"@forge-ts/gen\";\n * registerAdapter(mintlifyAdapter);\n * ```\n * @public\n */\nexport function registerAdapter(adapter: SSGAdapter): void {\n\tadapters.set(adapter.target, adapter);\n}\n\n/**\n * Get a registered adapter by target name.\n * Throws if the target is not registered.\n *\n * @param target - The SSG target identifier.\n * @returns The registered {@link SSGAdapter} for the given target.\n * @throws `Error` if the target is not registered.\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * ```\n * @public\n */\nexport function getAdapter(target: SSGTarget): SSGAdapter {\n\tconst adapter = adapters.get(target);\n\tif (!adapter) {\n\t\tconst available = [...adapters.keys()].join(\", \");\n\t\tthrow new Error(`Unknown SSG target \"${target}\". Available targets: ${available}`);\n\t}\n\treturn adapter;\n}\n\n/**\n * Get all registered adapter targets.\n *\n * @returns An array of all registered {@link SSGTarget} identifiers.\n * @example\n * ```typescript\n * import { getAvailableTargets } from \"@forge-ts/gen\";\n * const targets = getAvailableTargets(); // [\"mintlify\", \"docusaurus\", ...]\n * ```\n * @public\n */\nexport function getAvailableTargets(): SSGTarget[] {\n\treturn [...adapters.keys()];\n}\n\n/**\n * The default SSG target when none is specified.\n * @public\n */\nexport const DEFAULT_TARGET: SSGTarget = \"mintlify\";\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 3,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\ninterface MintlifyNavigationPage {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavigationPage>;\n}\n\ninterface MintlifyDocsJson {\n\tname: string;\n\ttheme: string;\n\tcolors: { primary: string };\n\tnavigation: MintlifyNavigationPage[];\n}\n\n/** Build the docs.json navigation config from doc pages. */\nfunction buildDocsJson(context: AdapterContext): MintlifyDocsJson {\n\tconst { pages, projectName } = context;\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst navigation: MintlifyNavigationPage[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tnavigation.push({ group: \"Getting Started\", pages: topLevel });\n\t}\n\n\tif (byPackage.size > 0) {\n\t\tconst packageGroups: MintlifyNavigationPage[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\tpackageGroups.push({ group: pkgName, pages: slugs });\n\t\t}\n\t\tnavigation.push({\n\t\t\tgroup: \"Packages\",\n\t\t\tpages: packageGroups as unknown as Array<string | MintlifyNavigationPage>,\n\t\t});\n\t}\n\n\treturn {\n\t\tname: projectName,\n\t\ttheme: \"venus\",\n\t\tcolors: { primary: \"#0ea5e9\" },\n\t\tnavigation,\n\t};\n}\n\n/** Add Mintlify-compatible frontmatter to a doc page. */\nfunction addMintlifyFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\t// Strip existing frontmatter block if present, then prepend ours\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Mintlify SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Mintlify platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"docs.json\"\n * ```\n * @public\n */\nexport const mintlifyAdapter: SSGAdapter = {\n\ttarget: \"mintlify\",\n\tdisplayName: \"Mintlify\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst docsJson = buildDocsJson(context);\n\t\treturn {\n\t\t\ttarget: \"mintlify\",\n\t\t\tfiles: [{ path: \"docs.json\", content: JSON.stringify(docsJson, null, 2) }],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {},\n\t\t\tinstructions: [\n\t\t\t\t\"Install Mintlify CLI: npm i -g mint\",\n\t\t\t\t\"Preview locally: mint dev\",\n\t\t\t\t\"Deploy: Push to GitHub and connect at mintlify.com\",\n\t\t\t],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addMintlifyFrontmatter(page),\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\tconst config = buildDocsJson(context);\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"docs.json\",\n\t\t\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t\t\t},\n\t\t];\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \"docs.json\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(mintlifyAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\n/** Build the sidebars.ts content from doc pages. */\nfunction buildSidebarsTs(pages: DocPage[]): string {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\n\treturn (\n\t\t`import type { SidebarsConfig } from \"@docusaurus/plugin-content-docs\";\\n\\n` +\n\t\t`const sidebars: SidebarsConfig = ${json};\\n\\n` +\n\t\t`export default sidebars;\\n`\n\t);\n}\n\n/** Build the docusaurus.config.ts content. */\nfunction buildDocusaurusConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\n\treturn (\n\t\t`import { themes as prismThemes } from \"prism-react-renderer\";\\n` +\n\t\t`import type { Config } from \"@docusaurus/types\";\\n` +\n\t\t`import type * as Preset from \"@docusaurus/preset-classic\";\\n\\n` +\n\t\t`const config: Config = {\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` tagline: \"${description}\",\\n` +\n\t\t` url: \"https://your-domain.com\",\\n` +\n\t\t` baseUrl: \"/\",\\n` +\n\t\t` onBrokenLinks: \"throw\",\\n` +\n\t\t` onBrokenMarkdownLinks: \"warn\",\\n` +\n\t\t` i18n: {\\n` +\n\t\t` defaultLocale: \"en\",\\n` +\n\t\t` locales: [\"en\"],\\n` +\n\t\t` },\\n` +\n\t\t` presets: [\\n` +\n\t\t` [\\n` +\n\t\t` \"classic\",\\n` +\n\t\t` {\\n` +\n\t\t` docs: {\\n` +\n\t\t` routeBasePath: \"/\",\\n` +\n\t\t` sidebarPath: \"./sidebars.ts\",\\n` +\n\t\t` },\\n` +\n\t\t` blog: false,\\n` +\n\t\t` } satisfies Preset.Options,\\n` +\n\t\t` ],\\n` +\n\t\t` ],\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` prism: {\\n` +\n\t\t` theme: prismThemes.github,\\n` +\n\t\t` darkTheme: prismThemes.dracula,\\n` +\n\t\t` },\\n` +\n\t\t` } satisfies Preset.ThemeConfig,\\n` +\n\t\t`} satisfies Config;\\n\\n` +\n\t\t`export default config;\\n`\n\t);\n}\n\n/** Build the package.json content for a Docusaurus site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t},\n\t\tdependencies: {\n\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\treact: \"^19.0.0\",\n\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Docusaurus-compatible frontmatter to a doc page. */\nfunction addDocusaurusFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\tconst sidebarLabel = page.frontmatter.sidebar_label\n\t\t? String(page.frontmatter.sidebar_label)\n\t\t: title;\n\tconst sidebarPosition = page.frontmatter.sidebar_position;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, `sidebar_label: \"${sidebarLabel}\"`];\n\tif (sidebarPosition !== undefined) {\n\t\tlines.push(`sidebar_position: ${sidebarPosition}`);\n\t}\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Docusaurus SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Docusaurus platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"docusaurus\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"sidebars.ts\"\n * ```\n * @public\n */\nexport const docusaurusAdapter: SSGAdapter = {\n\ttarget: \"docusaurus\",\n\tdisplayName: \"Docusaurus\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"docusaurus\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"docusaurus.config.ts\", content: buildDocusaurusConfig(context) },\n\t\t\t\t{ path: \"sidebars.ts\", content: buildSidebarsTs(context.pages) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"tsconfig.json\", content: '{ \"extends\": \"@docusaurus/tsconfig\" }\\n' },\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\t\treact: \"^19.0.0\",\n\t\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addDocusaurusFrontmatter(page),\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"sidebars.ts\",\n\t\t\t\tcontent: buildSidebarsTs(context.pages),\n\t\t\t},\n\t\t];\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"sidebars.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(docusaurusAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: false,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n/**\n * Render a plain object as a JS module export.\n * Values are always strings so we can use JSON.stringify on the object\n * and then replace the surrounding braces with a default export statement.\n */\nfunction renderMetaJs(meta: Record<string, string>): string {\n\tconst json = JSON.stringify(meta, null, 2);\n\treturn `export default ${json};\\n`;\n}\n\n/** Build all _meta.js files for the Nextra v4 navigation. */\nfunction buildMetaFiles(pages: DocPage[]): GeneratedFile[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst files: GeneratedFile[] = [];\n\n\t// Root _meta.js (content/ directory in Nextra v4)\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\tfiles.push({\n\t\tpath: \"content/_meta.js\",\n\t\tcontent: renderMetaJs(rootMeta),\n\t});\n\n\t// Per-package _meta.js\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: `content/packages/${pkgName}/_meta.js`,\n\t\t\tcontent: renderMetaJs(pkgMeta),\n\t\t});\n\t}\n\n\t// content/packages/_meta.js when there are multiple packages\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"content/packages/_meta.js\",\n\t\t\tcontent: renderMetaJs(packagesMeta),\n\t\t});\n\t}\n\n\treturn files;\n}\n\n/** Build the app/layout.tsx content for Nextra v4. */\nfunction buildAppLayout(context: AdapterContext): string {\n\tconst { projectName } = context;\n\treturn (\n\t\t`import { Layout } from \"nextra-theme-docs\";\\n` +\n\t\t`import { Head } from \"nextra/components\";\\n` +\n\t\t`import { getPageMap } from \"nextra/page-map\";\\n` +\n\t\t`import type { ReactNode } from \"react\";\\n\\n` +\n\t\t`export const metadata = {\\n` +\n\t\t` title: {\\n` +\n\t\t` template: \\`%s – ${projectName}\\`,\\n` +\n\t\t` },\\n` +\n\t\t`};\\n\\n` +\n\t\t`export default async function RootLayout({ children }: { children: ReactNode }) {\\n` +\n\t\t` const pageMap = await getPageMap();\\n` +\n\t\t` return (\\n` +\n\t\t` <html lang=\"en\" suppressHydrationWarning>\\n` +\n\t\t` <Head />\\n` +\n\t\t` <body>\\n` +\n\t\t` <Layout pageMap={pageMap} docsRepositoryBase=\"\">\\n` +\n\t\t` {children}\\n` +\n\t\t` </Layout>\\n` +\n\t\t` </body>\\n` +\n\t\t` </html>\\n` +\n\t\t` );\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build the app/[[...mdxPath]]/page.tsx content for Nextra v4. */\nfunction buildCatchAllPage(): string {\n\treturn (\n\t\t`import { generateStaticParamsFor, importPage } from \"nextra/pages\";\\n\\n` +\n\t\t`export const generateStaticParams = generateStaticParamsFor(\"mdxPath\");\\n\\n` +\n\t\t`export async function generateMetadata(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const { metadata } = await importPage(params.mdxPath);\\n` +\n\t\t` return metadata;\\n` +\n\t\t`}\\n\\n` +\n\t\t`const Wrapper = importPage;\\n` +\n\t\t`export default async function Page(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const result = await importPage(params.mdxPath);\\n` +\n\t\t` const { default: MDXContent } = result;\\n` +\n\t\t` return <MDXContent {...props} params={params} />;\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build mdx-components.ts for Nextra v4. */\nfunction buildMdxComponents(): string {\n\treturn (\n\t\t`import { useMDXComponents as getNextraComponents } from \"nextra-theme-docs\";\\n\\n` +\n\t\t`export function useMDXComponents(components: Record<string, unknown>) {\\n` +\n\t\t` return getNextraComponents(components);\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build next.config.ts for Nextra v4. */\nfunction buildNextConfig(): string {\n\treturn (\n\t\t`import nextra from \"nextra\";\\n\\n` +\n\t\t`const withNextra = nextra({\\n` +\n\t\t` contentDirBasePath: \"/\",\\n` +\n\t\t`});\\n\\n` +\n\t\t`export default withNextra({\\n` +\n\t\t` output: \"export\",\\n` +\n\t\t` images: { unoptimized: true },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for Nextra v4. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\"docs:build\": \"next build\",\n\t\t\t\"docs:serve\": \"next start\",\n\t\t},\n\t\tdependencies: {\n\t\t\tnext: \"^15\",\n\t\t\tnextra: \"^4\",\n\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\treact: \"^19\",\n\t\t\t\"react-dom\": \"^19\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Nextra-compatible frontmatter to a doc page (title only — description optional). */\nfunction addNextraFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tif (!title) {\n\t\treturn page.content;\n\t}\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"---\", \"\"];\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Nextra SSG adapter (v4, App Router).\n * Implements the {@link SSGAdapter} contract for the Nextra platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"nextra\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"content/_meta.js\"\n * ```\n * @public\n */\nexport const nextraAdapter: SSGAdapter = {\n\ttarget: \"nextra\",\n\tdisplayName: \"Nextra\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst metaFiles = buildMetaFiles(context.pages);\n\t\treturn {\n\t\t\ttarget: \"nextra\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"next.config.ts\", content: buildNextConfig() },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"mdx-components.ts\", content: buildMdxComponents() },\n\t\t\t\t{ path: \"app/layout.tsx\", content: buildAppLayout(context) },\n\t\t\t\t{ path: \"app/[[...mdxPath]]/page.tsx\", content: buildCatchAllPage() },\n\t\t\t\t...metaFiles,\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\tnext: \"^15\",\n\t\t\t\tnextra: \"^4\",\n\t\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\t\treact: \"^19\",\n\t\t\t\t\"react-dom\": \"^19\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\t\"docs:build\": \"next build\",\n\t\t\t\t\"docs:serve\": \"next start\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addNextraFrontmatter(page),\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn buildMetaFiles(context.pages);\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"content/_meta.js\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(nextraAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"md\",\n\tsupportsMdx: false,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\n/** Build the sidebar structure from doc pages. */\nfunction buildSidebar(pages: DocPage[]): VitePressGroup[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn sidebar;\n}\n\n/** Build the .vitepress/config.mts content. */\nfunction buildVitePressConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\tconst sidebar = buildSidebar(context.pages);\n\tconst sidebarJson = JSON.stringify(sidebar, null, 4).split(\"\\n\").join(\"\\n \");\n\n\treturn (\n\t\t`import { defineConfig } from \"vitepress\";\\n\\n` +\n\t\t`// https://vitepress.dev/reference/site-config\\n` +\n\t\t`export default defineConfig({\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` description: \"${description}\",\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` nav: [\\n` +\n\t\t` { text: \"Home\", link: \"/\" },\\n` +\n\t\t` ],\\n` +\n\t\t` sidebar: ${sidebarJson},\\n` +\n\t\t` socialLinks: [],\\n` +\n\t\t` },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for a VitePress site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\ttype: \"module\",\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\tvitepress: \"^2.0.0\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add VitePress-compatible frontmatter to a doc page. */\nfunction addVitepressFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"outline: deep\"];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * VitePress SSG adapter.\n * Implements the {@link SSGAdapter} contract for the VitePress platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"vitepress\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \".vitepress/config.mts\"\n * ```\n * @public\n */\nexport const vitepressAdapter: SSGAdapter = {\n\ttarget: \"vitepress\",\n\tdisplayName: \"VitePress\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"vitepress\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \".vitepress/config.mts\", content: buildVitePressConfig(context) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {\n\t\t\t\tvitepress: \"^2.0.0\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\t// VitePress uses .md (not .mdx)\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.endsWith(\".mdx\") ? page.path.replace(/\\.mdx$/, \".md\") : page.path,\n\t\t\tcontent: addVitepressFrontmatter(page),\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \".vitepress/config.mts\",\n\t\t\t\tcontent: buildVitePressConfig(context),\n\t\t\t},\n\t\t];\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \".vitepress\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(vitepressAdapter);\n","import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Derives a compact one-line signature for routing manifest entries.\n * @internal\n */\nfunction compactEntry(symbol: ForgeSymbol): string {\n\tif (symbol.signature) {\n\t\treturn symbol.signature;\n\t}\n\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\treturn `${symbol.kind} ${symbol.name}${ext}`;\n}\n\n/**\n * Generates an `llms.txt` routing manifest from the extracted symbols.\n *\n * The file follows the llms.txt specification: a compact, structured overview\n * designed to help large language models navigate a project's documentation.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsTxt } from \"@forge-ts/gen\";\n * const txt = generateLlmsTxt(symbols, config);\n * console.log(txt.startsWith(\"# \")); // true\n * ```\n * @public\n */\nexport function generateLlmsTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName}`);\n\tlines.push(`> Auto-generated API documentation`);\n\tlines.push(\"\");\n\n\t// Sections block — link to generated files\n\tlines.push(\"## Sections\");\n\tlines.push(\"\");\n\tif (config.gen.formats.includes(\"markdown\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.md): Full API documentation\");\n\t}\n\tif (config.gen.formats.includes(\"mdx\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.mdx): Full API documentation (MDX)\");\n\t}\n\tif (config.gen.llmsTxt) {\n\t\tlines.push(\"- [Full Context](./llms-full.txt): Dense context for LLM consumption\");\n\t}\n\tlines.push(\"\");\n\n\t// Quick Reference block\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Quick Reference\");\n\t\tlines.push(\"\");\n\t\tfor (const symbol of exported) {\n\t\t\tconst summary = symbol.documentation?.summary ?? \"\";\n\t\t\tconst entry = compactEntry(symbol);\n\t\t\tlines.push(summary ? `${entry} - ${summary}` : entry);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a full parameter list section.\n * @internal\n */\nfunction renderParams(params: NonNullable<ForgeSymbol[\"documentation\"]>[\"params\"]): string {\n\tif (!params || params.length === 0) return \"\";\n\tconst lines: string[] = [\"\", \"Parameters:\"];\n\tfor (const p of params) {\n\t\tconst typeStr = p.type ? ` (${p.type})` : \"\";\n\t\tlines.push(`- ${p.name}${typeStr}: ${p.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a single symbol section for llms-full.txt.\n * @internal\n */\nfunction renderFullSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} ${symbol.name}${ext}`);\n\n\tif (symbol.signature) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.signature);\n\t}\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(\"\");\n\t\tlines.push(`DEPRECATED: ${symbol.documentation.deprecated}`);\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.documentation.summary);\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tconst paramBlock = renderParams(params);\n\tif (paramBlock) {\n\t\tlines.push(paramBlock);\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (${symbol.documentation.returns.type})`\n\t\t\t: \"\";\n\t\tlines.push(\"\");\n\t\tlines.push(`Returns${retType}: ${symbol.documentation.returns.description}`);\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Example:\");\n\t\tfor (const ex of examples) {\n\t\t\tconst exLines = ex.code.trim().split(\"\\n\");\n\t\t\tfor (const l of exLines) {\n\t\t\t\tlines.push(` ${l}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render children inline\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Members:\");\n\t\tfor (const child of children) {\n\t\t\tlines.push(\"\");\n\t\t\tconst childSection = renderFullSymbol(child, depth + 1);\n\t\t\t// indent child one level\n\t\t\tfor (const cl of childSection.split(\"\\n\")) {\n\t\t\t\tlines.push(cl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates an `llms-full.txt` dense context file from the extracted symbols.\n *\n * Unlike `llms.txt`, this file contains complete documentation for every\n * exported symbol, intended for LLM ingestion that requires full context.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms-full.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsFullTxt } from \"@forge-ts/gen\";\n * const fullTxt = generateLlmsFullTxt(symbols, config);\n * console.log(fullTxt.includes(\"Full Context\")); // true\n * ```\n * @public\n */\nexport function generateLlmsFullTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName} - Full Context`);\n\tlines.push(\"\");\n\tlines.push(`Root: ${config.rootDir}`);\n\tlines.push(`Generated: ${new Date().toISOString()}`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst kindGroups: Record<string, ForgeSymbol[]> = {};\n\tfor (const symbol of exported) {\n\t\tconst list = kindGroups[symbol.kind] ?? [];\n\t\tlist.push(symbol);\n\t\tkindGroups[symbol.kind] = list;\n\t}\n\n\tconst kindOrder: Array<ForgeSymbol[\"kind\"]> = [\n\t\t\"function\",\n\t\t\"class\",\n\t\t\"interface\",\n\t\t\"type\",\n\t\t\"enum\",\n\t\t\"variable\",\n\t];\n\n\tconst kindLabels: Record<string, string> = {\n\t\tfunction: \"Functions\",\n\t\tclass: \"Classes\",\n\t\tinterface: \"Interfaces\",\n\t\ttype: \"Types\",\n\t\tenum: \"Enums\",\n\t\tvariable: \"Variables\",\n\t};\n\n\tfor (const kind of kindOrder) {\n\t\tconst group = kindGroups[kind];\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${kindLabels[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const symbol of group) {\n\t\t\tlines.push(renderFullSymbol(symbol, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Options controlling Markdown output.\n * @public\n */\nexport interface MarkdownOptions {\n\t/** Whether to use MDX syntax (default: Markdown). */\n\tmdx?: boolean;\n}\n\n/** Display labels for each symbol kind. */\nconst KIND_LABELS: Record<ForgeSymbol[\"kind\"], string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n\tmethod: \"Methods\",\n\tproperty: \"Properties\",\n};\n\n/** Canonical ordering for top-level kind groups. */\nconst KIND_ORDER: Array<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Build the frontmatter block for the configured SSG target. */\nfunction buildFrontmatter(config: ForgeConfig, mdx: boolean): string {\n\tconst target = config.gen.ssgTarget;\n\tif (!target) return \"\";\n\n\tconst lines: string[] = [\"---\"];\n\n\tswitch (target) {\n\t\tcase \"docusaurus\":\n\t\t\tlines.push(\"sidebar_position: 1\");\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"mintlify\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"nextra\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"description: Auto-generated API reference\");\n\t\t\tbreak;\n\t\tcase \"vitepress\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"outline: deep\");\n\t\t\tbreak;\n\t}\n\n\tlines.push(\"---\");\n\tif (mdx) {\n\t\tlines.push(\"\");\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\n/** Build MDX import block for custom components. */\nfunction buildMdxImports(): string {\n\treturn 'import { Callout } from \"@components/Callout\";\\n\\n';\n}\n\n/**\n * Render a deprecation notice banner.\n * @internal\n */\nfunction renderDeprecation(deprecated: string): string {\n\treturn `> **Deprecated**: ${deprecated}\\n`;\n}\n\n/**\n * Render source location line.\n * @internal\n */\nfunction renderSourceLink(symbol: ForgeSymbol, rootDir: string): string {\n\tconst rel = relative(rootDir, symbol.filePath);\n\treturn `_Defined in \\`${rel}:${symbol.line}\\`_\\n`;\n}\n\n/**\n * Renders a symbol at H3 level (used for both top-level and children).\n * @internal\n */\nfunction renderSymbolSection(\n\tsymbol: ForgeSymbol,\n\trootDir: string,\n\tmdx: boolean,\n\tdepth: number,\n): string {\n\tconst lines: string[] = [];\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(renderDeprecation(symbol.documentation.deprecated));\n\t}\n\n\tlines.push(renderSourceLink(symbol, rootDir));\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Render children (class members, enum values, interface properties)\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tconst childDepth = depth + 1;\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderSymbolSection(child, rootDir, mdx, childDepth));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a Table of Contents from grouped symbols.\n * @internal\n */\nfunction buildToc(groups: Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>): string {\n\tconst lines: string[] = [];\n\tlines.push(\"## Table of Contents\");\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tconst anchor = toAnchor(label);\n\t\tlines.push(`- [${label}](#${anchor})`);\n\n\t\tfor (const symbol of group) {\n\t\t\tconst ext = kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst displayName = `${symbol.name}${ext}`;\n\t\t\tconst symAnchor = toAnchor(displayName);\n\t\t\tlines.push(` - [\\`${displayName}\\`](#${symAnchor})`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates a Markdown (or MDX) string from a list of symbols.\n *\n * @param symbols - The symbols to document.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Rendering options.\n * @returns The generated Markdown string.\n * @example\n * ```typescript\n * import { generateMarkdown } from \"@forge-ts/gen\";\n * const md = generateMarkdown(symbols, config, { mdx: false });\n * console.log(md.startsWith(\"# API Reference\")); // true\n * ```\n * @public\n */\nexport function generateMarkdown(\n\tsymbols: ForgeSymbol[],\n\tconfig: ForgeConfig,\n\toptions: MarkdownOptions = {},\n): string {\n\tconst mdx = options.mdx ?? false;\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Group by kind (top-level only — children are nested under their parent)\n\tconst topLevel = exported.filter((s) => s.kind !== \"method\" && s.kind !== \"property\");\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const symbol of topLevel) {\n\t\tconst list = groups.get(symbol.kind) ?? [];\n\t\tlist.push(symbol);\n\t\tgroups.set(symbol.kind, list);\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Frontmatter\n\tconst frontmatter = buildFrontmatter(config, mdx);\n\tif (frontmatter) {\n\t\tparts.push(frontmatter);\n\t}\n\n\t// MDX imports\n\tif (mdx) {\n\t\tparts.push(buildMdxImports());\n\t}\n\n\t// Page title + preamble\n\tparts.push(\"# API Reference\\n\");\n\tparts.push(\n\t\t`Generated by [forge-ts](https://github.com/forge-ts/forge-ts) from \\`${config.rootDir}\\`.\\n`,\n\t);\n\n\t// Table of Contents\n\tif (topLevel.length > 0) {\n\t\tparts.push(buildToc(groups));\n\t}\n\n\t// Symbol groups\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tparts.push(`## ${label}\\n`);\n\n\t\tfor (const symbol of group) {\n\t\t\tparts.push(renderSymbolSection(symbol, config.rootDir, mdx, 3));\n\t\t\tparts.push(\"\");\n\t\t}\n\t}\n\n\treturn `${parts\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type { ForgeSymbol } from \"@forge-ts/core\";\n\nconst SECTION_START = \"<!-- forge-ts:start -->\";\nconst SECTION_END = \"<!-- forge-ts:end -->\";\n\n/** Options controlling README sync behaviour. */\nexport interface ReadmeSyncOptions {\n\t/** Include a \"Documented with forge-ts\" badge above the API table. */\n\tbadge?: boolean;\n\t/** Include first @example from each top-level symbol. */\n\tincludeExamples?: boolean;\n}\n\n/**\n * Derives a compact type signature string for the table.\n * @internal\n */\nfunction tableSignature(symbol: ForgeSymbol): string {\n\tif (!symbol.signature) {\n\t\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\t\treturn `\\`${symbol.name}${ext}\\``;\n\t}\n\t// Keep it short: show at most 60 characters of the signature\n\tconst sig =\n\t\tsymbol.signature.length > 60 ? `${symbol.signature.slice(0, 57)}...` : symbol.signature;\n\treturn `\\`${sig}\\``;\n}\n\n/**\n * Renders the first @example block as a fenced code snippet.\n * @internal\n */\nfunction renderFirstExample(symbol: ForgeSymbol): string {\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length === 0) return \"\";\n\tconst ex = examples[0];\n\treturn [\"\", `\\`\\`\\`${ex.language}`, ex.code.trim(), \"```\"].join(\"\\n\");\n}\n\n/**\n * Builds the markdown table rows for the API overview.\n * @internal\n */\nfunction buildApiTable(symbols: ForgeSymbol[], includeExamples: boolean): string[] {\n\tconst lines: string[] = [\"| Symbol | Kind | Description |\", \"|--------|------|-------------|\"];\n\n\tfor (const s of symbols) {\n\t\tconst sig = tableSignature(s);\n\t\tconst summary = s.documentation?.summary ?? \"\";\n\t\tlines.push(`| ${sig} | ${s.kind} | ${summary} |`);\n\t}\n\n\tif (includeExamples) {\n\t\tconst withExamples = symbols.filter((s) => (s.documentation?.examples ?? []).length > 0);\n\t\tif (withExamples.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"### Examples\");\n\t\t\tfor (const s of withExamples) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tlines.push(`#### \\`${s.name}${ext}\\``);\n\t\t\t\tlines.push(renderFirstExample(s));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Injects a summary of exported symbols into a `README.md` file.\n *\n * The content is placed between `<!-- forge-ts:start -->` and\n * `<!-- forge-ts:end -->` comment markers. If neither marker exists, the\n * summary is appended to the end of the file.\n *\n * @param readmePath - Absolute path to the `README.md` to update.\n * @param symbols - Symbols to summarise in the README.\n * @param options - Options controlling sync behaviour.\n * @returns `true` if the file was modified, `false` otherwise.\n * @example\n * ```typescript\n * import { syncReadme } from \"@forge-ts/gen\";\n * const modified = await syncReadme(\"/path/to/README.md\", symbols);\n * console.log(modified); // true if README was updated\n * ```\n * @public\n */\nexport async function syncReadme(\n\treadmePath: string,\n\tsymbols: ForgeSymbol[],\n\toptions: ReadmeSyncOptions = {},\n): Promise<boolean> {\n\tconst exported = symbols.filter((s) => s.exported);\n\tif (exported.length === 0) return false;\n\n\tconst badge = options.badge ?? false;\n\tconst includeExamples = options.includeExamples ?? false;\n\n\tconst innerLines: string[] = [];\n\tinnerLines.push(\"## API Overview\");\n\tinnerLines.push(\"\");\n\n\tif (badge) {\n\t\tinnerLines.push(\n\t\t\t\"[](https://github.com/forge-ts/forge-ts)\",\n\t\t);\n\t\tinnerLines.push(\"\");\n\t}\n\n\tinnerLines.push(...buildApiTable(exported, includeExamples));\n\n\tconst summaryLines = [SECTION_START, \"\", ...innerLines, \"\", SECTION_END];\n\tconst injection = summaryLines.join(\"\\n\");\n\n\tlet existing = existsSync(readmePath) ? await readFile(readmePath, \"utf8\") : \"\";\n\n\tconst startIdx = existing.indexOf(SECTION_START);\n\tconst endIdx = existing.indexOf(SECTION_END);\n\n\tif (startIdx !== -1 && endIdx !== -1) {\n\t\texisting =\n\t\t\texisting.slice(0, startIdx) + injection + existing.slice(endIdx + SECTION_END.length);\n\t} else {\n\t\texisting = `${existing.trimEnd()}\\n\\n${injection}\\n`;\n\t}\n\n\tawait writeFile(readmePath, existing, \"utf8\");\n\treturn true;\n}\n","import { basename, relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * A single generated documentation page.\n * @public\n */\nexport interface DocPage {\n\t/** Relative path from outDir (e.g., \"packages/core/index.md\") */\n\tpath: string;\n\t/** Page content (Markdown or MDX) */\n\tcontent: string;\n\t/** Frontmatter fields */\n\tfrontmatter: Record<string, string | number | boolean>;\n}\n\n/**\n * Options controlling the doc site generator.\n * @public\n */\nexport interface SiteGeneratorOptions {\n\t/** Output format */\n\tformat: \"markdown\" | \"mdx\";\n\t/** SSG target for frontmatter */\n\tssgTarget?: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\";\n\t/** Project name */\n\tprojectName: string;\n\t/** Project description */\n\tprojectDescription?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Escape pipe characters for use inside Markdown table cells. */\nfunction escapePipe(text: string): string {\n\treturn text.replace(/\\|/g, \"\\\\|\");\n}\n\n/** Build a frontmatter block string from the fields map. */\nfunction serializeFrontmatter(fields: Record<string, string | number | boolean>): string {\n\tif (Object.keys(fields).length === 0) return \"\";\n\tconst lines = [\"---\"];\n\tfor (const [key, value] of Object.entries(fields)) {\n\t\tlines.push(`${key}: ${value}`);\n\t}\n\tlines.push(\"---\");\n\treturn `${lines.join(\"\\n\")}\\n\\n`;\n}\n\n/**\n * Build frontmatter fields for the given SSG target.\n * @internal\n */\nfunction buildFrontmatterFields(\n\ttitle: string,\n\tdescription: string,\n\tssgTarget: SiteGeneratorOptions[\"ssgTarget\"],\n\tsidebarPosition?: number,\n): Record<string, string | number | boolean> {\n\tif (!ssgTarget) return {};\n\n\tswitch (ssgTarget) {\n\t\tcase \"docusaurus\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = {\n\t\t\t\ttitle,\n\t\t\t\tsidebar_label: title,\n\t\t\t};\n\t\t\tif (sidebarPosition !== undefined) {\n\t\t\t\tfields.sidebar_position = sidebarPosition;\n\t\t\t}\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"mintlify\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"nextra\":\n\t\t\treturn { title };\n\t\tcase \"vitepress\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title, outline: \"deep\" };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Package grouping\n// ---------------------------------------------------------------------------\n\n/**\n * Groups symbols by their package based on file path.\n *\n * For monorepos (symbols under `packages/<name>/`) the package name is\n * derived from the directory segment immediately after `packages/`.\n * For non-monorepo projects all symbols fall under the project name.\n *\n * @param symbols - All extracted symbols.\n * @param rootDir - Absolute path to the project root.\n * @returns A map from package name to symbol list.\n * @example\n * ```typescript\n * import { groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, \"/path/to/project\");\n * console.log(grouped.has(\"core\")); // true for monorepo\n * ```\n * @public\n */\nexport function groupSymbolsByPackage(\n\tsymbols: ForgeSymbol[],\n\trootDir: string,\n): Map<string, ForgeSymbol[]> {\n\tconst result = new Map<string, ForgeSymbol[]>();\n\n\tfor (const symbol of symbols) {\n\t\tconst rel = relative(rootDir, symbol.filePath);\n\t\t// Detect monorepo structure: packages/<name>/...\n\t\tconst monorepoMatch = /^packages[\\\\/]([^\\\\/]+)[\\\\/]/.exec(rel);\n\t\tconst packageName = monorepoMatch ? monorepoMatch[1] : basename(rootDir);\n\n\t\tconst list = result.get(packageName) ?? [];\n\t\tlist.push(symbol);\n\t\tresult.set(packageName, list);\n\t}\n\n\treturn result;\n}\n\n// ---------------------------------------------------------------------------\n// Page renderers\n// ---------------------------------------------------------------------------\n\nconst TYPE_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"interface\", \"type\", \"enum\"]);\n\nconst FUNCTION_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"function\", \"class\"]);\n\n/** Render a property table row. */\nfunction renderPropertyRow(child: ForgeSymbol): string {\n\tconst name = `\\`${child.name}\\``;\n\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t// Heuristic: optional if signature contains `?` or `| undefined`\n\tconst optional =\n\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\tconst description = escapePipe(child.documentation?.summary ?? \"\");\n\treturn `| ${name} | ${type} | ${optional} | ${description} |`;\n}\n\n/**\n * Renders the overview (index) page for a package.\n * @internal\n */\nfunction renderOverviewPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\t// Find @packageDocumentation summary from tags\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName}`);\n\tlines.push(\"\");\n\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t}\n\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Exported Symbols\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\tlines.push(\"|--------|------|-------------|\");\n\t\tfor (const s of exported) {\n\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst name = `[\\`${s.name}${ext}\\`](./api-reference.md#${toAnchor(`${s.name}${ext}`)})`;\n\t\t\tconst summary = escapePipe(s.documentation?.summary ?? \"\");\n\t\t\tlines.push(`| ${name} | ${s.kind} | ${summary} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the types page for a package (interfaces, type aliases, enums).\n * @internal\n */\nfunction renderTypesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst typeSymbols = symbols.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Types`);\n\tlines.push(\"\");\n\tlines.push(\"Type contracts exported by this package: interfaces, type aliases, and enums.\");\n\tlines.push(\"\");\n\n\tfor (const s of typeSymbols) {\n\t\tlines.push(`## ${s.name}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature && s.kind !== \"interface\") {\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = (s.children ?? []).filter((c) => c.kind === \"property\" || c.kind === \"method\");\n\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tlines.push(renderPropertyRow(child));\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the functions page for a package (functions and classes).\n * @internal\n */\nfunction renderFunctionsPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst fnSymbols = symbols.filter((s) => s.exported && FUNCTION_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Functions & Classes`);\n\tlines.push(\"\");\n\tlines.push(\"Functions and classes exported by this package.\");\n\tlines.push(\"\");\n\n\tfor (const s of fnSymbols) {\n\t\tconst _ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tconst paramSig =\n\t\t\ts.kind === \"function\" && s.documentation?.params\n\t\t\t\t? s.documentation.params.map((p) => p.name).join(\", \")\n\t\t\t\t: \"\";\n\t\tconst heading = s.kind === \"function\" ? `${s.name}(${paramSig})` : s.name;\n\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature) {\n\t\t\tlines.push(\"**Signature**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst params = s.documentation?.params ?? [];\n\t\tif (params.length > 0) {\n\t\t\tlines.push(\"**Parameters**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Name | Type | Description |\");\n\t\t\tlines.push(\"|------|------|-------------|\");\n\t\t\tfor (const p of params) {\n\t\t\t\tconst type = p.type ? `\\`${escapePipe(p.type)}\\`` : \"—\";\n\t\t\t\tlines.push(`| \\`${p.name}\\` | ${type} | ${escapePipe(p.description)} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.returns) {\n\t\t\tconst retType = s.documentation.returns.type ? ` \\`${s.documentation.returns.type}\\`` : \"\";\n\t\t\tlines.push(`**Returns**${retType} — ${s.documentation.returns.description}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst throws = s.documentation?.throws ?? [];\n\t\tif (throws.length > 0) {\n\t\t\tlines.push(\"**Throws**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const t of throws) {\n\t\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length > 0) {\n\t\t\tconst ex = examples[0];\n\t\t\tlines.push(\"**Example**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Render class methods\n\t\tconst methods = (s.children ?? []).filter((c) => c.kind === \"method\");\n\t\tif (methods.length > 0) {\n\t\t\tlines.push(\"**Methods**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const method of methods) {\n\t\t\t\tlines.push(`### ${method.name}()`);\n\t\t\t\tlines.push(\"\");\n\t\t\t\tif (method.documentation?.summary) {\n\t\t\t\t\tlines.push(method.documentation.summary);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tif (method.signature) {\n\t\t\t\t\tlines.push(\"```typescript\");\n\t\t\t\t\tlines.push(method.signature);\n\t\t\t\t\tlines.push(\"```\");\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders the examples page for a package — aggregates all @example blocks.\n * @internal\n */\nfunction renderExamplesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — Examples`);\n\tlines.push(\"\");\n\tlines.push(\"All usage examples from the package, aggregated for quick reference.\");\n\tlines.push(\"\");\n\n\tlet hasExamples = false;\n\n\tfor (const s of exported) {\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length === 0) continue;\n\n\t\thasExamples = true;\n\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tlines.push(`## \\`${s.name}${ext}\\``);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(`_${s.documentation.summary}_`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(`[View in API reference](./api-reference.md#${toAnchor(s.name)})`);\n\t\tlines.push(\"\");\n\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tif (!hasExamples) {\n\t\tlines.push(\"_No examples documented yet._\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// API reference renderer (full, scoped to one package)\n// ---------------------------------------------------------------------------\n\nconst KIND_ORDER: ReadonlyArray<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\nconst KIND_LABELS: Record<string, string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n};\n\n/** Render a single symbol section at the given heading depth. */\nfunction renderApiSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(`> **Deprecated**: ${symbol.documentation.deprecated}`);\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderApiSymbol(child, depth + 1));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/** Render a full API reference page for one package. */\nfunction renderApiReferencePage(packageName: string, symbols: ForgeSymbol[]): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const s of exported) {\n\t\tconst list = groups.get(s.kind) ?? [];\n\t\tlist.push(s);\n\t\tgroups.set(s.kind, list);\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${packageName} — API Reference`);\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${KIND_LABELS[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const s of group) {\n\t\t\tlines.push(renderApiSymbol(s, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Project-level pages\n// ---------------------------------------------------------------------------\n\n/** Render the root index page listing all packages. */\nfunction renderProjectIndexPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`# ${options.projectName}`);\n\tlines.push(\"\");\n\n\tif (options.projectDescription) {\n\t\tlines.push(options.projectDescription);\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Packages\");\n\tlines.push(\"\");\n\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst exported = symbols.filter(\n\t\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t\t);\n\t\tconst pkgDoc = symbols\n\t\t\t.map((s) => s.documentation?.tags?.packageDocumentation?.[0])\n\t\t\t.find(Boolean);\n\t\tconst summary = pkgDoc ?? `${exported.length} exported symbol(s).`;\n\t\tlines.push(`### [${pkgName}](./packages/${pkgName}/index.md)`);\n\t\tlines.push(\"\");\n\t\tlines.push(summary);\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/** Render a getting-started page using the first @example from any exported function. */\nfunction renderGettingStartedPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Find the first exported function with an example\n\tlet firstExample: { code: string; language: string } | undefined;\n\tlet firstSymbolName = \"\";\n\tlet firstPackageName = \"\";\n\n\touter: for (const [pkgName, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tfirstSymbolName = s.name;\n\t\t\t\tfirstPackageName = pkgName;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"# Getting Started\");\n\tlines.push(\"\");\n\tlines.push(`Welcome to **${options.projectName}**.`);\n\n\tif (options.projectDescription) {\n\t\tlines.push(\"\");\n\t\tlines.push(options.projectDescription);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"## Installation\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install ${options.projectName}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (firstExample) {\n\t\tlines.push(\"## Quick Start\");\n\t\tlines.push(\"\");\n\t\tlines.push(\n\t\t\t`The following example demonstrates \\`${firstSymbolName}\\` from the \\`${firstPackageName}\\` package.`,\n\t\t);\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Next Steps\");\n\tlines.push(\"\");\n\tlines.push(\"- Browse the [API Reference](./packages/)\");\n\tfor (const pkgName of symbolsByPackage.keys()) {\n\t\tlines.push(` - [${pkgName}](./packages/${pkgName}/api-reference.md)`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a full multi-page documentation site from symbols grouped by package.\n *\n * Produces an index page, a getting-started page, and per-package pages for\n * the API reference, types, functions, and examples.\n *\n * @param symbolsByPackage - Symbols grouped by package name.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Site generation options.\n * @returns An array of {@link DocPage} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateDocSite, groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, config.rootDir);\n * const pages = generateDocSite(grouped, config, { format: \"markdown\", projectName: \"my-project\" });\n * console.log(pages.length > 0); // true\n * ```\n * @public\n */\nexport function generateDocSite(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\tconfig: ForgeConfig,\n\toptions: SiteGeneratorOptions,\n): DocPage[] {\n\tconst ext = options.format === \"mdx\" ? \"mdx\" : \"md\";\n\tconst pages: DocPage[] = [];\n\n\t// Project index\n\tconst indexContent = renderProjectIndexPage(symbolsByPackage, options);\n\tconst indexFrontmatter = buildFrontmatterFields(\n\t\toptions.projectName,\n\t\toptions.projectDescription ?? \"\",\n\t\toptions.ssgTarget,\n\t\t1,\n\t);\n\tpages.push({\n\t\tpath: `index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(indexFrontmatter)}${indexContent.trimEnd()}\\n`,\n\t\tfrontmatter: indexFrontmatter,\n\t});\n\n\t// Getting started\n\tconst gettingStartedContent = renderGettingStartedPage(symbolsByPackage, options);\n\tconst gettingStartedFrontmatter = buildFrontmatterFields(\n\t\t\"Getting Started\",\n\t\t`Quick start guide for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t2,\n\t);\n\tpages.push({\n\t\tpath: `getting-started.${ext}`,\n\t\tcontent: `${serializeFrontmatter(gettingStartedFrontmatter)}${gettingStartedContent.trimEnd()}\\n`,\n\t\tfrontmatter: gettingStartedFrontmatter,\n\t});\n\n\t// Per-package pages\n\tlet pkgPosition = 1;\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst pkgBase = `packages/${pkgName}`;\n\n\t\t// Package index\n\t\tconst overviewContent = renderOverviewPage(pkgName, symbols, options);\n\t\tconst overviewFrontmatter = buildFrontmatterFields(\n\t\t\tpkgName,\n\t\t\t`${pkgName} package overview`,\n\t\t\toptions.ssgTarget,\n\t\t\tpkgPosition,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(overviewFrontmatter)}${overviewContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: overviewFrontmatter,\n\t\t});\n\n\t\t// API reference\n\t\tconst apiContent = renderApiReferencePage(pkgName, symbols);\n\t\tconst apiFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — API Reference`,\n\t\t\t`Full API reference for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api-reference.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(apiFrontmatter)}${apiContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: apiFrontmatter,\n\t\t});\n\n\t\t// Types page\n\t\tconst typesContent = renderTypesPage(pkgName, symbols, options);\n\t\tconst typesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Types`,\n\t\t\t`Type contracts for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/types.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(typesFrontmatter)}${typesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: typesFrontmatter,\n\t\t});\n\n\t\t// Functions page\n\t\tconst functionsContent = renderFunctionsPage(pkgName, symbols, options);\n\t\tconst functionsFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Functions`,\n\t\t\t`Functions and classes for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/functions.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(functionsFrontmatter)}${functionsContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: functionsFrontmatter,\n\t\t});\n\n\t\t// Examples page\n\t\tconst examplesContent = renderExamplesPage(pkgName, symbols, options);\n\t\tconst examplesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Examples`,\n\t\t\t`Usage examples for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/examples.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(examplesFrontmatter)}${examplesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: examplesFrontmatter,\n\t\t});\n\n\t\tpkgPosition++;\n\t}\n\n\t// Suppress unused variable warning — config is available for future use\n\tvoid config;\n\n\treturn pages;\n}\n","import type { DocPage } from \"./site-generator.js\";\n\n/**\n * A single generated SSG configuration file.\n * @public\n */\nexport interface SSGConfigFile {\n\t/** Relative path from outDir (e.g., \"mint.json\", \"_meta.json\") */\n\tpath: string;\n\t/** File content */\n\tcontent: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/**\n * Partition pages into top-level pages and package pages.\n *\n * Top-level pages are those not nested under `packages/`.\n * Package pages are grouped by their package directory segment.\n */\nfunction partitionPages(pages: DocPage[]): {\n\ttopLevel: string[];\n\tbyPackage: Map<string, string[]>;\n} {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\treturn { topLevel, byPackage };\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n// ---------------------------------------------------------------------------\n// Mintlify\n// ---------------------------------------------------------------------------\n\ninterface MintlifyNavigationPage {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavigationPage>;\n}\n\ninterface MintlifyConfig {\n\t$schema: string;\n\tname: string;\n\tnavigation: MintlifyNavigationPage[];\n}\n\nfunction generateMintlifyConfig(pages: DocPage[], projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst navigation: MintlifyNavigationPage[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tnavigation.push({\n\t\t\tgroup: \"Getting Started\",\n\t\t\tpages: topLevel,\n\t\t});\n\t}\n\n\tif (byPackage.size > 0) {\n\t\tconst packageGroups: MintlifyNavigationPage[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\tpackageGroups.push({\n\t\t\t\tgroup: pkgName,\n\t\t\t\tpages: slugs,\n\t\t\t});\n\t\t}\n\t\tnavigation.push({\n\t\t\tgroup: \"Packages\",\n\t\t\tpages: packageGroups as unknown as Array<string | MintlifyNavigationPage>,\n\t\t});\n\t}\n\n\tconst config: MintlifyConfig = {\n\t\t$schema: \"https://mintlify.com/schema.json\",\n\t\tname: projectName,\n\t\tnavigation,\n\t};\n\n\treturn {\n\t\tpath: \"mint.json\",\n\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Docusaurus\n// ---------------------------------------------------------------------------\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\nfunction generateDocusaurusConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\tconst content =\n\t\t`/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\\n` +\n\t\t`const sidebars = ${json};\\n` +\n\t\t`module.exports = sidebars;\\n`;\n\n\treturn {\n\t\tpath: \"sidebars.js\",\n\t\tcontent,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Nextra\n// ---------------------------------------------------------------------------\n\nfunction generateNextraConfigs(pages: DocPage[], _projectName: string): SSGConfigFile[] {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst files: SSGConfigFile[] = [];\n\n\t// Root _meta.json\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\n\tfiles.push({\n\t\tpath: \"_meta.json\",\n\t\tcontent: `${JSON.stringify(rootMeta, null, 2)}\\n`,\n\t});\n\n\t// Per-package _meta.json files\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\t// slug is e.g. \"packages/core/api-reference\"\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\n\t\t// packages/<pkgName>/_meta.json\n\t\tfiles.push({\n\t\t\tpath: `packages/${pkgName}/_meta.json`,\n\t\t\tcontent: `${JSON.stringify(pkgMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\t// If there are multiple packages, also write a packages/_meta.json\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"packages/_meta.json\",\n\t\t\tcontent: `${JSON.stringify(packagesMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\treturn files;\n}\n\n// ---------------------------------------------------------------------------\n// VitePress\n// ---------------------------------------------------------------------------\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\nfunction generateVitePressConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn {\n\t\tpath: \".vitepress/sidebar.json\",\n\t\tcontent: `${JSON.stringify(sidebar, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Public entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generate navigation configuration file(s) for the given SSG target.\n *\n * Returns one file for most targets, but multiple files for Nextra (which\n * uses per-directory `_meta.json` files).\n *\n * @param pages - The {@link DocPage} array produced by `generateDocSite`.\n * @param target - The SSG target.\n * @param projectName - The project name (used in config metadata).\n * @returns An array of {@link SSGConfigFile} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateSSGConfigs } from \"@forge-ts/gen\";\n * const configs = generateSSGConfigs(pages, \"vitepress\", \"my-project\");\n * console.log(configs[0].path); // \".vitepress/sidebar.json\"\n * ```\n * @public\n */\nexport function generateSSGConfigs(\n\tpages: DocPage[],\n\ttarget: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\",\n\tprojectName: string,\n): SSGConfigFile[] {\n\tswitch (target) {\n\t\tcase \"mintlify\":\n\t\t\treturn [generateMintlifyConfig(pages, projectName)];\n\t\tcase \"docusaurus\":\n\t\t\treturn [generateDocusaurusConfig(pages, projectName)];\n\t\tcase \"nextra\":\n\t\t\treturn generateNextraConfigs(pages, projectName);\n\t\tcase \"vitepress\":\n\t\t\treturn [generateVitePressConfig(pages, projectName)];\n\t\tdefault: {\n\t\t\t// Exhaustiveness guard — TypeScript will catch unhandled variants at\n\t\t\t// compile time, but we want a safe runtime fallback too.\n\t\t\tconst _exhaustive: never = target;\n\t\t\tvoid _exhaustive;\n\t\t\treturn [];\n\t\t}\n\t}\n}\n","/**\n * @forge-ts/gen — Markdown/MDX documentation and llms.txt generator.\n *\n * Generates human- and machine-readable documentation from the forge-ts\n * symbol graph, with optional README injection.\n *\n * @packageDocumentation\n * @public\n */\n\nexport * from \"./adapters/index.js\";\nexport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nexport {\n\tgenerateMarkdown,\n\ttype MarkdownOptions,\n} from \"./markdown.js\";\nexport { type ReadmeSyncOptions, syncReadme } from \"./readme-sync.js\";\nexport {\n\ttype DocPage,\n\tgenerateDocSite,\n\tgroupSymbolsByPackage,\n\ttype SiteGeneratorOptions,\n} from \"./site-generator.js\";\nexport { generateSSGConfigs, type SSGConfigFile } from \"./ssg-config.js\";\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { createWalker, type ForgeConfig, type ForgeResult } from \"@forge-ts/core\";\nimport { DEFAULT_TARGET, getAdapter } from \"./adapters/index.js\";\nimport type { AdapterContext } from \"./adapters/types.js\";\nimport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nimport { generateMarkdown } from \"./markdown.js\";\nimport { syncReadme } from \"./readme-sync.js\";\nimport { generateDocSite, groupSymbolsByPackage } from \"./site-generator.js\";\n\n/**\n * Runs the full generation pipeline: walk → render → write.\n *\n * @param config - The resolved {@link ForgeConfig} for the project.\n * @returns A {@link ForgeResult} describing the outcome.\n * @example\n * ```typescript\n * import { generate } from \"@forge-ts/gen\";\n * const result = await generate(config);\n * console.log(result.success); // true if all files were written\n * ```\n * @public\n * @packageDocumentation\n */\nexport async function generate(config: ForgeConfig): Promise<ForgeResult> {\n\tconst start = Date.now();\n\n\tconst walker = createWalker(config);\n\tconst symbols = walker.walk();\n\n\tawait mkdir(config.outDir, { recursive: true });\n\n\t// Legacy flat output — kept for backward compatibility\n\tfor (const format of config.gen.formats) {\n\t\tconst content = generateMarkdown(symbols, config, {\n\t\t\tmdx: format === \"mdx\",\n\t\t});\n\t\tconst ext = format === \"mdx\" ? \"mdx\" : \"md\";\n\t\tawait writeFile(join(config.outDir, `api-reference.${ext}`), content, \"utf8\");\n\t}\n\n\t// Multi-page site output — writes directly to outDir via adapters\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst symbolsByPackage = groupSymbolsByPackage(symbols, config.rootDir);\n\n\tconst target = config.gen.ssgTarget ?? DEFAULT_TARGET;\n\tconst adapter = getAdapter(target);\n\n\tfor (const format of config.gen.formats) {\n\t\tconst pages = generateDocSite(symbolsByPackage, config, {\n\t\t\tformat,\n\t\t\tssgTarget: config.gen.ssgTarget,\n\t\t\tprojectName,\n\t\t});\n\n\t\tconst adapterContext: AdapterContext = {\n\t\t\tconfig,\n\t\t\tprojectName,\n\t\t\tpages,\n\t\t\tsymbols,\n\t\t\toutDir: config.outDir,\n\t\t};\n\n\t\t// Transform pages through the adapter (adds correct frontmatter and extensions)\n\t\tconst transformedPages = adapter.transformPages(pages, adapterContext);\n\t\tfor (const file of transformedPages) {\n\t\t\tconst filePath = join(config.outDir, file.path);\n\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t}\n\n\t\t// Generate platform config files only when ssgTarget is explicitly set\n\t\tif (config.gen.ssgTarget) {\n\t\t\tconst configFiles = adapter.generateConfig(adapterContext);\n\t\t\tfor (const file of configFiles) {\n\t\t\t\tconst filePath = join(config.outDir, file.path);\n\t\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.llmsTxt) {\n\t\tconst llms = generateLlmsTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms.txt\"), llms, \"utf8\");\n\n\t\tconst llmsFull = generateLlmsFullTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms-full.txt\"), llmsFull, \"utf8\");\n\t}\n\n\tif (config.gen.readmeSync) {\n\t\tawait syncReadme(join(config.rootDir, \"README.md\"), symbols);\n\t}\n\n\treturn {\n\t\tsuccess: true,\n\t\tsymbols,\n\t\terrors: [],\n\t\twarnings: [],\n\t\tduration: Date.now() - start,\n\t};\n}\n"],"mappings":"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","names":["existsSync","join","styleGuide","pageSlug","existsSync","join","styleGuide","pageSlug","buildPackageJson","existsSync","join","styleGuide","pageSlug","slugToLabel","buildPackageJson","existsSync","join","relative","toAnchor","KIND_ORDER","KIND_LABELS","pageSlug","slugToLabel","writeFile","writeFile"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge-ts/gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Markdown/MDX and llms.txt generator for forge-ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@forge-ts/core": "0.
|
|
27
|
+
"@forge-ts/core": "0.5.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"tsup": "^8.3.5",
|