@clarify-labs/cli 0.5.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/output/cli/commands/init.d.ts +1 -1
- package/output/cli/spawn.d.ts +6 -0
- package/output/cli.cjs +63 -7
- package/output/cli.cjs.map +1 -1
- package/output/cli.js +63 -7
- package/output/cli.js.map +1 -1
- package/output/index.cjs +1 -1
- package/output/index.js +1 -1
- package/output/{plugin-PEEknlAO.js → plugin-D6ChRRnW.js} +9 -2
- package/output/plugin-D6ChRRnW.js.map +1 -0
- package/output/{plugin-DnD0L83F.cjs → plugin-knx05Xgp.cjs} +9 -2
- package/output/plugin-knx05Xgp.cjs.map +1 -0
- package/package.json +3 -3
- package/output/plugin-DnD0L83F.cjs.map +0 -1
- package/output/plugin-PEEknlAO.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-D6ChRRnW.js","names":[],"sources":["../source/core/utils.ts","../source/parsers/mdx.ts","../source/parsers/frontmatter.ts","../source/parsers/routes.ts","../source/plugins/content-artifacts/artifacts.ts","../source/plugins/content-artifacts/server.ts","../source/plugins/content-artifacts/index.ts","../source/plugins/html-shell/index.ts","../source/plugins/openapi/parser.ts","../source/plugins/openapi/virtual-modules.ts","../source/plugins/openapi/index.ts","../source/core/config-schema.ts","../source/core/theme.ts","../source/core/config.ts","../source/core/hooks.ts","../source/core/options.ts","../source/core/runtime-deps.ts","../source/core/ssg.ts","../source/core/user-config.ts","../source/core/virtual-modules.ts","../source/core/plugin.ts"],"sourcesContent":["export function escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n","import GithubSlugger from 'github-slugger'\nimport { toString } from 'mdast-util-to-string'\nimport shiki, { type Highlighter } from 'shiki'\nimport { visit } from 'unist-util-visit'\n\nimport { markdownRemarkPlugins } from '@clarify-labs/renderer'\n\nimport { escapeHtml } from '../core/utils.js'\n\ntype HastNode = {\n type: string\n tagName?: string\n value?: string\n properties?: Record<string, unknown>\n children?: HastNode[]\n}\n\ntype HastParent = HastNode & {\n children: HastNode[]\n}\n\ntype ShikiRenderElementArgs = {\n children: string\n}\n\nfunction getLanguage(className: unknown): string {\n const classes = Array.isArray(className) ? className : typeof className === 'string' ? className.split(/\\s+/) : []\n const languageClass = classes.find((item): item is string => typeof item === 'string' && item.startsWith('language-'))\n return languageClass?.replace(/^language-/, '') || 'txt'\n}\n\nfunction getTextContent(node: HastNode | undefined): string {\n if (!node) return ''\n if (typeof node.value === 'string') return node.value\n return node.children?.map(getTextContent).join('') ?? ''\n}\n\nfunction renderPlainCode(code: string): string {\n return code\n .split('\\n')\n .map(line => `<span>${escapeHtml(line)}</span>`)\n .join('\\n')\n}\n\nlet highlighter: Highlighter | undefined\n\nasync function getHighlighter(): Promise<Highlighter> {\n highlighter = highlighter ?? await shiki.getHighlighter({ theme: 'css-variables' })\n return highlighter\n}\n\nexport function rehypeParseCodeBlocks() {\n return (tree: HastNode) => {\n visit(tree, 'element', (node: HastNode, _nodeIndex: number | undefined, parentNode: HastParent | undefined) => {\n if (node.tagName !== 'code' || !parentNode) return\n parentNode.properties = parentNode.properties ?? {}\n node.properties = node.properties ?? {}\n const language = getLanguage(node.properties.className)\n parentNode.properties.language = language\n node.properties.language = language\n })\n }\n}\n\nexport function rehypeShiki() {\n return async (tree: HastNode) => {\n const shikiHighlighter = await getHighlighter()\n\n visit(tree, 'element', (node: HastNode) => {\n if (node.tagName !== 'pre') return\n const codeNode = node.children?.[0]\n if (codeNode?.tagName !== 'code') return\n\n node.properties = node.properties ?? {}\n codeNode.properties = codeNode.properties ?? {}\n\n const code = getTextContent(codeNode)\n const language = typeof node.properties.language === 'string' ? node.properties.language : getLanguage(codeNode.properties.className)\n node.properties.code = code\n codeNode.properties.code = code\n codeNode.properties.language = language\n\n let highlighted = renderPlainCode(code)\n\n if (language && language !== 'txt') {\n try {\n const tokens = shikiHighlighter.codeToThemedTokens(code, language)\n highlighted = shiki.renderToHtml(tokens, {\n elements: {\n pre: ({ children }: ShikiRenderElementArgs) => children,\n code: ({ children }: ShikiRenderElementArgs) => children,\n line: ({ children }: ShikiRenderElementArgs) => `<span>${children}</span>`,\n },\n })\n } catch {\n highlighted = renderPlainCode(code)\n }\n }\n\n codeNode.children = [{ type: 'text', value: highlighted }]\n })\n }\n}\n\nexport function rehypeSlugSections() {\n return (tree: HastNode) => {\n const slugger = new GithubSlugger()\n\n visit(tree, 'element', (node: HastNode) => {\n if (node.tagName !== 'h2' && node.tagName !== 'h3') return\n\n node.properties = node.properties ?? {}\n if (node.properties.id) return\n\n node.properties.id = slugger.slug(toString(node))\n })\n }\n}\n\nexport const remarkPlugins = markdownRemarkPlugins\nexport const rehypePlugins = [rehypeSlugSections, rehypeParseCodeBlocks, rehypeShiki]\n","import matter from 'gray-matter'\n\nexport type ParsedFrontmatter = {\n frontmatter: Record<string, unknown>\n content: string\n}\n\n/**\n * 在内容入口统一解析 MDX frontmatter,并返回可供后续流程复用的标准化正文。\n */\nexport function parseFrontmatter(content: string): ParsedFrontmatter {\n const parsed = matter(content)\n return {\n frontmatter: parsed.data,\n content: parsed.content.replace(/^\\r?\\n/, ''),\n }\n}\n\n/**\n * 从 MDX 文件内容中提取 frontmatter。\n * 使用 gray-matter 支持 YAML frontmatter 的标准语法和类型解析。\n */\nexport function extractFrontmatter(content: string): Record<string, unknown> {\n return parseFrontmatter(content).frontmatter\n}\n\n/**\n * 移除 MDX 文件开头的 YAML frontmatter,保留页面正文。\n */\nexport function stripFrontmatter(content: string): string {\n return parseFrontmatter(content).content\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\n\nimport GithubSlugger from 'github-slugger'\nimport { toString } from 'mdast-util-to-string'\nimport { remark } from 'remark'\nimport { visit } from 'unist-util-visit'\n\nimport type { ContentRoute, ContentSection, ClarifyNavigationNode, ClarifyPagesConfig, ClarifyPagesGroup, ClarifyPagesItem, ClarifyLocalizedText, ClarifyTabsConfig, LocalizedNavigation, LocalizedTabbedNavigation, ResolvedClarifyI18nConfig, TabbedNavigation } from '../types.js'\n\nimport { parseFrontmatter } from './frontmatter.js'\n\nfunction kebabToTitle(str: string): string {\n return str\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\nfunction parseMdxTree(content: string) {\n return remark.parse(content)\n}\n\n/** 从内容中提取第一个 H1 标题 */\nfunction extractH1(content: string): string {\n const tree = parseMdxTree(content)\n let title = ''\n visit(tree, 'heading', (node) => {\n if (!title && node.depth === 1) {\n title = toString(node)\n }\n })\n return title\n}\n\n/** 从 MDX/Markdown 内容中提取 H2/H3 章节 */\nexport function extractMdxSections(content: string): ContentSection[] {\n const sections: ContentSection[] = []\n const slugger = new GithubSlugger()\n const tree = parseMdxTree(content)\n visit(tree, 'heading', (node) => {\n if (node.depth !== 2 && node.depth !== 3) return\n const title = toString(node)\n sections.push({ id: slugger.slug(title), title, level: node.depth })\n })\n return sections\n}\n\nfunction navigationSections(sections: ContentSection[]) {\n return sections.map(s => ({ id: s.id, title: s.title, badge: s.badge, tags: s.tags }))\n}\n\nfunction normalizePath(path: string): string {\n const clean = '/' + path.replace(/^\\/+|\\/+$/g, '')\n return clean === '/' ? '/' : clean.replace(/\\/+/g, '/')\n}\n\nexport function basePathFromRef(ref: string): string {\n const withoutExtension = ref.replace(/\\.mdx?$/, '').replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n return normalizePath(withoutExtension === 'index' ? '/' : withoutExtension.replace(/\\/index$/, ''))\n}\n\nexport function routePathFromRef(ref: string): string {\n return basePathFromRef(ref)\n}\n\nexport function virtualModuleIdFromRef(ref: string): string {\n return 'virtual:clarify-page/' + ref\n .replace(/\\.mdx?$/, '')\n .replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n .replace(/\\/+/g, '/')\n}\n\nexport function localizedRoutePath(basePath: string, locale: string, i18n: ResolvedClarifyI18nConfig): string {\n const normalizedBasePath = normalizePath(basePath)\n if (locale === i18n.defaultLocale) return normalizedBasePath\n const prefix = normalizePath(locale)\n return normalizedBasePath === '/' ? prefix : normalizePath(`${prefix}${normalizedBasePath}`)\n}\n\nexport function resolveLocalizedText(text: ClarifyLocalizedText | undefined, locale: string, fallbackLocale?: string): string | undefined {\n if (typeof text === 'string' || text === undefined) return text\n return text[locale] ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0]\n}\n\nexport function findContentRoutes(dir: string, base: string = dir): ContentRoute[] {\n const routes: ContentRoute[] = []\n if (!existsSync(dir)) return routes\n\n const entries = readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = join(dir, entry.name)\n if (entry.isDirectory()) {\n routes.push(...findContentRoutes(fullPath, base))\n } else if (entry.isFile() && /\\.mdx?$/.test(entry.name)) {\n const relativePath = relative(base, fullPath)\n const pathParts = relativePath.replace(/\\.mdx?$/, '').split('/')\n const path = '/' + pathParts.map(p => p === 'index' ? '' : p).filter(Boolean).join('/')\n const cleanPath = path.replace(/\\/+/g, '/').replace(/\\/$/, '') || '/'\n\n const source = readFileSync(fullPath, 'utf-8')\n const { frontmatter, content } = parseFrontmatter(source)\n\n let title = typeof frontmatter.title === 'string' ? frontmatter.title : ''\n if (!title) {\n const lastPart = pathParts[pathParts.length - 1] ?? ''\n const stem = lastPart === 'index'\n ? (pathParts.length >= 2 ? pathParts[pathParts.length - 2]! : extractH1(content))\n : lastPart\n title = kebabToTitle(stem) || 'Untitled'\n }\n\n routes.push({\n path: cleanPath,\n basePath: cleanPath,\n filePath: fullPath,\n virtualModuleId: 'virtual:clarify-page/' + relativePath.replace(/\\.mdx?$/, '').replace(/\\/+/g, '/'),\n title,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n keywords: frontmatterKeywords(frontmatter),\n kind: 'mdx',\n frontmatter,\n content,\n sections: extractMdxSections(content),\n })\n }\n }\n return routes\n}\n\nfunction virtualModuleIdForLocalizedRoute(contentRoot: string, filePath: string): string {\n return 'virtual:clarify-page/' + relative(contentRoot, filePath)\n .replace(/\\.mdx?$/, '')\n .replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n .replace(/\\/+/g, '/')\n}\n\nfunction frontmatterKeywords(frontmatter: Record<string, unknown>): string[] | undefined {\n const value = frontmatter.keywords ?? frontmatter.keyword ?? frontmatter.tags\n const keywords = Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : typeof value === 'string'\n ? value.split(',').map(keyword => keyword.trim()).filter(Boolean)\n : []\n\n return keywords.length > 0 ? keywords : undefined\n}\n\nfunction withAlternates(route: ContentRoute, routes: ContentRoute[], i18n: ResolvedClarifyI18nConfig): ContentRoute {\n const basePath = route.basePath ?? route.path\n const routeByLocaleAndBase = new Map(routes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const alternates = Object.fromEntries(\n i18n.locales.flatMap((locale) => {\n const alternate = routeByLocaleAndBase.get(`${locale.code}:${basePath}`)\n return alternate ? [[locale.code, alternate.path]] : []\n })\n )\n return { ...route, alternates }\n}\n\nexport function findLocalizedContentRoutes(contentRoot: string, i18n?: ResolvedClarifyI18nConfig): ContentRoute[] {\n if (!i18n) return findContentRoutes(contentRoot)\n\n const localizedRoutes: ContentRoute[] = []\n for (const locale of i18n.locales) {\n const localeRoot = join(contentRoot, locale.code)\n const discovered = findContentRoutes(localeRoot)\n for (const route of discovered) {\n const basePath = route.basePath ?? route.path\n localizedRoutes.push({\n ...route,\n path: localizedRoutePath(basePath, locale.code, i18n),\n basePath,\n locale: locale.code,\n virtualModuleId: virtualModuleIdForLocalizedRoute(contentRoot, route.filePath),\n })\n }\n }\n\n if (i18n.missing === 'fallback') {\n const routeByLocaleAndBase = new Map(localizedRoutes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const defaultRoutes = localizedRoutes.filter(route => route.locale === i18n.defaultLocale)\n for (const sourceRoute of defaultRoutes) {\n const basePath = sourceRoute.basePath ?? sourceRoute.path\n for (const locale of i18n.locales) {\n const key = `${locale.code}:${basePath}`\n if (routeByLocaleAndBase.has(key)) continue\n localizedRoutes.push({\n ...sourceRoute,\n path: localizedRoutePath(basePath, locale.code, i18n),\n locale: locale.code,\n isFallback: true,\n })\n }\n }\n }\n\n return localizedRoutes.map(route => withAlternates(route, localizedRoutes, i18n))\n}\n\nexport function buildNavigation(routes: ContentRoute[]): ClarifyNavigationNode[] {\n const root: ClarifyNavigationNode[] = []\n\n for (const route of routes) {\n if (route.path === '/') continue // 首页不放入侧边栏\n\n const parts = route.path.replace(/^\\//, '').split('/')\n let current = root\n\n for (let i = 0; i < parts.length; i++) {\n const pathSoFar = '/' + parts.slice(0, i + 1).join('/')\n let node = current.find(n => n.path === pathSoFar)\n if (!node) {\n node = { path: pathSoFar, title: i === parts.length - 1 ? route.title : kebabToTitle(parts[i]), children: [] }\n current.push(node)\n }\n if (i === parts.length - 1 && route.sections) {\n node.sections = navigationSections(route.sections)\n }\n if (i < parts.length - 1) {\n node.children = node.children ?? []\n current = node.children\n }\n }\n }\n\n return root\n}\n\nfunction resolvePageItem(\n item: ClarifyPagesItem\n): { pageRef?: string; openapiRef?: string; redirect?: string; title?: ClarifyLocalizedText; icon?: string } {\n if (typeof item === 'string') return { pageRef: item }\n if ('openapi' in item) return { openapiRef: item.openapi, title: item.title, icon: item.icon }\n return { pageRef: item.page, redirect: item.redirect, title: item.title, icon: item.icon }\n}\n\nfunction firstNavigationPath(nodes: ClarifyNavigationNode[]): string {\n for (const node of nodes) {\n if (node.path) return node.path\n const childPath = node.children ? firstNavigationPath(node.children) : undefined\n if (childPath) return childPath\n }\n return '/'\n}\n\nfunction buildNavigationFromPagesConfig(routes: ContentRoute[], config?: ClarifyPagesConfig): ClarifyNavigationNode[] {\n if (!config || config === 'FileTree') return buildNavigation(routes)\n return buildNavigationFromConfig(routes, config)\n}\n\nexport function buildNavigationFromTabsConfig(routes: ContentRoute[], tabs: ClarifyTabsConfig): TabbedNavigation {\n return {\n tabs: tabs.map(tab => {\n const children = buildNavigationFromPagesConfig(routes, tab.pages)\n return {\n type: 'tab',\n path: firstNavigationPath(children),\n title: resolveLocalizedText(tab.tab, '', '') ?? '',\n icon: tab.icon,\n children,\n }\n }),\n }\n}\n\nexport function buildNavigationFromConfig(routes: ContentRoute[], config: ClarifyPagesGroup[]): ClarifyNavigationNode[] {\n const routeMap = new Map(routes.map(r => [r.path, r]))\n\n return config.map(group => {\n const children = group.pages.map(item => {\n const { pageRef, openapiRef, redirect, title, icon } = resolvePageItem(item)\n\n if (openapiRef) {\n const path = '/' + openapiRef.replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n const route = routeMap.get(path)\n return {\n path,\n title: resolveLocalizedText(title, '', '') ?? route?.title ?? kebabToTitle(path.split('/').pop() ?? openapiRef),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n }\n\n const ref = pageRef ?? ''\n const path = ref === 'index' ? '/' : '/' + ref\n const route = routeMap.get(path)\n return {\n path: redirect ? redirect : path,\n title: resolveLocalizedText(title, '', '') ?? route?.title ?? kebabToTitle(path.split('/').pop() ?? ref),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n })\n\n return {\n path: children[0]?.path ?? '/',\n title: resolveLocalizedText(group.group, '', '') ?? '',\n icon: group.icon,\n children,\n }\n })\n}\n\nfunction localizeNavigationPaths(nodes: ClarifyNavigationNode[], locale: string, i18n: ResolvedClarifyI18nConfig): ClarifyNavigationNode[] {\n return nodes.map(node => ({\n ...node,\n path: localizedRoutePath(node.path, locale, i18n),\n children: node.children ? localizeNavigationPaths(node.children, locale, i18n) : undefined,\n }))\n}\n\nexport function buildLocalizedNavigation(routes: ContentRoute[], config: ClarifyPagesConfig | undefined, i18n?: ResolvedClarifyI18nConfig): LocalizedNavigation | undefined {\n if (!i18n) return undefined\n\n const result: LocalizedNavigation = {}\n for (const locale of i18n.locales) {\n const localeRoutes = routes.filter(route => route.locale === locale.code)\n result[locale.code] = buildLocalizedNavigationForLocale(localeRoutes, config, locale.code, i18n)\n }\n\n return result\n}\n\nfunction buildLocalizedNavigationForLocale(routes: ContentRoute[], config: ClarifyPagesConfig | undefined, locale: string, i18n: ResolvedClarifyI18nConfig): ClarifyNavigationNode[] {\n if (!config || config === 'FileTree') {\n const baseNavigation = buildNavigation(routes.map(route => ({ ...route, path: route.basePath ?? route.path })))\n return localizeNavigationPaths(baseNavigation, locale, i18n)\n }\n\n const routeMap = new Map(routes.map(route => [route.basePath ?? route.path, route]))\n return config.map(group => {\n const children = group.pages.map(item => {\n const { pageRef, openapiRef, redirect, title, icon } = resolvePageItem(item)\n const ref = openapiRef ?? pageRef ?? ''\n const basePath = basePathFromRef(ref)\n const route = routeMap.get(basePath)\n const path = route?.path ?? localizedRoutePath(basePath, locale, i18n)\n const redirectPath = redirect ? localizedRoutePath(basePathFromRef(redirect), locale, i18n) : undefined\n\n return {\n path: redirectPath ?? path,\n title: resolveLocalizedText(title, locale, i18n.defaultLocale) ?? route?.title ?? kebabToTitle(basePath.split('/').pop() ?? ref),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n })\n\n return {\n path: children[0]?.path ?? localizedRoutePath('/', locale, i18n),\n title: resolveLocalizedText(group.group, locale, i18n.defaultLocale) ?? '',\n icon: group.icon,\n children,\n }\n })\n}\n\nexport function buildLocalizedNavigationFromTabsConfig(routes: ContentRoute[], tabs: ClarifyTabsConfig, i18n?: ResolvedClarifyI18nConfig): LocalizedTabbedNavigation | undefined {\n if (!i18n) return undefined\n\n const result: LocalizedTabbedNavigation = {}\n for (const locale of i18n.locales) {\n const localeRoutes = routes.filter(route => route.locale === locale.code)\n result[locale.code] = {\n tabs: tabs.map(tab => {\n const children = buildLocalizedNavigationForLocale(localeRoutes, tab.pages, locale.code, i18n)\n return {\n type: 'tab',\n path: firstNavigationPath(children),\n title: resolveLocalizedText(tab.tab, locale.code, i18n.defaultLocale) ?? '',\n icon: tab.icon,\n children,\n }\n }),\n }\n }\n\n return result\n}\n","import { mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, extname, join } from 'node:path'\n\nimport type { ContentRoute, ResolvedProjectConfig } from '../../types.js'\n\nconst UTF8_SIGNATURE = '\\uFEFF'\n\nfunction normalizeBasePath(basePath: string): string {\n if (!basePath || basePath === '/') return ''\n return '/' + basePath.replace(/^\\/+|\\/+$/g, '')\n}\n\nfunction containsNonAscii(content: string): boolean {\n return [...content].some(character => character.codePointAt(0)! > 0x7F)\n}\n\nfunction withUtf8Signature(content: string): string {\n if (!containsNonAscii(content) || content.startsWith(UTF8_SIGNATURE)) return content\n return `${UTF8_SIGNATURE}${content}`\n}\n\nfunction shouldUseUtf8Signature(route: ContentRoute): boolean {\n if (route.kind === 'mdx') return true\n return /\\.ya?ml$/i.test(route.contentArtifactUrl ?? '')\n}\n\nexport function routeToMarkdownArtifactUrl(routePath: string): string {\n const normalizedPath = routePath === '/' ? '/index' : routePath.replace(/\\/$/, '')\n return `${normalizedPath}.md`\n}\n\nexport function routeToOpenAPIArtifactUrl(routePath: string, filePath: string): string {\n const extension = extname(filePath).toLowerCase() || '.json'\n const normalizedPath = routePath === '/' ? '/index' : routePath.replace(/\\/$/, '')\n return `${normalizedPath}.openapi${extension}`\n}\n\nexport function attachContentArtifactUrls(routes: ContentRoute[]): void {\n for (const route of routes) {\n route.contentArtifactUrl = route.kind === 'openapi'\n ? routeToOpenAPIArtifactUrl(route.path, route.filePath)\n : routeToMarkdownArtifactUrl(route.path)\n }\n}\n\nexport function readRouteContent(route: ContentRoute): string {\n if (route.content !== undefined) return route.content\n throw new Error(`Route content is missing from route context: ${route.filePath}`)\n}\n\nexport function readRouteArtifactContent(route: ContentRoute): string {\n const content = readRouteContent(route)\n return shouldUseUtf8Signature(route) ? withUtf8Signature(content) : content\n}\n\nexport function writeContentArtifactFiles(routes: ContentRoute[], outputDirectory: string): void {\n for (const route of routes) {\n if (!route.contentArtifactUrl) continue\n\n const outFile = join(outputDirectory, route.contentArtifactUrl.replace(/^\\//, ''))\n mkdirSync(dirname(outFile), { recursive: true })\n writeFileSync(outFile, readRouteArtifactContent(route), 'utf-8')\n }\n}\n\nexport function createLlmsTxt(routes: ContentRoute[], projectConfig: ResolvedProjectConfig): string {\n const basePath = normalizeBasePath(projectConfig.routePrefix)\n const lines = [\n `# ${projectConfig.title}`,\n '',\n ]\n\n if (projectConfig.description) {\n lines.push(`> ${projectConfig.description}`, '')\n }\n\n lines.push('## Docs')\n for (const route of routes.filter(route => route.kind === 'mdx')) {\n if (!route.contentArtifactUrl) continue\n lines.push(`- [${route.title}](${basePath}${route.contentArtifactUrl})`)\n }\n\n const openApiRoutes = routes.filter(route => route.kind === 'openapi')\n if (openApiRoutes.length > 0) {\n lines.push('', '## OpenAPI')\n for (const route of openApiRoutes) {\n if (!route.contentArtifactUrl) continue\n lines.push(`- [${route.title}](${basePath}${route.contentArtifactUrl})`)\n }\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport function createLlmsTxtArtifact(routes: ContentRoute[], projectConfig: ResolvedProjectConfig): string {\n return withUtf8Signature(createLlmsTxt(routes, projectConfig))\n}\n\nexport function writeLlmsTxt(routes: ContentRoute[], projectConfig: ResolvedProjectConfig, outputDirectory: string): void {\n mkdirSync(outputDirectory, { recursive: true })\n writeFileSync(join(outputDirectory, 'llms.txt'), createLlmsTxtArtifact(routes, projectConfig), 'utf-8')\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\n\nimport type { ContentRoute, ResolvedProjectConfig } from '../../types.js'\n\nimport { createLlmsTxtArtifact, readRouteArtifactContent } from './artifacts.js'\n\nfunction normalizeRoutePrefix(routePrefix: string): string {\n if (!routePrefix || routePrefix === '/') return ''\n return `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}`\n}\n\nexport function resolveContentArtifactPath(url: string | undefined, projectConfig: ResolvedProjectConfig): string {\n const requestPath = url?.split('?')[0] ?? ''\n const basePath = normalizeRoutePrefix(projectConfig.routePrefix)\n return basePath && requestPath.startsWith(basePath)\n ? requestPath.slice(basePath.length) || '/'\n : requestPath\n}\n\nexport function resolveContentArtifactType(route: ContentRoute): string {\n if (route.kind === 'openapi' && /\\.ya?ml$/i.test(route.contentArtifactUrl ?? '')) {\n return 'text/yaml; charset=utf-8'\n }\n\n return route.kind === 'openapi'\n ? 'application/json; charset=utf-8'\n : 'text/markdown; charset=utf-8'\n}\n\nexport function serveContentArtifacts(req: IncomingMessage, res: ServerResponse, projectConfig: ResolvedProjectConfig, routes: ContentRoute[]): boolean {\n const contentPath = resolveContentArtifactPath(req.url, projectConfig)\n\n if (contentPath === '/llms.txt') {\n res.statusCode = 200\n res.setHeader('Content-Type', 'text/plain; charset=utf-8')\n res.end(createLlmsTxtArtifact(routes, projectConfig), 'utf8')\n return true\n }\n\n const route = routes.find(route => route.contentArtifactUrl === contentPath)\n if (!route) return false\n\n res.statusCode = 200\n res.setHeader('Content-Type', resolveContentArtifactType(route))\n res.end(readRouteArtifactContent(route), 'utf8')\n return true\n}\n","import type { ViteDevServer } from 'vite'\n\nimport type { ClarifyPlugin } from '../../types.js'\n\nimport { attachContentArtifactUrls, writeContentArtifactFiles, writeLlmsTxt } from './artifacts.js'\nimport { serveContentArtifacts } from './server.js'\n\nexport function createContentArtifactsPlugin(): ClarifyPlugin {\n return {\n name: 'clarify:content-artifacts',\n hooks: {\n 'routes:resolved': (input) => {\n attachContentArtifactUrls(input.routes)\n return input\n },\n 'dev:configureServer': (server: ViteDevServer, ctx) => {\n server.middlewares.use((req, res, next) => {\n if (serveContentArtifacts(req, res, ctx.projectConfig, ctx.routes)) return\n next()\n })\n },\n 'build:done': (ctx) => {\n const outputDirectory = ctx.generateOptions.outputDirectory\n if (!outputDirectory) return\n writeContentArtifactFiles(ctx.routes, outputDirectory)\n writeLlmsTxt(ctx.routes, ctx.projectConfig, outputDirectory)\n },\n },\n }\n}\n","import type { HtmlTagDescriptor } from 'vite'\n\nimport type { ClarifyFaviconConfig, ClarifyPlugin } from '../../types.js'\n\nconst THEME_BOOTSTRAP_SCRIPT = `(function(){try{var e=localStorage.getItem('clarify:theme');var t=e==='dark'||e==='light'||e==='system'?e:'system';var r=t==='system'?window.matchMedia('(prefers-color-scheme: dark)').matches:t==='dark';document.documentElement.classList.toggle('dark',r);document.documentElement.style.colorScheme=r?'dark':'light'}catch(e){}})();`\n\nconst REL_ICON_RE = /<link\\s+[^>]*rel=[\"'][^\"']*\\bicon\\b[^\"']*[\"'][^>]*>/i\n\nfunction inferIconType(href: string): string | undefined {\n const path = href.split(/[?#]/, 1)[0]?.toLowerCase() ?? href.toLowerCase()\n\n if (path.endsWith('.svg')) return 'image/svg+xml'\n if (path.endsWith('.png')) return 'image/png'\n if (path.endsWith('.ico')) return 'image/x-icon'\n if (path.endsWith('.webp')) return 'image/webp'\n\n return undefined\n}\n\nfunction createIconTag(href: string, media?: string): HtmlTagDescriptor {\n return {\n tag: 'link',\n attrs: {\n rel: 'icon',\n ...(inferIconType(href) ? { type: inferIconType(href) } : {}),\n href,\n ...(media ? { media } : {}),\n },\n injectTo: 'head',\n }\n}\n\nfunction createIconTags(icon?: ClarifyFaviconConfig): HtmlTagDescriptor[] {\n if (!icon) return []\n\n if (typeof icon === 'string') return [createIconTag(icon)]\n\n const lightIcon = icon.light ?? icon.dark\n const darkIcon = icon.dark ?? icon.light\n\n if (!lightIcon || !darkIcon) return []\n if (lightIcon === darkIcon) return [createIconTag(lightIcon)]\n\n return [\n createIconTag(lightIcon, '(prefers-color-scheme: light)'),\n createIconTag(darkIcon, '(prefers-color-scheme: dark)'),\n ]\n}\n\nexport function createHtmlShellPlugin(): ClarifyPlugin {\n return {\n name: 'clarify:html-shell',\n hooks: {\n 'html:transform': (input, ctx) => ({\n html: input.html,\n tags: [\n ...input.tags,\n ...(REL_ICON_RE.test(input.html) ? [] : createIconTags(ctx.projectConfig.favicon ?? ctx.projectConfig.logo)),\n {\n tag: 'script',\n children: THEME_BOOTSTRAP_SCRIPT,\n injectTo: 'head-prepend',\n },\n {\n tag: 'script',\n attrs: { type: 'module', src: input.clientEntryId },\n injectTo: 'body',\n },\n ],\n clientEntryId: input.clientEntryId,\n dev: input.dev,\n }),\n },\n }\n}\n","import { existsSync, readFileSync, readdirSync } from 'node:fs'\nimport { join, relative } from 'node:path'\n\nimport SwaggerParser from '@apidevtools/swagger-parser'\nimport { slug } from 'github-slugger'\n\nimport { routePathFromRef, virtualModuleIdFromRef } from '../../parsers/routes.js'\nimport type { ContentDiagnostic, ContentRoute, ContentSection, OpenAPISpec } from '../../types.js'\n\nconst OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIParseResult =\n | { ok: true; spec: OpenAPISpec }\n | { ok: false; diagnostic: ContentDiagnostic }\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction kebabToTitle(str: string): string {\n return str\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\nexport function findOpenAPIRoutes(dir: string, base: string = dir): ContentRoute[] {\n const routes: ContentRoute[] = []\n if (!existsSync(dir)) return routes\n\n const entries = readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = join(dir, entry.name)\n if (entry.isDirectory()) {\n routes.push(...findOpenAPIRoutes(fullPath, base))\n continue\n }\n if (!entry.isFile() || !/\\.openapi\\.(json|yaml|yml)$/.test(entry.name)) continue\n\n const ref = relative(base, fullPath)\n const cleanPath = routePathFromRef(ref)\n routes.push({\n path: cleanPath,\n basePath: cleanPath,\n filePath: fullPath,\n virtualModuleId: virtualModuleIdFromRef(ref),\n title: kebabToTitle(cleanPath.split('/').pop() ?? 'API'),\n kind: 'openapi',\n content: readFileSync(fullPath, 'utf-8'),\n })\n }\n\n return routes\n}\n\n/** Extract endpoint operations from an OpenAPI spec as page sections. */\nexport function extractOpenAPISections(spec: OpenAPISpec): ContentSection[] {\n const sections: ContentSection[] = []\n const paths = spec.paths ?? {}\n for (const [path, pathItem] of Object.entries(paths)) {\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const op = pathItem[method]\n if (!op) continue\n const title = op.summary ?? `${method.toUpperCase()} ${path}`\n sections.push({ id: slug(`${method} ${path}`), title, level: 2, badge: method.toUpperCase() })\n }\n }\n return sections\n}\n\nexport async function readOpenAPISpec(filePath: string): Promise<OpenAPIParseResult> {\n try {\n return { ok: true, spec: await SwaggerParser.dereference(filePath) as OpenAPISpec }\n } catch (error) {\n return {\n ok: false,\n diagnostic: {\n title: 'OpenAPI spec parse failed',\n message: `Clarify could not parse ${filePath}.`,\n filePath,\n cause: errorMessage(error),\n },\n }\n }\n}\n","import type { ContentDiagnostic, OpenAPISpec } from '../../types.js'\n\nexport const openApiRegistryModuleId = 'virtual:clarify-openapi-registry'\n\nexport function generateOpenAPIRegistryModule(openApis: Record<string, OpenAPISpec>): string {\n return `export const openApis = ${JSON.stringify(openApis)};`\n}\n\nexport function generateOpenAPIModule(spec: OpenAPISpec): string {\n return `import { createElement } from 'react';\nimport { OpenApiDocument } from '@clarify-labs/renderer';\nconst spec = ${JSON.stringify(spec)};\nexport default function OpenApiRoutePage() {\n return createElement(OpenApiDocument, { spec });\n}`\n}\n\nexport function generateOpenAPIErrorModule(diagnostic: ContentDiagnostic): string {\n return `import { createElement } from 'react';\nconst diagnostic = ${JSON.stringify(diagnostic)};\nexport default function OpenApiErrorRoutePage() {\n return createElement('article', { className: 'flex h-full flex-col pt-16 pb-10' },\n createElement('div', { className: 'prose max-w-none flex-auto dark:prose-invert' },\n createElement('p', { className: 'mb-3 text-xs/6 font-medium tracking-widest text-red-500 uppercase dark:text-red-400' }, 'OpenAPI Error'),\n createElement('h1', null, diagnostic.title),\n createElement('p', { className: 'lead' }, diagnostic.message),\n diagnostic.filePath ? createElement('div', { className: 'not-prose mt-6 rounded-lg border border-zinc-200 bg-zinc-50 p-4 text-sm dark:border-white/10 dark:bg-white/5' },\n createElement('div', { className: 'mb-1 font-semibold text-zinc-900 dark:text-white' }, 'File'),\n createElement('code', { className: 'break-all text-zinc-700 dark:text-zinc-300' }, diagnostic.filePath)\n ) : null,\n diagnostic.cause ? createElement('div', { className: 'not-prose mt-4 rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-800 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200' },\n createElement('div', { className: 'mb-1 font-semibold' }, 'Why it happened'),\n createElement('pre', { className: 'whitespace-pre-wrap break-words text-xs' }, diagnostic.cause)\n ) : null\n )\n );\n}`\n}\n","import type { ClarifyPlugin, OpenAPISpec } from '../../types.js'\n\nimport { extractOpenAPISections, findOpenAPIRoutes, readOpenAPISpec } from './parser.js'\nimport { generateOpenAPIErrorModule, generateOpenAPIModule, generateOpenAPIRegistryModule, openApiRegistryModuleId } from './virtual-modules.js'\n\nexport function createOpenAPIPlugin(): ClarifyPlugin {\n const specs: Record<string, OpenAPISpec> = {}\n\n return {\n name: 'clarify:openapi',\n hooks: {\n 'routes:discover': (input) => ({\n ...input,\n routes: [...input.routes, ...findOpenAPIRoutes(input.contentRoot)],\n }),\n 'routes:discovered': async (routes) => {\n for (const key of Object.keys(specs)) delete specs[key]\n\n for (const route of routes.filter(route => route.kind === 'openapi')) {\n const result = await readOpenAPISpec(route.filePath)\n if (!result.ok) {\n route.diagnostic = result.diagnostic\n route.title = route.title || 'OpenAPI parse error'\n route.sections = []\n continue\n }\n\n const spec = result.spec\n specs[route.virtualModuleId] = spec\n specs[`virtual:clarify-page/${route.path.replace(/^\\//, '')}`] = spec\n route.title = spec.info?.title ?? route.title\n route.description = spec.info?.description ?? route.description\n route.sections = extractOpenAPISections(spec)\n }\n\n return routes\n },\n 'modules:before': (modules, ctx) => {\n modules.set(openApiRegistryModuleId, generateOpenAPIRegistryModule(specs))\n\n for (const [moduleId, spec] of Object.entries(specs)) {\n modules.set(moduleId, generateOpenAPIModule(spec))\n }\n\n for (const route of ctx.routes.filter(route => route.kind === 'openapi' && route.diagnostic)) {\n if (route.diagnostic) modules.set(route.virtualModuleId, generateOpenAPIErrorModule(route.diagnostic))\n }\n\n return modules\n },\n },\n }\n}\n","import { z } from 'zod'\n\nimport type { ClarifyProjectConfig } from '../types.js'\n\nexport const clarifyLogoConfigSchema = z.union([\n z.string(),\n z.object({\n light: z.string().optional(),\n dark: z.string().optional(),\n }),\n])\n\nexport const clarifyFaviconConfigSchema = z.union([\n z.string(),\n z.object({\n light: z.string().optional(),\n dark: z.string().optional(),\n }),\n])\n\nexport const clarifyLocalizedTextSchema = z.union([\n z.string(),\n z.record(z.string(), z.string()),\n])\n\nexport const clarifyLocaleConfigSchema = z.object({\n code: z.string(),\n label: z.string(),\n dir: z.union([z.literal('ltr'), z.literal('rtl')]).optional(),\n})\n\nexport const clarifyI18nConfigSchema = z.object({\n defaultLocale: z.string().optional(),\n missing: z.union([z.literal('fallback'), z.literal('404'), z.literal('hide')]).optional(),\n locales: z.array(clarifyLocaleConfigSchema).min(1),\n}).superRefine((config, ctx) => {\n const localeCodes = new Set<string>()\n for (const [index, locale] of config.locales.entries()) {\n if (localeCodes.has(locale.code)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate locale code \"${locale.code}\"`,\n path: ['locales', index, 'code'],\n })\n }\n localeCodes.add(locale.code)\n }\n\n if (config.defaultLocale && !localeCodes.has(config.defaultLocale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'defaultLocale must be one of i18n.locales',\n path: ['defaultLocale'],\n })\n }\n})\n\nexport const clarifyNavbarLinkSchema = z.object({\n label: clarifyLocalizedTextSchema,\n href: z.string(),\n external: z.boolean().optional(),\n})\n\nexport const clarifyBannerConfigSchema = z.object({\n content: clarifyLocalizedTextSchema,\n dismissible: z.boolean().optional(),\n})\n\nexport const clarifyFooterConfigSchema = z.object({\n links: z.array(clarifyNavbarLinkSchema).optional(),\n socials: z.record(z.string(), z.string()).optional(),\n copyright: clarifyLocalizedTextSchema.optional(),\n})\n\nexport const clarifyPagesItemSchema = z.union([\n z.string(),\n z.object({\n page: z.string(),\n title: clarifyLocalizedTextSchema.optional(),\n icon: z.string().optional(),\n redirect: z.string().optional(),\n }),\n z.object({\n openapi: z.string(),\n icon: z.string().optional(),\n title: clarifyLocalizedTextSchema.optional(),\n }),\n])\n\nexport const clarifyPagesGroupSchema = z.object({\n group: clarifyLocalizedTextSchema,\n icon: z.string().optional(),\n pages: z.array(clarifyPagesItemSchema),\n})\n\nexport const clarifyPagesConfigSchema = z.union([\n z.array(clarifyPagesGroupSchema),\n z.literal('FileTree'),\n])\n\nexport const clarifyTabItemSchema = z.object({\n tab: clarifyLocalizedTextSchema,\n icon: z.string().optional(),\n pages: clarifyPagesConfigSchema.optional(),\n})\n\nexport const clarifyTabsConfigSchema = z.array(clarifyTabItemSchema)\n\nexport const clarifyThemePresetSchema = z.enum(['default', 'base'])\n\nexport const clarifyThemeColorTokensConfigSchema = z.object({\n primary: z.string().optional(),\n accent: z.string().optional(),\n background: z.string().optional(),\n foreground: z.string().optional(),\n surface: z.string().optional(),\n muted: z.string().optional(),\n border: z.string().optional(),\n codeBackground: z.string().optional(),\n})\n\nexport const clarifyThemeRadiusTokensConfigSchema = z.object({\n sm: z.string().optional(),\n md: z.string().optional(),\n lg: z.string().optional(),\n xl: z.string().optional(),\n})\n\nexport const clarifyThemeTokensConfigSchema = z.object({\n colors: clarifyThemeColorTokensConfigSchema.optional(),\n radius: clarifyThemeRadiusTokensConfigSchema.optional(),\n})\n\nexport const clarifyThemeLayoutConfigSchema = z.object({\n maxWidth: z.string().optional(),\n})\n\nexport const clarifyThemeConfigSchema = z.object({\n preset: clarifyThemePresetSchema.optional(),\n tokens: clarifyThemeTokensConfigSchema.optional(),\n layout: clarifyThemeLayoutConfigSchema.optional(),\n})\n\nexport const clarifyProjectConfigSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n logo: clarifyLogoConfigSchema.optional(),\n favicon: clarifyFaviconConfigSchema.optional(),\n theme: clarifyThemeConfigSchema.optional(),\n routePrefix: z.string().optional(),\n navbar: z.object({\n links: z.array(clarifyNavbarLinkSchema).optional(),\n }).optional(),\n banner: clarifyBannerConfigSchema.optional(),\n footer: clarifyFooterConfigSchema.optional(),\n i18n: clarifyI18nConfigSchema.optional(),\n tabs: clarifyTabsConfigSchema.optional(),\n}) satisfies z.ZodType<ClarifyProjectConfig>\n\nexport type ClarifyProjectConfigInput = z.input<typeof clarifyProjectConfigSchema>\n","import type { ClarifyThemeConfig, ClarifyThemePreset, ResolvedClarifyThemeConfig } from '../types.js'\n\nexport const clarifyThemePresets = {\n default: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#00D492',\n accent: '#00F6C9',\n background: '#ffffff',\n foreground: '#111827',\n surface: '#ffffff',\n muted: '#64748b',\n border: 'rgb(15 23 42 / 0.12)',\n codeBackground: '#f7fefb',\n },\n radius: {\n sm: '6px',\n md: '10px',\n lg: '14px',\n xl: '18px',\n },\n },\n layout: {\n maxWidth: '82rem',\n },\n },\n base: {\n preset: 'base',\n tokens: {\n colors: {\n primary: '#18181b',\n accent: '#52525b',\n background: '#ffffff',\n foreground: '#18181b',\n surface: '#ffffff',\n muted: '#71717a',\n border: 'rgb(24 24 27 / 0.12)',\n codeBackground: '#f4f4f5',\n },\n radius: {\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n },\n },\n layout: {\n maxWidth: '80rem',\n },\n },\n} as const satisfies Record<ClarifyThemePreset, ResolvedClarifyThemeConfig>\n\nexport function resolveThemeConfig(theme: ClarifyThemeConfig = {}): ResolvedClarifyThemeConfig {\n const preset = theme.preset ?? 'default'\n const presetTheme = clarifyThemePresets[preset]\n\n return {\n preset,\n tokens: {\n colors: {\n ...presetTheme.tokens.colors,\n ...theme.tokens?.colors,\n },\n radius: {\n ...presetTheme.tokens.radius,\n ...theme.tokens?.radius,\n },\n },\n layout: {\n ...presetTheme.layout,\n ...theme.layout,\n },\n }\n}\n","import type { ZodError } from 'zod'\n\nimport type { ClarifyI18nConfig, ClarifyProjectConfig, ResolvedClarifyI18nConfig, ResolvedProjectConfig } from '../types.js'\n\nimport { clarifyProjectConfigSchema } from './config-schema.js'\nimport { resolveThemeConfig } from './theme.js'\n\nfunction formatIssuePath(path: PropertyKey[]): string {\n return path.reduce<string>((result, segment) => {\n if (typeof segment === 'number') return `${result}[${segment}]`\n const key = String(segment)\n return result ? `${result}.${key}` : key\n }, '')\n}\n\nfunction formatProjectConfigError(error: ZodError): string {\n const issue = error.issues[0]\n if (!issue) return '[clarify] config is invalid'\n\n const path = formatIssuePath(issue.path)\n if (!path) return `[clarify] config must contain an object: ${issue.message}`\n\n return `[clarify] config field \"${path}\" is invalid: ${issue.message}`\n}\n\nexport function validateProjectConfig(value: unknown): ClarifyProjectConfig {\n const result = clarifyProjectConfigSchema.safeParse(value)\n if (!result.success) {\n throw new Error(formatProjectConfigError(result.error))\n }\n return result.data\n}\n\nfunction resolveI18nConfig(i18n?: ClarifyI18nConfig): ResolvedClarifyI18nConfig | undefined {\n if (!i18n) return undefined\n\n const firstLocale = i18n.locales[0]?.code\n const defaultLocale = i18n.defaultLocale ?? firstLocale\n if (!defaultLocale) return undefined\n\n return {\n defaultLocale,\n missing: i18n.missing ?? 'fallback',\n locales: i18n.locales,\n }\n}\n\nexport function resolveProjectConfig(config: ClarifyProjectConfig = {}): ResolvedProjectConfig {\n return {\n title: config.title ?? 'Clarify Docs',\n description: config.description ?? '',\n logo: config.logo,\n favicon: config.favicon,\n routePrefix: config.routePrefix ?? '/',\n theme: resolveThemeConfig(config.theme),\n navbar: config.navbar,\n banner: config.banner,\n footer: config.footer,\n i18n: resolveI18nConfig(config.i18n),\n tabs: config.tabs,\n }\n}\n","import type { ViteDevServer } from 'vite'\n\nimport type { ClarifyHookContext, ClarifyHooks, ClarifyPlugin } from '../types.js'\n\nexport async function runHooks<K extends Exclude<keyof ClarifyHooks, 'build:done' | 'dev:configureServer'>>(plugins: ClarifyPlugin[], hookName: K, input: Parameters<NonNullable<ClarifyHooks[K]>>[0], ctx: ClarifyHookContext): Promise<Parameters<NonNullable<ClarifyHooks[K]>>[0]> {\n let result = input\n for (const plugin of plugins) {\n const hook = plugin.hooks[hookName]\n if (!hook) continue\n try {\n result = await hook(result as never, ctx) as Parameters<NonNullable<ClarifyHooks[K]>>[0]\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"${hookName}\" failed: ${err}`, { cause: err })\n }\n }\n return result\n}\n\nexport async function runDevConfigureServerHooks(plugins: ClarifyPlugin[], server: ViteDevServer, ctx: ClarifyHookContext): Promise<void> {\n for (const plugin of plugins) {\n const hook = plugin.hooks['dev:configureServer']\n if (!hook) continue\n try {\n await hook(server, ctx)\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"dev:configureServer\" failed: ${err}`, { cause: err })\n }\n }\n}\n\nexport async function runBuildDoneHooks(plugins: ClarifyPlugin[], ctx: ClarifyHookContext): Promise<void> {\n for (const plugin of plugins) {\n const hook = plugin.hooks['build:done']\n if (!hook) continue\n try {\n await hook(ctx)\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"build:done\" failed: ${err}`, { cause: err })\n }\n }\n}\n","import type { ClarifyPlugin, ClarifyProjectConfig } from '../types.js'\n\nexport type ClarifyBuildOptions = ClarifyProjectConfig & {\n /** Project root directory. Defaults to the current working directory. */\n projectRoot?: string\n /** Root directory for MDX content. Default: 'source' */\n rootDirectory?: string\n /** Output directory for the built docs site. When omitted, Vite's build.outDir is used. */\n outputDirectory?: string\n /** Static generation behavior. */\n ssg?: {\n /** Fail the build when SSG fails. Default: true. */\n failOnError?: boolean\n }\n\n /** Clarify plugin extensions for translation, search, and other build-time features. */\n plugins?: ClarifyPlugin[]\n}\n\nexport type ResolvedBuildOptions = {\n rootDirectory: string\n outputDirectory?: string\n ssg: {\n failOnError: boolean\n }\n}\n\nexport function resolveBuildOptions(options: ClarifyBuildOptions = {}): ResolvedBuildOptions {\n return {\n rootDirectory: options.rootDirectory ?? 'source',\n outputDirectory: options.outputDirectory,\n ssg: {\n failOnError: options.ssg?.failOnError ?? true,\n },\n }\n}\n","import { readFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\n\nimport type { AliasOptions } from 'vite'\n\nconst requireFromCli = createRequire(import.meta.url)\n\nfunction resolveCliDependency(id: string): string {\n return requireFromCli.resolve(id)\n}\n\nfunction resolvePackageExport(packageName: string, subpath: string, condition: 'import' | 'require' = 'import'): string {\n const packageJsonPath = requireFromCli.resolve(`${packageName}/package.json`)\n const packageRoot = dirname(packageJsonPath)\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n exports?: Record<string, string | Record<string, string>>\n }\n const exportKey = subpath ? `./${subpath}` : '.'\n const exportEntry = packageJson.exports?.[exportKey]\n const target = typeof exportEntry === 'string'\n ? exportEntry\n : exportEntry?.[condition] ?? exportEntry?.default\n\n if (!target) {\n throw new Error(`[clarify] Unable to resolve ${packageName}/${subpath}`)\n }\n\n return join(packageRoot, target)\n}\n\n/**\n * Resolve Clarify's framework/runtime dependencies from the CLI package instead\n * of from the user's documentation project. This keeps content-only projects\n * free from React, renderer, and tsconfig requirements.\n */\nexport function createClarifyRuntimeAliases(): AliasOptions {\n return [\n { find: /^@clarify-labs\\/renderer\\/style\\.css$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'style.css') },\n { find: /^@clarify-labs\\/renderer\\/client$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'client') },\n { find: /^@clarify-labs\\/renderer\\/server$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'server') },\n { find: /^@clarify-labs\\/renderer$/, replacement: resolvePackageExport('@clarify-labs/renderer', '') },\n { find: /^react\\/jsx-runtime$/, replacement: resolveCliDependency('react/jsx-runtime') },\n { find: /^react\\/jsx-dev-runtime$/, replacement: resolveCliDependency('react/jsx-dev-runtime') },\n { find: /^react-dom\\/client$/, replacement: resolveCliDependency('react-dom/client') },\n { find: /^react-dom\\/server$/, replacement: resolveCliDependency('react-dom/server') },\n { find: /^react-dom$/, replacement: resolveCliDependency('react-dom') },\n { find: /^react-router-dom$/, replacement: resolveCliDependency('react-router-dom') },\n { find: /^react$/, replacement: resolveCliDependency('react') },\n ]\n}\n","import { existsSync, readFileSync, mkdirSync, writeFileSync, mkdtempSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join, dirname } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport { build } from 'vite'\nimport type { Plugin } from 'vite'\n\nimport type { ResolvedProjectConfig, ContentRoute } from '../types.js'\n\nimport { createClarifyRuntimeAliases } from './runtime-deps.js'\nimport { escapeHtml } from './utils.js'\n\nexport function readIndexHtml(outputDirectory: string): string | undefined {\n const indexPath = join(outputDirectory, 'index.html')\n if (!existsSync(indexPath)) return undefined\n try {\n return readFileSync(indexPath, 'utf-8')\n } catch {\n return undefined\n }\n}\n\nfunction injectHtmlLocaleAttributes(html: string, projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n const localeCode = route?.locale ?? projectConfig.i18n?.defaultLocale\n if (!localeCode) return html\n\n const localeConfig = projectConfig.i18n?.locales.find(locale => locale.code === localeCode)\n const dir = localeConfig?.dir\n\n return html.replace(/<html\\b([^>]*)>/i, (_match, attributes: string) => {\n let nextAttributes = attributes\n .replace(/\\s+lang=(\"[^\"]*\"|'[^']*'|[^\\s>]*)/i, '')\n .replace(/\\s+dir=(\"[^\"]*\"|'[^']*'|[^\\s>]*)/i, '')\n\n nextAttributes = `${nextAttributes} lang=\"${escapeHtml(localeCode)}\"`\n if (dir) nextAttributes = `${nextAttributes} dir=\"${escapeHtml(dir)}\"`\n return `<html${nextAttributes}>`\n })\n}\n\nfunction routeTitle(projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n const title = route?.title?.trim()\n if (!title || title === projectConfig.title) return projectConfig.title\n return `${title} - ${projectConfig.title}`\n}\n\nfunction setNamedMeta(html: string, name: string, content: string | undefined): string {\n const metaPattern = new RegExp(`<meta\\\\b(?=[^>]*\\\\bname=[\"']${name}[\"'])[^>]*>\\\\n?`, 'i')\n if (!content) return html.replace(metaPattern, '')\n\n const meta = `<meta name=\"${name}\" content=\"${escapeHtml(content)}\" />`\n if (metaPattern.test(html)) return html.replace(metaPattern, meta)\n return html.replace('</head>', ` ${meta}\\n </head>`)\n}\n\nexport function injectSSRIntoTemplate(template: string, appHtml: string, projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n let html = injectHtmlLocaleAttributes(template, projectConfig, route)\n\n // Replace <title>...</title>\n html = html.replace(/<title>.*?<\\/title>/, `<title>${escapeHtml(routeTitle(projectConfig, route))}</title>`)\n\n html = setNamedMeta(html, 'description', route?.description ?? projectConfig.description)\n html = setNamedMeta(html, 'keywords', route?.keywords?.join(', '))\n\n // Replace <div id=\"root\">...</div> with SSR rendered content\n html = html.replace(/<div id=\"root\">[\\s\\S]*?<\\/div>/, `<div id=\"root\">${appHtml}</div>`)\n\n return html\n}\n\nexport const SSR_ENTRY_CODE = `import { renderToHTML } from '@clarify-labs/renderer/server';\nimport { routes, navigation } from 'virtual:clarify-routes/server';\nimport { config } from 'virtual:clarify-config';\nimport { openApis } from 'virtual:clarify-openapi-registry';\n\nexport function render(url) {\n return renderToHTML({ config, routes, navigation, openApis, url });\n}`\n\nexport function createTempEntryFile(content: string): string {\n const tempDir = mkdtempSync(join(tmpdir(), 'clarify-ssr-'))\n const entryPath = join(tempDir, 'entry-server.ts')\n writeFileSync(entryPath, content, 'utf-8')\n return entryPath\n}\n\nexport async function buildSSRBundle(root: string, ssrEntry: string, ssrOutDir: string, plugins: Plugin[]): Promise<void> {\n await build({\n root,\n configFile: false,\n resolve: {\n alias: createClarifyRuntimeAliases(),\n // Ensure all framework imports collapse to one module instance.\n dedupe: ['react', 'react-dom', 'react-router-dom'],\n },\n plugins,\n build: {\n ssr: ssrEntry,\n outDir: ssrOutDir,\n emptyOutDir: true,\n rolldownOptions: {\n input: ssrEntry,\n checks: {\n pluginTimings: false,\n },\n },\n },\n })\n}\n\nexport async function renderSSGRoutes(routes: ContentRoute[], projectConfig: ResolvedProjectConfig, outputDirectory: string, ssrBundlePath: string, failOnError: boolean = true): Promise<void> {\n const { render } = await import(pathToFileURL(ssrBundlePath).href)\n\n const template = readIndexHtml(outputDirectory)\n if (!template) {\n throw new Error(\n `[clarify] index.html not found in outputDirectory \"${outputDirectory}\". Make sure Vite build produces it.`\n )\n }\n\n for (const route of routes) {\n try {\n const appHtml = render(route.path)\n const finalHtml = injectSSRIntoTemplate(template, appHtml, projectConfig, route)\n\n const outFile = join(outputDirectory, route.path, 'index.html')\n mkdirSync(dirname(outFile), { recursive: true })\n writeFileSync(outFile, finalHtml, 'utf-8')\n } catch (err) {\n console.error(`[clarify] Failed to render route \"${route.path}\":`, err)\n if (failOnError) {\n throw err\n }\n }\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport { loadConfigFromFile } from 'vite'\nimport type { ConfigEnv } from 'vite'\n\nimport type { ClarifyProjectConfig } from '../types.js'\n\nimport { validateProjectConfig } from './config.js'\nimport type { ClarifyBuildOptions } from './options.js'\n\nexport type ClarifyConfig = ClarifyProjectConfig & Pick<ClarifyBuildOptions, 'plugins' | 'ssg'>\n\nexport function defineConfig(config: ClarifyConfig): ClarifyConfig {\n return config\n}\n\nconst CONFIG_FILENAMES = [\n 'clarify.ts',\n 'clarify.js',\n 'clarify.json',\n]\n\nexport function findClarifyConfigFile(root: string): string | undefined {\n for (const filename of CONFIG_FILENAMES) {\n const filePath = resolve(root, filename)\n if (existsSync(filePath)) return filePath\n }\n return undefined\n}\n\nfunction assertConfigObject(config: unknown, configFile: string): Record<string, unknown> {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n throw new Error(`[clarify] ${configFile} must export a configuration object`)\n }\n return config as Record<string, unknown>\n}\n\nfunction loadJsonConfig(configFile: string): ClarifyConfig {\n const config = assertConfigObject(JSON.parse(readFileSync(configFile, 'utf-8')), configFile)\n const projectConfig = validateProjectConfig(config)\n const ssg = config.ssg && typeof config.ssg === 'object' && !Array.isArray(config.ssg)\n ? config.ssg as ClarifyConfig['ssg']\n : undefined\n return {\n ...projectConfig,\n ...(ssg ? { ssg } : {}),\n }\n}\n\nexport async function loadClarifyConfig(root: string, env: ConfigEnv): Promise<ClarifyConfig> {\n const configFile = findClarifyConfigFile(root)\n if (!configFile) return {}\n\n if (configFile.endsWith('.json')) {\n return loadJsonConfig(configFile)\n }\n\n const loaded = await loadConfigFromFile(env, configFile, root, 'silent')\n const config = assertConfigObject(loaded?.config, configFile)\n return config as ClarifyConfig\n}\n","import { buildLocalizedNavigationFromTabsConfig, buildNavigation, buildNavigationFromTabsConfig } from '../parsers/routes.js'\nimport { openApiRegistryModuleId } from '../plugins/openapi/virtual-modules.js'\nimport type { ContentRoute, NavigationTree, ResolvedBuildOptions, ResolvedProjectConfig } from '../types.js'\n\nexport const VIRTUAL_CONFIG = 'virtual:clarify-config'\nexport const VIRTUAL_ROUTES = 'virtual:clarify-routes'\nexport const VIRTUAL_SERVER_ROUTES = 'virtual:clarify-routes/server'\nexport const VIRTUAL_OPENAPI_REGISTRY = openApiRegistryModuleId\nexport const VIRTUAL_CLIENT_ENTRY = 'virtual:clarify-entry-client'\nexport const RESOLVED_CLIENT_ENTRY = '\\0' + VIRTUAL_CLIENT_ENTRY\n\nexport type VirtualModules = Map<string, string>\n\ntype BuildVirtualModulesArgs = {\n projectConfig: ResolvedProjectConfig\n generateOptions: ResolvedBuildOptions\n routes: ContentRoute[]\n navigation?: NavigationTree\n}\n\nexport function resolveVirtualId(id: string): string {\n return '\\0' + id\n}\n\nexport function stripVirtualPrefix(id: string): string {\n return id.startsWith('\\0') ? id.slice(1) : id\n}\n\nexport function generateConfigModule(projectConfig: ResolvedProjectConfig, buildOptions: ResolvedBuildOptions): string {\n return `export const config = ${JSON.stringify({ ...projectConfig, ...buildOptions })};`\n}\n\nfunction moduleSpecifier(value: string): string {\n return JSON.stringify(value)\n}\n\nexport function generateRoutesModule(routes: ContentRoute[], resolvedNavigation?: NavigationTree, projectConfig?: ResolvedProjectConfig, mode: 'client' | 'server' = 'client'): string {\n const imports = mode === 'server'\n ? routes.map((r, i) => `import Page${i} from ${moduleSpecifier(r.virtualModuleId)};`).join('\\n')\n : ''\n const routesArray = routes.map((r, i) => {\n const sections = r.sections && r.sections.length > 0\n ? `, sections: ${JSON.stringify(r.sections.map(s => ({ id: s.id, title: s.title, badge: s.badge, tags: s.tags })))}`\n : ''\n const contentArtifactUrl = r.contentArtifactUrl ? `, contentArtifactUrl: ${JSON.stringify(r.contentArtifactUrl)}` : ''\n const basePath = r.basePath ? `, basePath: ${JSON.stringify(r.basePath)}` : ''\n const locale = r.locale ? `, locale: ${JSON.stringify(r.locale)}` : ''\n const isFallback = r.isFallback ? ', isFallback: true' : ''\n const alternates = r.alternates ? `, alternates: ${JSON.stringify(r.alternates)}` : ''\n const description = r.description ? `, description: ${JSON.stringify(r.description)}` : ''\n const keywords = r.keywords && r.keywords.length > 0 ? `, keywords: ${JSON.stringify(r.keywords)}` : ''\n const component = mode === 'server' ? `Page${i}` : `() => import(${moduleSpecifier(r.virtualModuleId)})`\n const lazy = mode === 'client' ? ', lazy: true' : ''\n return ` { path: ${JSON.stringify(r.path)}, title: ${JSON.stringify(r.title)}, component: ${component}${lazy}, kind: ${JSON.stringify(r.kind)}${basePath}${locale}${isFallback}${alternates}${description}${keywords}${sections}${contentArtifactUrl} }`\n }).join(',\\n')\n\n const navigation = resolvedNavigation ?? (projectConfig?.tabs\n ? projectConfig.i18n\n ? (buildLocalizedNavigationFromTabsConfig(routes, projectConfig.tabs, projectConfig.i18n) ?? {})\n : buildNavigationFromTabsConfig(routes, projectConfig.tabs)\n : buildNavigation(routes))\n\n return `${imports}\\n\\nexport const routes = [\\n${routesArray}\\n];\\n\\nexport const navigation = ${JSON.stringify(navigation, null, 2)};\\n`\n}\n\nexport function createClientEntryModule(): string {\n return `\nimport '@clarify-labs/renderer/style.css';\nimport { render } from '@clarify-labs/renderer/client';\nimport { routes, navigation } from '${VIRTUAL_ROUTES}';\nimport { config } from '${VIRTUAL_CONFIG}';\nimport { openApis } from '${VIRTUAL_OPENAPI_REGISTRY}';\nrender({ config, routes, navigation, openApis });`\n}\n\nexport function buildVirtualModules(args: BuildVirtualModulesArgs): VirtualModules {\n const modules: VirtualModules = new Map()\n modules.set(VIRTUAL_CONFIG, generateConfigModule(args.projectConfig, args.generateOptions))\n modules.set(VIRTUAL_ROUTES, generateRoutesModule(args.routes, args.navigation, args.projectConfig, 'client'))\n modules.set(VIRTUAL_SERVER_ROUTES, generateRoutesModule(args.routes, args.navigation, args.projectConfig, 'server'))\n modules.set(VIRTUAL_OPENAPI_REGISTRY, 'export const openApis = {};')\n modules.set(VIRTUAL_CLIENT_ENTRY, createClientEntryModule())\n modules.set(RESOLVED_CLIENT_ENTRY, createClientEntryModule())\n\n for (const route of args.routes) {\n if (route.kind === 'openapi') continue\n modules.set(route.virtualModuleId, `export { default } from ${moduleSpecifier(route.filePath)};`)\n }\n\n return modules\n}\n","import { rmSync } from 'node:fs'\nimport { isAbsolute, join, relative, resolve } from 'node:path'\n\nimport mdxPlugin from '@mdx-js/rollup'\nimport tailwindcss from '@tailwindcss/vite'\nimport react from '@vitejs/plugin-react'\nimport type { Plugin, ResolvedConfig, ViteDevServer } from 'vite'\n\nimport { rehypePlugins, remarkPlugins } from '../parsers/mdx.js'\nimport { buildLocalizedNavigationFromTabsConfig, buildNavigation, buildNavigationFromTabsConfig, findContentRoutes, localizedRoutePath, virtualModuleIdFromRef } from '../parsers/routes.js'\nimport { createContentArtifactsPlugin } from '../plugins/content-artifacts/index.js'\nimport { createHtmlShellPlugin } from '../plugins/html-shell/index.js'\nimport { createOpenAPIPlugin } from '../plugins/openapi/index.js'\nimport type { ClarifyHookContext, ClarifyPlugin, ContentRoute, NavigationTree, ResolvedClarifyI18nConfig } from '../types.js'\n\nimport { resolveProjectConfig } from './config.js'\nimport { runBuildDoneHooks, runDevConfigureServerHooks, runHooks } from './hooks.js'\nimport { resolveBuildOptions, type ClarifyBuildOptions } from './options.js'\nimport {\n SSR_ENTRY_CODE,\n createTempEntryFile,\n buildSSRBundle,\n renderSSGRoutes,\n} from './ssg.js'\nimport { findClarifyConfigFile, loadClarifyConfig } from './user-config.js'\nimport {\n RESOLVED_CLIENT_ENTRY,\n VIRTUAL_CLIENT_ENTRY,\n VIRTUAL_CONFIG,\n VIRTUAL_OPENAPI_REGISTRY,\n VIRTUAL_ROUTES,\n VIRTUAL_SERVER_ROUTES,\n buildVirtualModules,\n resolveVirtualId,\n stripVirtualPrefix,\n type VirtualModules,\n} from './virtual-modules.js'\n\nfunction loadVirtualModule(id: string, modules: VirtualModules): string | null {\n const bareId = stripVirtualPrefix(id)\n return modules.get(bareId) ?? modules.get(id) ?? null\n}\n\nexport function clarifyPlugin(options: ClarifyBuildOptions = {}): Plugin[] {\n const root = resolve(options.projectRoot ?? process.cwd())\n let projectConfig = resolveProjectConfig(options)\n let generateOptions = resolveBuildOptions(options)\n const contentRoot = join(root, generateOptions.rootDirectory)\n const configFilePath = findClarifyConfigFile(root)\n let routes: ContentRoute[] = []\n\n const clarifyPlugins: ClarifyPlugin[] = [createOpenAPIPlugin(), createContentArtifactsPlugin(), createHtmlShellPlugin(), ...(options.plugins ?? [])]\n const ctx: ClarifyHookContext = { projectConfig, generateOptions, routes, navigation: [] }\n let viteConfig: ResolvedConfig\n let resolvedNavigation: NavigationTree = []\n let virtualModules: VirtualModules = new Map()\n\n async function reloadProjectConfig() {\n const userConfig = await loadClarifyConfig(root, { command: 'serve', mode: viteConfig.mode })\n const buildOptions: ClarifyBuildOptions = {\n ...userConfig,\n projectRoot: options.projectRoot,\n rootDirectory: options.rootDirectory,\n outputDirectory: options.outputDirectory,\n }\n projectConfig = resolveProjectConfig(buildOptions)\n generateOptions = resolveBuildOptions(buildOptions)\n ctx.projectConfig = projectConfig\n ctx.generateOptions = generateOptions\n }\n\n function withAlternates(route: ContentRoute, routeList: ContentRoute[], i18n: ResolvedClarifyI18nConfig): ContentRoute {\n const basePath = route.basePath ?? route.path\n const routeByLocaleAndBase = new Map(routeList.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const alternates = Object.fromEntries(\n i18n.locales.flatMap((locale) => {\n const alternate = routeByLocaleAndBase.get(`${locale.code}:${basePath}`)\n return alternate ? [[locale.code, alternate.path]] : []\n })\n )\n return { ...route, alternates }\n }\n\n async function discoverRoutesForRoot(routeRoot: string, locale?: string): Promise<ContentRoute[]> {\n const discovered = await runHooks(clarifyPlugins, 'routes:discover', {\n contentRoot: routeRoot,\n locale,\n routes: findContentRoutes(routeRoot),\n }, ctx)\n return discovered.routes\n }\n\n async function discoverRoutes(): Promise<ContentRoute[]> {\n const i18n = projectConfig.i18n\n if (!i18n) return discoverRoutesForRoot(contentRoot)\n\n const localizedRoutes: ContentRoute[] = []\n for (const locale of i18n.locales) {\n const localeRoot = join(contentRoot, locale.code)\n const discovered = await discoverRoutesForRoot(localeRoot, locale.code)\n for (const route of discovered) {\n const basePath = route.basePath ?? route.path\n localizedRoutes.push({\n ...route,\n path: localizedRoutePath(basePath, locale.code, i18n),\n basePath,\n locale: locale.code,\n virtualModuleId: virtualModuleIdFromRef(relative(contentRoot, route.filePath)),\n })\n }\n }\n\n if (i18n.missing === 'fallback') {\n const routeByLocaleAndBase = new Map(localizedRoutes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const defaultRoutes = localizedRoutes.filter(route => route.locale === i18n.defaultLocale)\n for (const sourceRoute of defaultRoutes) {\n const basePath = sourceRoute.basePath ?? sourceRoute.path\n for (const locale of i18n.locales) {\n const key = `${locale.code}:${basePath}`\n if (routeByLocaleAndBase.has(key)) continue\n localizedRoutes.push({\n ...sourceRoute,\n path: localizedRoutePath(basePath, locale.code, i18n),\n locale: locale.code,\n isFallback: true,\n })\n }\n }\n }\n\n return localizedRoutes.map(route => withAlternates(route, localizedRoutes, i18n))\n }\n\n async function resolveRoutesAndSpecs() {\n routes = await discoverRoutes()\n routes = await runHooks(clarifyPlugins, 'routes:discovered', routes, ctx)\n\n const defaultNavigation = projectConfig.tabs\n ? projectConfig.i18n\n ? (buildLocalizedNavigationFromTabsConfig(routes, projectConfig.tabs, projectConfig.i18n) ?? {})\n : buildNavigationFromTabsConfig(routes, projectConfig.tabs)\n : buildNavigation(routes)\n const resolved = await runHooks(clarifyPlugins, 'routes:resolved', { routes, navigation: defaultNavigation }, ctx)\n routes = resolved.routes\n resolvedNavigation = resolved.navigation\n ctx.routes = routes\n ctx.navigation = resolvedNavigation\n }\n\n async function rebuildVirtualModules() {\n virtualModules = buildVirtualModules({\n projectConfig,\n generateOptions,\n routes,\n navigation: resolvedNavigation,\n })\n virtualModules = await runHooks(clarifyPlugins, 'modules:before', virtualModules, ctx)\n }\n\n function invalidateVirtualModules(server: ViteDevServer) {\n for (const id of virtualModules.keys()) {\n const moduleNode = server.moduleGraph.getModuleById(resolveVirtualId(id))\n if (moduleNode) server.moduleGraph.invalidateModule(moduleNode)\n }\n }\n\n async function refreshDevServer(server: ViteDevServer) {\n await resolveRoutesAndSpecs()\n await rebuildVirtualModules()\n invalidateVirtualModules(server)\n server.ws.send({ type: 'full-reload' })\n }\n\n function hasContentRouteForFile(filePath: string): boolean {\n return routes.some(route => route.filePath === filePath)\n }\n\n const normalizedMdxContentPlugin: Plugin = {\n name: 'clarify:normalized-mdx-content',\n enforce: 'pre',\n transform(_code, id) {\n if (!/\\.mdx?(?:\\?|$)/.test(id)) return null\n const filePath = id.replace(/\\?.*$/, '')\n const route = routes.find(route => route.kind === 'mdx' && route.filePath === filePath)\n if (!route || route.content === undefined) return null\n return { code: route.content, map: null }\n },\n }\n\n const mdx = mdxPlugin({\n include: ['**/*.{md,mdx}'],\n jsxImportSource: 'react',\n providerImportSource: '@clarify-labs/renderer',\n remarkPlugins,\n rehypePlugins,\n })\n\n const clarifyCorePlugin: Plugin = {\n name: 'clarify:core',\n async config() {\n await resolveRoutesAndSpecs()\n\n return {\n base: projectConfig.routePrefix,\n build: {\n ...(generateOptions.outputDirectory ? { outDir: generateOptions.outputDirectory } : {}),\n manifest: true,\n },\n }\n },\n configResolved(config) {\n viteConfig = config\n // If user didn't specify outputDirectory, read it from Vite's resolved config\n if (!generateOptions.outputDirectory) {\n generateOptions.outputDirectory = config.build.outDir\n }\n },\n async buildStart() {\n await rebuildVirtualModules()\n },\n async handleHotUpdate(ctx) {\n const changedFile = isAbsolute(ctx.file) ? ctx.file : join(root, ctx.file)\n if (configFilePath && changedFile === configFilePath) {\n await reloadProjectConfig()\n await refreshDevServer(ctx.server)\n return []\n }\n\n const relativeContentFile = relative(contentRoot, changedFile)\n const isContentFile = relativeContentFile && !relativeContentFile.startsWith('..') && !isAbsolute(relativeContentFile)\n if (!isContentFile || !hasContentRouteForFile(changedFile)) return\n\n await refreshDevServer(ctx.server)\n return []\n },\n resolveId(id) {\n if (id === VIRTUAL_CLIENT_ENTRY || id === RESOLVED_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === VIRTUAL_CONFIG || id === resolveVirtualId(VIRTUAL_CONFIG)) return resolveVirtualId(VIRTUAL_CONFIG)\n if (id === VIRTUAL_ROUTES || id === resolveVirtualId(VIRTUAL_ROUTES)) return resolveVirtualId(VIRTUAL_ROUTES)\n if (id === VIRTUAL_SERVER_ROUTES || id === resolveVirtualId(VIRTUAL_SERVER_ROUTES)) return resolveVirtualId(VIRTUAL_SERVER_ROUTES)\n if (id === VIRTUAL_OPENAPI_REGISTRY || id === resolveVirtualId(VIRTUAL_OPENAPI_REGISTRY)) return resolveVirtualId(VIRTUAL_OPENAPI_REGISTRY)\n const route = routes.find(r => r.virtualModuleId === id || r.virtualModuleId === stripVirtualPrefix(id))\n if (route) return resolveVirtualId(route.virtualModuleId)\n return null\n },\n load(id) {\n return loadVirtualModule(id, virtualModules)\n },\n async configureServer(server) {\n server.watcher.add(contentRoot)\n if (configFilePath) {\n server.watcher.add(configFilePath)\n }\n\n const handleContentTreeChange = async (filePath: string) => {\n const changedFile = isAbsolute(filePath) ? filePath : join(root, filePath)\n const relativeContentFile = relative(contentRoot, changedFile)\n const isContentFile = relativeContentFile && !relativeContentFile.startsWith('..') && !isAbsolute(relativeContentFile)\n if (!isContentFile) return\n await refreshDevServer(server)\n }\n\n server.watcher.on('add', handleContentTreeChange)\n server.watcher.on('unlink', handleContentTreeChange)\n await runDevConfigureServerHooks(clarifyPlugins, server, ctx)\n },\n transformIndexHtml: {\n order: 'pre',\n async handler(html, transformCtx) {\n // In dev mode, use /@id/ prefix so Vite dev server can resolve the virtual module.\n // In build mode, use the bare virtual: ID so Vite's HTML build pipeline resolves it via resolveId.\n const clientEntryId = transformCtx.server\n ? `/@id/${VIRTUAL_CLIENT_ENTRY}`\n : VIRTUAL_CLIENT_ENTRY\n const result = await runHooks(clarifyPlugins, 'html:transform', {\n html,\n tags: [],\n clientEntryId,\n dev: Boolean(transformCtx.server),\n }, ctx)\n return {\n html: result.html,\n tags: result.tags,\n }\n }\n },\n async closeBundle() {\n // ── Phase 1: Static HTML Generation ──\n if (process.env.SKIP_CLARIFY_SSG) {\n await runBuildDoneHooks(clarifyPlugins, ctx)\n return\n }\n\n const outputDir = viteConfig.build.outDir\n const ssrOutputDir = join(outputDir, '.ssr')\n let tempEntryPath: string | undefined\n\n try {\n tempEntryPath = createTempEntryFile(SSR_ENTRY_CODE)\n\n await buildSSRBundle(root, tempEntryPath, ssrOutputDir, [\n {\n name: 'clarify:virtual-ssg',\n resolveId(id) {\n if (id === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === RESOLVED_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === VIRTUAL_CONFIG) return id\n if (id === VIRTUAL_ROUTES) return id\n if (id === VIRTUAL_SERVER_ROUTES) return id\n if (id === VIRTUAL_OPENAPI_REGISTRY) return id\n const route = routes.find(r => r.virtualModuleId === id)\n if (route) return id\n return null\n },\n load: id => loadVirtualModule(id, virtualModules),\n },\n normalizedMdxContentPlugin,\n mdx,\n ])\n\n const ssrBundlePath = join(ssrOutputDir, 'entry-server.js')\n await renderSSGRoutes(routes, projectConfig, outputDir, ssrBundlePath, generateOptions.ssg.failOnError)\n } catch (err) {\n console.error('[clarify] SSG failed:', err)\n if (generateOptions.ssg.failOnError) {\n throw err\n }\n } finally {\n if (tempEntryPath) {\n try {\n rmSync(tempEntryPath, { force: true })\n } catch {\n // ignore cleanup errors\n }\n }\n }\n\n await runBuildDoneHooks(clarifyPlugins, ctx)\n },\n }\n\n return [react(), tailwindcss(), normalizedMdxContentPlugin, clarifyCorePlugin, mdx].flat().filter(Boolean) as Plugin[]\n}\n\nexport type { Plugin } from 'vite'\n"],"mappings":"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"}
|
|
@@ -1146,7 +1146,14 @@ async function buildSSRBundle(root, ssrEntry, ssrOutDir, plugins) {
|
|
|
1146
1146
|
await (0, vite.build)({
|
|
1147
1147
|
root,
|
|
1148
1148
|
configFile: false,
|
|
1149
|
-
resolve: {
|
|
1149
|
+
resolve: {
|
|
1150
|
+
alias: createClarifyRuntimeAliases(),
|
|
1151
|
+
dedupe: [
|
|
1152
|
+
"react",
|
|
1153
|
+
"react-dom",
|
|
1154
|
+
"react-router-dom"
|
|
1155
|
+
]
|
|
1156
|
+
},
|
|
1150
1157
|
plugins,
|
|
1151
1158
|
build: {
|
|
1152
1159
|
ssr: ssrEntry,
|
|
@@ -1578,4 +1585,4 @@ Object.defineProperty(exports, "loadClarifyConfig", {
|
|
|
1578
1585
|
}
|
|
1579
1586
|
});
|
|
1580
1587
|
|
|
1581
|
-
//# sourceMappingURL=plugin-
|
|
1588
|
+
//# sourceMappingURL=plugin-knx05Xgp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-knx05Xgp.cjs","names":[],"sources":["../source/core/utils.ts","../source/parsers/mdx.ts","../source/parsers/frontmatter.ts","../source/parsers/routes.ts","../source/plugins/content-artifacts/artifacts.ts","../source/plugins/content-artifacts/server.ts","../source/plugins/content-artifacts/index.ts","../source/plugins/html-shell/index.ts","../source/plugins/openapi/parser.ts","../source/plugins/openapi/virtual-modules.ts","../source/plugins/openapi/index.ts","../source/core/config-schema.ts","../source/core/theme.ts","../source/core/config.ts","../source/core/hooks.ts","../source/core/options.ts","../source/core/runtime-deps.ts","../source/core/ssg.ts","../source/core/user-config.ts","../source/core/virtual-modules.ts","../source/core/plugin.ts"],"sourcesContent":["export function escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n","import GithubSlugger from 'github-slugger'\nimport { toString } from 'mdast-util-to-string'\nimport shiki, { type Highlighter } from 'shiki'\nimport { visit } from 'unist-util-visit'\n\nimport { markdownRemarkPlugins } from '@clarify-labs/renderer'\n\nimport { escapeHtml } from '../core/utils.js'\n\ntype HastNode = {\n type: string\n tagName?: string\n value?: string\n properties?: Record<string, unknown>\n children?: HastNode[]\n}\n\ntype HastParent = HastNode & {\n children: HastNode[]\n}\n\ntype ShikiRenderElementArgs = {\n children: string\n}\n\nfunction getLanguage(className: unknown): string {\n const classes = Array.isArray(className) ? className : typeof className === 'string' ? className.split(/\\s+/) : []\n const languageClass = classes.find((item): item is string => typeof item === 'string' && item.startsWith('language-'))\n return languageClass?.replace(/^language-/, '') || 'txt'\n}\n\nfunction getTextContent(node: HastNode | undefined): string {\n if (!node) return ''\n if (typeof node.value === 'string') return node.value\n return node.children?.map(getTextContent).join('') ?? ''\n}\n\nfunction renderPlainCode(code: string): string {\n return code\n .split('\\n')\n .map(line => `<span>${escapeHtml(line)}</span>`)\n .join('\\n')\n}\n\nlet highlighter: Highlighter | undefined\n\nasync function getHighlighter(): Promise<Highlighter> {\n highlighter = highlighter ?? await shiki.getHighlighter({ theme: 'css-variables' })\n return highlighter\n}\n\nexport function rehypeParseCodeBlocks() {\n return (tree: HastNode) => {\n visit(tree, 'element', (node: HastNode, _nodeIndex: number | undefined, parentNode: HastParent | undefined) => {\n if (node.tagName !== 'code' || !parentNode) return\n parentNode.properties = parentNode.properties ?? {}\n node.properties = node.properties ?? {}\n const language = getLanguage(node.properties.className)\n parentNode.properties.language = language\n node.properties.language = language\n })\n }\n}\n\nexport function rehypeShiki() {\n return async (tree: HastNode) => {\n const shikiHighlighter = await getHighlighter()\n\n visit(tree, 'element', (node: HastNode) => {\n if (node.tagName !== 'pre') return\n const codeNode = node.children?.[0]\n if (codeNode?.tagName !== 'code') return\n\n node.properties = node.properties ?? {}\n codeNode.properties = codeNode.properties ?? {}\n\n const code = getTextContent(codeNode)\n const language = typeof node.properties.language === 'string' ? node.properties.language : getLanguage(codeNode.properties.className)\n node.properties.code = code\n codeNode.properties.code = code\n codeNode.properties.language = language\n\n let highlighted = renderPlainCode(code)\n\n if (language && language !== 'txt') {\n try {\n const tokens = shikiHighlighter.codeToThemedTokens(code, language)\n highlighted = shiki.renderToHtml(tokens, {\n elements: {\n pre: ({ children }: ShikiRenderElementArgs) => children,\n code: ({ children }: ShikiRenderElementArgs) => children,\n line: ({ children }: ShikiRenderElementArgs) => `<span>${children}</span>`,\n },\n })\n } catch {\n highlighted = renderPlainCode(code)\n }\n }\n\n codeNode.children = [{ type: 'text', value: highlighted }]\n })\n }\n}\n\nexport function rehypeSlugSections() {\n return (tree: HastNode) => {\n const slugger = new GithubSlugger()\n\n visit(tree, 'element', (node: HastNode) => {\n if (node.tagName !== 'h2' && node.tagName !== 'h3') return\n\n node.properties = node.properties ?? {}\n if (node.properties.id) return\n\n node.properties.id = slugger.slug(toString(node))\n })\n }\n}\n\nexport const remarkPlugins = markdownRemarkPlugins\nexport const rehypePlugins = [rehypeSlugSections, rehypeParseCodeBlocks, rehypeShiki]\n","import matter from 'gray-matter'\n\nexport type ParsedFrontmatter = {\n frontmatter: Record<string, unknown>\n content: string\n}\n\n/**\n * 在内容入口统一解析 MDX frontmatter,并返回可供后续流程复用的标准化正文。\n */\nexport function parseFrontmatter(content: string): ParsedFrontmatter {\n const parsed = matter(content)\n return {\n frontmatter: parsed.data,\n content: parsed.content.replace(/^\\r?\\n/, ''),\n }\n}\n\n/**\n * 从 MDX 文件内容中提取 frontmatter。\n * 使用 gray-matter 支持 YAML frontmatter 的标准语法和类型解析。\n */\nexport function extractFrontmatter(content: string): Record<string, unknown> {\n return parseFrontmatter(content).frontmatter\n}\n\n/**\n * 移除 MDX 文件开头的 YAML frontmatter,保留页面正文。\n */\nexport function stripFrontmatter(content: string): string {\n return parseFrontmatter(content).content\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\n\nimport GithubSlugger from 'github-slugger'\nimport { toString } from 'mdast-util-to-string'\nimport { remark } from 'remark'\nimport { visit } from 'unist-util-visit'\n\nimport type { ContentRoute, ContentSection, ClarifyNavigationNode, ClarifyPagesConfig, ClarifyPagesGroup, ClarifyPagesItem, ClarifyLocalizedText, ClarifyTabsConfig, LocalizedNavigation, LocalizedTabbedNavigation, ResolvedClarifyI18nConfig, TabbedNavigation } from '../types.js'\n\nimport { parseFrontmatter } from './frontmatter.js'\n\nfunction kebabToTitle(str: string): string {\n return str\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\nfunction parseMdxTree(content: string) {\n return remark.parse(content)\n}\n\n/** 从内容中提取第一个 H1 标题 */\nfunction extractH1(content: string): string {\n const tree = parseMdxTree(content)\n let title = ''\n visit(tree, 'heading', (node) => {\n if (!title && node.depth === 1) {\n title = toString(node)\n }\n })\n return title\n}\n\n/** 从 MDX/Markdown 内容中提取 H2/H3 章节 */\nexport function extractMdxSections(content: string): ContentSection[] {\n const sections: ContentSection[] = []\n const slugger = new GithubSlugger()\n const tree = parseMdxTree(content)\n visit(tree, 'heading', (node) => {\n if (node.depth !== 2 && node.depth !== 3) return\n const title = toString(node)\n sections.push({ id: slugger.slug(title), title, level: node.depth })\n })\n return sections\n}\n\nfunction navigationSections(sections: ContentSection[]) {\n return sections.map(s => ({ id: s.id, title: s.title, badge: s.badge, tags: s.tags }))\n}\n\nfunction normalizePath(path: string): string {\n const clean = '/' + path.replace(/^\\/+|\\/+$/g, '')\n return clean === '/' ? '/' : clean.replace(/\\/+/g, '/')\n}\n\nexport function basePathFromRef(ref: string): string {\n const withoutExtension = ref.replace(/\\.mdx?$/, '').replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n return normalizePath(withoutExtension === 'index' ? '/' : withoutExtension.replace(/\\/index$/, ''))\n}\n\nexport function routePathFromRef(ref: string): string {\n return basePathFromRef(ref)\n}\n\nexport function virtualModuleIdFromRef(ref: string): string {\n return 'virtual:clarify-page/' + ref\n .replace(/\\.mdx?$/, '')\n .replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n .replace(/\\/+/g, '/')\n}\n\nexport function localizedRoutePath(basePath: string, locale: string, i18n: ResolvedClarifyI18nConfig): string {\n const normalizedBasePath = normalizePath(basePath)\n if (locale === i18n.defaultLocale) return normalizedBasePath\n const prefix = normalizePath(locale)\n return normalizedBasePath === '/' ? prefix : normalizePath(`${prefix}${normalizedBasePath}`)\n}\n\nexport function resolveLocalizedText(text: ClarifyLocalizedText | undefined, locale: string, fallbackLocale?: string): string | undefined {\n if (typeof text === 'string' || text === undefined) return text\n return text[locale] ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0]\n}\n\nexport function findContentRoutes(dir: string, base: string = dir): ContentRoute[] {\n const routes: ContentRoute[] = []\n if (!existsSync(dir)) return routes\n\n const entries = readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = join(dir, entry.name)\n if (entry.isDirectory()) {\n routes.push(...findContentRoutes(fullPath, base))\n } else if (entry.isFile() && /\\.mdx?$/.test(entry.name)) {\n const relativePath = relative(base, fullPath)\n const pathParts = relativePath.replace(/\\.mdx?$/, '').split('/')\n const path = '/' + pathParts.map(p => p === 'index' ? '' : p).filter(Boolean).join('/')\n const cleanPath = path.replace(/\\/+/g, '/').replace(/\\/$/, '') || '/'\n\n const source = readFileSync(fullPath, 'utf-8')\n const { frontmatter, content } = parseFrontmatter(source)\n\n let title = typeof frontmatter.title === 'string' ? frontmatter.title : ''\n if (!title) {\n const lastPart = pathParts[pathParts.length - 1] ?? ''\n const stem = lastPart === 'index'\n ? (pathParts.length >= 2 ? pathParts[pathParts.length - 2]! : extractH1(content))\n : lastPart\n title = kebabToTitle(stem) || 'Untitled'\n }\n\n routes.push({\n path: cleanPath,\n basePath: cleanPath,\n filePath: fullPath,\n virtualModuleId: 'virtual:clarify-page/' + relativePath.replace(/\\.mdx?$/, '').replace(/\\/+/g, '/'),\n title,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n keywords: frontmatterKeywords(frontmatter),\n kind: 'mdx',\n frontmatter,\n content,\n sections: extractMdxSections(content),\n })\n }\n }\n return routes\n}\n\nfunction virtualModuleIdForLocalizedRoute(contentRoot: string, filePath: string): string {\n return 'virtual:clarify-page/' + relative(contentRoot, filePath)\n .replace(/\\.mdx?$/, '')\n .replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n .replace(/\\/+/g, '/')\n}\n\nfunction frontmatterKeywords(frontmatter: Record<string, unknown>): string[] | undefined {\n const value = frontmatter.keywords ?? frontmatter.keyword ?? frontmatter.tags\n const keywords = Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : typeof value === 'string'\n ? value.split(',').map(keyword => keyword.trim()).filter(Boolean)\n : []\n\n return keywords.length > 0 ? keywords : undefined\n}\n\nfunction withAlternates(route: ContentRoute, routes: ContentRoute[], i18n: ResolvedClarifyI18nConfig): ContentRoute {\n const basePath = route.basePath ?? route.path\n const routeByLocaleAndBase = new Map(routes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const alternates = Object.fromEntries(\n i18n.locales.flatMap((locale) => {\n const alternate = routeByLocaleAndBase.get(`${locale.code}:${basePath}`)\n return alternate ? [[locale.code, alternate.path]] : []\n })\n )\n return { ...route, alternates }\n}\n\nexport function findLocalizedContentRoutes(contentRoot: string, i18n?: ResolvedClarifyI18nConfig): ContentRoute[] {\n if (!i18n) return findContentRoutes(contentRoot)\n\n const localizedRoutes: ContentRoute[] = []\n for (const locale of i18n.locales) {\n const localeRoot = join(contentRoot, locale.code)\n const discovered = findContentRoutes(localeRoot)\n for (const route of discovered) {\n const basePath = route.basePath ?? route.path\n localizedRoutes.push({\n ...route,\n path: localizedRoutePath(basePath, locale.code, i18n),\n basePath,\n locale: locale.code,\n virtualModuleId: virtualModuleIdForLocalizedRoute(contentRoot, route.filePath),\n })\n }\n }\n\n if (i18n.missing === 'fallback') {\n const routeByLocaleAndBase = new Map(localizedRoutes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const defaultRoutes = localizedRoutes.filter(route => route.locale === i18n.defaultLocale)\n for (const sourceRoute of defaultRoutes) {\n const basePath = sourceRoute.basePath ?? sourceRoute.path\n for (const locale of i18n.locales) {\n const key = `${locale.code}:${basePath}`\n if (routeByLocaleAndBase.has(key)) continue\n localizedRoutes.push({\n ...sourceRoute,\n path: localizedRoutePath(basePath, locale.code, i18n),\n locale: locale.code,\n isFallback: true,\n })\n }\n }\n }\n\n return localizedRoutes.map(route => withAlternates(route, localizedRoutes, i18n))\n}\n\nexport function buildNavigation(routes: ContentRoute[]): ClarifyNavigationNode[] {\n const root: ClarifyNavigationNode[] = []\n\n for (const route of routes) {\n if (route.path === '/') continue // 首页不放入侧边栏\n\n const parts = route.path.replace(/^\\//, '').split('/')\n let current = root\n\n for (let i = 0; i < parts.length; i++) {\n const pathSoFar = '/' + parts.slice(0, i + 1).join('/')\n let node = current.find(n => n.path === pathSoFar)\n if (!node) {\n node = { path: pathSoFar, title: i === parts.length - 1 ? route.title : kebabToTitle(parts[i]), children: [] }\n current.push(node)\n }\n if (i === parts.length - 1 && route.sections) {\n node.sections = navigationSections(route.sections)\n }\n if (i < parts.length - 1) {\n node.children = node.children ?? []\n current = node.children\n }\n }\n }\n\n return root\n}\n\nfunction resolvePageItem(\n item: ClarifyPagesItem\n): { pageRef?: string; openapiRef?: string; redirect?: string; title?: ClarifyLocalizedText; icon?: string } {\n if (typeof item === 'string') return { pageRef: item }\n if ('openapi' in item) return { openapiRef: item.openapi, title: item.title, icon: item.icon }\n return { pageRef: item.page, redirect: item.redirect, title: item.title, icon: item.icon }\n}\n\nfunction firstNavigationPath(nodes: ClarifyNavigationNode[]): string {\n for (const node of nodes) {\n if (node.path) return node.path\n const childPath = node.children ? firstNavigationPath(node.children) : undefined\n if (childPath) return childPath\n }\n return '/'\n}\n\nfunction buildNavigationFromPagesConfig(routes: ContentRoute[], config?: ClarifyPagesConfig): ClarifyNavigationNode[] {\n if (!config || config === 'FileTree') return buildNavigation(routes)\n return buildNavigationFromConfig(routes, config)\n}\n\nexport function buildNavigationFromTabsConfig(routes: ContentRoute[], tabs: ClarifyTabsConfig): TabbedNavigation {\n return {\n tabs: tabs.map(tab => {\n const children = buildNavigationFromPagesConfig(routes, tab.pages)\n return {\n type: 'tab',\n path: firstNavigationPath(children),\n title: resolveLocalizedText(tab.tab, '', '') ?? '',\n icon: tab.icon,\n children,\n }\n }),\n }\n}\n\nexport function buildNavigationFromConfig(routes: ContentRoute[], config: ClarifyPagesGroup[]): ClarifyNavigationNode[] {\n const routeMap = new Map(routes.map(r => [r.path, r]))\n\n return config.map(group => {\n const children = group.pages.map(item => {\n const { pageRef, openapiRef, redirect, title, icon } = resolvePageItem(item)\n\n if (openapiRef) {\n const path = '/' + openapiRef.replace(/\\.openapi\\.(json|yaml|yml)$/, '')\n const route = routeMap.get(path)\n return {\n path,\n title: resolveLocalizedText(title, '', '') ?? route?.title ?? kebabToTitle(path.split('/').pop() ?? openapiRef),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n }\n\n const ref = pageRef ?? ''\n const path = ref === 'index' ? '/' : '/' + ref\n const route = routeMap.get(path)\n return {\n path: redirect ? redirect : path,\n title: resolveLocalizedText(title, '', '') ?? route?.title ?? kebabToTitle(path.split('/').pop() ?? ref),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n })\n\n return {\n path: children[0]?.path ?? '/',\n title: resolveLocalizedText(group.group, '', '') ?? '',\n icon: group.icon,\n children,\n }\n })\n}\n\nfunction localizeNavigationPaths(nodes: ClarifyNavigationNode[], locale: string, i18n: ResolvedClarifyI18nConfig): ClarifyNavigationNode[] {\n return nodes.map(node => ({\n ...node,\n path: localizedRoutePath(node.path, locale, i18n),\n children: node.children ? localizeNavigationPaths(node.children, locale, i18n) : undefined,\n }))\n}\n\nexport function buildLocalizedNavigation(routes: ContentRoute[], config: ClarifyPagesConfig | undefined, i18n?: ResolvedClarifyI18nConfig): LocalizedNavigation | undefined {\n if (!i18n) return undefined\n\n const result: LocalizedNavigation = {}\n for (const locale of i18n.locales) {\n const localeRoutes = routes.filter(route => route.locale === locale.code)\n result[locale.code] = buildLocalizedNavigationForLocale(localeRoutes, config, locale.code, i18n)\n }\n\n return result\n}\n\nfunction buildLocalizedNavigationForLocale(routes: ContentRoute[], config: ClarifyPagesConfig | undefined, locale: string, i18n: ResolvedClarifyI18nConfig): ClarifyNavigationNode[] {\n if (!config || config === 'FileTree') {\n const baseNavigation = buildNavigation(routes.map(route => ({ ...route, path: route.basePath ?? route.path })))\n return localizeNavigationPaths(baseNavigation, locale, i18n)\n }\n\n const routeMap = new Map(routes.map(route => [route.basePath ?? route.path, route]))\n return config.map(group => {\n const children = group.pages.map(item => {\n const { pageRef, openapiRef, redirect, title, icon } = resolvePageItem(item)\n const ref = openapiRef ?? pageRef ?? ''\n const basePath = basePathFromRef(ref)\n const route = routeMap.get(basePath)\n const path = route?.path ?? localizedRoutePath(basePath, locale, i18n)\n const redirectPath = redirect ? localizedRoutePath(basePathFromRef(redirect), locale, i18n) : undefined\n\n return {\n path: redirectPath ?? path,\n title: resolveLocalizedText(title, locale, i18n.defaultLocale) ?? route?.title ?? kebabToTitle(basePath.split('/').pop() ?? ref),\n icon,\n sections: route?.sections ? navigationSections(route.sections) : undefined,\n }\n })\n\n return {\n path: children[0]?.path ?? localizedRoutePath('/', locale, i18n),\n title: resolveLocalizedText(group.group, locale, i18n.defaultLocale) ?? '',\n icon: group.icon,\n children,\n }\n })\n}\n\nexport function buildLocalizedNavigationFromTabsConfig(routes: ContentRoute[], tabs: ClarifyTabsConfig, i18n?: ResolvedClarifyI18nConfig): LocalizedTabbedNavigation | undefined {\n if (!i18n) return undefined\n\n const result: LocalizedTabbedNavigation = {}\n for (const locale of i18n.locales) {\n const localeRoutes = routes.filter(route => route.locale === locale.code)\n result[locale.code] = {\n tabs: tabs.map(tab => {\n const children = buildLocalizedNavigationForLocale(localeRoutes, tab.pages, locale.code, i18n)\n return {\n type: 'tab',\n path: firstNavigationPath(children),\n title: resolveLocalizedText(tab.tab, locale.code, i18n.defaultLocale) ?? '',\n icon: tab.icon,\n children,\n }\n }),\n }\n }\n\n return result\n}\n","import { mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, extname, join } from 'node:path'\n\nimport type { ContentRoute, ResolvedProjectConfig } from '../../types.js'\n\nconst UTF8_SIGNATURE = '\\uFEFF'\n\nfunction normalizeBasePath(basePath: string): string {\n if (!basePath || basePath === '/') return ''\n return '/' + basePath.replace(/^\\/+|\\/+$/g, '')\n}\n\nfunction containsNonAscii(content: string): boolean {\n return [...content].some(character => character.codePointAt(0)! > 0x7F)\n}\n\nfunction withUtf8Signature(content: string): string {\n if (!containsNonAscii(content) || content.startsWith(UTF8_SIGNATURE)) return content\n return `${UTF8_SIGNATURE}${content}`\n}\n\nfunction shouldUseUtf8Signature(route: ContentRoute): boolean {\n if (route.kind === 'mdx') return true\n return /\\.ya?ml$/i.test(route.contentArtifactUrl ?? '')\n}\n\nexport function routeToMarkdownArtifactUrl(routePath: string): string {\n const normalizedPath = routePath === '/' ? '/index' : routePath.replace(/\\/$/, '')\n return `${normalizedPath}.md`\n}\n\nexport function routeToOpenAPIArtifactUrl(routePath: string, filePath: string): string {\n const extension = extname(filePath).toLowerCase() || '.json'\n const normalizedPath = routePath === '/' ? '/index' : routePath.replace(/\\/$/, '')\n return `${normalizedPath}.openapi${extension}`\n}\n\nexport function attachContentArtifactUrls(routes: ContentRoute[]): void {\n for (const route of routes) {\n route.contentArtifactUrl = route.kind === 'openapi'\n ? routeToOpenAPIArtifactUrl(route.path, route.filePath)\n : routeToMarkdownArtifactUrl(route.path)\n }\n}\n\nexport function readRouteContent(route: ContentRoute): string {\n if (route.content !== undefined) return route.content\n throw new Error(`Route content is missing from route context: ${route.filePath}`)\n}\n\nexport function readRouteArtifactContent(route: ContentRoute): string {\n const content = readRouteContent(route)\n return shouldUseUtf8Signature(route) ? withUtf8Signature(content) : content\n}\n\nexport function writeContentArtifactFiles(routes: ContentRoute[], outputDirectory: string): void {\n for (const route of routes) {\n if (!route.contentArtifactUrl) continue\n\n const outFile = join(outputDirectory, route.contentArtifactUrl.replace(/^\\//, ''))\n mkdirSync(dirname(outFile), { recursive: true })\n writeFileSync(outFile, readRouteArtifactContent(route), 'utf-8')\n }\n}\n\nexport function createLlmsTxt(routes: ContentRoute[], projectConfig: ResolvedProjectConfig): string {\n const basePath = normalizeBasePath(projectConfig.routePrefix)\n const lines = [\n `# ${projectConfig.title}`,\n '',\n ]\n\n if (projectConfig.description) {\n lines.push(`> ${projectConfig.description}`, '')\n }\n\n lines.push('## Docs')\n for (const route of routes.filter(route => route.kind === 'mdx')) {\n if (!route.contentArtifactUrl) continue\n lines.push(`- [${route.title}](${basePath}${route.contentArtifactUrl})`)\n }\n\n const openApiRoutes = routes.filter(route => route.kind === 'openapi')\n if (openApiRoutes.length > 0) {\n lines.push('', '## OpenAPI')\n for (const route of openApiRoutes) {\n if (!route.contentArtifactUrl) continue\n lines.push(`- [${route.title}](${basePath}${route.contentArtifactUrl})`)\n }\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport function createLlmsTxtArtifact(routes: ContentRoute[], projectConfig: ResolvedProjectConfig): string {\n return withUtf8Signature(createLlmsTxt(routes, projectConfig))\n}\n\nexport function writeLlmsTxt(routes: ContentRoute[], projectConfig: ResolvedProjectConfig, outputDirectory: string): void {\n mkdirSync(outputDirectory, { recursive: true })\n writeFileSync(join(outputDirectory, 'llms.txt'), createLlmsTxtArtifact(routes, projectConfig), 'utf-8')\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\n\nimport type { ContentRoute, ResolvedProjectConfig } from '../../types.js'\n\nimport { createLlmsTxtArtifact, readRouteArtifactContent } from './artifacts.js'\n\nfunction normalizeRoutePrefix(routePrefix: string): string {\n if (!routePrefix || routePrefix === '/') return ''\n return `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}`\n}\n\nexport function resolveContentArtifactPath(url: string | undefined, projectConfig: ResolvedProjectConfig): string {\n const requestPath = url?.split('?')[0] ?? ''\n const basePath = normalizeRoutePrefix(projectConfig.routePrefix)\n return basePath && requestPath.startsWith(basePath)\n ? requestPath.slice(basePath.length) || '/'\n : requestPath\n}\n\nexport function resolveContentArtifactType(route: ContentRoute): string {\n if (route.kind === 'openapi' && /\\.ya?ml$/i.test(route.contentArtifactUrl ?? '')) {\n return 'text/yaml; charset=utf-8'\n }\n\n return route.kind === 'openapi'\n ? 'application/json; charset=utf-8'\n : 'text/markdown; charset=utf-8'\n}\n\nexport function serveContentArtifacts(req: IncomingMessage, res: ServerResponse, projectConfig: ResolvedProjectConfig, routes: ContentRoute[]): boolean {\n const contentPath = resolveContentArtifactPath(req.url, projectConfig)\n\n if (contentPath === '/llms.txt') {\n res.statusCode = 200\n res.setHeader('Content-Type', 'text/plain; charset=utf-8')\n res.end(createLlmsTxtArtifact(routes, projectConfig), 'utf8')\n return true\n }\n\n const route = routes.find(route => route.contentArtifactUrl === contentPath)\n if (!route) return false\n\n res.statusCode = 200\n res.setHeader('Content-Type', resolveContentArtifactType(route))\n res.end(readRouteArtifactContent(route), 'utf8')\n return true\n}\n","import type { ViteDevServer } from 'vite'\n\nimport type { ClarifyPlugin } from '../../types.js'\n\nimport { attachContentArtifactUrls, writeContentArtifactFiles, writeLlmsTxt } from './artifacts.js'\nimport { serveContentArtifacts } from './server.js'\n\nexport function createContentArtifactsPlugin(): ClarifyPlugin {\n return {\n name: 'clarify:content-artifacts',\n hooks: {\n 'routes:resolved': (input) => {\n attachContentArtifactUrls(input.routes)\n return input\n },\n 'dev:configureServer': (server: ViteDevServer, ctx) => {\n server.middlewares.use((req, res, next) => {\n if (serveContentArtifacts(req, res, ctx.projectConfig, ctx.routes)) return\n next()\n })\n },\n 'build:done': (ctx) => {\n const outputDirectory = ctx.generateOptions.outputDirectory\n if (!outputDirectory) return\n writeContentArtifactFiles(ctx.routes, outputDirectory)\n writeLlmsTxt(ctx.routes, ctx.projectConfig, outputDirectory)\n },\n },\n }\n}\n","import type { HtmlTagDescriptor } from 'vite'\n\nimport type { ClarifyFaviconConfig, ClarifyPlugin } from '../../types.js'\n\nconst THEME_BOOTSTRAP_SCRIPT = `(function(){try{var e=localStorage.getItem('clarify:theme');var t=e==='dark'||e==='light'||e==='system'?e:'system';var r=t==='system'?window.matchMedia('(prefers-color-scheme: dark)').matches:t==='dark';document.documentElement.classList.toggle('dark',r);document.documentElement.style.colorScheme=r?'dark':'light'}catch(e){}})();`\n\nconst REL_ICON_RE = /<link\\s+[^>]*rel=[\"'][^\"']*\\bicon\\b[^\"']*[\"'][^>]*>/i\n\nfunction inferIconType(href: string): string | undefined {\n const path = href.split(/[?#]/, 1)[0]?.toLowerCase() ?? href.toLowerCase()\n\n if (path.endsWith('.svg')) return 'image/svg+xml'\n if (path.endsWith('.png')) return 'image/png'\n if (path.endsWith('.ico')) return 'image/x-icon'\n if (path.endsWith('.webp')) return 'image/webp'\n\n return undefined\n}\n\nfunction createIconTag(href: string, media?: string): HtmlTagDescriptor {\n return {\n tag: 'link',\n attrs: {\n rel: 'icon',\n ...(inferIconType(href) ? { type: inferIconType(href) } : {}),\n href,\n ...(media ? { media } : {}),\n },\n injectTo: 'head',\n }\n}\n\nfunction createIconTags(icon?: ClarifyFaviconConfig): HtmlTagDescriptor[] {\n if (!icon) return []\n\n if (typeof icon === 'string') return [createIconTag(icon)]\n\n const lightIcon = icon.light ?? icon.dark\n const darkIcon = icon.dark ?? icon.light\n\n if (!lightIcon || !darkIcon) return []\n if (lightIcon === darkIcon) return [createIconTag(lightIcon)]\n\n return [\n createIconTag(lightIcon, '(prefers-color-scheme: light)'),\n createIconTag(darkIcon, '(prefers-color-scheme: dark)'),\n ]\n}\n\nexport function createHtmlShellPlugin(): ClarifyPlugin {\n return {\n name: 'clarify:html-shell',\n hooks: {\n 'html:transform': (input, ctx) => ({\n html: input.html,\n tags: [\n ...input.tags,\n ...(REL_ICON_RE.test(input.html) ? [] : createIconTags(ctx.projectConfig.favicon ?? ctx.projectConfig.logo)),\n {\n tag: 'script',\n children: THEME_BOOTSTRAP_SCRIPT,\n injectTo: 'head-prepend',\n },\n {\n tag: 'script',\n attrs: { type: 'module', src: input.clientEntryId },\n injectTo: 'body',\n },\n ],\n clientEntryId: input.clientEntryId,\n dev: input.dev,\n }),\n },\n }\n}\n","import { existsSync, readFileSync, readdirSync } from 'node:fs'\nimport { join, relative } from 'node:path'\n\nimport SwaggerParser from '@apidevtools/swagger-parser'\nimport { slug } from 'github-slugger'\n\nimport { routePathFromRef, virtualModuleIdFromRef } from '../../parsers/routes.js'\nimport type { ContentDiagnostic, ContentRoute, ContentSection, OpenAPISpec } from '../../types.js'\n\nconst OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIParseResult =\n | { ok: true; spec: OpenAPISpec }\n | { ok: false; diagnostic: ContentDiagnostic }\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction kebabToTitle(str: string): string {\n return str\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\nexport function findOpenAPIRoutes(dir: string, base: string = dir): ContentRoute[] {\n const routes: ContentRoute[] = []\n if (!existsSync(dir)) return routes\n\n const entries = readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = join(dir, entry.name)\n if (entry.isDirectory()) {\n routes.push(...findOpenAPIRoutes(fullPath, base))\n continue\n }\n if (!entry.isFile() || !/\\.openapi\\.(json|yaml|yml)$/.test(entry.name)) continue\n\n const ref = relative(base, fullPath)\n const cleanPath = routePathFromRef(ref)\n routes.push({\n path: cleanPath,\n basePath: cleanPath,\n filePath: fullPath,\n virtualModuleId: virtualModuleIdFromRef(ref),\n title: kebabToTitle(cleanPath.split('/').pop() ?? 'API'),\n kind: 'openapi',\n content: readFileSync(fullPath, 'utf-8'),\n })\n }\n\n return routes\n}\n\n/** Extract endpoint operations from an OpenAPI spec as page sections. */\nexport function extractOpenAPISections(spec: OpenAPISpec): ContentSection[] {\n const sections: ContentSection[] = []\n const paths = spec.paths ?? {}\n for (const [path, pathItem] of Object.entries(paths)) {\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const op = pathItem[method]\n if (!op) continue\n const title = op.summary ?? `${method.toUpperCase()} ${path}`\n sections.push({ id: slug(`${method} ${path}`), title, level: 2, badge: method.toUpperCase() })\n }\n }\n return sections\n}\n\nexport async function readOpenAPISpec(filePath: string): Promise<OpenAPIParseResult> {\n try {\n return { ok: true, spec: await SwaggerParser.dereference(filePath) as OpenAPISpec }\n } catch (error) {\n return {\n ok: false,\n diagnostic: {\n title: 'OpenAPI spec parse failed',\n message: `Clarify could not parse ${filePath}.`,\n filePath,\n cause: errorMessage(error),\n },\n }\n }\n}\n","import type { ContentDiagnostic, OpenAPISpec } from '../../types.js'\n\nexport const openApiRegistryModuleId = 'virtual:clarify-openapi-registry'\n\nexport function generateOpenAPIRegistryModule(openApis: Record<string, OpenAPISpec>): string {\n return `export const openApis = ${JSON.stringify(openApis)};`\n}\n\nexport function generateOpenAPIModule(spec: OpenAPISpec): string {\n return `import { createElement } from 'react';\nimport { OpenApiDocument } from '@clarify-labs/renderer';\nconst spec = ${JSON.stringify(spec)};\nexport default function OpenApiRoutePage() {\n return createElement(OpenApiDocument, { spec });\n}`\n}\n\nexport function generateOpenAPIErrorModule(diagnostic: ContentDiagnostic): string {\n return `import { createElement } from 'react';\nconst diagnostic = ${JSON.stringify(diagnostic)};\nexport default function OpenApiErrorRoutePage() {\n return createElement('article', { className: 'flex h-full flex-col pt-16 pb-10' },\n createElement('div', { className: 'prose max-w-none flex-auto dark:prose-invert' },\n createElement('p', { className: 'mb-3 text-xs/6 font-medium tracking-widest text-red-500 uppercase dark:text-red-400' }, 'OpenAPI Error'),\n createElement('h1', null, diagnostic.title),\n createElement('p', { className: 'lead' }, diagnostic.message),\n diagnostic.filePath ? createElement('div', { className: 'not-prose mt-6 rounded-lg border border-zinc-200 bg-zinc-50 p-4 text-sm dark:border-white/10 dark:bg-white/5' },\n createElement('div', { className: 'mb-1 font-semibold text-zinc-900 dark:text-white' }, 'File'),\n createElement('code', { className: 'break-all text-zinc-700 dark:text-zinc-300' }, diagnostic.filePath)\n ) : null,\n diagnostic.cause ? createElement('div', { className: 'not-prose mt-4 rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-800 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200' },\n createElement('div', { className: 'mb-1 font-semibold' }, 'Why it happened'),\n createElement('pre', { className: 'whitespace-pre-wrap break-words text-xs' }, diagnostic.cause)\n ) : null\n )\n );\n}`\n}\n","import type { ClarifyPlugin, OpenAPISpec } from '../../types.js'\n\nimport { extractOpenAPISections, findOpenAPIRoutes, readOpenAPISpec } from './parser.js'\nimport { generateOpenAPIErrorModule, generateOpenAPIModule, generateOpenAPIRegistryModule, openApiRegistryModuleId } from './virtual-modules.js'\n\nexport function createOpenAPIPlugin(): ClarifyPlugin {\n const specs: Record<string, OpenAPISpec> = {}\n\n return {\n name: 'clarify:openapi',\n hooks: {\n 'routes:discover': (input) => ({\n ...input,\n routes: [...input.routes, ...findOpenAPIRoutes(input.contentRoot)],\n }),\n 'routes:discovered': async (routes) => {\n for (const key of Object.keys(specs)) delete specs[key]\n\n for (const route of routes.filter(route => route.kind === 'openapi')) {\n const result = await readOpenAPISpec(route.filePath)\n if (!result.ok) {\n route.diagnostic = result.diagnostic\n route.title = route.title || 'OpenAPI parse error'\n route.sections = []\n continue\n }\n\n const spec = result.spec\n specs[route.virtualModuleId] = spec\n specs[`virtual:clarify-page/${route.path.replace(/^\\//, '')}`] = spec\n route.title = spec.info?.title ?? route.title\n route.description = spec.info?.description ?? route.description\n route.sections = extractOpenAPISections(spec)\n }\n\n return routes\n },\n 'modules:before': (modules, ctx) => {\n modules.set(openApiRegistryModuleId, generateOpenAPIRegistryModule(specs))\n\n for (const [moduleId, spec] of Object.entries(specs)) {\n modules.set(moduleId, generateOpenAPIModule(spec))\n }\n\n for (const route of ctx.routes.filter(route => route.kind === 'openapi' && route.diagnostic)) {\n if (route.diagnostic) modules.set(route.virtualModuleId, generateOpenAPIErrorModule(route.diagnostic))\n }\n\n return modules\n },\n },\n }\n}\n","import { z } from 'zod'\n\nimport type { ClarifyProjectConfig } from '../types.js'\n\nexport const clarifyLogoConfigSchema = z.union([\n z.string(),\n z.object({\n light: z.string().optional(),\n dark: z.string().optional(),\n }),\n])\n\nexport const clarifyFaviconConfigSchema = z.union([\n z.string(),\n z.object({\n light: z.string().optional(),\n dark: z.string().optional(),\n }),\n])\n\nexport const clarifyLocalizedTextSchema = z.union([\n z.string(),\n z.record(z.string(), z.string()),\n])\n\nexport const clarifyLocaleConfigSchema = z.object({\n code: z.string(),\n label: z.string(),\n dir: z.union([z.literal('ltr'), z.literal('rtl')]).optional(),\n})\n\nexport const clarifyI18nConfigSchema = z.object({\n defaultLocale: z.string().optional(),\n missing: z.union([z.literal('fallback'), z.literal('404'), z.literal('hide')]).optional(),\n locales: z.array(clarifyLocaleConfigSchema).min(1),\n}).superRefine((config, ctx) => {\n const localeCodes = new Set<string>()\n for (const [index, locale] of config.locales.entries()) {\n if (localeCodes.has(locale.code)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate locale code \"${locale.code}\"`,\n path: ['locales', index, 'code'],\n })\n }\n localeCodes.add(locale.code)\n }\n\n if (config.defaultLocale && !localeCodes.has(config.defaultLocale)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'defaultLocale must be one of i18n.locales',\n path: ['defaultLocale'],\n })\n }\n})\n\nexport const clarifyNavbarLinkSchema = z.object({\n label: clarifyLocalizedTextSchema,\n href: z.string(),\n external: z.boolean().optional(),\n})\n\nexport const clarifyBannerConfigSchema = z.object({\n content: clarifyLocalizedTextSchema,\n dismissible: z.boolean().optional(),\n})\n\nexport const clarifyFooterConfigSchema = z.object({\n links: z.array(clarifyNavbarLinkSchema).optional(),\n socials: z.record(z.string(), z.string()).optional(),\n copyright: clarifyLocalizedTextSchema.optional(),\n})\n\nexport const clarifyPagesItemSchema = z.union([\n z.string(),\n z.object({\n page: z.string(),\n title: clarifyLocalizedTextSchema.optional(),\n icon: z.string().optional(),\n redirect: z.string().optional(),\n }),\n z.object({\n openapi: z.string(),\n icon: z.string().optional(),\n title: clarifyLocalizedTextSchema.optional(),\n }),\n])\n\nexport const clarifyPagesGroupSchema = z.object({\n group: clarifyLocalizedTextSchema,\n icon: z.string().optional(),\n pages: z.array(clarifyPagesItemSchema),\n})\n\nexport const clarifyPagesConfigSchema = z.union([\n z.array(clarifyPagesGroupSchema),\n z.literal('FileTree'),\n])\n\nexport const clarifyTabItemSchema = z.object({\n tab: clarifyLocalizedTextSchema,\n icon: z.string().optional(),\n pages: clarifyPagesConfigSchema.optional(),\n})\n\nexport const clarifyTabsConfigSchema = z.array(clarifyTabItemSchema)\n\nexport const clarifyThemePresetSchema = z.enum(['default', 'base'])\n\nexport const clarifyThemeColorTokensConfigSchema = z.object({\n primary: z.string().optional(),\n accent: z.string().optional(),\n background: z.string().optional(),\n foreground: z.string().optional(),\n surface: z.string().optional(),\n muted: z.string().optional(),\n border: z.string().optional(),\n codeBackground: z.string().optional(),\n})\n\nexport const clarifyThemeRadiusTokensConfigSchema = z.object({\n sm: z.string().optional(),\n md: z.string().optional(),\n lg: z.string().optional(),\n xl: z.string().optional(),\n})\n\nexport const clarifyThemeTokensConfigSchema = z.object({\n colors: clarifyThemeColorTokensConfigSchema.optional(),\n radius: clarifyThemeRadiusTokensConfigSchema.optional(),\n})\n\nexport const clarifyThemeLayoutConfigSchema = z.object({\n maxWidth: z.string().optional(),\n})\n\nexport const clarifyThemeConfigSchema = z.object({\n preset: clarifyThemePresetSchema.optional(),\n tokens: clarifyThemeTokensConfigSchema.optional(),\n layout: clarifyThemeLayoutConfigSchema.optional(),\n})\n\nexport const clarifyProjectConfigSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n logo: clarifyLogoConfigSchema.optional(),\n favicon: clarifyFaviconConfigSchema.optional(),\n theme: clarifyThemeConfigSchema.optional(),\n routePrefix: z.string().optional(),\n navbar: z.object({\n links: z.array(clarifyNavbarLinkSchema).optional(),\n }).optional(),\n banner: clarifyBannerConfigSchema.optional(),\n footer: clarifyFooterConfigSchema.optional(),\n i18n: clarifyI18nConfigSchema.optional(),\n tabs: clarifyTabsConfigSchema.optional(),\n}) satisfies z.ZodType<ClarifyProjectConfig>\n\nexport type ClarifyProjectConfigInput = z.input<typeof clarifyProjectConfigSchema>\n","import type { ClarifyThemeConfig, ClarifyThemePreset, ResolvedClarifyThemeConfig } from '../types.js'\n\nexport const clarifyThemePresets = {\n default: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#00D492',\n accent: '#00F6C9',\n background: '#ffffff',\n foreground: '#111827',\n surface: '#ffffff',\n muted: '#64748b',\n border: 'rgb(15 23 42 / 0.12)',\n codeBackground: '#f7fefb',\n },\n radius: {\n sm: '6px',\n md: '10px',\n lg: '14px',\n xl: '18px',\n },\n },\n layout: {\n maxWidth: '82rem',\n },\n },\n base: {\n preset: 'base',\n tokens: {\n colors: {\n primary: '#18181b',\n accent: '#52525b',\n background: '#ffffff',\n foreground: '#18181b',\n surface: '#ffffff',\n muted: '#71717a',\n border: 'rgb(24 24 27 / 0.12)',\n codeBackground: '#f4f4f5',\n },\n radius: {\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n },\n },\n layout: {\n maxWidth: '80rem',\n },\n },\n} as const satisfies Record<ClarifyThemePreset, ResolvedClarifyThemeConfig>\n\nexport function resolveThemeConfig(theme: ClarifyThemeConfig = {}): ResolvedClarifyThemeConfig {\n const preset = theme.preset ?? 'default'\n const presetTheme = clarifyThemePresets[preset]\n\n return {\n preset,\n tokens: {\n colors: {\n ...presetTheme.tokens.colors,\n ...theme.tokens?.colors,\n },\n radius: {\n ...presetTheme.tokens.radius,\n ...theme.tokens?.radius,\n },\n },\n layout: {\n ...presetTheme.layout,\n ...theme.layout,\n },\n }\n}\n","import type { ZodError } from 'zod'\n\nimport type { ClarifyI18nConfig, ClarifyProjectConfig, ResolvedClarifyI18nConfig, ResolvedProjectConfig } from '../types.js'\n\nimport { clarifyProjectConfigSchema } from './config-schema.js'\nimport { resolveThemeConfig } from './theme.js'\n\nfunction formatIssuePath(path: PropertyKey[]): string {\n return path.reduce<string>((result, segment) => {\n if (typeof segment === 'number') return `${result}[${segment}]`\n const key = String(segment)\n return result ? `${result}.${key}` : key\n }, '')\n}\n\nfunction formatProjectConfigError(error: ZodError): string {\n const issue = error.issues[0]\n if (!issue) return '[clarify] config is invalid'\n\n const path = formatIssuePath(issue.path)\n if (!path) return `[clarify] config must contain an object: ${issue.message}`\n\n return `[clarify] config field \"${path}\" is invalid: ${issue.message}`\n}\n\nexport function validateProjectConfig(value: unknown): ClarifyProjectConfig {\n const result = clarifyProjectConfigSchema.safeParse(value)\n if (!result.success) {\n throw new Error(formatProjectConfigError(result.error))\n }\n return result.data\n}\n\nfunction resolveI18nConfig(i18n?: ClarifyI18nConfig): ResolvedClarifyI18nConfig | undefined {\n if (!i18n) return undefined\n\n const firstLocale = i18n.locales[0]?.code\n const defaultLocale = i18n.defaultLocale ?? firstLocale\n if (!defaultLocale) return undefined\n\n return {\n defaultLocale,\n missing: i18n.missing ?? 'fallback',\n locales: i18n.locales,\n }\n}\n\nexport function resolveProjectConfig(config: ClarifyProjectConfig = {}): ResolvedProjectConfig {\n return {\n title: config.title ?? 'Clarify Docs',\n description: config.description ?? '',\n logo: config.logo,\n favicon: config.favicon,\n routePrefix: config.routePrefix ?? '/',\n theme: resolveThemeConfig(config.theme),\n navbar: config.navbar,\n banner: config.banner,\n footer: config.footer,\n i18n: resolveI18nConfig(config.i18n),\n tabs: config.tabs,\n }\n}\n","import type { ViteDevServer } from 'vite'\n\nimport type { ClarifyHookContext, ClarifyHooks, ClarifyPlugin } from '../types.js'\n\nexport async function runHooks<K extends Exclude<keyof ClarifyHooks, 'build:done' | 'dev:configureServer'>>(plugins: ClarifyPlugin[], hookName: K, input: Parameters<NonNullable<ClarifyHooks[K]>>[0], ctx: ClarifyHookContext): Promise<Parameters<NonNullable<ClarifyHooks[K]>>[0]> {\n let result = input\n for (const plugin of plugins) {\n const hook = plugin.hooks[hookName]\n if (!hook) continue\n try {\n result = await hook(result as never, ctx) as Parameters<NonNullable<ClarifyHooks[K]>>[0]\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"${hookName}\" failed: ${err}`, { cause: err })\n }\n }\n return result\n}\n\nexport async function runDevConfigureServerHooks(plugins: ClarifyPlugin[], server: ViteDevServer, ctx: ClarifyHookContext): Promise<void> {\n for (const plugin of plugins) {\n const hook = plugin.hooks['dev:configureServer']\n if (!hook) continue\n try {\n await hook(server, ctx)\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"dev:configureServer\" failed: ${err}`, { cause: err })\n }\n }\n}\n\nexport async function runBuildDoneHooks(plugins: ClarifyPlugin[], ctx: ClarifyHookContext): Promise<void> {\n for (const plugin of plugins) {\n const hook = plugin.hooks['build:done']\n if (!hook) continue\n try {\n await hook(ctx)\n } catch (err) {\n throw new Error(`[clarify] plugin \"${plugin.name}\" hook \"build:done\" failed: ${err}`, { cause: err })\n }\n }\n}\n","import type { ClarifyPlugin, ClarifyProjectConfig } from '../types.js'\n\nexport type ClarifyBuildOptions = ClarifyProjectConfig & {\n /** Project root directory. Defaults to the current working directory. */\n projectRoot?: string\n /** Root directory for MDX content. Default: 'source' */\n rootDirectory?: string\n /** Output directory for the built docs site. When omitted, Vite's build.outDir is used. */\n outputDirectory?: string\n /** Static generation behavior. */\n ssg?: {\n /** Fail the build when SSG fails. Default: true. */\n failOnError?: boolean\n }\n\n /** Clarify plugin extensions for translation, search, and other build-time features. */\n plugins?: ClarifyPlugin[]\n}\n\nexport type ResolvedBuildOptions = {\n rootDirectory: string\n outputDirectory?: string\n ssg: {\n failOnError: boolean\n }\n}\n\nexport function resolveBuildOptions(options: ClarifyBuildOptions = {}): ResolvedBuildOptions {\n return {\n rootDirectory: options.rootDirectory ?? 'source',\n outputDirectory: options.outputDirectory,\n ssg: {\n failOnError: options.ssg?.failOnError ?? true,\n },\n }\n}\n","import { readFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\n\nimport type { AliasOptions } from 'vite'\n\nconst requireFromCli = createRequire(import.meta.url)\n\nfunction resolveCliDependency(id: string): string {\n return requireFromCli.resolve(id)\n}\n\nfunction resolvePackageExport(packageName: string, subpath: string, condition: 'import' | 'require' = 'import'): string {\n const packageJsonPath = requireFromCli.resolve(`${packageName}/package.json`)\n const packageRoot = dirname(packageJsonPath)\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n exports?: Record<string, string | Record<string, string>>\n }\n const exportKey = subpath ? `./${subpath}` : '.'\n const exportEntry = packageJson.exports?.[exportKey]\n const target = typeof exportEntry === 'string'\n ? exportEntry\n : exportEntry?.[condition] ?? exportEntry?.default\n\n if (!target) {\n throw new Error(`[clarify] Unable to resolve ${packageName}/${subpath}`)\n }\n\n return join(packageRoot, target)\n}\n\n/**\n * Resolve Clarify's framework/runtime dependencies from the CLI package instead\n * of from the user's documentation project. This keeps content-only projects\n * free from React, renderer, and tsconfig requirements.\n */\nexport function createClarifyRuntimeAliases(): AliasOptions {\n return [\n { find: /^@clarify-labs\\/renderer\\/style\\.css$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'style.css') },\n { find: /^@clarify-labs\\/renderer\\/client$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'client') },\n { find: /^@clarify-labs\\/renderer\\/server$/, replacement: resolvePackageExport('@clarify-labs/renderer', 'server') },\n { find: /^@clarify-labs\\/renderer$/, replacement: resolvePackageExport('@clarify-labs/renderer', '') },\n { find: /^react\\/jsx-runtime$/, replacement: resolveCliDependency('react/jsx-runtime') },\n { find: /^react\\/jsx-dev-runtime$/, replacement: resolveCliDependency('react/jsx-dev-runtime') },\n { find: /^react-dom\\/client$/, replacement: resolveCliDependency('react-dom/client') },\n { find: /^react-dom\\/server$/, replacement: resolveCliDependency('react-dom/server') },\n { find: /^react-dom$/, replacement: resolveCliDependency('react-dom') },\n { find: /^react-router-dom$/, replacement: resolveCliDependency('react-router-dom') },\n { find: /^react$/, replacement: resolveCliDependency('react') },\n ]\n}\n","import { existsSync, readFileSync, mkdirSync, writeFileSync, mkdtempSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join, dirname } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport { build } from 'vite'\nimport type { Plugin } from 'vite'\n\nimport type { ResolvedProjectConfig, ContentRoute } from '../types.js'\n\nimport { createClarifyRuntimeAliases } from './runtime-deps.js'\nimport { escapeHtml } from './utils.js'\n\nexport function readIndexHtml(outputDirectory: string): string | undefined {\n const indexPath = join(outputDirectory, 'index.html')\n if (!existsSync(indexPath)) return undefined\n try {\n return readFileSync(indexPath, 'utf-8')\n } catch {\n return undefined\n }\n}\n\nfunction injectHtmlLocaleAttributes(html: string, projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n const localeCode = route?.locale ?? projectConfig.i18n?.defaultLocale\n if (!localeCode) return html\n\n const localeConfig = projectConfig.i18n?.locales.find(locale => locale.code === localeCode)\n const dir = localeConfig?.dir\n\n return html.replace(/<html\\b([^>]*)>/i, (_match, attributes: string) => {\n let nextAttributes = attributes\n .replace(/\\s+lang=(\"[^\"]*\"|'[^']*'|[^\\s>]*)/i, '')\n .replace(/\\s+dir=(\"[^\"]*\"|'[^']*'|[^\\s>]*)/i, '')\n\n nextAttributes = `${nextAttributes} lang=\"${escapeHtml(localeCode)}\"`\n if (dir) nextAttributes = `${nextAttributes} dir=\"${escapeHtml(dir)}\"`\n return `<html${nextAttributes}>`\n })\n}\n\nfunction routeTitle(projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n const title = route?.title?.trim()\n if (!title || title === projectConfig.title) return projectConfig.title\n return `${title} - ${projectConfig.title}`\n}\n\nfunction setNamedMeta(html: string, name: string, content: string | undefined): string {\n const metaPattern = new RegExp(`<meta\\\\b(?=[^>]*\\\\bname=[\"']${name}[\"'])[^>]*>\\\\n?`, 'i')\n if (!content) return html.replace(metaPattern, '')\n\n const meta = `<meta name=\"${name}\" content=\"${escapeHtml(content)}\" />`\n if (metaPattern.test(html)) return html.replace(metaPattern, meta)\n return html.replace('</head>', ` ${meta}\\n </head>`)\n}\n\nexport function injectSSRIntoTemplate(template: string, appHtml: string, projectConfig: ResolvedProjectConfig, route?: ContentRoute): string {\n let html = injectHtmlLocaleAttributes(template, projectConfig, route)\n\n // Replace <title>...</title>\n html = html.replace(/<title>.*?<\\/title>/, `<title>${escapeHtml(routeTitle(projectConfig, route))}</title>`)\n\n html = setNamedMeta(html, 'description', route?.description ?? projectConfig.description)\n html = setNamedMeta(html, 'keywords', route?.keywords?.join(', '))\n\n // Replace <div id=\"root\">...</div> with SSR rendered content\n html = html.replace(/<div id=\"root\">[\\s\\S]*?<\\/div>/, `<div id=\"root\">${appHtml}</div>`)\n\n return html\n}\n\nexport const SSR_ENTRY_CODE = `import { renderToHTML } from '@clarify-labs/renderer/server';\nimport { routes, navigation } from 'virtual:clarify-routes/server';\nimport { config } from 'virtual:clarify-config';\nimport { openApis } from 'virtual:clarify-openapi-registry';\n\nexport function render(url) {\n return renderToHTML({ config, routes, navigation, openApis, url });\n}`\n\nexport function createTempEntryFile(content: string): string {\n const tempDir = mkdtempSync(join(tmpdir(), 'clarify-ssr-'))\n const entryPath = join(tempDir, 'entry-server.ts')\n writeFileSync(entryPath, content, 'utf-8')\n return entryPath\n}\n\nexport async function buildSSRBundle(root: string, ssrEntry: string, ssrOutDir: string, plugins: Plugin[]): Promise<void> {\n await build({\n root,\n configFile: false,\n resolve: {\n alias: createClarifyRuntimeAliases(),\n // Ensure all framework imports collapse to one module instance.\n dedupe: ['react', 'react-dom', 'react-router-dom'],\n },\n plugins,\n build: {\n ssr: ssrEntry,\n outDir: ssrOutDir,\n emptyOutDir: true,\n rolldownOptions: {\n input: ssrEntry,\n checks: {\n pluginTimings: false,\n },\n },\n },\n })\n}\n\nexport async function renderSSGRoutes(routes: ContentRoute[], projectConfig: ResolvedProjectConfig, outputDirectory: string, ssrBundlePath: string, failOnError: boolean = true): Promise<void> {\n const { render } = await import(pathToFileURL(ssrBundlePath).href)\n\n const template = readIndexHtml(outputDirectory)\n if (!template) {\n throw new Error(\n `[clarify] index.html not found in outputDirectory \"${outputDirectory}\". Make sure Vite build produces it.`\n )\n }\n\n for (const route of routes) {\n try {\n const appHtml = render(route.path)\n const finalHtml = injectSSRIntoTemplate(template, appHtml, projectConfig, route)\n\n const outFile = join(outputDirectory, route.path, 'index.html')\n mkdirSync(dirname(outFile), { recursive: true })\n writeFileSync(outFile, finalHtml, 'utf-8')\n } catch (err) {\n console.error(`[clarify] Failed to render route \"${route.path}\":`, err)\n if (failOnError) {\n throw err\n }\n }\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport { loadConfigFromFile } from 'vite'\nimport type { ConfigEnv } from 'vite'\n\nimport type { ClarifyProjectConfig } from '../types.js'\n\nimport { validateProjectConfig } from './config.js'\nimport type { ClarifyBuildOptions } from './options.js'\n\nexport type ClarifyConfig = ClarifyProjectConfig & Pick<ClarifyBuildOptions, 'plugins' | 'ssg'>\n\nexport function defineConfig(config: ClarifyConfig): ClarifyConfig {\n return config\n}\n\nconst CONFIG_FILENAMES = [\n 'clarify.ts',\n 'clarify.js',\n 'clarify.json',\n]\n\nexport function findClarifyConfigFile(root: string): string | undefined {\n for (const filename of CONFIG_FILENAMES) {\n const filePath = resolve(root, filename)\n if (existsSync(filePath)) return filePath\n }\n return undefined\n}\n\nfunction assertConfigObject(config: unknown, configFile: string): Record<string, unknown> {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n throw new Error(`[clarify] ${configFile} must export a configuration object`)\n }\n return config as Record<string, unknown>\n}\n\nfunction loadJsonConfig(configFile: string): ClarifyConfig {\n const config = assertConfigObject(JSON.parse(readFileSync(configFile, 'utf-8')), configFile)\n const projectConfig = validateProjectConfig(config)\n const ssg = config.ssg && typeof config.ssg === 'object' && !Array.isArray(config.ssg)\n ? config.ssg as ClarifyConfig['ssg']\n : undefined\n return {\n ...projectConfig,\n ...(ssg ? { ssg } : {}),\n }\n}\n\nexport async function loadClarifyConfig(root: string, env: ConfigEnv): Promise<ClarifyConfig> {\n const configFile = findClarifyConfigFile(root)\n if (!configFile) return {}\n\n if (configFile.endsWith('.json')) {\n return loadJsonConfig(configFile)\n }\n\n const loaded = await loadConfigFromFile(env, configFile, root, 'silent')\n const config = assertConfigObject(loaded?.config, configFile)\n return config as ClarifyConfig\n}\n","import { buildLocalizedNavigationFromTabsConfig, buildNavigation, buildNavigationFromTabsConfig } from '../parsers/routes.js'\nimport { openApiRegistryModuleId } from '../plugins/openapi/virtual-modules.js'\nimport type { ContentRoute, NavigationTree, ResolvedBuildOptions, ResolvedProjectConfig } from '../types.js'\n\nexport const VIRTUAL_CONFIG = 'virtual:clarify-config'\nexport const VIRTUAL_ROUTES = 'virtual:clarify-routes'\nexport const VIRTUAL_SERVER_ROUTES = 'virtual:clarify-routes/server'\nexport const VIRTUAL_OPENAPI_REGISTRY = openApiRegistryModuleId\nexport const VIRTUAL_CLIENT_ENTRY = 'virtual:clarify-entry-client'\nexport const RESOLVED_CLIENT_ENTRY = '\\0' + VIRTUAL_CLIENT_ENTRY\n\nexport type VirtualModules = Map<string, string>\n\ntype BuildVirtualModulesArgs = {\n projectConfig: ResolvedProjectConfig\n generateOptions: ResolvedBuildOptions\n routes: ContentRoute[]\n navigation?: NavigationTree\n}\n\nexport function resolveVirtualId(id: string): string {\n return '\\0' + id\n}\n\nexport function stripVirtualPrefix(id: string): string {\n return id.startsWith('\\0') ? id.slice(1) : id\n}\n\nexport function generateConfigModule(projectConfig: ResolvedProjectConfig, buildOptions: ResolvedBuildOptions): string {\n return `export const config = ${JSON.stringify({ ...projectConfig, ...buildOptions })};`\n}\n\nfunction moduleSpecifier(value: string): string {\n return JSON.stringify(value)\n}\n\nexport function generateRoutesModule(routes: ContentRoute[], resolvedNavigation?: NavigationTree, projectConfig?: ResolvedProjectConfig, mode: 'client' | 'server' = 'client'): string {\n const imports = mode === 'server'\n ? routes.map((r, i) => `import Page${i} from ${moduleSpecifier(r.virtualModuleId)};`).join('\\n')\n : ''\n const routesArray = routes.map((r, i) => {\n const sections = r.sections && r.sections.length > 0\n ? `, sections: ${JSON.stringify(r.sections.map(s => ({ id: s.id, title: s.title, badge: s.badge, tags: s.tags })))}`\n : ''\n const contentArtifactUrl = r.contentArtifactUrl ? `, contentArtifactUrl: ${JSON.stringify(r.contentArtifactUrl)}` : ''\n const basePath = r.basePath ? `, basePath: ${JSON.stringify(r.basePath)}` : ''\n const locale = r.locale ? `, locale: ${JSON.stringify(r.locale)}` : ''\n const isFallback = r.isFallback ? ', isFallback: true' : ''\n const alternates = r.alternates ? `, alternates: ${JSON.stringify(r.alternates)}` : ''\n const description = r.description ? `, description: ${JSON.stringify(r.description)}` : ''\n const keywords = r.keywords && r.keywords.length > 0 ? `, keywords: ${JSON.stringify(r.keywords)}` : ''\n const component = mode === 'server' ? `Page${i}` : `() => import(${moduleSpecifier(r.virtualModuleId)})`\n const lazy = mode === 'client' ? ', lazy: true' : ''\n return ` { path: ${JSON.stringify(r.path)}, title: ${JSON.stringify(r.title)}, component: ${component}${lazy}, kind: ${JSON.stringify(r.kind)}${basePath}${locale}${isFallback}${alternates}${description}${keywords}${sections}${contentArtifactUrl} }`\n }).join(',\\n')\n\n const navigation = resolvedNavigation ?? (projectConfig?.tabs\n ? projectConfig.i18n\n ? (buildLocalizedNavigationFromTabsConfig(routes, projectConfig.tabs, projectConfig.i18n) ?? {})\n : buildNavigationFromTabsConfig(routes, projectConfig.tabs)\n : buildNavigation(routes))\n\n return `${imports}\\n\\nexport const routes = [\\n${routesArray}\\n];\\n\\nexport const navigation = ${JSON.stringify(navigation, null, 2)};\\n`\n}\n\nexport function createClientEntryModule(): string {\n return `\nimport '@clarify-labs/renderer/style.css';\nimport { render } from '@clarify-labs/renderer/client';\nimport { routes, navigation } from '${VIRTUAL_ROUTES}';\nimport { config } from '${VIRTUAL_CONFIG}';\nimport { openApis } from '${VIRTUAL_OPENAPI_REGISTRY}';\nrender({ config, routes, navigation, openApis });`\n}\n\nexport function buildVirtualModules(args: BuildVirtualModulesArgs): VirtualModules {\n const modules: VirtualModules = new Map()\n modules.set(VIRTUAL_CONFIG, generateConfigModule(args.projectConfig, args.generateOptions))\n modules.set(VIRTUAL_ROUTES, generateRoutesModule(args.routes, args.navigation, args.projectConfig, 'client'))\n modules.set(VIRTUAL_SERVER_ROUTES, generateRoutesModule(args.routes, args.navigation, args.projectConfig, 'server'))\n modules.set(VIRTUAL_OPENAPI_REGISTRY, 'export const openApis = {};')\n modules.set(VIRTUAL_CLIENT_ENTRY, createClientEntryModule())\n modules.set(RESOLVED_CLIENT_ENTRY, createClientEntryModule())\n\n for (const route of args.routes) {\n if (route.kind === 'openapi') continue\n modules.set(route.virtualModuleId, `export { default } from ${moduleSpecifier(route.filePath)};`)\n }\n\n return modules\n}\n","import { rmSync } from 'node:fs'\nimport { isAbsolute, join, relative, resolve } from 'node:path'\n\nimport mdxPlugin from '@mdx-js/rollup'\nimport tailwindcss from '@tailwindcss/vite'\nimport react from '@vitejs/plugin-react'\nimport type { Plugin, ResolvedConfig, ViteDevServer } from 'vite'\n\nimport { rehypePlugins, remarkPlugins } from '../parsers/mdx.js'\nimport { buildLocalizedNavigationFromTabsConfig, buildNavigation, buildNavigationFromTabsConfig, findContentRoutes, localizedRoutePath, virtualModuleIdFromRef } from '../parsers/routes.js'\nimport { createContentArtifactsPlugin } from '../plugins/content-artifacts/index.js'\nimport { createHtmlShellPlugin } from '../plugins/html-shell/index.js'\nimport { createOpenAPIPlugin } from '../plugins/openapi/index.js'\nimport type { ClarifyHookContext, ClarifyPlugin, ContentRoute, NavigationTree, ResolvedClarifyI18nConfig } from '../types.js'\n\nimport { resolveProjectConfig } from './config.js'\nimport { runBuildDoneHooks, runDevConfigureServerHooks, runHooks } from './hooks.js'\nimport { resolveBuildOptions, type ClarifyBuildOptions } from './options.js'\nimport {\n SSR_ENTRY_CODE,\n createTempEntryFile,\n buildSSRBundle,\n renderSSGRoutes,\n} from './ssg.js'\nimport { findClarifyConfigFile, loadClarifyConfig } from './user-config.js'\nimport {\n RESOLVED_CLIENT_ENTRY,\n VIRTUAL_CLIENT_ENTRY,\n VIRTUAL_CONFIG,\n VIRTUAL_OPENAPI_REGISTRY,\n VIRTUAL_ROUTES,\n VIRTUAL_SERVER_ROUTES,\n buildVirtualModules,\n resolveVirtualId,\n stripVirtualPrefix,\n type VirtualModules,\n} from './virtual-modules.js'\n\nfunction loadVirtualModule(id: string, modules: VirtualModules): string | null {\n const bareId = stripVirtualPrefix(id)\n return modules.get(bareId) ?? modules.get(id) ?? null\n}\n\nexport function clarifyPlugin(options: ClarifyBuildOptions = {}): Plugin[] {\n const root = resolve(options.projectRoot ?? process.cwd())\n let projectConfig = resolveProjectConfig(options)\n let generateOptions = resolveBuildOptions(options)\n const contentRoot = join(root, generateOptions.rootDirectory)\n const configFilePath = findClarifyConfigFile(root)\n let routes: ContentRoute[] = []\n\n const clarifyPlugins: ClarifyPlugin[] = [createOpenAPIPlugin(), createContentArtifactsPlugin(), createHtmlShellPlugin(), ...(options.plugins ?? [])]\n const ctx: ClarifyHookContext = { projectConfig, generateOptions, routes, navigation: [] }\n let viteConfig: ResolvedConfig\n let resolvedNavigation: NavigationTree = []\n let virtualModules: VirtualModules = new Map()\n\n async function reloadProjectConfig() {\n const userConfig = await loadClarifyConfig(root, { command: 'serve', mode: viteConfig.mode })\n const buildOptions: ClarifyBuildOptions = {\n ...userConfig,\n projectRoot: options.projectRoot,\n rootDirectory: options.rootDirectory,\n outputDirectory: options.outputDirectory,\n }\n projectConfig = resolveProjectConfig(buildOptions)\n generateOptions = resolveBuildOptions(buildOptions)\n ctx.projectConfig = projectConfig\n ctx.generateOptions = generateOptions\n }\n\n function withAlternates(route: ContentRoute, routeList: ContentRoute[], i18n: ResolvedClarifyI18nConfig): ContentRoute {\n const basePath = route.basePath ?? route.path\n const routeByLocaleAndBase = new Map(routeList.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const alternates = Object.fromEntries(\n i18n.locales.flatMap((locale) => {\n const alternate = routeByLocaleAndBase.get(`${locale.code}:${basePath}`)\n return alternate ? [[locale.code, alternate.path]] : []\n })\n )\n return { ...route, alternates }\n }\n\n async function discoverRoutesForRoot(routeRoot: string, locale?: string): Promise<ContentRoute[]> {\n const discovered = await runHooks(clarifyPlugins, 'routes:discover', {\n contentRoot: routeRoot,\n locale,\n routes: findContentRoutes(routeRoot),\n }, ctx)\n return discovered.routes\n }\n\n async function discoverRoutes(): Promise<ContentRoute[]> {\n const i18n = projectConfig.i18n\n if (!i18n) return discoverRoutesForRoot(contentRoot)\n\n const localizedRoutes: ContentRoute[] = []\n for (const locale of i18n.locales) {\n const localeRoot = join(contentRoot, locale.code)\n const discovered = await discoverRoutesForRoot(localeRoot, locale.code)\n for (const route of discovered) {\n const basePath = route.basePath ?? route.path\n localizedRoutes.push({\n ...route,\n path: localizedRoutePath(basePath, locale.code, i18n),\n basePath,\n locale: locale.code,\n virtualModuleId: virtualModuleIdFromRef(relative(contentRoot, route.filePath)),\n })\n }\n }\n\n if (i18n.missing === 'fallback') {\n const routeByLocaleAndBase = new Map(localizedRoutes.map(route => [`${route.locale ?? ''}:${route.basePath ?? route.path}`, route]))\n const defaultRoutes = localizedRoutes.filter(route => route.locale === i18n.defaultLocale)\n for (const sourceRoute of defaultRoutes) {\n const basePath = sourceRoute.basePath ?? sourceRoute.path\n for (const locale of i18n.locales) {\n const key = `${locale.code}:${basePath}`\n if (routeByLocaleAndBase.has(key)) continue\n localizedRoutes.push({\n ...sourceRoute,\n path: localizedRoutePath(basePath, locale.code, i18n),\n locale: locale.code,\n isFallback: true,\n })\n }\n }\n }\n\n return localizedRoutes.map(route => withAlternates(route, localizedRoutes, i18n))\n }\n\n async function resolveRoutesAndSpecs() {\n routes = await discoverRoutes()\n routes = await runHooks(clarifyPlugins, 'routes:discovered', routes, ctx)\n\n const defaultNavigation = projectConfig.tabs\n ? projectConfig.i18n\n ? (buildLocalizedNavigationFromTabsConfig(routes, projectConfig.tabs, projectConfig.i18n) ?? {})\n : buildNavigationFromTabsConfig(routes, projectConfig.tabs)\n : buildNavigation(routes)\n const resolved = await runHooks(clarifyPlugins, 'routes:resolved', { routes, navigation: defaultNavigation }, ctx)\n routes = resolved.routes\n resolvedNavigation = resolved.navigation\n ctx.routes = routes\n ctx.navigation = resolvedNavigation\n }\n\n async function rebuildVirtualModules() {\n virtualModules = buildVirtualModules({\n projectConfig,\n generateOptions,\n routes,\n navigation: resolvedNavigation,\n })\n virtualModules = await runHooks(clarifyPlugins, 'modules:before', virtualModules, ctx)\n }\n\n function invalidateVirtualModules(server: ViteDevServer) {\n for (const id of virtualModules.keys()) {\n const moduleNode = server.moduleGraph.getModuleById(resolveVirtualId(id))\n if (moduleNode) server.moduleGraph.invalidateModule(moduleNode)\n }\n }\n\n async function refreshDevServer(server: ViteDevServer) {\n await resolveRoutesAndSpecs()\n await rebuildVirtualModules()\n invalidateVirtualModules(server)\n server.ws.send({ type: 'full-reload' })\n }\n\n function hasContentRouteForFile(filePath: string): boolean {\n return routes.some(route => route.filePath === filePath)\n }\n\n const normalizedMdxContentPlugin: Plugin = {\n name: 'clarify:normalized-mdx-content',\n enforce: 'pre',\n transform(_code, id) {\n if (!/\\.mdx?(?:\\?|$)/.test(id)) return null\n const filePath = id.replace(/\\?.*$/, '')\n const route = routes.find(route => route.kind === 'mdx' && route.filePath === filePath)\n if (!route || route.content === undefined) return null\n return { code: route.content, map: null }\n },\n }\n\n const mdx = mdxPlugin({\n include: ['**/*.{md,mdx}'],\n jsxImportSource: 'react',\n providerImportSource: '@clarify-labs/renderer',\n remarkPlugins,\n rehypePlugins,\n })\n\n const clarifyCorePlugin: Plugin = {\n name: 'clarify:core',\n async config() {\n await resolveRoutesAndSpecs()\n\n return {\n base: projectConfig.routePrefix,\n build: {\n ...(generateOptions.outputDirectory ? { outDir: generateOptions.outputDirectory } : {}),\n manifest: true,\n },\n }\n },\n configResolved(config) {\n viteConfig = config\n // If user didn't specify outputDirectory, read it from Vite's resolved config\n if (!generateOptions.outputDirectory) {\n generateOptions.outputDirectory = config.build.outDir\n }\n },\n async buildStart() {\n await rebuildVirtualModules()\n },\n async handleHotUpdate(ctx) {\n const changedFile = isAbsolute(ctx.file) ? ctx.file : join(root, ctx.file)\n if (configFilePath && changedFile === configFilePath) {\n await reloadProjectConfig()\n await refreshDevServer(ctx.server)\n return []\n }\n\n const relativeContentFile = relative(contentRoot, changedFile)\n const isContentFile = relativeContentFile && !relativeContentFile.startsWith('..') && !isAbsolute(relativeContentFile)\n if (!isContentFile || !hasContentRouteForFile(changedFile)) return\n\n await refreshDevServer(ctx.server)\n return []\n },\n resolveId(id) {\n if (id === VIRTUAL_CLIENT_ENTRY || id === RESOLVED_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === VIRTUAL_CONFIG || id === resolveVirtualId(VIRTUAL_CONFIG)) return resolveVirtualId(VIRTUAL_CONFIG)\n if (id === VIRTUAL_ROUTES || id === resolveVirtualId(VIRTUAL_ROUTES)) return resolveVirtualId(VIRTUAL_ROUTES)\n if (id === VIRTUAL_SERVER_ROUTES || id === resolveVirtualId(VIRTUAL_SERVER_ROUTES)) return resolveVirtualId(VIRTUAL_SERVER_ROUTES)\n if (id === VIRTUAL_OPENAPI_REGISTRY || id === resolveVirtualId(VIRTUAL_OPENAPI_REGISTRY)) return resolveVirtualId(VIRTUAL_OPENAPI_REGISTRY)\n const route = routes.find(r => r.virtualModuleId === id || r.virtualModuleId === stripVirtualPrefix(id))\n if (route) return resolveVirtualId(route.virtualModuleId)\n return null\n },\n load(id) {\n return loadVirtualModule(id, virtualModules)\n },\n async configureServer(server) {\n server.watcher.add(contentRoot)\n if (configFilePath) {\n server.watcher.add(configFilePath)\n }\n\n const handleContentTreeChange = async (filePath: string) => {\n const changedFile = isAbsolute(filePath) ? filePath : join(root, filePath)\n const relativeContentFile = relative(contentRoot, changedFile)\n const isContentFile = relativeContentFile && !relativeContentFile.startsWith('..') && !isAbsolute(relativeContentFile)\n if (!isContentFile) return\n await refreshDevServer(server)\n }\n\n server.watcher.on('add', handleContentTreeChange)\n server.watcher.on('unlink', handleContentTreeChange)\n await runDevConfigureServerHooks(clarifyPlugins, server, ctx)\n },\n transformIndexHtml: {\n order: 'pre',\n async handler(html, transformCtx) {\n // In dev mode, use /@id/ prefix so Vite dev server can resolve the virtual module.\n // In build mode, use the bare virtual: ID so Vite's HTML build pipeline resolves it via resolveId.\n const clientEntryId = transformCtx.server\n ? `/@id/${VIRTUAL_CLIENT_ENTRY}`\n : VIRTUAL_CLIENT_ENTRY\n const result = await runHooks(clarifyPlugins, 'html:transform', {\n html,\n tags: [],\n clientEntryId,\n dev: Boolean(transformCtx.server),\n }, ctx)\n return {\n html: result.html,\n tags: result.tags,\n }\n }\n },\n async closeBundle() {\n // ── Phase 1: Static HTML Generation ──\n if (process.env.SKIP_CLARIFY_SSG) {\n await runBuildDoneHooks(clarifyPlugins, ctx)\n return\n }\n\n const outputDir = viteConfig.build.outDir\n const ssrOutputDir = join(outputDir, '.ssr')\n let tempEntryPath: string | undefined\n\n try {\n tempEntryPath = createTempEntryFile(SSR_ENTRY_CODE)\n\n await buildSSRBundle(root, tempEntryPath, ssrOutputDir, [\n {\n name: 'clarify:virtual-ssg',\n resolveId(id) {\n if (id === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === RESOLVED_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY\n if (id === VIRTUAL_CONFIG) return id\n if (id === VIRTUAL_ROUTES) return id\n if (id === VIRTUAL_SERVER_ROUTES) return id\n if (id === VIRTUAL_OPENAPI_REGISTRY) return id\n const route = routes.find(r => r.virtualModuleId === id)\n if (route) return id\n return null\n },\n load: id => loadVirtualModule(id, virtualModules),\n },\n normalizedMdxContentPlugin,\n mdx,\n ])\n\n const ssrBundlePath = join(ssrOutputDir, 'entry-server.js')\n await renderSSGRoutes(routes, projectConfig, outputDir, ssrBundlePath, generateOptions.ssg.failOnError)\n } catch (err) {\n console.error('[clarify] SSG failed:', err)\n if (generateOptions.ssg.failOnError) {\n throw err\n }\n } finally {\n if (tempEntryPath) {\n try {\n rmSync(tempEntryPath, { force: true })\n } catch {\n // ignore cleanup errors\n }\n }\n }\n\n await runBuildDoneHooks(clarifyPlugins, ctx)\n },\n }\n\n return [react(), tailwindcss(), normalizedMdxContentPlugin, clarifyCorePlugin, mdx].flat().filter(Boolean) as Plugin[]\n}\n\nexport type { Plugin } from 'vite'\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clarify-labs/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@apidevtools/swagger-parser": "^12.1.0",
|
|
42
|
-
"@clarify-labs/renderer": "0.
|
|
43
|
-
"@clarify-labs/templates": "0.
|
|
42
|
+
"@clarify-labs/renderer": "0.6.2",
|
|
43
|
+
"@clarify-labs/templates": "0.6.2",
|
|
44
44
|
"@mdx-js/rollup": "^3.1.1",
|
|
45
45
|
"@tailwindcss/vite": "^4.1.11",
|
|
46
46
|
"@vitejs/plugin-react": "^6.0.2",
|