@tenphi/docs 0.25.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/{config-CC6qkQId.js → config-BIrsSPND.js} +14 -5
- package/dist/config-BIrsSPND.js.map +1 -0
- package/dist/content/index.d.ts +1 -1
- package/dist/content/index.js +1 -1
- package/dist/{content-DYKHzWw4.js → content-pO3pNAj5.js} +13 -9
- package/dist/content-pO3pNAj5.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/markdown/index.d.ts +1 -1
- package/dist/{types-C9wpIufo.d.ts → types-yhxzgOIF.d.ts} +11 -2
- package/dist/{types-C9wpIufo.d.ts.map → types-yhxzgOIF.d.ts.map} +1 -1
- package/package.json +1 -1
- package/dist/config-CC6qkQId.js.map +0 -1
- package/dist/content-DYKHzWw4.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/project/index.ts","../src/agent-markdown.ts","../src/validation/assets.ts","../src/validation/build.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { normalizeDocsConfig } from \"../config/index.js\";\nimport type { DocsConfig } from \"../types.js\";\n\nexport interface DocsProjectOptions {\n /** Directory to search for configuration; defaults to the current directory. */\n root?: string;\n /** Explicit configuration path, relative to root. False disables discovery. */\n configFile?: string | false;\n /** Inline configuration takes precedence over discovery. */\n config?: DocsConfig;\n}\n\nexport interface DocsProject {\n root: string;\n config: DocsConfig;\n configFile?: string;\n}\n\n/** Resolve the same configuration and content root for the CLI and renderer. */\nexport async function resolveDocsProject(\n options: DocsProjectOptions = {},\n): Promise<DocsProject> {\n const directory = resolve(options.root ?? process.cwd());\n let config = options.config;\n let configFile: string | undefined;\n if (config === undefined && options.configFile !== false) {\n configFile = options.configFile\n ? resolve(directory, options.configFile)\n : [\n \"docs.config.ts\",\n \"docs.config.mts\",\n \"docs.config.js\",\n \"docs.config.mjs\",\n ]\n .map((name) => resolve(directory, name))\n .find(existsSync);\n if (configFile) {\n if (!existsSync(configFile)) {\n throw new Error(\n `Documentation configuration does not exist: ${configFile}.`,\n );\n }\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n moduleCache: false,\n });\n // Native ESM imports remain cached even with moduleCache disabled.\n // Transpile the entry so configuration restarts see edits in every format.\n const loaded = (await jiti.evalModule(\n await readFile(configFile, \"utf8\"),\n {\n filename: configFile,\n async: true,\n forceTranspile: true,\n },\n )) as { default?: DocsConfig };\n config = loaded.default ?? (loaded as DocsConfig);\n }\n }\n config ??= {};\n normalizeDocsConfig(config);\n return {\n root: resolve(\n configFile ? dirname(configFile) : directory,\n config.root ?? \".\",\n ),\n config,\n ...(configFile ? { configFile } : {}),\n };\n}\n","import type { DocsEntry } from \"./types.js\";\nimport { pagePublishing, type PublishingConfig } from \"./publishing.js\";\nimport { serializeMarkdown } from \"./markdown/index.js\";\n\ntype Node = { type: string; value?: string; name?: string; children?: Node[] };\n/** A reading representation: retain prose/code/links, omit executable MDX and raw HTML. */\nexport function renderAgentMarkdown(\n entry: DocsEntry,\n config: PublishingConfig,\n): string {\n const tree = structuredClone(entry.ast) as Node;\n function clean(node: Node): Node[] {\n if (\n [\"mdxjsEsm\", \"mdxFlowExpression\", \"mdxTextExpression\", \"html\"].includes(\n node.type,\n )\n )\n return [];\n const children = node.children?.flatMap(clean);\n if (\n node.type === \"mdxJsxFlowElement\" ||\n node.type === \"mdxJsxTextElement\"\n ) {\n if (node.name && [\"script\", \"style\", \"Preview\"].includes(node.name))\n return [];\n return children ?? [];\n }\n return [{ ...node, ...(children ? { children } : {}) }];\n }\n const body = serializeMarkdown(clean(tree)[0] as typeof entry.ast, {\n mdx: false,\n });\n const pub = pagePublishing(entry, config);\n const prefix = entry.route.split(\"/\")[1];\n const locale =\n prefix && config.locales?.[prefix]\n ? prefix\n : (config.defaultLocale ?? \"root\");\n const language =\n config.locales?.[locale]?.lang ?? (locale === \"root\" ? \"en\" : locale);\n const metadata = {\n language,\n title: entry.title,\n canonical: pub.canonical,\n source: entry.sourcePath,\n version: pub.version?.label ?? config.site?.version,\n index: pub.index,\n };\n const lines = Object.entries(metadata)\n .filter(([, v]) => v !== undefined)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n return `---\\n${lines.join(\"\\n\")}\\n---\\n\\n# ${entry.title.replace(/\\s+/g, \" \")}\\n\\n${body}`;\n}\n","import { stat } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport type { DocsProject } from \"../project/index.js\";\nimport type { DocsDiagnostic, DocsGraph } from \"../types.js\";\n\n/** Local preflight only: no remote font requests or MDX/component compilation. */\nexport async function validateProjectAssets(\n project: DocsProject,\n graph: DocsGraph,\n publicDirectory = resolve(project.root, \"public\"),\n): Promise<DocsDiagnostic[]> {\n const diagnostics: DocsDiagnostic[] = [];\n const check = async (path: string, label: string) => {\n try {\n if (!(await stat(path)).isFile()) throw Error(\"not a file\");\n } catch {\n diagnostics.push({\n code: \"DOCS_CONFIG_ASSET_MISSING\",\n severity: \"error\",\n file: path,\n message: `${label} references a missing local file.`,\n hint: \"Correct the configured path or add the file before building.\",\n });\n }\n };\n const publicFile = async (src: string, label: string) => {\n if (!src.startsWith(\"/\") || src.startsWith(\"//\")) return;\n await check(\n resolve(publicDirectory, `.${decodeURIComponent(src.split(/[?#]/)[0]!)}`),\n label,\n );\n };\n for (const [role, font] of Object.entries(project.config.theme?.fonts ?? {}))\n if (font && typeof font === \"object\" && \"files\" in font)\n for (const file of font.files)\n await publicFile(file.src, `theme.fonts.${role}`);\n const { logo, favicon, seo } = project.config.site ?? {};\n if (logo) {\n const images = typeof logo === \"string\" ? { src: logo } : logo;\n for (const key of [\"src\", \"light\", \"dark\"] as const)\n if (images[key])\n await check(resolve(project.root, images[key]), `site.logo.${key}`);\n }\n if (favicon)\n await check(\n resolve(\n project.root,\n typeof favicon === \"string\" ? favicon : favicon.source,\n ),\n \"site.favicon\",\n );\n if (seo?.image) await publicFile(seo.image.src, \"site.seo.image\");\n for (const entry of graph.entries) {\n if (entry.frontmatter.seo?.image)\n await publicFile(\n entry.frontmatter.seo.image.src,\n `${entry.sourcePath}: seo.image`,\n );\n const hero = entry.frontmatter.hero?.image;\n if (hero && !(\"html\" in hero)) {\n for (const src of \"file\" in hero ? [hero.file] : [hero.light, hero.dark])\n if (\n !entry.assets.some(\n (asset) => asset.resolved === src || asset.publicPath === src,\n )\n )\n await publicFile(src, `${entry.sourcePath}: hero.image`);\n }\n }\n const require = createRequire(resolve(project.root, \"package.json\"));\n for (const [name, component] of Object.entries(\n project.config.components?.overrides ?? {},\n )) {\n if (typeof component !== \"string\") continue;\n if (\n isAbsolute(component) ||\n component.startsWith(\".\") ||\n component.startsWith(\"src/\")\n )\n await check(\n resolve(project.root, component),\n `components.overrides.${name}`,\n );\n else {\n try {\n require.resolve(component);\n } catch {\n diagnostics.push({\n code: \"DOCS_COMPONENT_UNRESOLVED\",\n severity: \"error\",\n message: `components.overrides.${name} cannot resolve ${component}.`,\n hint: \"Install the component package or use a path relative to the project root.\",\n });\n }\n }\n }\n return diagnostics;\n}\n","import { readFile, readdir } from \"node:fs/promises\";\nimport { resolve, sep } from \"node:path\";\nimport { fromHtml } from \"hast-util-from-html\";\nimport type { Element, Root } from \"hast\";\nimport type { DocsDiagnostic, DocsGraph } from \"../types.js\";\n\nexport interface BuiltDocsOptions {\n directory: string;\n graph?: DocsGraph;\n /** Deployed base URL, including a path prefix when present. */\n deployedUrl?: string;\n}\nexport interface BuiltDocsReport {\n ok: boolean;\n scope: \"built-output\" | \"deployment\";\n pages: number;\n assets: number;\n checkedUrls: number;\n diagnostics: DocsDiagnostic[];\n}\ntype PublishedPage = {\n route: string;\n url: string;\n canonical?: string;\n index: boolean;\n sitemap: boolean;\n markdown?: string;\n};\ntype Manifest = { base: string; site?: string; pages: PublishedPage[] };\n\n/** Inspect actual output, then optionally fetch the same pages/assets from a host. */\nexport async function validateBuiltDocs(\n options: BuiltDocsOptions,\n): Promise<BuiltDocsReport> {\n const directory = resolve(options.directory);\n const diagnostics: DocsDiagnostic[] = [];\n const error = (code: string, message: string, file?: string) =>\n diagnostics.push({\n code,\n severity: \"error\",\n message,\n ...(file ? { file } : {}),\n });\n let files: string[];\n let manifest: Manifest;\n try {\n files = (await readdir(directory, { recursive: true, withFileTypes: true }))\n .filter((entry) => entry.isFile())\n .map((entry) =>\n resolve(entry.parentPath, entry.name)\n .slice(directory.length + 1)\n .split(sep)\n .join(\"/\"),\n );\n manifest = JSON.parse(\n await readFile(resolve(directory, \"_cookbook/publishing.json\"), \"utf8\"),\n );\n if (!manifest.base?.startsWith(\"/\") || !Array.isArray(manifest.pages))\n throw Error(\"invalid publishing manifest\");\n } catch (cause) {\n error(\n \"DOCS_BUILD_MISSING\",\n `Cannot read Cookbook output in ${directory}. Run astro build first. ${String(cause)}`,\n );\n return {\n ok: false,\n scope: options.deployedUrl ? \"deployment\" : \"built-output\",\n pages: 0,\n assets: 0,\n checkedUrls: 0,\n diagnostics,\n };\n }\n const base = manifest.base.replace(/\\/$/, \"\");\n const origin =\n manifest.site ??\n manifest.pages.find((page) => /^https?:/.test(page.url))?.url ??\n \"https://cookbook.invalid\";\n const hasSite = new URL(origin).hostname !== \"cookbook.invalid\";\n if (!hasSite)\n diagnostics.push({\n code: \"DOCS_SITE_URL_MISSING\",\n severity: \"warning\",\n message:\n \"No site.url (or Astro site) is configured; absolute canonicals and sitemap coverage cannot be verified.\",\n });\n const fileSet = new Set(files);\n const pagePaths = new Map<string, string>();\n const documents = new Map<\n string,\n { ids: Set<string>; elements: Element[] }\n >();\n const urlForFile = (file: string) =>\n `${base}/${file.replace(/(^|\\/)index\\.html$/, \"$1\")}`;\n const normalizePath = (path: string) => path.replace(/\\/$/, \"\") || \"/\";\n for (const file of files.filter((file) => file.endsWith(\".html\"))) {\n pagePaths.set(normalizePath(urlForFile(file)), file);\n pagePaths.set(normalizePath(`${base}/${file}`), file);\n const tree = fromHtml(await readFile(resolve(directory, file), \"utf8\"));\n const elements: Element[] = [];\n const visit = (node: Root | Element | Root[\"children\"][number]) => {\n if (node.type === \"element\") elements.push(node);\n if (\"children\" in node) node.children.forEach(visit);\n };\n visit(tree);\n documents.set(file, {\n elements,\n ids: new Set(\n elements.flatMap((node) =>\n typeof node.properties.id === \"string\"\n ? [node.properties.id]\n : node.tagName === \"a\" && typeof node.properties.name === \"string\"\n ? [node.properties.name]\n : [],\n ),\n ),\n });\n }\n const requests = new Map<string, string>();\n const resolveLocal = (\n raw: string,\n owner: string,\n ): { file: string; url: URL } | undefined => {\n if (!raw || /^(?:data|mailto|tel|javascript|blob):/i.test(raw)) return;\n let url: URL;\n try {\n url = new URL(raw, new URL(owner, origin));\n } catch {\n error(\"DOCS_OUTPUT_URL_INVALID\", `Invalid URL ${raw}.`, owner);\n return;\n }\n if (\n url.origin !== new URL(origin).origin ||\n (base && url.pathname !== base && !url.pathname.startsWith(`${base}/`))\n )\n return;\n let path: string;\n try {\n path = decodeURIComponent(url.pathname);\n } catch {\n error(\"DOCS_OUTPUT_URL_INVALID\", `Invalid encoded URL ${raw}.`, owner);\n return;\n }\n const file =\n pagePaths.get(normalizePath(path)) ??\n path.slice(base.length).replace(/^\\//, \"\");\n if (!fileSet.has(file)) {\n error(\n \"DOCS_OUTPUT_LINK_MISSING\",\n `${raw} points to a missing page or asset.`,\n owner,\n );\n return;\n }\n if (url.hash && documents.has(file)) {\n let id: string;\n try {\n id = decodeURIComponent(url.hash.slice(1));\n } catch {\n id = url.hash.slice(1);\n }\n if (!documents.get(file)!.ids.has(id))\n error(\n \"DOCS_OUTPUT_FRAGMENT_MISSING\",\n `${raw} points to a missing heading or anchor.`,\n owner,\n );\n }\n requests.set(url.pathname, file);\n return { file, url };\n };\n for (const [file, { elements }] of documents) {\n const owner = urlForFile(file);\n requests.set(owner, file);\n for (const node of elements) {\n const p = node.properties;\n if (\n [\"a\", \"link\", \"use\"].includes(node.tagName) &&\n typeof p.href === \"string\" &&\n !(\n node.tagName === \"link\" &&\n Array.isArray(p.rel) &&\n p.rel.includes(\"canonical\")\n )\n )\n resolveLocal(p.href, owner);\n if (typeof p.src === \"string\") resolveLocal(p.src, owner);\n if (typeof p.poster === \"string\") resolveLocal(p.poster, owner);\n if (typeof p.srcSet === \"string\" && !p.srcSet.startsWith(\"data:\"))\n for (const candidate of p.srcSet.split(\",\"))\n resolveLocal(candidate.trim().split(/\\s+/)[0]!, owner);\n if (\n node.tagName === \"meta\" &&\n [\"og:image\", \"twitter:image\"].includes(String(p.property ?? p.name)) &&\n typeof p.content === \"string\"\n )\n resolveLocal(p.content, owner);\n }\n }\n for (const file of files.filter((file) => file.endsWith(\".css\"))) {\n const css = await readFile(resolve(directory, file), \"utf8\");\n for (const match of css.matchAll(/url\\(\\s*[\"']?([^\"'()\\s]+)[\"']?\\s*\\)/g))\n resolveLocal(match[1]!, `${base}/${file}`);\n }\n const expected = [...manifest.pages];\n if (options.graph)\n for (const route of options.graph.routes) {\n const url = `${base}${route.route === \"/\" ? \"/\" : `${route.route}/`}`;\n if (!resolveLocal(url, `${base}/`)) continue;\n if (!manifest.pages.some((page) => page.route === route.route)) {\n const entry = options.graph.entryByRoute(route.route);\n if (!entry?.frontmatter.draft)\n error(\n \"DOCS_PUBLISHING_PAGE_MISSING\",\n `Publishing manifest omits ${route.route}.`,\n );\n else\n expected.push({\n route: route.route,\n url,\n index: false,\n sitemap: false,\n });\n }\n }\n for (const page of expected) {\n const resolved = resolveLocal(page.url, `${base}/`);\n if (!resolved) continue;\n const nodes = documents.get(resolved.file)?.elements ?? [];\n const canonicals = nodes.filter(\n (n) =>\n n.tagName === \"link\" &&\n Array.isArray(n.properties.rel) &&\n n.properties.rel.includes(\"canonical\"),\n );\n if (\n (hasSite && canonicals.length !== 1) ||\n (page.canonical?.startsWith(\"http\") &&\n canonicals[0]?.properties.href !== page.canonical)\n )\n error(\n \"DOCS_CANONICAL_INVALID\",\n `Expected one canonical${page.canonical ? ` pointing to ${page.canonical}` : \"\"}.`,\n resolved.file,\n );\n const noindex = nodes.some(\n (n) =>\n n.tagName === \"meta\" &&\n n.properties.name === \"robots\" &&\n /\\bnoindex\\b/i.test(String(n.properties.content)),\n );\n if (page.index === noindex)\n error(\n \"DOCS_INDEX_POLICY_MISMATCH\",\n `Expected ${page.index ? \"indexable\" : \"noindex\"} metadata.`,\n resolved.file,\n );\n if (page.markdown) resolveLocal(page.markdown, page.url);\n }\n const sitemapUrls = new Set<string>();\n for (const file of files.filter((file) =>\n /(?:^|\\/)sitemap[^/]*\\.xml$/.test(file),\n )) {\n const xml = await readFile(resolve(directory, file), \"utf8\");\n for (const match of xml.matchAll(/<loc>([^<]+)<\\/loc>/g)) {\n const url = match[1]!.replace(/&/g, \"&\");\n resolveLocal(url, `${base}/${file}`);\n if (!url.endsWith(\".xml\")) sitemapUrls.add(url);\n }\n }\n if (new URL(origin).hostname !== \"cookbook.invalid\")\n for (const page of expected) {\n if (page.sitemap && !sitemapUrls.has(page.url))\n error(\"DOCS_SITEMAP_PAGE_MISSING\", `Sitemap omits ${page.url}.`);\n if (!page.sitemap && sitemapUrls.has(page.url))\n error(\n \"DOCS_SITEMAP_UNLISTED_PAGE\",\n `Sitemap includes unlisted ${page.url}.`,\n );\n }\n resolveLocal(`${base}/llms.txt`, `${base}/`);\n if (fileSet.has(\"llms.txt\")) {\n const llms = await readFile(resolve(directory, \"llms.txt\"), \"utf8\");\n for (const match of llms.matchAll(/\\]\\(([^\\s)]+)\\)/g))\n resolveLocal(match[1]!, `${base}/llms.txt`);\n for (const page of expected.filter((page) => !page.sitemap)) {\n if (llms.includes(`](${page.url})`))\n error(\n \"DOCS_AGENT_UNLISTED_PAGE\",\n `llms.txt lists excluded ${page.url}.`,\n );\n }\n }\n if (!base && hasSite) resolveLocal(\"/robots.txt\", \"/\");\n if (fileSet.has(\"robots.txt\")) {\n const robots = await readFile(resolve(directory, \"robots.txt\"), \"utf8\");\n for (const match of robots.matchAll(/^Sitemap:\\s*(\\S+)/gim))\n resolveLocal(match[1]!, `${base}/robots.txt`);\n }\n let checkedUrls = 0;\n if (options.deployedUrl) {\n const deployed = new URL(\n options.deployedUrl.endsWith(\"/\")\n ? options.deployedUrl\n : `${options.deployedUrl}/`,\n );\n if (![\"http:\", \"https:\"].includes(deployed.protocol))\n throw Error(\"Deployment URL must use HTTP or HTTPS.\");\n const pending = [...requests.entries()];\n const worker = async () => {\n for (;;) {\n const next = pending.shift();\n if (!next) return;\n const [path, file] = next;\n const url = new URL(\n path.slice(base.length).replace(/^\\//, \"\"),\n deployed,\n );\n try {\n const response = await fetch(url, {\n signal: AbortSignal.timeout(15000),\n });\n const body = new Uint8Array(await response.arrayBuffer());\n checkedUrls++;\n if (!response.ok && !(file === \"404.html\" && response.status === 404))\n error(\n \"DOCS_DEPLOYMENT_HTTP\",\n `${url.href} returned ${response.status}.`,\n );\n else if (file.endsWith(\".html\")) {\n const live = new TextDecoder().decode(body);\n const local = await readFile(resolve(directory, file), \"utf8\");\n if (publishingSignature(live) !== publishingSignature(local))\n error(\n \"DOCS_DEPLOYMENT_PAGE_MISMATCH\",\n `${url.href} serves different title, canonical, or indexing metadata.`,\n );\n if (\n /noindex/i.test(response.headers.get(\"x-robots-tag\") ?? \"\") &&\n manifest.pages.some(\n (page) =>\n normalizePath(new URL(page.url, origin).pathname) ===\n normalizePath(path) && page.index,\n )\n )\n error(\n \"DOCS_DEPLOYMENT_NOINDEX\",\n `${url.href} has an unexpected X-Robots-Tag noindex header.`,\n );\n } else if (\n !body.length ||\n /text\\/html/i.test(response.headers.get(\"content-type\") ?? \"\")\n )\n error(\n \"DOCS_DEPLOYMENT_ASSET_INVALID\",\n `${url.href} did not return the expected asset.`,\n );\n } catch (cause) {\n error(\"DOCS_DEPLOYMENT_FETCH\", `${url.href}: ${String(cause)}`);\n }\n }\n };\n await Promise.all(Array.from({ length: 6 }, worker));\n }\n return {\n ok: !diagnostics.some((d) => d.severity === \"error\"),\n scope: options.deployedUrl ? \"deployment\" : \"built-output\",\n pages: documents.size,\n assets: new Set(\n [...requests.values()].filter((file) => !documents.has(file)),\n ).size,\n checkedUrls,\n diagnostics,\n };\n}\n\nfunction publishingSignature(html: string): string {\n const values: string[] = [];\n const walk = (node: Root | Root[\"children\"][number]) => {\n if (node.type === \"element\") {\n const p = node.properties;\n if (\n node.tagName === \"link\" &&\n Array.isArray(p.rel) &&\n p.rel.includes(\"canonical\")\n )\n values.push(`canonical:${p.href}`);\n if (node.tagName === \"meta\" && p.name === \"robots\")\n values.push(`robots:${p.content}`);\n if (node.tagName === \"title\")\n values.push(\n `title:${node.children.map((child) => (child.type === \"text\" ? child.value : \"\")).join(\"\")}`,\n );\n }\n if (\"children\" in node) node.children.forEach(walk);\n };\n walk(fromHtml(html));\n return JSON.stringify(values.sort());\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/project/index.ts","../src/agent-markdown.ts","../src/validation/assets.ts","../src/validation/build.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { normalizeDocsConfig } from \"../config/index.js\";\nimport type { DocsConfig } from \"../types.js\";\n\nexport interface DocsProjectOptions {\n /** Directory to search for configuration; defaults to the current directory. */\n root?: string;\n /** Explicit configuration path, relative to root. False disables discovery. */\n configFile?: string | false;\n /** Inline configuration takes precedence over discovery. */\n config?: DocsConfig;\n}\n\nexport interface DocsProject {\n root: string;\n config: DocsConfig;\n configFile?: string;\n}\n\n/** Resolve the same configuration and content root for the CLI and renderer. */\nexport async function resolveDocsProject(\n options: DocsProjectOptions = {},\n): Promise<DocsProject> {\n const directory = resolve(options.root ?? process.cwd());\n let config = options.config;\n let configFile: string | undefined;\n if (config === undefined && options.configFile !== false) {\n configFile = options.configFile\n ? resolve(directory, options.configFile)\n : [\n \"docs.config.ts\",\n \"docs.config.mts\",\n \"docs.config.js\",\n \"docs.config.mjs\",\n ]\n .map((name) => resolve(directory, name))\n .find(existsSync);\n if (configFile) {\n if (!existsSync(configFile)) {\n throw new Error(\n `Documentation configuration does not exist: ${configFile}.`,\n );\n }\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n moduleCache: false,\n });\n // Native ESM imports remain cached even with moduleCache disabled.\n // Transpile the entry so configuration restarts see edits in every format.\n const loaded = (await jiti.evalModule(\n await readFile(configFile, \"utf8\"),\n {\n filename: configFile,\n async: true,\n forceTranspile: true,\n },\n )) as { default?: DocsConfig };\n config = loaded.default ?? (loaded as DocsConfig);\n }\n }\n config ??= {};\n normalizeDocsConfig(config);\n return {\n root: resolve(\n configFile ? dirname(configFile) : directory,\n config.root ?? \".\",\n ),\n config,\n ...(configFile ? { configFile } : {}),\n };\n}\n","import type { DocsEntry } from \"./types.js\";\nimport { pagePublishing, type PublishingConfig } from \"./publishing.js\";\nimport { serializeMarkdown } from \"./markdown/index.js\";\n\ntype Node = { type: string; value?: string; name?: string; children?: Node[] };\n/** A reading representation: retain prose/code/links, omit executable MDX and raw HTML. */\nexport function renderAgentMarkdown(\n entry: DocsEntry,\n config: PublishingConfig,\n): string {\n const tree = structuredClone(entry.ast) as Node;\n function clean(node: Node): Node[] {\n if (\n [\"mdxjsEsm\", \"mdxFlowExpression\", \"mdxTextExpression\", \"html\"].includes(\n node.type,\n )\n )\n return [];\n const children = node.children?.flatMap(clean);\n if (\n node.type === \"mdxJsxFlowElement\" ||\n node.type === \"mdxJsxTextElement\"\n ) {\n if (node.name && [\"script\", \"style\", \"Preview\"].includes(node.name))\n return [];\n return children ?? [];\n }\n return [{ ...node, ...(children ? { children } : {}) }];\n }\n const body = serializeMarkdown(clean(tree)[0] as typeof entry.ast, {\n mdx: false,\n });\n const pub = pagePublishing(entry, config);\n const prefix = entry.route.split(\"/\")[1];\n const locale =\n prefix && config.locales?.[prefix]\n ? prefix\n : (config.defaultLocale ?? \"root\");\n const language =\n config.locales?.[locale]?.lang ?? (locale === \"root\" ? \"en\" : locale);\n const metadata = {\n language,\n title: entry.title,\n canonical: pub.canonical,\n source: entry.sourcePath,\n version: pub.version?.label ?? config.site?.version,\n index: pub.index,\n };\n const lines = Object.entries(metadata)\n .filter(([, v]) => v !== undefined)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n return `---\\n${lines.join(\"\\n\")}\\n---\\n\\n# ${entry.title.replace(/\\s+/g, \" \")}\\n\\n${body}`;\n}\n","import { stat } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport type { DocsProject } from \"../project/index.js\";\nimport type { DocsDiagnostic, DocsGraph } from \"../types.js\";\n\n/** Local preflight only: no remote font requests or MDX/component compilation. */\nexport async function validateProjectAssets(\n project: DocsProject,\n graph: DocsGraph,\n publicDirectory = resolve(project.root, \"public\"),\n): Promise<DocsDiagnostic[]> {\n const diagnostics: DocsDiagnostic[] = [];\n const check = async (path: string, label: string) => {\n try {\n if (!(await stat(path)).isFile()) throw Error(\"not a file\");\n } catch {\n diagnostics.push({\n code: \"DOCS_CONFIG_ASSET_MISSING\",\n severity: \"error\",\n file: path,\n message: `${label} references a missing local file.`,\n hint: \"Correct the configured path or add the file before building.\",\n });\n }\n };\n const publicFile = async (src: string, label: string) => {\n if (!src.startsWith(\"/\") || src.startsWith(\"//\")) return;\n await check(\n resolve(publicDirectory, `.${decodeURIComponent(src.split(/[?#]/)[0]!)}`),\n label,\n );\n };\n for (const [role, font] of Object.entries(project.config.theme?.fonts ?? {}))\n if (font && typeof font === \"object\" && \"files\" in font)\n for (const file of font.files)\n await publicFile(file.src, `theme.fonts.${role}`);\n const { logo, favicon, seo } = project.config.site ?? {};\n if (logo) {\n const images = typeof logo === \"string\" ? { src: logo } : logo;\n for (const key of [\"src\", \"light\", \"dark\"] as const)\n if (images[key])\n await check(resolve(project.root, images[key]), `site.logo.${key}`);\n }\n if (favicon)\n await check(\n resolve(\n project.root,\n typeof favicon === \"string\" ? favicon : favicon.source,\n ),\n \"site.favicon\",\n );\n if (seo?.image) await publicFile(seo.image.src, \"site.seo.image\");\n for (const entry of graph.entries) {\n if (entry.frontmatter.seo?.image)\n await publicFile(\n entry.frontmatter.seo.image.src,\n `${entry.sourcePath}: seo.image`,\n );\n const hero = entry.frontmatter.hero?.image;\n if (hero && !(\"html\" in hero)) {\n for (const src of \"file\" in hero ? [hero.file] : [hero.light, hero.dark])\n if (\n !entry.assets.some(\n (asset) => asset.resolved === src || asset.publicPath === src,\n )\n )\n await publicFile(src, `${entry.sourcePath}: hero.image`);\n }\n }\n const require = createRequire(resolve(project.root, \"package.json\"));\n for (const [name, component] of Object.entries(\n project.config.components?.overrides ?? {},\n )) {\n if (typeof component !== \"string\") continue;\n if (\n isAbsolute(component) ||\n component.startsWith(\".\") ||\n component.startsWith(\"src/\")\n )\n await check(\n resolve(project.root, component),\n `components.overrides.${name}`,\n );\n else {\n try {\n require.resolve(component);\n } catch {\n diagnostics.push({\n code: \"DOCS_COMPONENT_UNRESOLVED\",\n severity: \"error\",\n message: `components.overrides.${name} cannot resolve ${component}.`,\n hint: \"Install the component package or use a path relative to the project root.\",\n });\n }\n }\n }\n return diagnostics;\n}\n","import { readFile, readdir } from \"node:fs/promises\";\nimport { resolve, sep } from \"node:path\";\nimport { fromHtml } from \"hast-util-from-html\";\nimport type { Element, Root } from \"hast\";\nimport { routePath } from \"../publishing.js\";\nimport type { DocsDiagnostic, DocsGraph } from \"../types.js\";\n\nexport interface BuiltDocsOptions {\n directory: string;\n graph?: DocsGraph;\n /** Deployed base URL, including a path prefix when present. */\n deployedUrl?: string;\n}\nexport interface BuiltDocsReport {\n ok: boolean;\n scope: \"built-output\" | \"deployment\";\n pages: number;\n assets: number;\n checkedUrls: number;\n diagnostics: DocsDiagnostic[];\n}\ntype PublishedPage = {\n route: string;\n url: string;\n canonical?: string;\n index: boolean;\n sitemap: boolean;\n markdown?: string;\n};\ntype Manifest = { base: string; site?: string; pages: PublishedPage[] };\n\n/** Inspect actual output, then optionally fetch the same pages/assets from a host. */\nexport async function validateBuiltDocs(\n options: BuiltDocsOptions,\n): Promise<BuiltDocsReport> {\n const directory = resolve(options.directory);\n const diagnostics: DocsDiagnostic[] = [];\n const error = (code: string, message: string, file?: string) =>\n diagnostics.push({\n code,\n severity: \"error\",\n message,\n ...(file ? { file } : {}),\n });\n let files: string[];\n let manifest: Manifest;\n try {\n files = (await readdir(directory, { recursive: true, withFileTypes: true }))\n .filter((entry) => entry.isFile())\n .map((entry) =>\n resolve(entry.parentPath, entry.name)\n .slice(directory.length + 1)\n .split(sep)\n .join(\"/\"),\n );\n manifest = JSON.parse(\n await readFile(resolve(directory, \"_cookbook/publishing.json\"), \"utf8\"),\n );\n if (!manifest.base?.startsWith(\"/\") || !Array.isArray(manifest.pages))\n throw Error(\"invalid publishing manifest\");\n } catch (cause) {\n error(\n \"DOCS_BUILD_MISSING\",\n `Cannot read Cookbook output in ${directory}. Run astro build first. ${String(cause)}`,\n );\n return {\n ok: false,\n scope: options.deployedUrl ? \"deployment\" : \"built-output\",\n pages: 0,\n assets: 0,\n checkedUrls: 0,\n diagnostics,\n };\n }\n const base = manifest.base.replace(/\\/$/, \"\");\n const origin =\n manifest.site ??\n manifest.pages.find((page) => /^https?:/.test(page.url))?.url ??\n \"https://cookbook.invalid\";\n const hasSite = new URL(origin).hostname !== \"cookbook.invalid\";\n if (!hasSite)\n diagnostics.push({\n code: \"DOCS_SITE_URL_MISSING\",\n severity: \"warning\",\n message:\n \"No site.url (or Astro site) is configured; absolute canonicals and sitemap coverage cannot be verified.\",\n });\n const fileSet = new Set(files);\n const pagePaths = new Map<string, string>();\n const documents = new Map<\n string,\n { ids: Set<string>; elements: Element[] }\n >();\n const urlForFile = (file: string) =>\n `${base}/${file.replace(/(^|\\/)index\\.html$/, \"$1\")}`;\n const normalizePath = (path: string) => path.replace(/\\/$/, \"\") || \"/\";\n for (const file of files.filter((file) => file.endsWith(\".html\"))) {\n pagePaths.set(normalizePath(urlForFile(file)), file);\n pagePaths.set(normalizePath(`${base}/${file}`), file);\n // Astro's file build format serves guide.html as /guide.\n pagePaths.set(\n normalizePath(`${base}/${file.replace(/\\.html$/, \"\")}`),\n file,\n );\n const tree = fromHtml(await readFile(resolve(directory, file), \"utf8\"));\n const elements: Element[] = [];\n const visit = (node: Root | Element | Root[\"children\"][number]) => {\n if (node.type === \"element\") elements.push(node);\n if (\"children\" in node) node.children.forEach(visit);\n };\n visit(tree);\n documents.set(file, {\n elements,\n ids: new Set(\n elements.flatMap((node) =>\n typeof node.properties.id === \"string\"\n ? [node.properties.id]\n : node.tagName === \"a\" && typeof node.properties.name === \"string\"\n ? [node.properties.name]\n : [],\n ),\n ),\n });\n }\n const requests = new Map<string, string>();\n const resolveLocal = (\n raw: string,\n owner: string,\n ): { file: string; url: URL } | undefined => {\n if (!raw || /^(?:data|mailto|tel|javascript|blob):/i.test(raw)) return;\n let url: URL;\n try {\n url = new URL(raw, new URL(owner, origin));\n } catch {\n error(\"DOCS_OUTPUT_URL_INVALID\", `Invalid URL ${raw}.`, owner);\n return;\n }\n if (\n url.origin !== new URL(origin).origin ||\n (base && url.pathname !== base && !url.pathname.startsWith(`${base}/`))\n )\n return;\n let path: string;\n try {\n path = decodeURIComponent(url.pathname);\n } catch {\n error(\"DOCS_OUTPUT_URL_INVALID\", `Invalid encoded URL ${raw}.`, owner);\n return;\n }\n const file =\n pagePaths.get(normalizePath(path)) ??\n path.slice(base.length).replace(/^\\//, \"\");\n if (!fileSet.has(file)) {\n error(\n \"DOCS_OUTPUT_LINK_MISSING\",\n `${raw} points to a missing page or asset.`,\n owner,\n );\n return;\n }\n if (url.hash && documents.has(file)) {\n let id: string;\n try {\n id = decodeURIComponent(url.hash.slice(1));\n } catch {\n id = url.hash.slice(1);\n }\n if (!documents.get(file)!.ids.has(id))\n error(\n \"DOCS_OUTPUT_FRAGMENT_MISSING\",\n `${raw} points to a missing heading or anchor.`,\n owner,\n );\n }\n requests.set(url.pathname, file);\n return { file, url };\n };\n for (const [file, { elements }] of documents) {\n const owner = urlForFile(file);\n requests.set(owner, file);\n for (const node of elements) {\n const p = node.properties;\n if (\n [\"a\", \"link\", \"use\"].includes(node.tagName) &&\n typeof p.href === \"string\" &&\n !(\n node.tagName === \"link\" &&\n Array.isArray(p.rel) &&\n p.rel.includes(\"canonical\")\n )\n )\n resolveLocal(p.href, owner);\n if (typeof p.src === \"string\") resolveLocal(p.src, owner);\n if (typeof p.poster === \"string\") resolveLocal(p.poster, owner);\n if (typeof p.srcSet === \"string\" && !p.srcSet.startsWith(\"data:\"))\n for (const candidate of p.srcSet.split(\",\"))\n resolveLocal(candidate.trim().split(/\\s+/)[0]!, owner);\n if (\n node.tagName === \"meta\" &&\n [\"og:image\", \"twitter:image\"].includes(String(p.property ?? p.name)) &&\n typeof p.content === \"string\"\n )\n resolveLocal(p.content, owner);\n }\n }\n for (const file of files.filter((file) => file.endsWith(\".css\"))) {\n const css = await readFile(resolve(directory, file), \"utf8\");\n for (const match of css.matchAll(/url\\(\\s*[\"']?([^\"'()\\s]+)[\"']?\\s*\\)/g))\n resolveLocal(match[1]!, `${base}/${file}`);\n }\n const expected = [...manifest.pages];\n if (options.graph)\n for (const route of options.graph.routes) {\n const url = routePath(\n route.route,\n base,\n options.graph.config.build.trailingSlash,\n );\n if (!resolveLocal(url, `${base}/`)) continue;\n if (!manifest.pages.some((page) => page.route === route.route)) {\n const entry = options.graph.entryByRoute(route.route);\n if (!entry?.frontmatter.draft)\n error(\n \"DOCS_PUBLISHING_PAGE_MISSING\",\n `Publishing manifest omits ${route.route}.`,\n );\n else\n expected.push({\n route: route.route,\n url,\n index: false,\n sitemap: false,\n });\n }\n }\n for (const page of expected) {\n const resolved = resolveLocal(page.url, `${base}/`);\n if (!resolved) continue;\n const nodes = documents.get(resolved.file)?.elements ?? [];\n const canonicals = nodes.filter(\n (n) =>\n n.tagName === \"link\" &&\n Array.isArray(n.properties.rel) &&\n n.properties.rel.includes(\"canonical\"),\n );\n if (\n (hasSite && canonicals.length !== 1) ||\n (page.canonical?.startsWith(\"http\") &&\n canonicals[0]?.properties.href !== page.canonical)\n )\n error(\n \"DOCS_CANONICAL_INVALID\",\n `Expected one canonical${page.canonical ? ` pointing to ${page.canonical}` : \"\"}.`,\n resolved.file,\n );\n const noindex = nodes.some(\n (n) =>\n n.tagName === \"meta\" &&\n n.properties.name === \"robots\" &&\n /\\bnoindex\\b/i.test(String(n.properties.content)),\n );\n if (page.index === noindex)\n error(\n \"DOCS_INDEX_POLICY_MISMATCH\",\n `Expected ${page.index ? \"indexable\" : \"noindex\"} metadata.`,\n resolved.file,\n );\n if (page.markdown) resolveLocal(page.markdown, page.url);\n }\n const sitemapUrls = new Set<string>();\n for (const file of files.filter((file) =>\n /(?:^|\\/)sitemap[^/]*\\.xml$/.test(file),\n )) {\n const xml = await readFile(resolve(directory, file), \"utf8\");\n for (const match of xml.matchAll(/<loc>([^<]+)<\\/loc>/g)) {\n const url = match[1]!.replace(/&/g, \"&\");\n resolveLocal(url, `${base}/${file}`);\n if (!url.endsWith(\".xml\")) sitemapUrls.add(url);\n }\n }\n if (new URL(origin).hostname !== \"cookbook.invalid\")\n for (const page of expected) {\n if (page.sitemap && !sitemapUrls.has(page.url))\n error(\"DOCS_SITEMAP_PAGE_MISSING\", `Sitemap omits ${page.url}.`);\n if (!page.sitemap && sitemapUrls.has(page.url))\n error(\n \"DOCS_SITEMAP_UNLISTED_PAGE\",\n `Sitemap includes unlisted ${page.url}.`,\n );\n }\n resolveLocal(`${base}/llms.txt`, `${base}/`);\n if (fileSet.has(\"llms.txt\")) {\n const llms = await readFile(resolve(directory, \"llms.txt\"), \"utf8\");\n for (const match of llms.matchAll(/\\]\\(([^\\s)]+)\\)/g))\n resolveLocal(match[1]!, `${base}/llms.txt`);\n for (const page of expected.filter((page) => !page.sitemap)) {\n if (llms.includes(`](${page.url})`))\n error(\n \"DOCS_AGENT_UNLISTED_PAGE\",\n `llms.txt lists excluded ${page.url}.`,\n );\n }\n }\n if (!base && hasSite) resolveLocal(\"/robots.txt\", \"/\");\n if (fileSet.has(\"robots.txt\")) {\n const robots = await readFile(resolve(directory, \"robots.txt\"), \"utf8\");\n for (const match of robots.matchAll(/^Sitemap:\\s*(\\S+)/gim))\n resolveLocal(match[1]!, `${base}/robots.txt`);\n }\n let checkedUrls = 0;\n if (options.deployedUrl) {\n const deployed = new URL(\n options.deployedUrl.endsWith(\"/\")\n ? options.deployedUrl\n : `${options.deployedUrl}/`,\n );\n if (![\"http:\", \"https:\"].includes(deployed.protocol))\n throw Error(\"Deployment URL must use HTTP or HTTPS.\");\n const pending = [...requests.entries()];\n const worker = async () => {\n for (;;) {\n const next = pending.shift();\n if (!next) return;\n const [path, file] = next;\n const url = new URL(\n path.slice(base.length).replace(/^\\//, \"\"),\n deployed,\n );\n try {\n const response = await fetch(url, {\n signal: AbortSignal.timeout(15000),\n });\n const body = new Uint8Array(await response.arrayBuffer());\n checkedUrls++;\n if (!response.ok && !(file === \"404.html\" && response.status === 404))\n error(\n \"DOCS_DEPLOYMENT_HTTP\",\n `${url.href} returned ${response.status}.`,\n );\n else if (file.endsWith(\".html\")) {\n const live = new TextDecoder().decode(body);\n const local = await readFile(resolve(directory, file), \"utf8\");\n if (publishingSignature(live) !== publishingSignature(local))\n error(\n \"DOCS_DEPLOYMENT_PAGE_MISMATCH\",\n `${url.href} serves different title, canonical, or indexing metadata.`,\n );\n if (\n /noindex/i.test(response.headers.get(\"x-robots-tag\") ?? \"\") &&\n manifest.pages.some(\n (page) =>\n normalizePath(new URL(page.url, origin).pathname) ===\n normalizePath(path) && page.index,\n )\n )\n error(\n \"DOCS_DEPLOYMENT_NOINDEX\",\n `${url.href} has an unexpected X-Robots-Tag noindex header.`,\n );\n } else if (\n !body.length ||\n /text\\/html/i.test(response.headers.get(\"content-type\") ?? \"\")\n )\n error(\n \"DOCS_DEPLOYMENT_ASSET_INVALID\",\n `${url.href} did not return the expected asset.`,\n );\n } catch (cause) {\n error(\"DOCS_DEPLOYMENT_FETCH\", `${url.href}: ${String(cause)}`);\n }\n }\n };\n await Promise.all(Array.from({ length: 6 }, worker));\n }\n return {\n ok: !diagnostics.some((d) => d.severity === \"error\"),\n scope: options.deployedUrl ? \"deployment\" : \"built-output\",\n pages: documents.size,\n assets: new Set(\n [...requests.values()].filter((file) => !documents.has(file)),\n ).size,\n checkedUrls,\n diagnostics,\n };\n}\n\nfunction publishingSignature(html: string): string {\n const values: string[] = [];\n const walk = (node: Root | Root[\"children\"][number]) => {\n if (node.type === \"element\") {\n const p = node.properties;\n if (\n node.tagName === \"link\" &&\n Array.isArray(p.rel) &&\n p.rel.includes(\"canonical\")\n )\n values.push(`canonical:${p.href}`);\n if (node.tagName === \"meta\" && p.name === \"robots\")\n values.push(`robots:${p.content}`);\n if (node.tagName === \"title\")\n values.push(\n `title:${node.children.map((child) => (child.type === \"text\" ? child.value : \"\")).join(\"\")}`,\n );\n }\n if (\"children\" in node) node.children.forEach(walk);\n };\n walk(fromHtml(html));\n return JSON.stringify(values.sort());\n}\n"],"mappings":"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"}
|
package/dist/markdown/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as DocsHeading, dt as
|
|
1
|
+
import { E as DocsHeading, dt as Heading, ft as Link, ht as Root, mt as PhrasingContent, pt as Paragraph, ut as Content } from "../types-yhxzgOIF.js";
|
|
2
2
|
//#region src/markdown/index.d.ts
|
|
3
3
|
interface ParsedMarkdown {
|
|
4
4
|
ast: Root;
|
|
@@ -1447,6 +1447,12 @@ interface ComponentsConfig {
|
|
|
1447
1447
|
/** Astro component paths keyed by Cookbook component name. `Footer` also accepts `false`. */
|
|
1448
1448
|
overrides?: Record<string, string | false>;
|
|
1449
1449
|
}
|
|
1450
|
+
/**
|
|
1451
|
+
* Which page URLs end with a slash, derived from Astro's `trailingSlash` and
|
|
1452
|
+
* `build.format`. `"index"` describes the file format: pages are written as
|
|
1453
|
+
* `guide.html`, while the base home is still a directory `index.html`.
|
|
1454
|
+
*/
|
|
1455
|
+
type TrailingSlash = "always" | "never" | "index";
|
|
1450
1456
|
interface BuildConfig {
|
|
1451
1457
|
strict?: boolean;
|
|
1452
1458
|
ci?: boolean;
|
|
@@ -1509,6 +1515,7 @@ interface NormalizedDocsConfig {
|
|
|
1509
1515
|
components: ComponentsConfig;
|
|
1510
1516
|
build: Required<BuildConfig> & {
|
|
1511
1517
|
base: string;
|
|
1518
|
+
trailingSlash: TrailingSlash;
|
|
1512
1519
|
};
|
|
1513
1520
|
}
|
|
1514
1521
|
interface DocsFrontmatter {
|
|
@@ -1674,7 +1681,9 @@ interface CreateDocsGraphOptions {
|
|
|
1674
1681
|
lock?: CookbookLock;
|
|
1675
1682
|
/** Public URL base used when rewriting routes and assets. */
|
|
1676
1683
|
base?: string;
|
|
1684
|
+
/** Which page URLs end with a slash, following the site's URL format. */
|
|
1685
|
+
trailingSlash?: TrailingSlash;
|
|
1677
1686
|
}
|
|
1678
1687
|
//#endregion
|
|
1679
|
-
export { ThemeConfig as $, EditLinkConfig as A, NormalizedDocsConfig as B, DocsEntry as C, DocsReference as D, DocsHeading as E, MarkdownConfig as F, SearchConfig as G, PackageLockSource as H, NavigationConfig as I, SiteLogoConfig as J, SiteConfig as K, NavigationItem as L, HeadConfig as M, HeaderLink as N, DocsRoute as O, LocaleConfig as P, TableOfContentsConfig as Q, NavigationPlacement as R, DocsDiagnostic as S, DocsGraph as T, PackageManifest as U, PackageDiscovery as V, PageSeoConfig as W, SiteVersion as X, SiteSeoConfig as Y, SocialImage as Z, CookbookPaletteName as _, COOKBOOK_COMPONENT_NAMES as a, ThemeTokenValue as at, DocsAsset as b, ComponentStyleConfig as c,
|
|
1680
|
-
//# sourceMappingURL=types-
|
|
1688
|
+
export { ThemeConfig as $, EditLinkConfig as A, NormalizedDocsConfig as B, DocsEntry as C, DocsReference as D, DocsHeading as E, MarkdownConfig as F, SearchConfig as G, PackageLockSource as H, NavigationConfig as I, SiteLogoConfig as J, SiteConfig as K, NavigationItem as L, HeadConfig as M, HeaderLink as N, DocsRoute as O, LocaleConfig as P, TableOfContentsConfig as Q, NavigationPlacement as R, DocsDiagnostic as S, DocsGraph as T, PackageManifest as U, PackageDiscovery as V, PageSeoConfig as W, SiteVersion as X, SiteSeoConfig as Y, SocialImage as Z, CookbookPaletteName as _, COOKBOOK_COMPONENT_NAMES as a, ThemeTokenValue as at, DocsAsset as b, ComponentStyleConfig as c, TypographyPreset as ct, ComponentsConfig as d, Heading as dt, ThemeFont as et, ContentConfig as f, Link as ft, CookbookLock as g, CookbookComponentSubElementName as h, Root as ht, BuildConfig as i, ThemePaletteConfig as it, FontLoadingConfig as j, DocsSource as k, ComponentStyles as l, TypographyPresets as lt, CookbookComponentStyles as m, PhrasingContent as mt, BrandDeclaration as n, ThemeFonts as nt, COOKBOOK_COMPONENT_SUB_ELEMENTS as o, ThemeTokens as ot, CookbookComponentName as p, Paragraph as pt, SiteIconConfig as q, BreadcrumbItem as r, ThemePaletteColor as rt, COOKBOOK_PALETTE_NAMES as s, TrailingSlash as st, BrandConfig as t, ThemeFontFile as tt, ComponentStylesConfig as u, Content as ut, CreateDocsGraphOptions as v, DocsFrontmatter as w, DocsConfig as x, DiagnosticSeverity as y, NavigationTab as z };
|
|
1689
|
+
//# sourceMappingURL=types-yhxzgOIF.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-yhxzgOIF.d.ts","names":[],"sources":["../../../node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts","../../../node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts","../src/types.ts"],"x_google_ignoreList":[0,1],"mappings":"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ACA;EACA;EACA;;UAGe,kBAAkB;EACjC;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,aAAa;EACb,UAAU;EACV;EACA;EACA,KAAK;EACL,OAAO;EACP,QAAQ;EACR;EACA;IAAY;IAAmB;;;UAGhB;EACf;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;EACA,kBAAkB;;UAGH;EACf,WAAW;EACX;EACA,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,aAAa,gBAAgB;EAC7B,cAAc,oBAAoB,oBAAoB;;UAGvC;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;IAAwB;IAAe;IAAc;;EACrD;IACE;IACA;IACA;IACA;MAAU,QAAQ;;;EAEpB;EACA;;UAGe;EACf;EACA,UAAU;EACV;EACA;EACA;;UAGe;EACf;EACA,SAAS;EACT,OAAO;;EAEP;;EAEA,gBAAgB"}
|