fumadocs-mdx 14.3.1 → 14.3.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/dist/{adapter-DB1MHK9h.js → adapter-DVxULZiU.js} +2 -2
- package/dist/{adapter-DB1MHK9h.js.map → adapter-DVxULZiU.js.map} +1 -1
- package/dist/build-mdx-82nyqL4J.js.map +1 -1
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.js +2 -2
- package/dist/codegen-B8EhLmbU.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +10 -4
- package/dist/config/index.js.map +1 -1
- package/dist/{core-DzcubDJt.d.ts → core-C5aAAT92.d.ts} +27 -5
- package/dist/core-C5aAAT92.d.ts.map +1 -0
- package/dist/{core-B0lF760L.js → core-Wd5WdPN4.js} +7 -1
- package/dist/{core-B0lF760L.js.map → core-Wd5WdPN4.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/load-from-file-C1DDNVwF.js.map +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.js +1 -1
- package/dist/node/loader.js +2 -2
- package/dist/node/loader.js.map +1 -1
- package/dist/plugins/index-file.d.ts +1 -1
- package/dist/plugins/json-schema.d.ts +1 -1
- package/dist/plugins/last-modified.d.ts +1 -1
- package/dist/remark-include-VDoXZSBN.js.map +1 -1
- package/dist/runtime/browser.d.ts +1 -1
- package/dist/runtime/browser.js.map +1 -1
- package/dist/runtime/dynamic.d.ts +1 -1
- package/dist/runtime/dynamic.js +1 -1
- package/dist/runtime/server.d.ts +1 -1
- package/dist/runtime/server.js.map +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.js +2 -2
- package/dist/webpack/mdx.js +2 -2
- package/dist/webpack/meta.js +2 -2
- package/dist/{webpack-DmRbt96H.js → webpack-CBlMzMlJ.js} +2 -2
- package/dist/{webpack-DmRbt96H.js.map → webpack-CBlMzMlJ.js.map} +1 -1
- package/package.json +8 -8
- package/dist/core-DzcubDJt.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as ValidationError } from "./core-
|
|
1
|
+
import { r as ValidationError } from "./core-Wd5WdPN4.js";
|
|
2
2
|
import { t as loadConfig } from "./load-from-file-C1DDNVwF.js";
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
@@ -138,4 +138,4 @@ function toBun(loader) {
|
|
|
138
138
|
//#endregion
|
|
139
139
|
export { createIntegratedConfigLoader as a, toWebpack as i, toNode as n, createStandaloneConfigLoader as o, toVite as r, toBun as t };
|
|
140
140
|
|
|
141
|
-
//# sourceMappingURL=adapter-
|
|
141
|
+
//# sourceMappingURL=adapter-DVxULZiU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-
|
|
1
|
+
{"version":3,"file":"adapter-DVxULZiU.js","names":[],"sources":["../src/loaders/config.ts","../src/loaders/adapter.ts"],"sourcesContent":["import { loadConfig } from '@/config/load-from-file';\nimport type { Core } from '@/core';\nimport fs from 'node:fs/promises';\n\nexport interface ConfigLoader {\n getCore(): Promise<Core>;\n}\n\nexport function createStandaloneConfigLoader({\n core,\n buildConfig,\n mode,\n}: {\n /**\n * core (not initialized)\n */\n core: Core;\n buildConfig: boolean;\n /**\n * In dev mode, the config file is dynamically re-loaded when it's updated.\n */\n mode: 'dev' | 'production';\n}): ConfigLoader {\n let prev:\n | {\n hash: string;\n init: Promise<void>;\n }\n | undefined;\n\n async function getConfigHash(): Promise<string> {\n if (mode === 'production') return 'static';\n\n const stats = await fs.stat(core.getOptions().configPath).catch(() => {\n throw new Error('Cannot find config file');\n });\n\n return stats.mtime.getTime().toString();\n }\n\n return {\n async getCore() {\n const hash = await getConfigHash();\n if (!prev || hash !== prev.hash) {\n prev = {\n hash,\n init: core.init({\n config: loadConfig(core, buildConfig),\n }),\n };\n }\n\n await prev.init;\n return core;\n },\n };\n}\n\n/**\n * create config loader from initialized core\n */\nexport function createIntegratedConfigLoader(core: Core): ConfigLoader {\n return {\n async getCore() {\n return core;\n },\n };\n}\n","import type { CompilerOptions } from '@/loaders/mdx/build-mdx';\nimport type { LoadFnOutput, LoadHook } from 'node:module';\nimport { fileURLToPath } from 'node:url';\nimport fs from 'node:fs/promises';\nimport type { TransformPluginContext } from 'rolldown';\nimport type { Environment, TransformResult } from 'vite';\nimport { parse } from 'node:querystring';\nimport { ValidationError } from '@/utils/validation';\nimport type { LoaderContext } from 'webpack';\nimport { readFileSync } from 'node:fs';\n\nexport interface LoaderInput {\n development: boolean;\n compiler: CompilerOptions;\n\n filePath: string;\n query: Record<string, string | string[] | undefined>;\n getSource: () => string | Promise<string>;\n}\n\nexport interface LoaderOutput {\n code: string;\n map?: unknown;\n\n /**\n * Only supported in Vite 8.\n *\n * Explicitly define the transformed module type, for unsupported environments, you need to consider the differences between each bundler.\n */\n moduleType?: 'js' | 'json';\n}\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface Loader {\n /**\n * Filter file paths, the input can be either a file URL or file path.\n *\n * Must take resource query into consideration.\n */\n test?: RegExp;\n\n /**\n * Transform input into JavaScript.\n *\n * Returns:\n * - `LoaderOutput`: JavaScript code & source map.\n * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.\n */\n load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;\n\n bun?: {\n /**\n * 1. Bun doesn't allow `null` in loaders.\n * 2. Bun requires sync result to support dynamic require().\n */\n load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;\n };\n}\n\nexport function toNode(loader: Loader): LoadHook {\n return async (url, _context, nextLoad): Promise<LoadFnOutput> => {\n if (url.startsWith('file:///') && (!loader.test || loader.test.test(url))) {\n const parsedUrl = new URL(url);\n const filePath = fileURLToPath(parsedUrl);\n\n const result = await loader.load({\n filePath,\n query: Object.fromEntries(parsedUrl.searchParams.entries()),\n async getSource() {\n return await fs.readFile(filePath, 'utf-8');\n },\n development: false,\n compiler: {\n addDependency() {},\n },\n });\n\n if (result) {\n return {\n source: result.code,\n format: 'module',\n shortCircuit: true,\n };\n }\n }\n\n return nextLoad(url);\n };\n}\n\nexport interface ViteLoader {\n filter: (id: string) => boolean;\n\n transform: (\n this: TransformPluginContext & { environment: Environment },\n value: string,\n id: string,\n ) => Promise<TransformResult | null>;\n}\n\nexport function toVite(loader: Loader): ViteLoader {\n return {\n filter(id) {\n return !loader.test || loader.test.test(id);\n },\n async transform(value, id) {\n const environment = this.environment;\n const [file, query = ''] = id.split('?', 2);\n\n const result = await loader.load({\n filePath: file,\n query: parse(query),\n getSource() {\n return value;\n },\n development: environment.mode === 'dev',\n compiler: {\n addDependency: (file) => {\n this.addWatchFile(file);\n },\n },\n });\n\n if (result === null) return null;\n return {\n code: result.code,\n map: result.map as TransformResult['map'],\n moduleType: result.moduleType,\n };\n },\n };\n}\n\nexport type WebpackLoader = (\n this: LoaderContext<unknown>,\n source: string,\n callback: LoaderContext<unknown>['callback'],\n) => Promise<void>;\n\n/**\n * need to handle the `test` regex in Webpack config instead.\n */\nexport function toWebpack(loader: Loader): WebpackLoader {\n return async function (source, callback) {\n try {\n const result = await loader.load({\n filePath: this.resourcePath,\n query: parse(this.resourceQuery.slice(1)),\n getSource() {\n return source;\n },\n development: this.mode === 'development',\n compiler: this,\n });\n\n if (result === null) {\n callback(undefined, source);\n } else {\n callback(undefined, result.code, result.map as string);\n }\n } catch (error) {\n if (error instanceof ValidationError) {\n return callback(new Error(await error.toStringFormatted()));\n }\n\n if (!(error instanceof Error)) throw error;\n callback(error);\n }\n };\n}\n\nexport function toBun(loader: Loader) {\n function toResult(output: LoaderOutput | null): Bun.OnLoadResult {\n // it errors, treat this as an exception\n if (!output) return;\n\n return {\n contents: output.code,\n loader: output.moduleType ?? 'js',\n };\n }\n\n return (build: Bun.PluginBuilder) => {\n // avoid using async here, because it will cause dynamic require() to fail\n build.onLoad({ filter: loader.test ?? /.+/ }, (args) => {\n const [filePath, query = ''] = args.path.split('?', 2);\n const input: LoaderInput = {\n async getSource() {\n return Bun.file(filePath).text();\n },\n query: parse(query),\n filePath,\n development: false,\n compiler: {\n addDependency() {},\n },\n };\n\n if (loader.bun?.load) {\n return loader.bun.load(readFileSync(filePath, 'utf-8'), input);\n }\n\n const result = loader.load(input);\n if (result instanceof Promise) {\n return result.then(toResult);\n }\n return toResult(result);\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-mdx-82nyqL4J.js","names":[],"sources":["../../core/dist/utils-pSG8hSr9.js","../../core/dist/mdx-plugins/stringifier.js","../../core/dist/mdx-plugins/remark-llms.js","../src/loaders/mdx/remark-postprocess.ts","../src/loaders/mdx/build-mdx.ts"],"sourcesContent":["import { valueToEstree } from \"estree-util-value-to-estree\";\n//#region src/mdx-plugins/utils.ts\nfunction flattenNode(node) {\n\tif (\"children\" in node) return node.children.map(flattenNode).join(\"\");\n\tif (\"value\" in node && typeof node.value === \"string\") return node.value;\n\treturn \"\";\n}\nfunction flattenNodeHast(node) {\n\tif (\"children\" in node) return node.children.map(flattenNodeHast).join(\"\");\n\treturn \"value\" in node && typeof node.value === \"string\" ? node.value : \"\";\n}\nfunction toMdxExport(name, value) {\n\treturn toMdxExportRaw(name, valueToEstree(value));\n}\nfunction toMdxExportRaw(name, expression) {\n\treturn {\n\t\ttype: \"mdxjsEsm\",\n\t\tvalue: \"\",\n\t\tdata: { estree: {\n\t\t\ttype: \"Program\",\n\t\t\tsourceType: \"module\",\n\t\t\tbody: [{\n\t\t\t\ttype: \"ExportNamedDeclaration\",\n\t\t\t\tattributes: [],\n\t\t\t\tspecifiers: [],\n\t\t\t\tdeclaration: {\n\t\t\t\t\ttype: \"VariableDeclaration\",\n\t\t\t\t\tkind: \"let\",\n\t\t\t\t\tdeclarations: [{\n\t\t\t\t\t\ttype: \"VariableDeclarator\",\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinit: expression\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}]\n\t\t} }\n\t};\n}\nfunction handleTag(value, tag) {\n\tconst idx = value.indexOf(tag);\n\tif (idx !== -1) return value.slice(0, idx).trimEnd() + value.slice(idx + tag.length);\n\treturn false;\n}\n//#endregion\nexport { toMdxExportRaw as a, toMdxExport as i, flattenNodeHast as n, handleTag as r, flattenNode as t };\n","import { mdxToMarkdown } from \"mdast-util-mdx\";\nimport { toMarkdown } from \"mdast-util-to-markdown\";\n//#region src/mdx-plugins/stringifier.ts\nfunction defaultStringifier(config = {}) {\n\tconst { filterMdxAttributes, filterElement = (node) => {\n\t\tswitch (node.type) {\n\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\tcase \"mdxJsxTextElement\":\n\t\t\t\tswitch (node.name) {\n\t\t\t\t\tcase \"File\":\n\t\t\t\t\tcase \"TypeTable\":\n\t\t\t\t\tcase \"Callout\":\n\t\t\t\t\tcase \"Card\": return true;\n\t\t\t\t}\n\t\t\t\treturn \"children-only\";\n\t\t}\n\t\treturn true;\n\t}, stringify, ...customExtension } = config;\n\tfunction modHandler(handler, ctx) {\n\t\treturn function(node, parent, state, info) {\n\t\t\tlet visibility = filterElement(node);\n\t\t\tif (visibility === false) return \"\";\n\t\t\tif (stringify) {\n\t\t\t\tconst v = stringify(node, parent, state, info, ctx);\n\t\t\t\tif (v) return v;\n\t\t\t}\n\t\t\tconst extraInfo = node.data?._stringify;\n\t\t\tif (extraInfo) if (extraInfo === \"children-only\") visibility = \"children-only\";\n\t\t\telse if (\"text\" in extraInfo) return extraInfo.text;\n\t\t\telse node = extraInfo.node;\n\t\t\tif (visibility === \"children-only\") {\n\t\t\t\tif (!(\"children\" in node)) return \"\";\n\t\t\t\tswitch (node.type) {\n\t\t\t\t\tcase \"mdxJsxTextElement\":\n\t\t\t\t\tcase \"paragraph\": return state.containerPhrasing(node, info);\n\t\t\t\t\tcase \"mdxJsxFlowElement\": return state.containerFlow(node, info);\n\t\t\t\t\tdefault: return state.containerFlow({\n\t\t\t\t\t\ttype: \"root\",\n\t\t\t\t\t\tchildren: node.children\n\t\t\t\t\t}, info);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (node.type) {\n\t\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\t\tcase \"mdxJsxTextElement\": {\n\t\t\t\t\tconst stringifiedAttributes = [];\n\t\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\t\tif (attr.type === \"mdxJsxExpressionAttribute\") continue;\n\t\t\t\t\t\tif (filterMdxAttributes && !filterMdxAttributes(node, attr)) continue;\n\t\t\t\t\t\tconst str = typeof attr.value === \"string\" ? attr.value : attr.value?.value;\n\t\t\t\t\t\tif (!str) continue;\n\t\t\t\t\t\tstringifiedAttributes.push({\n\t\t\t\t\t\t\ttype: \"mdxJsxAttribute\",\n\t\t\t\t\t\t\tname: attr.name,\n\t\t\t\t\t\t\tvalue: str\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn handler({\n\t\t\t\t\t\t...node,\n\t\t\t\t\t\tattributes: stringifiedAttributes\n\t\t\t\t\t}, parent, state, info);\n\t\t\t\t}\n\t\t\t\tdefault: return handler(node, parent, state, info);\n\t\t\t}\n\t\t};\n\t}\n\tconst customToMarkdown = { handlers: { _custom(node, _, state, info) {\n\t\tconst handlers = state.handlers;\n\t\tfor (const k in handlers) handlers[k] = modHandler(handlers[k], node.ctx);\n\t\treturn state.handle(node.root, void 0, state, info);\n\t} } };\n\treturn function(root, ctx) {\n\t\treturn toMarkdown({\n\t\t\ttype: \"_custom\",\n\t\t\troot,\n\t\t\tctx\n\t\t}, {\n\t\t\t...this?.data(\"settings\"),\n\t\t\textensions: [\n\t\t\t\tmdxToMarkdown(),\n\t\t\t\t...this?.data(\"toMarkdownExtensions\") ?? [],\n\t\t\t\tcustomToMarkdown,\n\t\t\t\tcustomExtension\n\t\t\t]\n\t\t});\n\t};\n}\n//#endregion\nexport { defaultStringifier };\n","import { i as toMdxExport } from \"../utils-pSG8hSr9.js\";\nimport { defaultStringifier } from \"./stringifier.js\";\nimport { defaultHandlers } from \"mdast-util-to-markdown\";\n//#region src/mdx-plugins/remark-llms.ts\n/**\n* generate `llms.txt` for markdown.\n*/\nfunction remarkLLMs({ as = \"_markdown\", headingIds = true, _data = false, mdxAsPlaceholder, ...rest } = {}) {\n\tconst stringifier = defaultStringifier({\n\t\t...rest,\n\t\tfilterElement(node) {\n\t\t\tswitch (node.type) {\n\t\t\t\tcase \"mdxjsEsm\": return false;\n\t\t\t\tdefault: return true;\n\t\t\t}\n\t\t},\n\t\tstringify(node, parent, state, info, ctx) {\n\t\t\tif (mdxAsPlaceholder) switch (node.type) {\n\t\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\t\tcase \"mdxJsxTextElement\": if (node.name && mdxAsPlaceholder.includes(node.name)) return placeholder(node, parent, state, info);\n\t\t\t}\n\t\t\treturn rest.stringify?.(node, parent, state, info, ctx);\n\t\t},\n\t\thandlers: {\n\t\t\theading(node, _p, state, info) {\n\t\t\t\tconst id = node.data?.hProperties?.id;\n\t\t\t\tconst defaultValue = defaultHandlers.heading(node, _p, state, info);\n\t\t\t\treturn headingIds && id ? `${defaultValue} [#${id}]` : defaultValue;\n\t\t\t},\n\t\t\t...rest.handlers\n\t\t}\n\t});\n\treturn (node, file) => {\n\t\tconst value = stringifier.call(this, node, void 0);\n\t\tnode.children.unshift(toMdxExport(as, value));\n\t\tif (_data) file.data.markdown = value;\n\t};\n}\n/**\n* Preserve AST data to render the MDX component at runtime, use `renderPlaceholder()` to render the placeholders.\n*/\nfunction placeholder(node, _parent, state, info) {\n\tconst attributes = {};\n\tfor (const attr of node.attributes) {\n\t\tif (attr.type === \"mdxJsxExpressionAttribute\") continue;\n\t\tattributes[attr.name] = attr.value;\n\t}\n\treturn `\\0${JSON.stringify({\n\t\tname: node.name,\n\t\tchildren: state.containerPhrasing(node, info),\n\t\tattributes\n\t})}\\0`;\n}\n//#endregion\nexport { placeholder, remarkLLMs };\n","import type { Processor, Transformer } from 'unified';\nimport type { Root, RootContent } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport { valueToEstree } from 'estree-util-value-to-estree';\nimport { removePosition } from 'unist-util-remove-position';\nimport { flattenNode } from './mdast-utils';\nimport type { LLMsOptions } from 'fumadocs-core/mdx-plugins';\nimport { remarkLLMs } from 'fumadocs-core/mdx-plugins/remark-llms';\n\nexport interface ExtractedReference {\n href: string;\n}\n\nexport interface PostprocessOptions {\n _format: 'md' | 'mdx';\n\n /**\n * Properties to export from `vfile.data`\n */\n valueToExport?: string[];\n\n /**\n * stringify MDAST and export via `_markdown`.\n */\n includeProcessedMarkdown?: boolean | LLMsOptions;\n\n /**\n * extract link references, export via `extractedReferences`.\n */\n extractLinkReferences?: boolean;\n\n /**\n * store MDAST and export via `_mdast`.\n */\n includeMDAST?:\n | boolean\n | {\n removePosition?: boolean;\n };\n}\n\n/**\n * - collect references\n * - write frontmatter (auto-title & description)\n */\nexport function remarkPostprocess(\n this: Processor,\n {\n includeProcessedMarkdown = false,\n includeMDAST = false,\n extractLinkReferences = false,\n valueToExport = [],\n }: PostprocessOptions,\n): Transformer<Root, Root> {\n return (tree, file) => {\n const frontmatter = (file.data.frontmatter ??= {});\n if (!frontmatter.title) {\n visit(tree, 'heading', (node) => {\n if (node.depth === 1) {\n frontmatter.title = flattenNode(node);\n return false;\n }\n });\n }\n\n file.data['mdx-export'] ??= [];\n file.data['mdx-export'].push({\n name: 'frontmatter',\n value: frontmatter,\n });\n\n if (extractLinkReferences) {\n const urls: ExtractedReference[] = [];\n\n visit(tree, 'link', (node) => {\n urls.push({\n href: node.url,\n });\n return 'skip';\n });\n\n file.data['mdx-export'].push({\n name: 'extractedReferences',\n value: urls,\n });\n }\n\n if (includeProcessedMarkdown) {\n const llms = remarkLLMs.call(\n this,\n typeof includeProcessedMarkdown === 'object' ? includeProcessedMarkdown : undefined,\n );\n llms(tree, file, () => undefined);\n }\n\n if (includeMDAST) {\n const options = includeMDAST === true ? {} : includeMDAST;\n const mdast = JSON.stringify(\n options.removePosition ? removePosition(structuredClone(tree)) : tree,\n );\n\n file.data['mdx-export'].push({\n name: '_mdast',\n value: mdast,\n });\n }\n\n for (const { name, value } of file.data['mdx-export']) {\n tree.children.unshift(getMdastExport(name, value));\n }\n\n // reset the data to reduce memory usage\n file.data['mdx-export'] = [];\n\n for (const name of valueToExport) {\n if (!(name in file.data)) continue;\n\n tree.children.unshift(getMdastExport(name, file.data[name]));\n }\n };\n}\n\n/**\n * MDX.js first converts javascript (with esm support) into mdast nodes with remark-mdx, then handle the other remark plugins\n *\n * Therefore, if we want to inject an export, we must convert the object into AST, then add the mdast node\n */\nfunction getMdastExport(name: string, value: unknown): RootContent {\n return {\n type: 'mdxjsEsm',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n body: [\n {\n type: 'ExportNamedDeclaration',\n attributes: [],\n specifiers: [],\n source: null,\n declaration: {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [\n {\n type: 'VariableDeclarator',\n id: {\n type: 'Identifier',\n name,\n },\n init: valueToEstree(value),\n },\n ],\n },\n },\n ],\n },\n },\n };\n}\n","import { createProcessor } from '@mdx-js/mdx';\nimport { VFile } from 'vfile';\nimport { remarkInclude } from '@/loaders/mdx/remark-include';\nimport type { StructuredData } from 'fumadocs-core/mdx-plugins';\nimport type { TOCItemType } from 'fumadocs-core/toc';\nimport type { FC } from 'react';\nimport type { MDXProps } from 'mdx/types';\nimport { type PostprocessOptions, remarkPostprocess } from '@/loaders/mdx/remark-postprocess';\nimport type { Core } from '@/core';\nimport type { DocCollectionItem } from '@/config/build';\n\ntype Processor = ReturnType<typeof createProcessor>;\n\ninterface BuildMDXOptions {\n /**\n * Specify a file path for source\n */\n filePath: string;\n source: string;\n frontmatter?: Record<string, unknown>;\n\n environment: 'bundler' | 'runtime';\n isDevelopment: boolean;\n _compiler?: CompilerOptions;\n}\n\nexport interface CompilerOptions {\n addDependency: (file: string) => void;\n}\n\nexport interface CompiledMDXProperties<Frontmatter = Record<string, unknown>> {\n frontmatter: Frontmatter;\n structuredData: StructuredData;\n toc: TOCItemType[];\n default: FC<MDXProps>;\n\n /**\n * Enable from `postprocess` option.\n */\n _markdown?: string;\n /**\n * Enable from `postprocess` option.\n */\n _mdast?: string;\n}\n\nexport interface FumadocsDataMap {\n /**\n * [Fumadocs MDX] raw frontmatter, you can modify it\n */\n frontmatter?: Record<string, unknown>;\n\n /**\n * [Fumadocs MDX] additional ESM exports to write\n */\n 'mdx-export'?: { name: string; value: unknown }[];\n\n /**\n * [Fumadocs MDX] The compiler object from loader\n */\n _compiler?: CompilerOptions;\n\n /**\n * [Fumadocs MDX] get internal processor, do not use this on user land.\n */\n _getProcessor?: (format: 'md' | 'mdx') => Processor;\n}\n\ndeclare module 'vfile' {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- extend data map\n interface DataMap extends FumadocsDataMap {}\n}\n\nexport async function buildMDX(\n core: Core,\n collection: DocCollectionItem | undefined,\n { filePath, frontmatter, source, _compiler, environment, isDevelopment }: BuildMDXOptions,\n): Promise<VFile> {\n const mdxOptions = await core.getConfig().getMDXOptions(collection, environment);\n\n function getProcessor(format: 'md' | 'mdx') {\n const cache = core.cache as Map<string, Processor>;\n const key = `build-mdx:${collection?.name ?? 'global'}:${format}`;\n let processor = cache.get(key);\n\n if (!processor) {\n const postprocessOptions: PostprocessOptions = {\n _format: format,\n ...collection?.postprocess,\n };\n\n processor = createProcessor({\n outputFormat: 'program',\n development: isDevelopment,\n ...mdxOptions,\n remarkPlugins: [\n remarkInclude,\n ...(mdxOptions.remarkPlugins ?? []),\n [remarkPostprocess, postprocessOptions],\n ],\n format,\n });\n\n cache.set(key, processor);\n }\n\n return processor;\n }\n\n let vfile = new VFile({\n value: source,\n path: filePath,\n cwd: collection?.cwd,\n data: { frontmatter, _compiler, _getProcessor: getProcessor },\n });\n\n if (collection) {\n vfile = await core.transformVFile({ collection, filePath, source }, vfile);\n }\n\n return getProcessor(filePath.endsWith('.mdx') ? 'mdx' : 'md').process(vfile);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build-mdx-82nyqL4J.js","names":[],"sources":["../../core/dist/utils-pSG8hSr9.js","../../core/dist/mdx-plugins/stringifier.js","../../core/dist/mdx-plugins/remark-llms.js","../src/loaders/mdx/remark-postprocess.ts","../src/loaders/mdx/build-mdx.ts"],"sourcesContent":["import { valueToEstree } from \"estree-util-value-to-estree\";\n//#region src/mdx-plugins/utils.ts\nfunction flattenNode(node) {\n\tif (\"children\" in node) return node.children.map(flattenNode).join(\"\");\n\tif (\"value\" in node && typeof node.value === \"string\") return node.value;\n\treturn \"\";\n}\nfunction flattenNodeHast(node) {\n\tif (\"children\" in node) return node.children.map(flattenNodeHast).join(\"\");\n\treturn \"value\" in node && typeof node.value === \"string\" ? node.value : \"\";\n}\nfunction toMdxExport(name, value) {\n\treturn toMdxExportRaw(name, valueToEstree(value));\n}\nfunction toMdxExportRaw(name, expression) {\n\treturn {\n\t\ttype: \"mdxjsEsm\",\n\t\tvalue: \"\",\n\t\tdata: { estree: {\n\t\t\ttype: \"Program\",\n\t\t\tsourceType: \"module\",\n\t\t\tbody: [{\n\t\t\t\ttype: \"ExportNamedDeclaration\",\n\t\t\t\tattributes: [],\n\t\t\t\tspecifiers: [],\n\t\t\t\tdeclaration: {\n\t\t\t\t\ttype: \"VariableDeclaration\",\n\t\t\t\t\tkind: \"let\",\n\t\t\t\t\tdeclarations: [{\n\t\t\t\t\t\ttype: \"VariableDeclarator\",\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinit: expression\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}]\n\t\t} }\n\t};\n}\nfunction handleTag(value, tag) {\n\tconst idx = value.indexOf(tag);\n\tif (idx !== -1) return value.slice(0, idx).trimEnd() + value.slice(idx + tag.length);\n\treturn false;\n}\n//#endregion\nexport { toMdxExportRaw as a, toMdxExport as i, flattenNodeHast as n, handleTag as r, flattenNode as t };\n","import { mdxToMarkdown } from \"mdast-util-mdx\";\nimport { toMarkdown } from \"mdast-util-to-markdown\";\n//#region src/mdx-plugins/stringifier.ts\nfunction defaultStringifier(config = {}) {\n\tconst { filterMdxAttributes, filterElement = (node) => {\n\t\tswitch (node.type) {\n\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\tcase \"mdxJsxTextElement\":\n\t\t\t\tswitch (node.name) {\n\t\t\t\t\tcase \"File\":\n\t\t\t\t\tcase \"TypeTable\":\n\t\t\t\t\tcase \"Callout\":\n\t\t\t\t\tcase \"Card\": return true;\n\t\t\t\t}\n\t\t\t\treturn \"children-only\";\n\t\t}\n\t\treturn true;\n\t}, stringify, ...customExtension } = config;\n\tfunction modHandler(handler, ctx) {\n\t\treturn function(node, parent, state, info) {\n\t\t\tlet visibility = filterElement(node);\n\t\t\tif (visibility === false) return \"\";\n\t\t\tif (stringify) {\n\t\t\t\tconst v = stringify(node, parent, state, info, ctx);\n\t\t\t\tif (v) return v;\n\t\t\t}\n\t\t\tconst extraInfo = node.data?._stringify;\n\t\t\tif (extraInfo) if (extraInfo === \"children-only\") visibility = \"children-only\";\n\t\t\telse if (\"text\" in extraInfo) return extraInfo.text;\n\t\t\telse node = extraInfo.node;\n\t\t\tif (visibility === \"children-only\") {\n\t\t\t\tif (!(\"children\" in node)) return \"\";\n\t\t\t\tswitch (node.type) {\n\t\t\t\t\tcase \"mdxJsxTextElement\":\n\t\t\t\t\tcase \"paragraph\": return state.containerPhrasing(node, info);\n\t\t\t\t\tcase \"mdxJsxFlowElement\": return state.containerFlow(node, info);\n\t\t\t\t\tdefault: return state.containerFlow({\n\t\t\t\t\t\ttype: \"root\",\n\t\t\t\t\t\tchildren: node.children\n\t\t\t\t\t}, info);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (node.type) {\n\t\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\t\tcase \"mdxJsxTextElement\": {\n\t\t\t\t\tconst stringifiedAttributes = [];\n\t\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\t\tif (attr.type === \"mdxJsxExpressionAttribute\") continue;\n\t\t\t\t\t\tif (filterMdxAttributes && !filterMdxAttributes(node, attr)) continue;\n\t\t\t\t\t\tconst str = typeof attr.value === \"string\" ? attr.value : attr.value?.value;\n\t\t\t\t\t\tif (!str) continue;\n\t\t\t\t\t\tstringifiedAttributes.push({\n\t\t\t\t\t\t\ttype: \"mdxJsxAttribute\",\n\t\t\t\t\t\t\tname: attr.name,\n\t\t\t\t\t\t\tvalue: str\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn handler({\n\t\t\t\t\t\t...node,\n\t\t\t\t\t\tattributes: stringifiedAttributes\n\t\t\t\t\t}, parent, state, info);\n\t\t\t\t}\n\t\t\t\tdefault: return handler(node, parent, state, info);\n\t\t\t}\n\t\t};\n\t}\n\tconst customToMarkdown = { handlers: { _custom(node, _, state, info) {\n\t\tconst handlers = state.handlers;\n\t\tfor (const k in handlers) handlers[k] = modHandler(handlers[k], node.ctx);\n\t\treturn state.handle(node.root, void 0, state, info);\n\t} } };\n\treturn function(root, ctx) {\n\t\treturn toMarkdown({\n\t\t\ttype: \"_custom\",\n\t\t\troot,\n\t\t\tctx\n\t\t}, {\n\t\t\t...this?.data(\"settings\"),\n\t\t\textensions: [\n\t\t\t\tmdxToMarkdown(),\n\t\t\t\t...this?.data(\"toMarkdownExtensions\") ?? [],\n\t\t\t\tcustomToMarkdown,\n\t\t\t\tcustomExtension\n\t\t\t]\n\t\t});\n\t};\n}\n//#endregion\nexport { defaultStringifier };\n","import { i as toMdxExport } from \"../utils-pSG8hSr9.js\";\nimport { defaultStringifier } from \"./stringifier.js\";\nimport { defaultHandlers } from \"mdast-util-to-markdown\";\n//#region src/mdx-plugins/remark-llms.ts\n/**\n* generate `llms.txt` for markdown.\n*/\nfunction remarkLLMs({ as = \"_markdown\", headingIds = true, _data = false, mdxAsPlaceholder, ...rest } = {}) {\n\tconst stringifier = defaultStringifier({\n\t\t...rest,\n\t\tfilterElement(node) {\n\t\t\tswitch (node.type) {\n\t\t\t\tcase \"mdxjsEsm\": return false;\n\t\t\t\tdefault: return true;\n\t\t\t}\n\t\t},\n\t\tstringify(node, parent, state, info, ctx) {\n\t\t\tif (mdxAsPlaceholder) switch (node.type) {\n\t\t\t\tcase \"mdxJsxFlowElement\":\n\t\t\t\tcase \"mdxJsxTextElement\": if (node.name && mdxAsPlaceholder.includes(node.name)) return placeholder(node, parent, state, info);\n\t\t\t}\n\t\t\treturn rest.stringify?.(node, parent, state, info, ctx);\n\t\t},\n\t\thandlers: {\n\t\t\theading(node, _p, state, info) {\n\t\t\t\tconst id = node.data?.hProperties?.id;\n\t\t\t\tconst defaultValue = defaultHandlers.heading(node, _p, state, info);\n\t\t\t\treturn headingIds && id ? `${defaultValue} [#${id}]` : defaultValue;\n\t\t\t},\n\t\t\t...rest.handlers\n\t\t}\n\t});\n\treturn (node, file) => {\n\t\tconst value = stringifier.call(this, node, void 0);\n\t\tnode.children.unshift(toMdxExport(as, value));\n\t\tif (_data) file.data.markdown = value;\n\t};\n}\n/**\n* Preserve AST data to render the MDX component at runtime, use `renderPlaceholder()` to render the placeholders.\n*/\nfunction placeholder(node, _parent, state, info) {\n\tconst attributes = {};\n\tfor (const attr of node.attributes) {\n\t\tif (attr.type === \"mdxJsxExpressionAttribute\") continue;\n\t\tattributes[attr.name] = attr.value;\n\t}\n\treturn `\\0${JSON.stringify({\n\t\tname: node.name,\n\t\tchildren: state.containerPhrasing(node, info),\n\t\tattributes\n\t})}\\0`;\n}\n//#endregion\nexport { placeholder, remarkLLMs };\n","import type { Processor, Transformer } from 'unified';\nimport type { Root, RootContent } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport { valueToEstree } from 'estree-util-value-to-estree';\nimport { removePosition } from 'unist-util-remove-position';\nimport { flattenNode } from './mdast-utils';\nimport type { LLMsOptions } from 'fumadocs-core/mdx-plugins';\nimport { remarkLLMs } from 'fumadocs-core/mdx-plugins/remark-llms';\n\nexport interface ExtractedReference {\n href: string;\n}\n\nexport interface PostprocessOptions {\n _format: 'md' | 'mdx';\n\n /**\n * Properties to export from `vfile.data`\n */\n valueToExport?: string[];\n\n /**\n * stringify MDAST and export via `_markdown`.\n */\n includeProcessedMarkdown?: boolean | LLMsOptions;\n\n /**\n * extract link references, export via `extractedReferences`.\n */\n extractLinkReferences?: boolean;\n\n /**\n * store MDAST and export via `_mdast`.\n */\n includeMDAST?:\n | boolean\n | {\n removePosition?: boolean;\n };\n}\n\n/**\n * - collect references\n * - write frontmatter (auto-title & description)\n */\nexport function remarkPostprocess(\n this: Processor,\n {\n includeProcessedMarkdown = false,\n includeMDAST = false,\n extractLinkReferences = false,\n valueToExport = [],\n }: PostprocessOptions,\n): Transformer<Root, Root> {\n return (tree, file) => {\n const frontmatter = (file.data.frontmatter ??= {});\n if (!frontmatter.title) {\n visit(tree, 'heading', (node) => {\n if (node.depth === 1) {\n frontmatter.title = flattenNode(node);\n return false;\n }\n });\n }\n\n file.data['mdx-export'] ??= [];\n file.data['mdx-export'].push({\n name: 'frontmatter',\n value: frontmatter,\n });\n\n if (extractLinkReferences) {\n const urls: ExtractedReference[] = [];\n\n visit(tree, 'link', (node) => {\n urls.push({\n href: node.url,\n });\n return 'skip';\n });\n\n file.data['mdx-export'].push({\n name: 'extractedReferences',\n value: urls,\n });\n }\n\n if (includeProcessedMarkdown) {\n const llms = remarkLLMs.call(\n this,\n typeof includeProcessedMarkdown === 'object' ? includeProcessedMarkdown : undefined,\n );\n llms(tree, file, () => undefined);\n }\n\n if (includeMDAST) {\n const options = includeMDAST === true ? {} : includeMDAST;\n const mdast = JSON.stringify(\n options.removePosition ? removePosition(structuredClone(tree)) : tree,\n );\n\n file.data['mdx-export'].push({\n name: '_mdast',\n value: mdast,\n });\n }\n\n for (const { name, value } of file.data['mdx-export']) {\n tree.children.unshift(getMdastExport(name, value));\n }\n\n // reset the data to reduce memory usage\n file.data['mdx-export'] = [];\n\n for (const name of valueToExport) {\n if (!(name in file.data)) continue;\n\n tree.children.unshift(getMdastExport(name, file.data[name]));\n }\n };\n}\n\n/**\n * MDX.js first converts javascript (with esm support) into mdast nodes with remark-mdx, then handle the other remark plugins\n *\n * Therefore, if we want to inject an export, we must convert the object into AST, then add the mdast node\n */\nfunction getMdastExport(name: string, value: unknown): RootContent {\n return {\n type: 'mdxjsEsm',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n body: [\n {\n type: 'ExportNamedDeclaration',\n attributes: [],\n specifiers: [],\n source: null,\n declaration: {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [\n {\n type: 'VariableDeclarator',\n id: {\n type: 'Identifier',\n name,\n },\n init: valueToEstree(value),\n },\n ],\n },\n },\n ],\n },\n },\n };\n}\n","import { createProcessor } from '@mdx-js/mdx';\nimport { VFile } from 'vfile';\nimport { remarkInclude } from '@/loaders/mdx/remark-include';\nimport type { StructuredData } from 'fumadocs-core/mdx-plugins';\nimport type { TOCItemType } from 'fumadocs-core/toc';\nimport type { FC } from 'react';\nimport type { MDXProps } from 'mdx/types';\nimport { type PostprocessOptions, remarkPostprocess } from '@/loaders/mdx/remark-postprocess';\nimport type { Core } from '@/core';\nimport type { DocCollectionItem } from '@/config/build';\n\ntype Processor = ReturnType<typeof createProcessor>;\n\ninterface BuildMDXOptions {\n /**\n * Specify a file path for source\n */\n filePath: string;\n source: string;\n frontmatter?: Record<string, unknown>;\n\n environment: 'bundler' | 'runtime';\n isDevelopment: boolean;\n _compiler?: CompilerOptions;\n}\n\nexport interface CompilerOptions {\n addDependency: (file: string) => void;\n}\n\nexport interface CompiledMDXProperties<Frontmatter = Record<string, unknown>> {\n frontmatter: Frontmatter;\n structuredData: StructuredData;\n toc: TOCItemType[];\n default: FC<MDXProps>;\n\n /**\n * Enable from `postprocess` option.\n */\n _markdown?: string;\n /**\n * Enable from `postprocess` option.\n */\n _mdast?: string;\n}\n\nexport interface FumadocsDataMap {\n /**\n * [Fumadocs MDX] raw frontmatter, you can modify it\n */\n frontmatter?: Record<string, unknown>;\n\n /**\n * [Fumadocs MDX] additional ESM exports to write\n */\n 'mdx-export'?: { name: string; value: unknown }[];\n\n /**\n * [Fumadocs MDX] The compiler object from loader\n */\n _compiler?: CompilerOptions;\n\n /**\n * [Fumadocs MDX] get internal processor, do not use this on user land.\n */\n _getProcessor?: (format: 'md' | 'mdx') => Processor;\n}\n\ndeclare module 'vfile' {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- extend data map\n interface DataMap extends FumadocsDataMap {}\n}\n\nexport async function buildMDX(\n core: Core,\n collection: DocCollectionItem | undefined,\n { filePath, frontmatter, source, _compiler, environment, isDevelopment }: BuildMDXOptions,\n): Promise<VFile> {\n const mdxOptions = await core.getConfig().getMDXOptions(collection, environment);\n\n function getProcessor(format: 'md' | 'mdx') {\n const cache = core.cache as Map<string, Processor>;\n const key = `build-mdx:${collection?.name ?? 'global'}:${format}`;\n let processor = cache.get(key);\n\n if (!processor) {\n const postprocessOptions: PostprocessOptions = {\n _format: format,\n ...collection?.postprocess,\n };\n\n processor = createProcessor({\n outputFormat: 'program',\n development: isDevelopment,\n ...mdxOptions,\n remarkPlugins: [\n remarkInclude,\n ...(mdxOptions.remarkPlugins ?? []),\n [remarkPostprocess, postprocessOptions],\n ],\n format,\n });\n\n cache.set(key, processor);\n }\n\n return processor;\n }\n\n let vfile = new VFile({\n value: source,\n path: filePath,\n cwd: collection?.cwd,\n data: { frontmatter, _compiler, _getProcessor: getProcessor },\n });\n\n if (collection) {\n vfile = await core.transformVFile({ collection, filePath, source }, vfile);\n }\n\n return getProcessor(filePath.endsWith('.mdx') ? 'mdx' : 'md').process(vfile);\n}\n"],"mappings":"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"}
|
package/dist/bun/index.d.ts
CHANGED
package/dist/bun/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as createMdxLoader } from "../mdx-D2vcWdqv.js";
|
|
2
2
|
import { t as buildConfig } from "../build-DPafU2lu.js";
|
|
3
|
-
import { n as createCore, t as _Defaults } from "../core-
|
|
4
|
-
import { a as createIntegratedConfigLoader, t as toBun } from "../adapter-
|
|
3
|
+
import { n as createCore, t as _Defaults } from "../core-Wd5WdPN4.js";
|
|
4
|
+
import { a as createIntegratedConfigLoader, t as toBun } from "../adapter-DVxULZiU.js";
|
|
5
5
|
import { t as createMetaLoader } from "../meta-B6guI74I.js";
|
|
6
6
|
import { pathToFileURL } from "node:url";
|
|
7
7
|
//#region src/bun/index.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-B8EhLmbU.js","names":[],"sources":["../src/utils/codegen.ts"],"sourcesContent":["import path from 'node:path';\nimport { glob } from 'tinyglobby';\n\nexport interface GlobImportOptions {\n base: string;\n query?: Record<string, string | undefined>;\n import?: string;\n eager?: boolean;\n}\n\nexport interface CodeGenOptions {\n target: 'default' | 'vite';\n outDir: string;\n /**\n * add .js extension to imports\n */\n jsExtension: boolean;\n globCache: Map<string, Promise<string[]>>;\n}\n\nexport type CodeGen = ReturnType<typeof createCodegen>;\n\n/**\n * Code generator (one instance per file)\n */\nexport function createCodegen({\n target = 'default',\n outDir = '',\n jsExtension = false,\n globCache = new Map(),\n}: Partial<CodeGenOptions>) {\n let eagerImportId = 0;\n const banner: string[] = ['// @ts-nocheck'];\n\n if (target === 'vite') {\n banner.push('/// <reference types=\"vite/client\" />');\n }\n\n return {\n options: {\n target,\n outDir,\n } as CodeGenOptions,\n lines: [] as string[],\n addImport(statement: string) {\n this.lines.unshift(statement);\n },\n async pushAsync(insert: Promise<string | undefined>[]) {\n for (const line of await Promise.all(insert)) {\n if (line === undefined) continue;\n\n this.lines.push(line);\n }\n },\n\n async generateGlobImport(\n patterns: string | string[],\n options: GlobImportOptions,\n ): Promise<string> {\n if (target === 'vite') {\n return this.generateViteGlobImport(patterns, options);\n }\n\n return this.generateNodeGlobImport(patterns, options);\n },\n\n generateViteGlobImport(\n patterns: string | string[],\n { base, ...rest }: GlobImportOptions,\n ): string {\n patterns = (typeof patterns === 'string' ? [patterns] : patterns).map(normalizeViteGlobPath);\n\n return `import.meta.glob(${JSON.stringify(patterns)}, ${JSON.stringify(\n {\n base: normalizeViteGlobPath(path.relative(outDir, base)),\n ...rest,\n },\n null,\n 2,\n )})`;\n },\n async generateNodeGlobImport(\n patterns: string | string[],\n { base, eager = false, query = {}, import: importName }: GlobImportOptions,\n ): Promise<string> {\n const cacheKey = JSON.stringify({ patterns, base });\n let files = globCache.get(cacheKey);\n if (!files) {\n files = glob(patterns, {\n cwd: base,\n });\n globCache.set(cacheKey, files);\n }\n\n let code: string = '{';\n for (const item of await files) {\n const fullPath = path.join(base, item);\n const searchParams = new URLSearchParams();\n\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) searchParams.set(k, v);\n }\n\n const importPath = this.formatImportPath(fullPath) + '?' + searchParams.toString();\n if (eager) {\n const name = `__fd_glob_${eagerImportId++}`;\n this.lines.unshift(\n importName\n ? `import { ${importName} as ${name} } from ${JSON.stringify(importPath)}`\n : `import * as ${name} from ${JSON.stringify(importPath)}`,\n );\n\n code += `${JSON.stringify(item)}: ${name}, `;\n } else {\n let line = `${JSON.stringify(item)}: () => import(${JSON.stringify(importPath)})`;\n if (importName) {\n line += `.then(mod => mod.${importName})`;\n }\n\n code += `${line}, `;\n }\n }\n\n code += '}';\n return code;\n },\n formatImportPath(file: string) {\n const ext = path.extname(file);\n let filename: string;\n\n if (ext === '.ts') {\n filename = file.substring(0, file.length - ext.length);\n if (jsExtension) filename += '.js';\n } else {\n filename = file;\n }\n\n const importPath = slash(path.relative(outDir, filename));\n return importPath.startsWith('.') ? importPath : `./${importPath}`;\n },\n toString() {\n return [...banner, ...this.lines].join('\\n');\n },\n };\n}\n\n/**\n * convert into POSIX & relative file paths, such that Vite can accept it.\n */\nfunction normalizeViteGlobPath(file: string) {\n file = slash(file);\n if (file.startsWith('./')) return file;\n if (file.startsWith('/')) return `.${file}`;\n\n return `./${file}`;\n}\n\nexport function slash(path: string): string {\n const isExtendedLengthPath = path.startsWith('\\\\\\\\?\\\\');\n\n if (isExtendedLengthPath) {\n return path;\n }\n\n return path.replaceAll('\\\\', '/');\n}\n\nexport function ident(code: string, tab: number = 1) {\n return code\n .split('\\n')\n .map((v) => ' '.repeat(tab) + v)\n .join('\\n');\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codegen-B8EhLmbU.js","names":[],"sources":["../src/utils/codegen.ts"],"sourcesContent":["import path from 'node:path';\nimport { glob } from 'tinyglobby';\n\nexport interface GlobImportOptions {\n base: string;\n query?: Record<string, string | undefined>;\n import?: string;\n eager?: boolean;\n}\n\nexport interface CodeGenOptions {\n target: 'default' | 'vite';\n outDir: string;\n /**\n * add .js extension to imports\n */\n jsExtension: boolean;\n globCache: Map<string, Promise<string[]>>;\n}\n\nexport type CodeGen = ReturnType<typeof createCodegen>;\n\n/**\n * Code generator (one instance per file)\n */\nexport function createCodegen({\n target = 'default',\n outDir = '',\n jsExtension = false,\n globCache = new Map(),\n}: Partial<CodeGenOptions>) {\n let eagerImportId = 0;\n const banner: string[] = ['// @ts-nocheck'];\n\n if (target === 'vite') {\n banner.push('/// <reference types=\"vite/client\" />');\n }\n\n return {\n options: {\n target,\n outDir,\n } as CodeGenOptions,\n lines: [] as string[],\n addImport(statement: string) {\n this.lines.unshift(statement);\n },\n async pushAsync(insert: Promise<string | undefined>[]) {\n for (const line of await Promise.all(insert)) {\n if (line === undefined) continue;\n\n this.lines.push(line);\n }\n },\n\n async generateGlobImport(\n patterns: string | string[],\n options: GlobImportOptions,\n ): Promise<string> {\n if (target === 'vite') {\n return this.generateViteGlobImport(patterns, options);\n }\n\n return this.generateNodeGlobImport(patterns, options);\n },\n\n generateViteGlobImport(\n patterns: string | string[],\n { base, ...rest }: GlobImportOptions,\n ): string {\n patterns = (typeof patterns === 'string' ? [patterns] : patterns).map(normalizeViteGlobPath);\n\n return `import.meta.glob(${JSON.stringify(patterns)}, ${JSON.stringify(\n {\n base: normalizeViteGlobPath(path.relative(outDir, base)),\n ...rest,\n },\n null,\n 2,\n )})`;\n },\n async generateNodeGlobImport(\n patterns: string | string[],\n { base, eager = false, query = {}, import: importName }: GlobImportOptions,\n ): Promise<string> {\n const cacheKey = JSON.stringify({ patterns, base });\n let files = globCache.get(cacheKey);\n if (!files) {\n files = glob(patterns, {\n cwd: base,\n });\n globCache.set(cacheKey, files);\n }\n\n let code: string = '{';\n for (const item of await files) {\n const fullPath = path.join(base, item);\n const searchParams = new URLSearchParams();\n\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) searchParams.set(k, v);\n }\n\n const importPath = this.formatImportPath(fullPath) + '?' + searchParams.toString();\n if (eager) {\n const name = `__fd_glob_${eagerImportId++}`;\n this.lines.unshift(\n importName\n ? `import { ${importName} as ${name} } from ${JSON.stringify(importPath)}`\n : `import * as ${name} from ${JSON.stringify(importPath)}`,\n );\n\n code += `${JSON.stringify(item)}: ${name}, `;\n } else {\n let line = `${JSON.stringify(item)}: () => import(${JSON.stringify(importPath)})`;\n if (importName) {\n line += `.then(mod => mod.${importName})`;\n }\n\n code += `${line}, `;\n }\n }\n\n code += '}';\n return code;\n },\n formatImportPath(file: string) {\n const ext = path.extname(file);\n let filename: string;\n\n if (ext === '.ts') {\n filename = file.substring(0, file.length - ext.length);\n if (jsExtension) filename += '.js';\n } else {\n filename = file;\n }\n\n const importPath = slash(path.relative(outDir, filename));\n return importPath.startsWith('.') ? importPath : `./${importPath}`;\n },\n toString() {\n return [...banner, ...this.lines].join('\\n');\n },\n };\n}\n\n/**\n * convert into POSIX & relative file paths, such that Vite can accept it.\n */\nfunction normalizeViteGlobPath(file: string) {\n file = slash(file);\n if (file.startsWith('./')) return file;\n if (file.startsWith('/')) return `.${file}`;\n\n return `./${file}`;\n}\n\nexport function slash(path: string): string {\n const isExtendedLengthPath = path.startsWith('\\\\\\\\?\\\\');\n\n if (isExtendedLengthPath) {\n return path;\n }\n\n return path.replaceAll('\\\\', '/');\n}\n\nexport function ident(code: string, tab: number = 1) {\n return code\n .split('\\n')\n .map((v) => ' '.repeat(tab) + v)\n .join('\\n');\n}\n"],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
export { AnyCollection, BaseCollection, CollectionSchema, DefaultMDXOptions, DocCollection, DocsCollection, GlobalConfig, MDXPresetOptions, MetaCollection, PostprocessOptions, applyMdxPreset, defineCollections, defineConfig, defineDocs,
|
|
1
|
+
import { A as DocCollection, B as MDXPresetOptions, D as AnyCollection, E as remarkInclude, F as defineConfig, I as defineDocs, M as GlobalConfig, N as MetaCollection, O as BaseCollection, P as defineCollections, R as PostprocessOptions, T as metaSchema, V as applyMdxPreset, j as DocsCollection, k as CollectionSchema, w as frontmatterSchema, z as DefaultMDXOptions } from "../core-C5aAAT92.js";
|
|
2
|
+
export { AnyCollection, BaseCollection, CollectionSchema, DefaultMDXOptions, DocCollection, DocsCollection, GlobalConfig, MDXPresetOptions, MetaCollection, PostprocessOptions, applyMdxPreset, defineCollections, defineConfig, defineDocs, frontmatterSchema, metaSchema, remarkInclude };
|
package/dist/config/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
/**
|
|
6
6
|
* Zod 4 schema
|
|
7
7
|
*/
|
|
8
|
-
const metaSchema = z.object({
|
|
8
|
+
const metaSchema$1 = z.object({
|
|
9
9
|
title: z.string().optional(),
|
|
10
10
|
pages: z.array(z.string()).optional(),
|
|
11
11
|
description: z.string().optional(),
|
|
@@ -22,7 +22,7 @@ const pageSchema = z.object({
|
|
|
22
22
|
description: z.string().optional(),
|
|
23
23
|
icon: z.string().optional(),
|
|
24
24
|
full: z.boolean().optional(),
|
|
25
|
-
_openapi: z.
|
|
25
|
+
_openapi: z.record(z.string(), z.custom()).optional()
|
|
26
26
|
});
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/config/define.ts
|
|
@@ -43,7 +43,7 @@ function defineDocs(options) {
|
|
|
43
43
|
meta: defineCollections({
|
|
44
44
|
type: "meta",
|
|
45
45
|
dir,
|
|
46
|
-
schema: metaSchema,
|
|
46
|
+
schema: metaSchema$1,
|
|
47
47
|
...options?.meta
|
|
48
48
|
})
|
|
49
49
|
};
|
|
@@ -52,6 +52,12 @@ function defineConfig(config = {}) {
|
|
|
52
52
|
return config;
|
|
53
53
|
}
|
|
54
54
|
//#endregion
|
|
55
|
-
|
|
55
|
+
//#region src/config/index.ts
|
|
56
|
+
/** @deprecated import `pageSchema` from `fumadocs-core/source/schema` instead (since 16.2.3) */
|
|
57
|
+
const frontmatterSchema = pageSchema;
|
|
58
|
+
/** @deprecated import from `fumadocs-core/source/schema` instead (since 16.2.3) */
|
|
59
|
+
const metaSchema = metaSchema$1;
|
|
60
|
+
//#endregion
|
|
61
|
+
export { applyMdxPreset, defineCollections, defineConfig, defineDocs, frontmatterSchema, metaSchema, remarkInclude };
|
|
56
62
|
|
|
57
63
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../core/dist/source/schema.js","../../src/config/define.ts"],"sourcesContent":["import { z } from \"zod\";\n//#region src/source/schema.ts\n/**\n* Zod 4 schema\n*/\nconst metaSchema = z.object({\n\ttitle: z.string().optional(),\n\tpages: z.array(z.string()).optional(),\n\tdescription: z.string().optional(),\n\troot: z.boolean().optional(),\n\tdefaultOpen: z.boolean().optional(),\n\tcollapsible: z.boolean().optional(),\n\ticon: z.string().optional()\n});\n/**\n* Zod 4 schema\n*/\nconst pageSchema = z.object({\n\ttitle: z.string(),\n\tdescription: z.string().optional(),\n\ticon: z.string().optional(),\n\tfull: z.boolean().optional(),\n\t_openapi: z.
|
|
1
|
+
{"version":3,"file":"index.js","names":["metaSchema","metaSchema","p","m"],"sources":["../../../core/dist/source/schema.js","../../src/config/define.ts","../../src/config/index.ts"],"sourcesContent":["import { z } from \"zod\";\n//#region src/source/schema.ts\n/**\n* Zod 4 schema\n*/\nconst metaSchema = z.object({\n\ttitle: z.string().optional(),\n\tpages: z.array(z.string()).optional(),\n\tdescription: z.string().optional(),\n\troot: z.boolean().optional(),\n\tdefaultOpen: z.boolean().optional(),\n\tcollapsible: z.boolean().optional(),\n\ticon: z.string().optional()\n});\n/**\n* Zod 4 schema\n*/\nconst pageSchema = z.object({\n\ttitle: z.string(),\n\tdescription: z.string().optional(),\n\ticon: z.string().optional(),\n\tfull: z.boolean().optional(),\n\t_openapi: z.record(z.string(), z.custom()).optional()\n});\n//#endregion\nexport { metaSchema, pageSchema };\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { MDXPresetOptions } from '@/config/preset';\nimport type { ProcessorOptions } from '@mdx-js/mdx';\nimport { metaSchema, pageSchema } from 'fumadocs-core/source/schema';\nimport type { PostprocessOptions } from '@/loaders/mdx/remark-postprocess';\nimport type { PluginOption } from '@/core';\nimport type { BuildEnvironment } from './build';\n\nexport type CollectionSchema<Schema extends StandardSchemaV1, Context> =\n | Schema\n | ((ctx: Context) => Schema);\n\nexport type AnyCollection = DocsCollection | DocCollection | MetaCollection;\n\nexport interface BaseCollection {\n /**\n * Directory to scan\n */\n dir: string;\n\n /**\n * what files to include/exclude (glob patterns)\n *\n * Include all files if not specified\n */\n files?: string[];\n}\n\nexport interface MetaCollection<\n Schema extends StandardSchemaV1 = StandardSchemaV1,\n> extends BaseCollection {\n type: 'meta';\n\n schema?: CollectionSchema<Schema, { path: string; source: string }>;\n}\n\nexport interface DocCollection<\n Schema extends StandardSchemaV1 = StandardSchemaV1,\n> extends BaseCollection {\n type: 'doc';\n\n postprocess?: Partial<PostprocessOptions>;\n mdxOptions?: ProcessorOptions | ((environment: BuildEnvironment) => Promise<ProcessorOptions>);\n\n /**\n * Load files with async\n */\n async?: boolean;\n\n /**\n * Compile files on-demand\n */\n dynamic?: boolean;\n\n schema?: CollectionSchema<Schema, { path: string; source: string }>;\n}\n\nexport interface DocsCollection<\n DocSchema extends StandardSchemaV1 = StandardSchemaV1,\n MetaSchema extends StandardSchemaV1 = StandardSchemaV1,\n> {\n type: 'docs';\n dir: string;\n\n docs: DocCollection<DocSchema>;\n meta: MetaCollection<MetaSchema>;\n}\n\nexport interface GlobalConfig {\n plugins?: PluginOption[];\n\n /**\n * Configure global MDX options\n */\n mdxOptions?: MDXPresetOptions | (() => Promise<MDXPresetOptions>);\n\n workspaces?: Record<\n string,\n {\n dir: string;\n config: Record<string, unknown>;\n }\n >;\n\n /**\n * specify a directory to access & store cache (disabled during development mode).\n *\n * The cache will never be updated, delete the cache folder to clean.\n */\n experimentalBuildCache?: string;\n}\n\nexport function defineCollections<Schema extends StandardSchemaV1 = StandardSchemaV1>(\n options: DocCollection<Schema>,\n): DocCollection<Schema>;\nexport function defineCollections<Schema extends StandardSchemaV1 = StandardSchemaV1>(\n options: MetaCollection<Schema>,\n): MetaCollection<Schema>;\n\nexport function defineCollections(\n options: DocCollection | MetaCollection,\n): DocCollection | MetaCollection {\n return options as any;\n}\n\nexport function defineDocs<\n DocSchema extends StandardSchemaV1 = typeof pageSchema,\n MetaSchema extends StandardSchemaV1 = typeof metaSchema,\n>(options: {\n /**\n * The content directory to scan files\n *\n * @defaultValue 'content/docs'\n */\n dir?: string;\n\n docs?: Omit<DocCollection<DocSchema>, 'dir' | 'type'>;\n meta?: Omit<MetaCollection<MetaSchema>, 'dir' | 'type'>;\n}): DocsCollection<DocSchema, MetaSchema> {\n const dir = options.dir ?? 'content/docs';\n\n return {\n type: 'docs',\n dir,\n docs: defineCollections({\n type: 'doc',\n dir,\n schema: pageSchema as any,\n ...options?.docs,\n }),\n meta: defineCollections({\n type: 'meta',\n dir,\n schema: metaSchema as any,\n ...options?.meta,\n }),\n };\n}\n\nexport function defineConfig(config: GlobalConfig = {}): GlobalConfig {\n return config;\n}\n","export * from './define';\nexport * from '@/config/preset';\nexport { remarkInclude } from '@/loaders/mdx/remark-include';\nimport { metaSchema as m, pageSchema as p } from 'fumadocs-core/source/schema';\n\n/** @deprecated import `pageSchema` from `fumadocs-core/source/schema` instead (since 16.2.3) */\nexport const frontmatterSchema = p;\n/** @deprecated import from `fumadocs-core/source/schema` instead (since 16.2.3) */\nexport const metaSchema = m;\n\nexport type { PostprocessOptions } from '@/loaders/mdx/remark-postprocess';\n"],"mappings":";;;;;;;AAKA,MAAMA,eAAa,EAAE,OAAO;CAC3B,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC5B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACrC,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,SAAS,CAAC,UAAU;CAC5B,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,CAAC;;;;AAIF,MAAM,aAAa,EAAE,OAAO;CAC3B,OAAO,EAAE,QAAQ;CACjB,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,MAAM,EAAE,SAAS,CAAC,UAAU;CAC5B,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,UAAU;CACrD,CAAC;;;AC4EF,SAAgB,kBACd,SACgC;AAChC,QAAO;;AAGT,SAAgB,WAGd,SAUwC;CACxC,MAAM,MAAM,QAAQ,OAAO;AAE3B,QAAO;EACL,MAAM;EACN;EACA,MAAM,kBAAkB;GACtB,MAAM;GACN;GACA,QAAQ;GACR,GAAG,SAAS;GACb,CAAC;EACF,MAAM,kBAAkB;GACtB,MAAM;GACN;GACA,QAAQC;GACR,GAAG,SAAS;GACb,CAAC;EACH;;AAGH,SAAgB,aAAa,SAAuB,EAAE,EAAgB;AACpE,QAAO;;;;;ACtIT,MAAa,oBAAoBC;;AAEjC,MAAa,aAAaC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { a as MetaMethods, i as InternalTypeConfig, n as DocMethods, t as DocData } from "./types-hAduruLB.js";
|
|
2
|
+
import * as _$zod from "zod";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
import { Pluggable, Processor, Transformer } from "unified";
|
|
4
5
|
import * as Plugins from "fumadocs-core/mdx-plugins";
|
|
@@ -9,6 +10,7 @@ import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
|
9
10
|
import { Root } from "mdast";
|
|
10
11
|
import { FSWatcher } from "chokidar";
|
|
11
12
|
import { MetaData, PageData, Source } from "fumadocs-core/source";
|
|
13
|
+
import * as _$zod_v4_core0 from "zod/v4/core";
|
|
12
14
|
|
|
13
15
|
//#region src/config/preset.d.ts
|
|
14
16
|
type ResolvePlugins = Pluggable[] | ((v: Pluggable[]) => Pluggable[]);
|
|
@@ -40,7 +42,7 @@ declare function applyMdxPreset(options?: MDXPresetOptions): (environment: Build
|
|
|
40
42
|
/**
|
|
41
43
|
* Zod 4 schema
|
|
42
44
|
*/
|
|
43
|
-
declare const metaSchema: z.ZodObject<{
|
|
45
|
+
declare const metaSchema$1: z.ZodObject<{
|
|
44
46
|
title: z.ZodOptional<z.ZodString>;
|
|
45
47
|
pages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
48
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -57,7 +59,7 @@ declare const pageSchema: z.ZodObject<{
|
|
|
57
59
|
description: z.ZodOptional<z.ZodString>;
|
|
58
60
|
icon: z.ZodOptional<z.ZodString>;
|
|
59
61
|
full: z.ZodOptional<z.ZodBoolean>;
|
|
60
|
-
_openapi: z.ZodOptional<z.
|
|
62
|
+
_openapi: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodCustom<any, any>>>;
|
|
61
63
|
}, z.core.$strip>;
|
|
62
64
|
//#endregion
|
|
63
65
|
//#region src/loaders/mdx/remark-postprocess.d.ts
|
|
@@ -150,7 +152,7 @@ interface GlobalConfig {
|
|
|
150
152
|
}
|
|
151
153
|
declare function defineCollections<Schema extends StandardSchemaV1 = StandardSchemaV1>(options: DocCollection<Schema>): DocCollection<Schema>;
|
|
152
154
|
declare function defineCollections<Schema extends StandardSchemaV1 = StandardSchemaV1>(options: MetaCollection<Schema>): MetaCollection<Schema>;
|
|
153
|
-
declare function defineDocs<DocSchema extends StandardSchemaV1 = typeof pageSchema, MetaSchema extends StandardSchemaV1 = typeof metaSchema>(options: {
|
|
155
|
+
declare function defineDocs<DocSchema extends StandardSchemaV1 = typeof pageSchema, MetaSchema extends StandardSchemaV1 = typeof metaSchema$1>(options: {
|
|
154
156
|
/**
|
|
155
157
|
* The content directory to scan files
|
|
156
158
|
*
|
|
@@ -195,6 +197,26 @@ interface DocsCollectionItem extends Omit<DocsCollection, 'dir' | 'meta' | 'docs
|
|
|
195
197
|
//#region src/loaders/mdx/remark-include.d.ts
|
|
196
198
|
declare function remarkInclude(this: Processor): Transformer<Root, Root>;
|
|
197
199
|
//#endregion
|
|
200
|
+
//#region src/config/index.d.ts
|
|
201
|
+
/** @deprecated import `pageSchema` from `fumadocs-core/source/schema` instead (since 16.2.3) */
|
|
202
|
+
declare const frontmatterSchema: _$zod.ZodObject<{
|
|
203
|
+
title: _$zod.ZodString;
|
|
204
|
+
description: _$zod.ZodOptional<_$zod.ZodString>;
|
|
205
|
+
icon: _$zod.ZodOptional<_$zod.ZodString>;
|
|
206
|
+
full: _$zod.ZodOptional<_$zod.ZodBoolean>;
|
|
207
|
+
_openapi: _$zod.ZodOptional<_$zod.ZodRecord<_$zod.ZodString, _$zod.ZodCustom<undefined, undefined>>>;
|
|
208
|
+
}, _$zod_v4_core0.$strip>;
|
|
209
|
+
/** @deprecated import from `fumadocs-core/source/schema` instead (since 16.2.3) */
|
|
210
|
+
declare const metaSchema: _$zod.ZodObject<{
|
|
211
|
+
title: _$zod.ZodOptional<_$zod.ZodString>;
|
|
212
|
+
pages: _$zod.ZodOptional<_$zod.ZodArray<_$zod.ZodString>>;
|
|
213
|
+
description: _$zod.ZodOptional<_$zod.ZodString>;
|
|
214
|
+
root: _$zod.ZodOptional<_$zod.ZodBoolean>;
|
|
215
|
+
defaultOpen: _$zod.ZodOptional<_$zod.ZodBoolean>;
|
|
216
|
+
collapsible: _$zod.ZodOptional<_$zod.ZodBoolean>;
|
|
217
|
+
icon: _$zod.ZodOptional<_$zod.ZodString>;
|
|
218
|
+
}, _$zod_v4_core0.$strip>;
|
|
219
|
+
//#endregion
|
|
198
220
|
//#region src/runtime/server.d.ts
|
|
199
221
|
type MetaCollectionEntry<Data> = Data & MetaMethods;
|
|
200
222
|
type DocCollectionEntry<Name extends string = string, Frontmatter = unknown, TC extends InternalTypeConfig = InternalTypeConfig> = DocData & DocMethods & Frontmatter & TC['DocData'][Name];
|
|
@@ -381,5 +403,5 @@ declare function createCore(options: CoreOptions): {
|
|
|
381
403
|
};
|
|
382
404
|
type Core = ReturnType<typeof createCore>;
|
|
383
405
|
//#endregion
|
|
384
|
-
export {
|
|
385
|
-
//# sourceMappingURL=core-
|
|
406
|
+
export { DocCollection as A, MDXPresetOptions as B, toFumadocsSource as C, AnyCollection as D, remarkInclude as E, defineConfig as F, defineDocs as I, ExtractedReference as L, GlobalConfig as M, MetaCollection as N, BaseCollection as O, defineCollections as P, PostprocessOptions as R, server as S, metaSchema as T, applyMdxPreset as V, DocCollectionEntry as _, EmitOptions as a, ServerCreate as b, PluginContext as c, TransformOptions as d, IndexFilePlugin as f, AsyncDocsCollectionEntry as g, AsyncDocCollectionEntry as h, EmitEntry as i, DocsCollection as j, CollectionSchema as k, PluginOption as l, indexFile as m, Core as n, EmitOutput as o, IndexFilePluginOptions as p, CoreOptions as r, Plugin as s, CompilationContext as t, ServerContext as u, DocsCollectionEntry as v, frontmatterSchema as w, ServerOptions as x, MetaCollectionEntry as y, DefaultMDXOptions as z };
|
|
407
|
+
//# sourceMappingURL=core-C5aAAT92.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-C5aAAT92.d.ts","names":[],"sources":["../src/config/preset.ts","../../core/dist/source/schema.js","../src/loaders/mdx/remark-postprocess.ts","../src/config/define.ts","../src/config/build.ts","../src/loaders/mdx/remark-include.ts","../src/config/index.ts","../src/runtime/server.ts","../src/plugins/index-file.ts","../src/core.ts"],"mappings":"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"}
|
|
@@ -50,6 +50,9 @@ function createCore(options) {
|
|
|
50
50
|
return data;
|
|
51
51
|
}
|
|
52
52
|
return {
|
|
53
|
+
/**
|
|
54
|
+
* Convenient cache store, reset when config changes
|
|
55
|
+
*/
|
|
53
56
|
cache: /* @__PURE__ */ new Map(),
|
|
54
57
|
async init({ config: newConfig }) {
|
|
55
58
|
config = await newConfig;
|
|
@@ -87,6 +90,9 @@ function createCore(options) {
|
|
|
87
90
|
getConfig() {
|
|
88
91
|
return config;
|
|
89
92
|
},
|
|
93
|
+
/**
|
|
94
|
+
* The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)
|
|
95
|
+
*/
|
|
90
96
|
getCompiledConfigPath() {
|
|
91
97
|
return path.join(options.outDir, "source.config.mjs");
|
|
92
98
|
},
|
|
@@ -207,4 +213,4 @@ function postprocessPlugin() {
|
|
|
207
213
|
//#endregion
|
|
208
214
|
export { createCore as n, ValidationError as r, _Defaults as t };
|
|
209
215
|
|
|
210
|
-
//# sourceMappingURL=core-
|
|
216
|
+
//# sourceMappingURL=core-Wd5WdPN4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-B0lF760L.js","names":[],"sources":["../src/utils/validation.ts","../src/core.ts"],"sourcesContent":["import type { CollectionSchema } from '@/config';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nexport class ValidationError extends Error {\n title: string;\n issues: readonly StandardSchemaV1.Issue[];\n\n constructor(message: string, issues: readonly StandardSchemaV1.Issue[]) {\n super(`${message}:\\n${issues.map((issue) => ` ${issue.path}: ${issue.message}`).join('\\n')}`);\n\n this.title = message;\n this.issues = issues;\n }\n\n async toStringFormatted() {\n // Handle ESM/CJS interop: picocolors is a CJS module that exports via\n // module.exports = createColors(). When dynamically imported in ESM context\n // (e.g., Next.js 16 Turbopack), the exports are wrapped under .default\n const picocolorsModule = await import('picocolors');\n const picocolors = picocolorsModule.default ?? picocolorsModule;\n\n return [\n picocolors.bold(`[MDX] ${this.title}:`),\n ...this.issues.map((issue) =>\n picocolors.redBright(\n `- ${picocolors.bold(issue.path?.join('.') ?? '*')}: ${issue.message}`,\n ),\n ),\n ].join('\\n');\n }\n}\n\nexport async function validate<Schema extends StandardSchemaV1, Context>(\n schema: CollectionSchema<Schema, Context>,\n data: unknown,\n context: Context,\n errorMessage: string,\n): Promise<StandardSchemaV1.InferOutput<Schema>> {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n schema = schema(context);\n }\n\n if ('~standard' in schema) {\n const result = await (schema as StandardSchemaV1)['~standard'].validate(data);\n\n if (result.issues) {\n throw new ValidationError(errorMessage, result.issues);\n }\n\n return result.value;\n }\n\n return data;\n}\n","import type {\n CollectionItem,\n DocCollectionItem,\n LoadedConfig,\n MetaCollectionItem,\n} from '@/config/build';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { FSWatcher } from 'chokidar';\nimport { validate } from './utils/validation';\nimport type { VFile } from 'vfile';\nimport type { IndexFilePlugin } from './plugins/index-file';\nimport type { PostprocessOptions } from './config';\nimport { ident } from './utils/codegen';\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface EmitEntry {\n /**\n * path relative to output directory\n */\n path: string;\n content: string;\n}\n\nexport interface PluginContext {\n core: Core;\n}\n\nexport type CompilationContext<Collection> = PluginContext & TransformOptions<Collection>;\n\nexport interface TransformOptions<Collection> {\n collection: Collection;\n filePath: string;\n source: string;\n}\n\nexport interface Plugin extends IndexFilePlugin {\n name?: string;\n\n /**\n * on config loaded/updated\n */\n config?: (this: PluginContext, config: LoadedConfig) => Awaitable<void | LoadedConfig>;\n\n /**\n * Generate files (e.g. types, index file, or JSON schemas)\n */\n emit?: (this: PluginContext) => Awaitable<EmitEntry[]>;\n\n /**\n * Configure Fumadocs dev server\n */\n configureServer?: (this: PluginContext, server: ServerContext) => Awaitable<void>;\n\n meta?: {\n /**\n * Transform metadata\n */\n transform?: (\n this: CompilationContext<MetaCollectionItem>,\n data: unknown,\n ) => Awaitable<unknown | void>;\n };\n\n doc?: {\n /**\n * Transform frontmatter\n */\n frontmatter?: (\n this: CompilationContext<DocCollectionItem>,\n data: Record<string, unknown>,\n ) => Awaitable<Record<string, unknown> | void>;\n\n /**\n * Transform `vfile` on compilation stage\n */\n vfile?: (this: CompilationContext<DocCollectionItem>, file: VFile) => Awaitable<VFile | void>;\n };\n}\n\nexport type PluginOption = Awaitable<Plugin | PluginOption[] | false | undefined>;\n\nexport interface ServerContext {\n /**\n * the file watcher, by default all content files are watched, along with other files.\n *\n * make sure to filter when listening to events\n */\n watcher?: FSWatcher;\n}\n\nexport interface CoreOptions {\n environment: string;\n configPath: string;\n outDir: string;\n plugins?: PluginOption[];\n\n /**\n * the workspace info if this instance is created as a workspace\n */\n workspace?: {\n parent: Core;\n name: string;\n dir: string;\n };\n}\n\nexport interface EmitOptions {\n /**\n * filter the plugins to run emit\n */\n filterPlugin?: (plugin: Plugin) => boolean;\n\n /**\n * filter the workspaces to run emit\n */\n filterWorkspace?: (workspace: string) => boolean;\n\n /**\n * write files\n */\n write?: boolean;\n}\n\nexport interface EmitOutput {\n entries: EmitEntry[];\n workspaces: Record<string, EmitEntry[]>;\n}\n\nexport const _Defaults = {\n configPath: 'source.config.ts',\n outDir: '.source',\n};\n\nasync function getPlugins(pluginOptions: PluginOption[]): Promise<Plugin[]> {\n const plugins: Plugin[] = [];\n\n for await (const option of pluginOptions) {\n if (!option) continue;\n if (Array.isArray(option)) plugins.push(...(await getPlugins(option)));\n else plugins.push(option);\n }\n\n return plugins;\n}\n\nexport function createCore(options: CoreOptions) {\n let config: LoadedConfig;\n let plugins: Plugin[];\n const workspaces = new Map<string, Core>();\n\n async function transformMetadata<T>(\n { collection, filePath, source }: TransformOptions<DocCollectionItem | MetaCollectionItem>,\n data: unknown,\n ): Promise<T> {\n if (collection.schema) {\n data = await validate(\n collection.schema,\n data,\n { path: filePath, source },\n collection.type === 'doc'\n ? `invalid frontmatter in ${filePath}`\n : `invalid data in ${filePath}`,\n );\n }\n\n return data as T;\n }\n\n return {\n /**\n * Convenient cache store, reset when config changes\n */\n cache: new Map<string, unknown>(),\n async init({ config: newConfig }: { config: Awaitable<LoadedConfig> }) {\n config = await newConfig;\n this.cache.clear();\n workspaces.clear();\n plugins = await getPlugins([postprocessPlugin(), options.plugins, config.global.plugins]);\n\n for (const plugin of plugins) {\n const out = await plugin.config?.call(this.getPluginContext(), config);\n if (out) config = out;\n }\n\n // only support workspaces with max depth 1\n if (!options.workspace) {\n await Promise.all(\n Object.entries(config.workspaces).map(async ([name, workspace]) => {\n const core = createCore({\n ...options,\n outDir: path.join(options.outDir, name),\n workspace: {\n name,\n parent: this,\n dir: workspace.dir,\n },\n });\n await core.init({ config: workspace.config });\n workspaces.set(name, core);\n }),\n );\n }\n },\n getWorkspaces() {\n return workspaces;\n },\n getOptions() {\n return options;\n },\n getConfig(): LoadedConfig {\n return config;\n },\n /**\n * The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)\n */\n getCompiledConfigPath(): string {\n return path.join(options.outDir, 'source.config.mjs');\n },\n getPlugins() {\n return plugins;\n },\n getCollections(): CollectionItem[] {\n return Array.from(config.collections.values());\n },\n getCollection(name: string): CollectionItem | undefined {\n return config.collections.get(name);\n },\n getPluginContext(): PluginContext {\n return {\n core: this,\n };\n },\n async initServer(server: ServerContext): Promise<void> {\n const ctx = this.getPluginContext();\n for (const plugin of plugins) {\n await plugin.configureServer?.call(ctx, server);\n }\n for (const workspace of workspaces.values()) {\n await workspace.initServer(server);\n }\n },\n async emit(emitOptions: EmitOptions = {}): Promise<EmitOutput> {\n const { filterPlugin, filterWorkspace, write = false } = emitOptions;\n const start = performance.now();\n const ctx = this.getPluginContext();\n const added = new Set<string>();\n const out: EmitOutput = {\n entries: [],\n workspaces: {},\n };\n\n for (const li of await Promise.all(\n plugins.map((plugin) => {\n if ((filterPlugin && !filterPlugin(plugin)) || !plugin.emit) return;\n return plugin.emit.call(ctx);\n }),\n )) {\n if (!li) continue;\n for (const item of li) {\n if (added.has(item.path)) continue;\n out.entries.push(item);\n added.add(item.path);\n }\n }\n\n if (write) {\n await Promise.all(\n out.entries.map(async (entry) => {\n const file = path.join(options.outDir, entry.path);\n\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, entry.content);\n }),\n );\n\n console.log(\n options.workspace\n ? `[MDX: ${options.workspace.name}] generated files in ${performance.now() - start}ms`\n : `[MDX] generated files in ${performance.now() - start}ms`,\n );\n }\n\n for (const [name, workspace] of workspaces) {\n if (filterWorkspace && !filterWorkspace(name)) continue;\n out.workspaces[name] = (await workspace.emit(emitOptions)).entries;\n }\n\n return out;\n },\n async transformMeta(\n options: TransformOptions<MetaCollectionItem>,\n data: unknown,\n ): Promise<unknown> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n data = await transformMetadata(options, data);\n for (const plugin of plugins) {\n if (plugin.meta?.transform) data = (await plugin.meta.transform.call(ctx, data)) ?? data;\n }\n\n return data;\n },\n async transformFrontmatter(\n options: TransformOptions<DocCollectionItem>,\n data: Record<string, unknown>,\n ): Promise<Record<string, unknown>> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n data = await transformMetadata(options, data);\n for (const plugin of plugins) {\n if (plugin.doc?.frontmatter) data = (await plugin.doc.frontmatter.call(ctx, data)) ?? data;\n }\n\n return data;\n },\n async transformVFile(\n options: TransformOptions<DocCollectionItem>,\n file: VFile,\n ): Promise<VFile> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n for (const plugin of plugins) {\n if (plugin.doc?.vfile) file = (await plugin.doc.vfile.call(ctx, file)) ?? file;\n }\n\n return file;\n },\n };\n}\n\nfunction postprocessPlugin(): Plugin {\n const LinkReferenceTypes = `{\n /**\n * extracted references (e.g. hrefs, paths), useful for analyzing relationships between pages.\n */\n extractedReferences: import(\"fumadocs-mdx\").ExtractedReference[];\n}`;\n\n return {\n 'index-file': {\n generateTypeConfig() {\n const lines: string[] = [];\n lines.push('{');\n lines.push(' DocData: {');\n for (const collection of this.core.getCollections()) {\n let postprocessOptions: Partial<PostprocessOptions> | undefined;\n switch (collection.type) {\n case 'doc':\n postprocessOptions = collection.postprocess;\n break;\n case 'docs':\n postprocessOptions = collection.docs.postprocess;\n break;\n }\n\n if (postprocessOptions?.extractLinkReferences) {\n lines.push(ident(`${collection.name}: ${LinkReferenceTypes},`, 2));\n }\n }\n lines.push(' }');\n lines.push('}');\n return lines.join('\\n');\n },\n serverOptions(options) {\n options.doc ??= {};\n options.doc.passthroughs ??= [];\n options.doc.passthroughs.push('extractedReferences');\n },\n },\n };\n}\n\nexport type Core = ReturnType<typeof createCore>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core-Wd5WdPN4.js","names":[],"sources":["../src/utils/validation.ts","../src/core.ts"],"sourcesContent":["import type { CollectionSchema } from '@/config';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nexport class ValidationError extends Error {\n title: string;\n issues: readonly StandardSchemaV1.Issue[];\n\n constructor(message: string, issues: readonly StandardSchemaV1.Issue[]) {\n super(`${message}:\\n${issues.map((issue) => ` ${issue.path}: ${issue.message}`).join('\\n')}`);\n\n this.title = message;\n this.issues = issues;\n }\n\n async toStringFormatted() {\n // Handle ESM/CJS interop: picocolors is a CJS module that exports via\n // module.exports = createColors(). When dynamically imported in ESM context\n // (e.g., Next.js 16 Turbopack), the exports are wrapped under .default\n const picocolorsModule = await import('picocolors');\n const picocolors = picocolorsModule.default ?? picocolorsModule;\n\n return [\n picocolors.bold(`[MDX] ${this.title}:`),\n ...this.issues.map((issue) =>\n picocolors.redBright(\n `- ${picocolors.bold(issue.path?.join('.') ?? '*')}: ${issue.message}`,\n ),\n ),\n ].join('\\n');\n }\n}\n\nexport async function validate<Schema extends StandardSchemaV1, Context>(\n schema: CollectionSchema<Schema, Context>,\n data: unknown,\n context: Context,\n errorMessage: string,\n): Promise<StandardSchemaV1.InferOutput<Schema>> {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n schema = schema(context);\n }\n\n if ('~standard' in schema) {\n const result = await (schema as StandardSchemaV1)['~standard'].validate(data);\n\n if (result.issues) {\n throw new ValidationError(errorMessage, result.issues);\n }\n\n return result.value;\n }\n\n return data;\n}\n","import type {\n CollectionItem,\n DocCollectionItem,\n LoadedConfig,\n MetaCollectionItem,\n} from '@/config/build';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { FSWatcher } from 'chokidar';\nimport { validate } from './utils/validation';\nimport type { VFile } from 'vfile';\nimport type { IndexFilePlugin } from './plugins/index-file';\nimport type { PostprocessOptions } from './config';\nimport { ident } from './utils/codegen';\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface EmitEntry {\n /**\n * path relative to output directory\n */\n path: string;\n content: string;\n}\n\nexport interface PluginContext {\n core: Core;\n}\n\nexport type CompilationContext<Collection> = PluginContext & TransformOptions<Collection>;\n\nexport interface TransformOptions<Collection> {\n collection: Collection;\n filePath: string;\n source: string;\n}\n\nexport interface Plugin extends IndexFilePlugin {\n name?: string;\n\n /**\n * on config loaded/updated\n */\n config?: (this: PluginContext, config: LoadedConfig) => Awaitable<void | LoadedConfig>;\n\n /**\n * Generate files (e.g. types, index file, or JSON schemas)\n */\n emit?: (this: PluginContext) => Awaitable<EmitEntry[]>;\n\n /**\n * Configure Fumadocs dev server\n */\n configureServer?: (this: PluginContext, server: ServerContext) => Awaitable<void>;\n\n meta?: {\n /**\n * Transform metadata\n */\n transform?: (\n this: CompilationContext<MetaCollectionItem>,\n data: unknown,\n ) => Awaitable<unknown | void>;\n };\n\n doc?: {\n /**\n * Transform frontmatter\n */\n frontmatter?: (\n this: CompilationContext<DocCollectionItem>,\n data: Record<string, unknown>,\n ) => Awaitable<Record<string, unknown> | void>;\n\n /**\n * Transform `vfile` on compilation stage\n */\n vfile?: (this: CompilationContext<DocCollectionItem>, file: VFile) => Awaitable<VFile | void>;\n };\n}\n\nexport type PluginOption = Awaitable<Plugin | PluginOption[] | false | undefined>;\n\nexport interface ServerContext {\n /**\n * the file watcher, by default all content files are watched, along with other files.\n *\n * make sure to filter when listening to events\n */\n watcher?: FSWatcher;\n}\n\nexport interface CoreOptions {\n environment: string;\n configPath: string;\n outDir: string;\n plugins?: PluginOption[];\n\n /**\n * the workspace info if this instance is created as a workspace\n */\n workspace?: {\n parent: Core;\n name: string;\n dir: string;\n };\n}\n\nexport interface EmitOptions {\n /**\n * filter the plugins to run emit\n */\n filterPlugin?: (plugin: Plugin) => boolean;\n\n /**\n * filter the workspaces to run emit\n */\n filterWorkspace?: (workspace: string) => boolean;\n\n /**\n * write files\n */\n write?: boolean;\n}\n\nexport interface EmitOutput {\n entries: EmitEntry[];\n workspaces: Record<string, EmitEntry[]>;\n}\n\nexport const _Defaults = {\n configPath: 'source.config.ts',\n outDir: '.source',\n};\n\nasync function getPlugins(pluginOptions: PluginOption[]): Promise<Plugin[]> {\n const plugins: Plugin[] = [];\n\n for await (const option of pluginOptions) {\n if (!option) continue;\n if (Array.isArray(option)) plugins.push(...(await getPlugins(option)));\n else plugins.push(option);\n }\n\n return plugins;\n}\n\nexport function createCore(options: CoreOptions) {\n let config: LoadedConfig;\n let plugins: Plugin[];\n const workspaces = new Map<string, Core>();\n\n async function transformMetadata<T>(\n { collection, filePath, source }: TransformOptions<DocCollectionItem | MetaCollectionItem>,\n data: unknown,\n ): Promise<T> {\n if (collection.schema) {\n data = await validate(\n collection.schema,\n data,\n { path: filePath, source },\n collection.type === 'doc'\n ? `invalid frontmatter in ${filePath}`\n : `invalid data in ${filePath}`,\n );\n }\n\n return data as T;\n }\n\n return {\n /**\n * Convenient cache store, reset when config changes\n */\n cache: new Map<string, unknown>(),\n async init({ config: newConfig }: { config: Awaitable<LoadedConfig> }) {\n config = await newConfig;\n this.cache.clear();\n workspaces.clear();\n plugins = await getPlugins([postprocessPlugin(), options.plugins, config.global.plugins]);\n\n for (const plugin of plugins) {\n const out = await plugin.config?.call(this.getPluginContext(), config);\n if (out) config = out;\n }\n\n // only support workspaces with max depth 1\n if (!options.workspace) {\n await Promise.all(\n Object.entries(config.workspaces).map(async ([name, workspace]) => {\n const core = createCore({\n ...options,\n outDir: path.join(options.outDir, name),\n workspace: {\n name,\n parent: this,\n dir: workspace.dir,\n },\n });\n await core.init({ config: workspace.config });\n workspaces.set(name, core);\n }),\n );\n }\n },\n getWorkspaces() {\n return workspaces;\n },\n getOptions() {\n return options;\n },\n getConfig(): LoadedConfig {\n return config;\n },\n /**\n * The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)\n */\n getCompiledConfigPath(): string {\n return path.join(options.outDir, 'source.config.mjs');\n },\n getPlugins() {\n return plugins;\n },\n getCollections(): CollectionItem[] {\n return Array.from(config.collections.values());\n },\n getCollection(name: string): CollectionItem | undefined {\n return config.collections.get(name);\n },\n getPluginContext(): PluginContext {\n return {\n core: this,\n };\n },\n async initServer(server: ServerContext): Promise<void> {\n const ctx = this.getPluginContext();\n for (const plugin of plugins) {\n await plugin.configureServer?.call(ctx, server);\n }\n for (const workspace of workspaces.values()) {\n await workspace.initServer(server);\n }\n },\n async emit(emitOptions: EmitOptions = {}): Promise<EmitOutput> {\n const { filterPlugin, filterWorkspace, write = false } = emitOptions;\n const start = performance.now();\n const ctx = this.getPluginContext();\n const added = new Set<string>();\n const out: EmitOutput = {\n entries: [],\n workspaces: {},\n };\n\n for (const li of await Promise.all(\n plugins.map((plugin) => {\n if ((filterPlugin && !filterPlugin(plugin)) || !plugin.emit) return;\n return plugin.emit.call(ctx);\n }),\n )) {\n if (!li) continue;\n for (const item of li) {\n if (added.has(item.path)) continue;\n out.entries.push(item);\n added.add(item.path);\n }\n }\n\n if (write) {\n await Promise.all(\n out.entries.map(async (entry) => {\n const file = path.join(options.outDir, entry.path);\n\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, entry.content);\n }),\n );\n\n console.log(\n options.workspace\n ? `[MDX: ${options.workspace.name}] generated files in ${performance.now() - start}ms`\n : `[MDX] generated files in ${performance.now() - start}ms`,\n );\n }\n\n for (const [name, workspace] of workspaces) {\n if (filterWorkspace && !filterWorkspace(name)) continue;\n out.workspaces[name] = (await workspace.emit(emitOptions)).entries;\n }\n\n return out;\n },\n async transformMeta(\n options: TransformOptions<MetaCollectionItem>,\n data: unknown,\n ): Promise<unknown> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n data = await transformMetadata(options, data);\n for (const plugin of plugins) {\n if (plugin.meta?.transform) data = (await plugin.meta.transform.call(ctx, data)) ?? data;\n }\n\n return data;\n },\n async transformFrontmatter(\n options: TransformOptions<DocCollectionItem>,\n data: Record<string, unknown>,\n ): Promise<Record<string, unknown>> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n data = await transformMetadata(options, data);\n for (const plugin of plugins) {\n if (plugin.doc?.frontmatter) data = (await plugin.doc.frontmatter.call(ctx, data)) ?? data;\n }\n\n return data;\n },\n async transformVFile(\n options: TransformOptions<DocCollectionItem>,\n file: VFile,\n ): Promise<VFile> {\n const ctx = {\n ...this.getPluginContext(),\n ...options,\n };\n\n for (const plugin of plugins) {\n if (plugin.doc?.vfile) file = (await plugin.doc.vfile.call(ctx, file)) ?? file;\n }\n\n return file;\n },\n };\n}\n\nfunction postprocessPlugin(): Plugin {\n const LinkReferenceTypes = `{\n /**\n * extracted references (e.g. hrefs, paths), useful for analyzing relationships between pages.\n */\n extractedReferences: import(\"fumadocs-mdx\").ExtractedReference[];\n}`;\n\n return {\n 'index-file': {\n generateTypeConfig() {\n const lines: string[] = [];\n lines.push('{');\n lines.push(' DocData: {');\n for (const collection of this.core.getCollections()) {\n let postprocessOptions: Partial<PostprocessOptions> | undefined;\n switch (collection.type) {\n case 'doc':\n postprocessOptions = collection.postprocess;\n break;\n case 'docs':\n postprocessOptions = collection.docs.postprocess;\n break;\n }\n\n if (postprocessOptions?.extractLinkReferences) {\n lines.push(ident(`${collection.name}: ${LinkReferenceTypes},`, 2));\n }\n }\n lines.push(' }');\n lines.push('}');\n return lines.join('\\n');\n },\n serverOptions(options) {\n options.doc ??= {};\n options.doc.passthroughs ??= [];\n options.doc.passthroughs.push('extractedReferences');\n },\n },\n };\n}\n\nexport type Core = ReturnType<typeof createCore>;\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { L as ExtractedReference, a as EmitOptions, c as PluginContext, d as TransformOptions, i as EmitEntry, l as PluginOption, n as Core, o as EmitOutput, r as CoreOptions, s as Plugin, t as CompilationContext, u as ServerContext } from "./core-C5aAAT92.js";
|
|
2
2
|
import { t as CompiledMDXProperties } from "./build-mdx-YyRh-ZGV.js";
|
|
3
3
|
export { type CompilationContext, type CompiledMDXProperties, type Core, type CoreOptions, type EmitEntry, type EmitOptions, type EmitOutput, type ExtractedReference, type Plugin, type PluginContext, type PluginOption, type ServerContext, type TransformOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-from-file-C1DDNVwF.js","names":[],"sources":["../src/config/load-from-file.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport type { LoadedConfig } from '@/config/build';\nimport { buildConfig } from '@/config/build';\nimport type { Core } from '@/core';\n\nasync function compileConfig(core: Core) {\n const { build } = await import('esbuild');\n const { configPath, outDir } = core.getOptions();\n\n const transformed = await build({\n entryPoints: [{ in: configPath, out: 'source.config' }],\n bundle: true,\n outdir: outDir,\n target: 'node22',\n write: true,\n platform: 'node',\n format: 'esm',\n packages: 'external',\n outExtension: {\n '.js': '.mjs',\n },\n allowOverwrite: true,\n });\n\n if (transformed.errors.length > 0) {\n throw new Error('failed to compile configuration file');\n }\n}\n\n/**\n * Load config\n *\n * @param build - By default, it assumes the config file has been compiled. Set this `true` to compile the config first.\n */\nexport async function loadConfig(core: Core, build = false): Promise<LoadedConfig> {\n if (build) await compileConfig(core);\n\n const url = pathToFileURL(core.getCompiledConfigPath());\n // always return a new config\n url.searchParams.set('hash', Date.now().toString());\n\n const config = import(url.href).then((loaded) => buildConfig(loaded as Record<string, unknown>));\n\n return await config;\n}\n"],"mappings":";;;;;AAKA,eAAe,cAAc,MAAY;CACvC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,EAAE,YAAY,WAAW,KAAK,YAAY;AAiBhD,
|
|
1
|
+
{"version":3,"file":"load-from-file-C1DDNVwF.js","names":[],"sources":["../src/config/load-from-file.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport type { LoadedConfig } from '@/config/build';\nimport { buildConfig } from '@/config/build';\nimport type { Core } from '@/core';\n\nasync function compileConfig(core: Core) {\n const { build } = await import('esbuild');\n const { configPath, outDir } = core.getOptions();\n\n const transformed = await build({\n entryPoints: [{ in: configPath, out: 'source.config' }],\n bundle: true,\n outdir: outDir,\n target: 'node22',\n write: true,\n platform: 'node',\n format: 'esm',\n packages: 'external',\n outExtension: {\n '.js': '.mjs',\n },\n allowOverwrite: true,\n });\n\n if (transformed.errors.length > 0) {\n throw new Error('failed to compile configuration file');\n }\n}\n\n/**\n * Load config\n *\n * @param build - By default, it assumes the config file has been compiled. Set this `true` to compile the config first.\n */\nexport async function loadConfig(core: Core, build = false): Promise<LoadedConfig> {\n if (build) await compileConfig(core);\n\n const url = pathToFileURL(core.getCompiledConfigPath());\n // always return a new config\n url.searchParams.set('hash', Date.now().toString());\n\n const config = import(url.href).then((loaded) => buildConfig(loaded as Record<string, unknown>));\n\n return await config;\n}\n"],"mappings":";;;;;AAKA,eAAe,cAAc,MAAY;CACvC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,EAAE,YAAY,WAAW,KAAK,YAAY;AAiBhD,MAAI,MAfsB,MAAM;EAC9B,aAAa,CAAC;GAAE,IAAI;GAAY,KAAK;GAAiB,CAAC;EACvD,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,UAAU;EACV,QAAQ;EACR,UAAU;EACV,cAAc,EACZ,OAAO,QACR;EACD,gBAAgB;EACjB,CAAC,EAEc,OAAO,SAAS,EAC9B,OAAM,IAAI,MAAM,uCAAuC;;;;;;;AAS3D,eAAsB,WAAW,MAAY,QAAQ,OAA8B;AACjF,KAAI,MAAO,OAAM,cAAc,KAAK;CAEpC,MAAM,MAAM,cAAc,KAAK,uBAAuB,CAAC;AAEvD,KAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,CAAC,UAAU,CAAC;AAInD,QAAO,MAFQ,OAAO,IAAI,MAAM,MAAM,WAAW,YAAY,OAAkC,CAE5E"}
|
package/dist/next/index.d.ts
CHANGED
package/dist/next/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as metaLoaderGlob, t as mdxLoaderGlob } from "../loaders-ezSYYkT7.js";
|
|
2
|
-
import { n as createCore, t as _Defaults } from "../core-
|
|
2
|
+
import { n as createCore, t as _Defaults } from "../core-Wd5WdPN4.js";
|
|
3
3
|
import { t as loadConfig } from "../load-from-file-C1DDNVwF.js";
|
|
4
4
|
import { t as indexFile } from "../index-file-eVlUbKSO.js";
|
|
5
5
|
import * as path$1 from "node:path";
|
package/dist/node/loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as createMdxLoader } from "../mdx-D2vcWdqv.js";
|
|
2
|
-
import { n as createCore, t as _Defaults } from "../core-
|
|
3
|
-
import { n as toNode, o as createStandaloneConfigLoader } from "../adapter-
|
|
2
|
+
import { n as createCore, t as _Defaults } from "../core-Wd5WdPN4.js";
|
|
3
|
+
import { n as toNode, o as createStandaloneConfigLoader } from "../adapter-DVxULZiU.js";
|
|
4
4
|
import { t as createMetaLoader } from "../meta-B6guI74I.js";
|
|
5
5
|
//#region src/node/loader.ts
|
|
6
6
|
const configLoader = createStandaloneConfigLoader({
|
package/dist/node/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","names":[],"sources":["../../src/node/loader.ts"],"sourcesContent":["import { _Defaults, createCore } from '@/core';\nimport { createMdxLoader } from '@/loaders/mdx';\nimport { toNode } from '@/loaders/adapter';\nimport { createStandaloneConfigLoader } from '@/loaders/config';\nimport type { LoadHook } from 'node:module';\nimport { createMetaLoader } from '@/loaders/meta';\n\nconst core = createCore({\n environment: 'node',\n configPath: _Defaults.configPath,\n outDir: _Defaults.outDir,\n});\n\nconst configLoader = createStandaloneConfigLoader({\n core,\n buildConfig: true,\n mode: 'production',\n});\n\nconst mdxLoader = toNode(createMdxLoader(configLoader));\nconst metaLoader = toNode(createMetaLoader(configLoader));\n\nexport const load: LoadHook = (url, context, nextLoad) => {\n return mdxLoader(url, context, (v, ctx) => metaLoader(v, { ...context, ...ctx }, nextLoad));\n};\n"],"mappings":";;;;;AAaA,MAAM,eAAe,6BAA6B;CAChD,MAPW,WAAW;EACtB,aAAa;EACb,YAAY,UAAU;EACtB,QAAQ,UAAU;EACnB,
|
|
1
|
+
{"version":3,"file":"loader.js","names":[],"sources":["../../src/node/loader.ts"],"sourcesContent":["import { _Defaults, createCore } from '@/core';\nimport { createMdxLoader } from '@/loaders/mdx';\nimport { toNode } from '@/loaders/adapter';\nimport { createStandaloneConfigLoader } from '@/loaders/config';\nimport type { LoadHook } from 'node:module';\nimport { createMetaLoader } from '@/loaders/meta';\n\nconst core = createCore({\n environment: 'node',\n configPath: _Defaults.configPath,\n outDir: _Defaults.outDir,\n});\n\nconst configLoader = createStandaloneConfigLoader({\n core,\n buildConfig: true,\n mode: 'production',\n});\n\nconst mdxLoader = toNode(createMdxLoader(configLoader));\nconst metaLoader = toNode(createMetaLoader(configLoader));\n\nexport const load: LoadHook = (url, context, nextLoad) => {\n return mdxLoader(url, context, (v, ctx) => metaLoader(v, { ...context, ...ctx }, nextLoad));\n};\n"],"mappings":";;;;;AAaA,MAAM,eAAe,6BAA6B;CAChD,MAPW,WAAW;EACtB,aAAa;EACb,YAAY,UAAU;EACtB,QAAQ,UAAU;EACnB,CAGK;CACJ,aAAa;CACb,MAAM;CACP,CAAC;AAEF,MAAM,YAAY,OAAO,gBAAgB,aAAa,CAAC;AACvD,MAAM,aAAa,OAAO,iBAAiB,aAAa,CAAC;AAEzD,MAAa,QAAkB,KAAK,SAAS,aAAa;AACxD,QAAO,UAAU,KAAK,UAAU,GAAG,QAAQ,WAAW,GAAG;EAAE,GAAG;EAAS,GAAG;EAAK,EAAE,SAAS,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { f as IndexFilePlugin, m as indexFile, p as IndexFilePluginOptions } from "../core-
|
|
1
|
+
import { f as IndexFilePlugin, m as indexFile, p as IndexFilePluginOptions } from "../core-C5aAAT92.js";
|
|
2
2
|
export { IndexFilePlugin, IndexFilePluginOptions, indexFile as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remark-include-VDoXZSBN.js","names":["fs","path"],"sources":["../src/loaders/mdx/remark-unravel.ts","../src/loaders/mdx/mdast-utils.ts","../src/loaders/mdx/remark-include.ts"],"sourcesContent":["// from internal remark plugins in https://github.com/mdx-js/mdx/blob/main/packages/mdx/lib/plugin/remark-mark-and-unravel.js\n// we need to ensure consistency with MDX.js when parsing embed content in `remark-include`\nimport { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { Root, RootContent } from 'mdast';\n\nexport function remarkMarkAndUnravel(): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, function (node, index, parent) {\n let offset = -1;\n let all = true;\n let oneOrMore = false;\n\n if (parent && typeof index === 'number' && node.type === 'paragraph') {\n const children = node.children;\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement' || child.type === 'mdxTextExpression') {\n oneOrMore = true;\n } else if (child.type === 'text' && child.value.trim().length === 0) {\n // Empty.\n } else {\n all = false;\n break;\n }\n }\n\n if (all && oneOrMore) {\n offset = -1;\n const newChildren: RootContent[] = [];\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxJsxFlowElement';\n }\n\n if (child.type === 'mdxTextExpression') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxFlowExpression';\n }\n\n if (child.type === 'text' && /^[\\t\\r\\n ]+$/.test(String(child.value))) {\n // Empty.\n } else {\n newChildren.push(child);\n }\n }\n\n parent.children.splice(index, 1, ...newChildren);\n return index;\n }\n }\n });\n };\n}\n","import type { RootContent } from 'mdast';\n\nexport function flattenNode(node: RootContent): string {\n if ('children' in node) return node.children.map((child) => flattenNode(child)).join('');\n\n if ('value' in node) return node.value;\n\n return '';\n}\n","import { type Processor, type Transformer, unified } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { Code, Node, Root, RootContent } from 'mdast';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport { frontmatter } from 'fumadocs-core/content/md/frontmatter';\nimport type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx';\nimport { remarkHeading } from 'fumadocs-core/mdx-plugins';\nimport { VFile } from 'vfile';\nimport type { Directives } from 'mdast-util-directive';\nimport { remarkMarkAndUnravel } from '@/loaders/mdx/remark-unravel';\nimport { flattenNode } from './mdast-utils';\n\n/**\n * VS Code–style region extraction\n * Adapted from VitePress:\n * https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/snippet.ts\n */\n\n// region marker regexes\nconst REGION_MARKERS = [\n {\n start: /^\\s*\\/\\/\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*\\/\\/\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*<!--\\s*#?region\\b\\s*(.*?)\\s*-->/,\n end: /^\\s*<!--\\s*#?endregion\\b\\s*(.*?)\\s*-->/,\n },\n {\n start: /^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\//,\n end: /^\\s*\\/\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\//,\n },\n {\n start: /^\\s*#[rR]egion\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#[eE]nd ?[rR]egion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*(?:--|::|@?REM)\\s*#region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*(?:--|::|@?REM)\\s*#endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#pragma\\s+region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#pragma\\s+endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*\\(\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\)/,\n end: /^\\s*\\(\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\)/,\n },\n];\n\nfunction dedent(lines: string[]): string {\n const minIndent = lines.reduce((min, line) => {\n const match = line.match(/^(\\s*)\\S/);\n return match ? Math.min(min, match[1].length) : min;\n }, Infinity);\n\n return minIndent === Infinity\n ? lines.join('\\n')\n : lines.map((l) => l.slice(minIndent)).join('\\n');\n}\n\nfunction extractCodeRegion(content: string, regionName: string): string {\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n for (const re of REGION_MARKERS) {\n let match = re.start.exec(lines[i]);\n if (match?.[1] !== regionName) continue;\n\n let depth = 1;\n const extractedLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n match = re.start.exec(lines[j]);\n if (match) {\n depth++;\n continue;\n }\n\n match = re.end.exec(lines[j]);\n if (match) {\n if (match[1] === regionName) depth = 0;\n else if (match[1] === '') depth--;\n else continue;\n\n if (depth > 0) continue;\n return dedent(extractedLines);\n } else {\n extractedLines.push(lines[j]);\n }\n }\n }\n }\n throw new Error(`Region \"${regionName}\" not found`);\n}\n\nexport interface Params {\n lang?: string;\n meta?: string;\n}\n\nconst ElementLikeTypes: ElementLikeContent['type'][] = [\n 'mdxJsxFlowElement',\n 'mdxJsxTextElement',\n 'containerDirective',\n 'textDirective',\n 'leafDirective',\n];\ntype ElementLikeContent = MdxJsxFlowElement | MdxJsxTextElement | Directives;\n\nfunction isElementLike(node: Node): node is ElementLikeContent {\n return ElementLikeTypes.includes(node.type as ElementLikeContent['type']);\n}\n\nfunction parseElementAttributes(\n element: ElementLikeContent,\n): Record<string, string | null | undefined> {\n if (Array.isArray(element.attributes)) {\n const attributes: Record<string, string | null> = {};\n\n for (const attr of element.attributes) {\n if (\n attr.type === 'mdxJsxAttribute' &&\n (typeof attr.value === 'string' || attr.value === null)\n ) {\n attributes[attr.name] = attr.value;\n }\n }\n\n return attributes;\n }\n\n return element.attributes ?? {};\n}\n\nfunction parseSpecifier(specifier: string): {\n file: string;\n section?: string;\n} {\n const idx = specifier.lastIndexOf('#');\n if (idx === -1) return { file: specifier };\n\n return {\n file: specifier.slice(0, idx),\n section: specifier.slice(idx + 1),\n };\n}\n\nfunction extractSection(root: Root, section: string): Root | undefined {\n let nodes: RootContent[] | undefined;\n let capturingHeadingContent = false;\n\n visit(root, (node) => {\n if (node.type === 'heading') {\n if (capturingHeadingContent) {\n return false;\n }\n\n if (node.data?.hProperties?.id === section) {\n capturingHeadingContent = true;\n nodes = [node];\n return 'skip';\n }\n\n return;\n }\n\n if (capturingHeadingContent) {\n nodes?.push(node as RootContent);\n return 'skip';\n }\n\n if (isElementLike(node) && node.name === 'section') {\n const attributes = parseElementAttributes(node);\n\n if (attributes.id === section) {\n nodes = node.children;\n return false;\n }\n }\n });\n\n if (nodes)\n return {\n type: 'root',\n children: nodes,\n };\n}\n\nexport function remarkInclude(this: Processor): Transformer<Root, Root> {\n const TagName = 'include';\n\n const embedContent = async (\n targetPath: string,\n heading: string | undefined,\n params: Params,\n parent: VFile,\n ) => {\n const { _getProcessor = () => this, _compiler } = parent.data;\n let content: string;\n try {\n content = await fs.readFile(targetPath, 'utf-8');\n } catch (e) {\n throw new Error(\n `failed to read file ${targetPath}\\n${e instanceof Error ? e.message : String(e)}`,\n { cause: e },\n );\n }\n\n const ext = path.extname(targetPath);\n _compiler?.addDependency(targetPath);\n // For non-Markdown files, support VS Code–style region extraction\n if (params.lang || (ext !== '.md' && ext !== '.mdx')) {\n const lang = params.lang ?? ext.slice(1);\n let value = content;\n if (heading) {\n value = extractCodeRegion(content, heading.trim());\n }\n return {\n type: 'code',\n lang,\n meta: params.meta,\n value,\n data: {},\n } satisfies Code;\n }\n\n const parser = _getProcessor(ext === '.mdx' ? 'mdx' : 'md');\n const parsed = frontmatter(content);\n const targetFile = new VFile({\n path: targetPath,\n value: parsed.content,\n data: {\n ...parent.data,\n frontmatter: parsed.data as Record<string, unknown>,\n },\n });\n let mdast = parser.parse(targetFile) as Root;\n const baseProcessor = unified().use(remarkMarkAndUnravel);\n\n if (heading) {\n // parse headings before extraction\n const extracted = extractSection(await baseProcessor.use(remarkHeading).run(mdast), heading);\n if (!extracted)\n throw new Error(\n `Cannot find section ${heading} in ${targetPath}, make sure you have encapsulated the section in a <section id=\"${heading}\"> tag, or a :::section directive with remark-directive configured.`,\n );\n\n mdast = extracted;\n } else {\n mdast = await baseProcessor.run(mdast);\n }\n\n await update(mdast, targetFile);\n return mdast;\n };\n\n async function update(tree: Root, file: VFile) {\n const queue: Promise<void>[] = [];\n\n visit(tree, ElementLikeTypes, (_node, _, parent) => {\n const node = _node as ElementLikeContent;\n if (node.name !== TagName) return;\n\n const specifier = flattenNode(node);\n if (specifier.length === 0) return 'skip';\n\n const attributes = parseElementAttributes(node);\n const { file: relativePath, section } = parseSpecifier(specifier);\n const targetPath = path.resolve('cwd' in attributes ? file.cwd : file.dirname!, relativePath);\n\n queue.push(\n embedContent(targetPath, section, attributes, file).then((replace) => {\n Object.assign(parent && parent.type === 'paragraph' ? parent : node, replace);\n }),\n );\n\n return 'skip';\n });\n\n await Promise.all(queue);\n }\n\n return async (tree, file) => {\n await update(tree, file);\n };\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,uBAAgD;AAC9D,SAAQ,SAAS;AACf,QAAM,MAAM,SAAU,MAAM,OAAO,QAAQ;GACzC,IAAI,SAAS;GACb,IAAI,MAAM;GACV,IAAI,YAAY;AAEhB,OAAI,UAAU,OAAO,UAAU,YAAY,KAAK,SAAS,aAAa;IACpE,MAAM,WAAW,KAAK;AAEtB,WAAO,EAAE,SAAS,SAAS,QAAQ;KACjC,MAAM,QAAQ,SAAS;AAEvB,SAAI,MAAM,SAAS,uBAAuB,MAAM,SAAS,oBACvD,aAAY;cACH,MAAM,SAAS,UAAU,MAAM,MAAM,MAAM,CAAC,WAAW,GAAG,QAE9D;AACL,YAAM;AACN;;;AAIJ,QAAI,OAAO,WAAW;AACpB,cAAS;KACT,MAAM,cAA6B,EAAE;AAErC,YAAO,EAAE,SAAS,SAAS,QAAQ;MACjC,MAAM,QAAQ,SAAS;AAEvB,UAAI,MAAM,SAAS,oBAEjB,OAAM,OAAO;AAGf,UAAI,MAAM,SAAS,oBAEjB,OAAM,OAAO;AAGf,UAAI,MAAM,SAAS,UAAU,eAAe,KAAK,OAAO,MAAM,MAAM,CAAC,EAAE,OAGrE,aAAY,KAAK,MAAM;;AAI3B,YAAO,SAAS,OAAO,OAAO,GAAG,GAAG,YAAY;AAChD,YAAO;;;IAGX;;;;;ACvDN,SAAgB,YAAY,MAA2B;AACrD,KAAI,cAAc,KAAM,QAAO,KAAK,SAAS,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC,KAAK,GAAG;AAExF,KAAI,WAAW,KAAM,QAAO,KAAK;AAEjC,QAAO;;;;;;;;;ACaT,MAAM,iBAAiB;CACrB;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACD;EACE,OAAO;EACP,KAAK;EACN;CACF;AAED,SAAS,OAAO,OAAyB;CACvC,MAAM,YAAY,MAAM,QAAQ,KAAK,SAAS;EAC5C,MAAM,QAAQ,KAAK,MAAM,WAAW;AACpC,SAAO,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG,OAAO,GAAG;IAC/C,SAAS;AAEZ,QAAO,cAAc,WACjB,MAAM,KAAK,KAAK,GAChB,MAAM,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC,CAAC,KAAK,KAAK;;AAGrD,SAAS,kBAAkB,SAAiB,YAA4B;CACtE,MAAM,QAAQ,QAAQ,MAAM,KAAK;AAEjC,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,MAAK,MAAM,MAAM,gBAAgB;EAC/B,IAAI,QAAQ,GAAG,MAAM,KAAK,MAAM,GAAG;AACnC,MAAI,QAAQ,OAAO,WAAY;EAE/B,IAAI,QAAQ;EACZ,MAAM,iBAA2B,EAAE;AACnC,OAAK,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACzC,WAAQ,GAAG,MAAM,KAAK,MAAM,GAAG;AAC/B,OAAI,OAAO;AACT;AACA;;AAGF,WAAQ,GAAG,IAAI,KAAK,MAAM,GAAG;AAC7B,OAAI,OAAO;AACT,QAAI,MAAM,OAAO,WAAY,SAAQ;aAC5B,MAAM,OAAO,GAAI;QACrB;AAEL,QAAI,QAAQ,EAAG;AACf,WAAO,OAAO,eAAe;SAE7B,gBAAe,KAAK,MAAM,GAAG;;;AAKrC,OAAM,IAAI,MAAM,WAAW,WAAW,aAAa;;AAQrD,MAAM,mBAAiD;CACrD;CACA;CACA;CACA;CACA;CACD;AAGD,SAAS,cAAc,MAAwC;AAC7D,QAAO,iBAAiB,SAAS,KAAK,KAAmC;;AAG3E,SAAS,uBACP,SAC2C;AAC3C,KAAI,MAAM,QAAQ,QAAQ,WAAW,EAAE;EACrC,MAAM,aAA4C,EAAE;AAEpD,OAAK,MAAM,QAAQ,QAAQ,WACzB,KACE,KAAK,SAAS,sBACb,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,MAElD,YAAW,KAAK,QAAQ,KAAK;AAIjC,SAAO;;AAGT,QAAO,QAAQ,cAAc,EAAE;;AAGjC,SAAS,eAAe,WAGtB;CACA,MAAM,MAAM,UAAU,YAAY,IAAI;AACtC,KAAI,QAAQ,GAAI,QAAO,EAAE,MAAM,WAAW;AAE1C,QAAO;EACL,MAAM,UAAU,MAAM,GAAG,IAAI;EAC7B,SAAS,UAAU,MAAM,MAAM,EAAE;EAClC;;AAGH,SAAS,eAAe,MAAY,SAAmC;CACrE,IAAI;CACJ,IAAI,0BAA0B;AAE9B,OAAM,OAAO,SAAS;AACpB,MAAI,KAAK,SAAS,WAAW;AAC3B,OAAI,wBACF,QAAO;AAGT,OAAI,KAAK,MAAM,aAAa,OAAO,SAAS;AAC1C,8BAA0B;AAC1B,YAAQ,CAAC,KAAK;AACd,WAAO;;AAGT;;AAGF,MAAI,yBAAyB;AAC3B,UAAO,KAAK,KAAoB;AAChC,UAAO;;AAGT,MAAI,cAAc,KAAK,IAAI,KAAK,SAAS;OACpB,uBAAuB,KAAK,CAEhC,OAAO,SAAS;AAC7B,YAAQ,KAAK;AACb,WAAO;;;GAGX;AAEF,KAAI,MACF,QAAO;EACL,MAAM;EACN,UAAU;EACX;;AAGL,SAAgB,gBAAwD;CACtE,MAAM,UAAU;CAEhB,MAAM,eAAe,OACnB,YACA,SACA,QACA,WACG;EACH,MAAM,EAAE,sBAAsB,MAAM,cAAc,OAAO;EACzD,IAAI;AACJ,MAAI;AACF,aAAU,MAAMA,KAAG,SAAS,YAAY,QAAQ;WACzC,GAAG;AACV,SAAM,IAAI,MACR,uBAAuB,WAAW,IAAI,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE,IAChF,EAAE,OAAO,GAAG,CACb;;EAGH,MAAM,MAAMC,OAAK,QAAQ,WAAW;AACpC,aAAW,cAAc,WAAW;AAEpC,MAAI,OAAO,QAAS,QAAQ,SAAS,QAAQ,QAAS;GACpD,MAAM,OAAO,OAAO,QAAQ,IAAI,MAAM,EAAE;GACxC,IAAI,QAAQ;AACZ,OAAI,QACF,SAAQ,kBAAkB,SAAS,QAAQ,MAAM,CAAC;AAEpD,UAAO;IACL,MAAM;IACN;IACA,MAAM,OAAO;IACb;IACA,MAAM,EAAE;IACT;;EAGH,MAAM,SAAS,cAAc,QAAQ,SAAS,QAAQ,KAAK;EAC3D,MAAM,SAAS,YAAY,QAAQ;EACnC,MAAM,aAAa,IAAI,MAAM;GAC3B,MAAM;GACN,OAAO,OAAO;GACd,MAAM;IACJ,GAAG,OAAO;IACV,aAAa,OAAO;IACrB;GACF,CAAC;EACF,IAAI,QAAQ,OAAO,MAAM,WAAW;EACpC,MAAM,gBAAgB,SAAS,CAAC,IAAI,qBAAqB;AAEzD,MAAI,SAAS;GAEX,MAAM,YAAY,eAAe,MAAM,cAAc,IAAI,cAAc,CAAC,IAAI,MAAM,EAAE,QAAQ;AAC5F,OAAI,CAAC,UACH,OAAM,IAAI,MACR,uBAAuB,QAAQ,MAAM,WAAW,kEAAkE,QAAQ,qEAC3H;AAEH,WAAQ;QAER,SAAQ,MAAM,cAAc,IAAI,MAAM;AAGxC,QAAM,OAAO,OAAO,WAAW;AAC/B,SAAO;;CAGT,eAAe,OAAO,MAAY,MAAa;EAC7C,MAAM,QAAyB,EAAE;AAEjC,QAAM,MAAM,mBAAmB,OAAO,GAAG,WAAW;GAClD,MAAM,OAAO;AACb,OAAI,KAAK,SAAS,QAAS;GAE3B,MAAM,YAAY,YAAY,KAAK;AACnC,OAAI,UAAU,WAAW,EAAG,QAAO;GAEnC,MAAM,aAAa,uBAAuB,KAAK;GAC/C,MAAM,EAAE,MAAM,cAAc,YAAY,eAAe,UAAU;GACjE,MAAM,aAAaA,OAAK,QAAQ,SAAS,aAAa,KAAK,MAAM,KAAK,SAAU,aAAa;AAE7F,SAAM,KACJ,aAAa,YAAY,SAAS,YAAY,KAAK,CAAC,MAAM,YAAY;AACpE,WAAO,OAAO,UAAU,OAAO,SAAS,cAAc,SAAS,MAAM,QAAQ;KAC7E,CACH;AAED,UAAO;IACP;AAEF,QAAM,QAAQ,IAAI,MAAM;;AAG1B,QAAO,OAAO,MAAM,SAAS;AAC3B,QAAM,OAAO,MAAM,KAAK"}
|
|
1
|
+
{"version":3,"file":"remark-include-VDoXZSBN.js","names":["fs","path"],"sources":["../src/loaders/mdx/remark-unravel.ts","../src/loaders/mdx/mdast-utils.ts","../src/loaders/mdx/remark-include.ts"],"sourcesContent":["// from internal remark plugins in https://github.com/mdx-js/mdx/blob/main/packages/mdx/lib/plugin/remark-mark-and-unravel.js\n// we need to ensure consistency with MDX.js when parsing embed content in `remark-include`\nimport { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { Root, RootContent } from 'mdast';\n\nexport function remarkMarkAndUnravel(): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, function (node, index, parent) {\n let offset = -1;\n let all = true;\n let oneOrMore = false;\n\n if (parent && typeof index === 'number' && node.type === 'paragraph') {\n const children = node.children;\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement' || child.type === 'mdxTextExpression') {\n oneOrMore = true;\n } else if (child.type === 'text' && child.value.trim().length === 0) {\n // Empty.\n } else {\n all = false;\n break;\n }\n }\n\n if (all && oneOrMore) {\n offset = -1;\n const newChildren: RootContent[] = [];\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxJsxFlowElement';\n }\n\n if (child.type === 'mdxTextExpression') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxFlowExpression';\n }\n\n if (child.type === 'text' && /^[\\t\\r\\n ]+$/.test(String(child.value))) {\n // Empty.\n } else {\n newChildren.push(child);\n }\n }\n\n parent.children.splice(index, 1, ...newChildren);\n return index;\n }\n }\n });\n };\n}\n","import type { RootContent } from 'mdast';\n\nexport function flattenNode(node: RootContent): string {\n if ('children' in node) return node.children.map((child) => flattenNode(child)).join('');\n\n if ('value' in node) return node.value;\n\n return '';\n}\n","import { type Processor, type Transformer, unified } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { Code, Node, Root, RootContent } from 'mdast';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport { frontmatter } from 'fumadocs-core/content/md/frontmatter';\nimport type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx';\nimport { remarkHeading } from 'fumadocs-core/mdx-plugins';\nimport { VFile } from 'vfile';\nimport type { Directives } from 'mdast-util-directive';\nimport { remarkMarkAndUnravel } from '@/loaders/mdx/remark-unravel';\nimport { flattenNode } from './mdast-utils';\n\n/**\n * VS Code–style region extraction\n * Adapted from VitePress:\n * https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/snippet.ts\n */\n\n// region marker regexes\nconst REGION_MARKERS = [\n {\n start: /^\\s*\\/\\/\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*\\/\\/\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*<!--\\s*#?region\\b\\s*(.*?)\\s*-->/,\n end: /^\\s*<!--\\s*#?endregion\\b\\s*(.*?)\\s*-->/,\n },\n {\n start: /^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\//,\n end: /^\\s*\\/\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\//,\n },\n {\n start: /^\\s*#[rR]egion\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#[eE]nd ?[rR]egion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*(?:--|::|@?REM)\\s*#region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*(?:--|::|@?REM)\\s*#endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#pragma\\s+region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#pragma\\s+endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*\\(\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\)/,\n end: /^\\s*\\(\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\)/,\n },\n];\n\nfunction dedent(lines: string[]): string {\n const minIndent = lines.reduce((min, line) => {\n const match = line.match(/^(\\s*)\\S/);\n return match ? Math.min(min, match[1].length) : min;\n }, Infinity);\n\n return minIndent === Infinity\n ? lines.join('\\n')\n : lines.map((l) => l.slice(minIndent)).join('\\n');\n}\n\nfunction extractCodeRegion(content: string, regionName: string): string {\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n for (const re of REGION_MARKERS) {\n let match = re.start.exec(lines[i]);\n if (match?.[1] !== regionName) continue;\n\n let depth = 1;\n const extractedLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n match = re.start.exec(lines[j]);\n if (match) {\n depth++;\n continue;\n }\n\n match = re.end.exec(lines[j]);\n if (match) {\n if (match[1] === regionName) depth = 0;\n else if (match[1] === '') depth--;\n else continue;\n\n if (depth > 0) continue;\n return dedent(extractedLines);\n } else {\n extractedLines.push(lines[j]);\n }\n }\n }\n }\n throw new Error(`Region \"${regionName}\" not found`);\n}\n\nexport interface Params {\n lang?: string;\n meta?: string;\n}\n\nconst ElementLikeTypes: ElementLikeContent['type'][] = [\n 'mdxJsxFlowElement',\n 'mdxJsxTextElement',\n 'containerDirective',\n 'textDirective',\n 'leafDirective',\n];\ntype ElementLikeContent = MdxJsxFlowElement | MdxJsxTextElement | Directives;\n\nfunction isElementLike(node: Node): node is ElementLikeContent {\n return ElementLikeTypes.includes(node.type as ElementLikeContent['type']);\n}\n\nfunction parseElementAttributes(\n element: ElementLikeContent,\n): Record<string, string | null | undefined> {\n if (Array.isArray(element.attributes)) {\n const attributes: Record<string, string | null> = {};\n\n for (const attr of element.attributes) {\n if (\n attr.type === 'mdxJsxAttribute' &&\n (typeof attr.value === 'string' || attr.value === null)\n ) {\n attributes[attr.name] = attr.value;\n }\n }\n\n return attributes;\n }\n\n return element.attributes ?? {};\n}\n\nfunction parseSpecifier(specifier: string): {\n file: string;\n section?: string;\n} {\n const idx = specifier.lastIndexOf('#');\n if (idx === -1) return { file: specifier };\n\n return {\n file: specifier.slice(0, idx),\n section: specifier.slice(idx + 1),\n };\n}\n\nfunction extractSection(root: Root, section: string): Root | undefined {\n let nodes: RootContent[] | undefined;\n let capturingHeadingContent = false;\n\n visit(root, (node) => {\n if (node.type === 'heading') {\n if (capturingHeadingContent) {\n return false;\n }\n\n if (node.data?.hProperties?.id === section) {\n capturingHeadingContent = true;\n nodes = [node];\n return 'skip';\n }\n\n return;\n }\n\n if (capturingHeadingContent) {\n nodes?.push(node as RootContent);\n return 'skip';\n }\n\n if (isElementLike(node) && node.name === 'section') {\n const attributes = parseElementAttributes(node);\n\n if (attributes.id === section) {\n nodes = node.children;\n return false;\n }\n }\n });\n\n if (nodes)\n return {\n type: 'root',\n children: nodes,\n };\n}\n\nexport function remarkInclude(this: Processor): Transformer<Root, Root> {\n const TagName = 'include';\n\n const embedContent = async (\n targetPath: string,\n heading: string | undefined,\n params: Params,\n parent: VFile,\n ) => {\n const { _getProcessor = () => this, _compiler } = parent.data;\n let content: string;\n try {\n content = await fs.readFile(targetPath, 'utf-8');\n } catch (e) {\n throw new Error(\n `failed to read file ${targetPath}\\n${e instanceof Error ? e.message : String(e)}`,\n { cause: e },\n );\n }\n\n const ext = path.extname(targetPath);\n _compiler?.addDependency(targetPath);\n // For non-Markdown files, support VS Code–style region extraction\n if (params.lang || (ext !== '.md' && ext !== '.mdx')) {\n const lang = params.lang ?? ext.slice(1);\n let value = content;\n if (heading) {\n value = extractCodeRegion(content, heading.trim());\n }\n return {\n type: 'code',\n lang,\n meta: params.meta,\n value,\n data: {},\n } satisfies Code;\n }\n\n const parser = _getProcessor(ext === '.mdx' ? 'mdx' : 'md');\n const parsed = frontmatter(content);\n const targetFile = new VFile({\n path: targetPath,\n value: parsed.content,\n data: {\n ...parent.data,\n frontmatter: parsed.data as Record<string, unknown>,\n },\n });\n let mdast = parser.parse(targetFile) as Root;\n const baseProcessor = unified().use(remarkMarkAndUnravel);\n\n if (heading) {\n // parse headings before extraction\n const extracted = extractSection(await baseProcessor.use(remarkHeading).run(mdast), heading);\n if (!extracted)\n throw new Error(\n `Cannot find section ${heading} in ${targetPath}, make sure you have encapsulated the section in a <section id=\"${heading}\"> tag, or a :::section directive with remark-directive configured.`,\n );\n\n mdast = extracted;\n } else {\n mdast = await baseProcessor.run(mdast);\n }\n\n await update(mdast, targetFile);\n return mdast;\n };\n\n async function update(tree: Root, file: VFile) {\n const queue: Promise<void>[] = [];\n\n visit(tree, ElementLikeTypes, (_node, _, parent) => {\n const node = _node as ElementLikeContent;\n if (node.name !== TagName) return;\n\n const specifier = flattenNode(node);\n if (specifier.length === 0) return 'skip';\n\n const attributes = parseElementAttributes(node);\n const { file: relativePath, section } = parseSpecifier(specifier);\n const targetPath = path.resolve('cwd' in attributes ? file.cwd : file.dirname!, relativePath);\n\n queue.push(\n embedContent(targetPath, section, attributes, file).then((replace) => {\n Object.assign(parent && parent.type === 'paragraph' ? parent : node, replace);\n }),\n );\n\n return 'skip';\n });\n\n await Promise.all(queue);\n }\n\n return async (tree, file) => {\n await update(tree, file);\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { A as DocCollection, j as DocsCollection } from "../core-C5aAAT92.js";
|
|
2
2
|
import { i as InternalTypeConfig } from "../types-hAduruLB.js";
|
|
3
3
|
import { t as CompiledMDXProperties } from "../build-mdx-YyRh-ZGV.js";
|
|
4
4
|
import { FC, ReactNode } from "react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","names":[],"sources":["../../src/runtime/browser.tsx"],"sourcesContent":["import { type ReactNode, type FC, use } from 'react';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { DocCollection, DocsCollection } from '@/config/define';\nimport type { CompiledMDXProperties } from '@/loaders/mdx/build-mdx';\nimport type { InternalTypeConfig } from './types';\n\ntype CompiledMDXFile<\n Name extends string,\n Frontmatter,\n TC extends InternalTypeConfig,\n> = CompiledMDXProperties<Frontmatter> & TC['DocData'][Name] & Record<string, unknown>;\n\nexport interface ClientLoaderOptions<Doc, Props> {\n /**\n * Loader ID (usually your collection name)\n *\n * The code splitting strategy of frameworks like Tanstack Start may duplicate `createClientLoader()` into different chunks.\n *\n * We use loader ID to share cache between multiple instances of client loader.\n *\n * @defaultValue ''\n */\n id?: string;\n\n component: (loaded: Doc, props: Props) => ReactNode;\n}\n\nexport interface ClientLoader<Doc, Props> {\n preload: (path: string) => Promise<Doc>;\n /**\n * Get a component that renders content with `use()`.\n */\n getComponent: (path: string) => FC<Props>;\n /**\n * Get react nodes that renders content.\n */\n useContent: undefined extends Props\n ? (path: string, props?: Props) => ReactNode\n : (path: string, props: Props) => ReactNode;\n}\n\nexport type BrowserCreate<Config, TC extends InternalTypeConfig> = ReturnType<\n typeof browser<Config, TC>\n>;\n\nexport interface DocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n raw: Record<string, () => Promise<CompiledMDXFile<Name, Frontmatter, TC>>>;\n\n createClientLoader: <Props extends object | undefined = undefined>(\n options: ClientLoaderOptions<CompiledMDXFile<Name, Frontmatter, TC>, Props>,\n ) => ClientLoader<CompiledMDXFile<Name, Frontmatter, TC>, Props>;\n}\n\nexport function browser<Config, TC extends InternalTypeConfig>() {\n return {\n doc<Name extends keyof Config & string>(\n _name: Name,\n glob: Record<string, () => Promise<unknown>>,\n ) {\n const out: DocCollectionEntry = {\n raw: glob as DocCollectionEntry['raw'],\n createClientLoader({ id = _name as string, ...options }) {\n return createClientLoader(this.raw, { id, ...options });\n },\n };\n\n return out as Config[Name] extends DocCollection<infer Schema> | DocsCollection<infer Schema>\n ? DocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>\n : never;\n },\n };\n}\n\nconst loaderStore = new Map<\n string,\n {\n preloaded: Map<string, CompiledMDXProperties>;\n }\n>();\n\nexport function createClientLoader<\n Doc = CompiledMDXProperties,\n Props extends object | undefined = undefined,\n>(\n globEntries: Record<string, () => Promise<Doc>>,\n options: ClientLoaderOptions<Doc, Props>,\n): ClientLoader<Doc, Props> {\n const { id = '', component: useRenderer } = options;\n const renderers: Record<string, FC<Props>> = {};\n const loaders = new Map<string, () => Promise<Doc>>();\n const store = loaderStore.get(id) ?? {\n preloaded: new Map(),\n };\n loaderStore.set(id, store);\n\n for (const k in globEntries) {\n loaders.set(k.startsWith('./') ? k.slice(2) : k, globEntries[k]);\n }\n\n function getLoader(path: string) {\n const loader = loaders.get(path);\n if (!loader)\n throw new Error(`[createClientLoader] ${path} does not exist in available entries`);\n return loader;\n }\n\n function getRenderer(path: string): FC<Props> {\n if (path in renderers) return renderers[path];\n\n let promise: Promise<Doc> | undefined;\n function Renderer(props: Props) {\n let doc = store.preloaded.get(path);\n doc ??= use((promise ??= getLoader(path)()));\n\n return useRenderer(doc, props);\n }\n\n return (renderers[path] = Renderer);\n }\n\n return {\n async preload(path) {\n const loaded = await getLoader(path)();\n store.preloaded.set(path, loaded);\n return loaded;\n },\n getComponent(path) {\n return getRenderer(path);\n },\n useContent(path: string, props: Props & object) {\n const Comp = getRenderer(path);\n return <Comp {...props} />;\n },\n } as ClientLoader<Doc, Props>;\n}\n"],"mappings":";;;AAyDA,SAAgB,UAAiD;AAC/D,QAAO,EACL,IACE,OACA,MACA;AAQA,
|
|
1
|
+
{"version":3,"file":"browser.js","names":[],"sources":["../../src/runtime/browser.tsx"],"sourcesContent":["import { type ReactNode, type FC, use } from 'react';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { DocCollection, DocsCollection } from '@/config/define';\nimport type { CompiledMDXProperties } from '@/loaders/mdx/build-mdx';\nimport type { InternalTypeConfig } from './types';\n\ntype CompiledMDXFile<\n Name extends string,\n Frontmatter,\n TC extends InternalTypeConfig,\n> = CompiledMDXProperties<Frontmatter> & TC['DocData'][Name] & Record<string, unknown>;\n\nexport interface ClientLoaderOptions<Doc, Props> {\n /**\n * Loader ID (usually your collection name)\n *\n * The code splitting strategy of frameworks like Tanstack Start may duplicate `createClientLoader()` into different chunks.\n *\n * We use loader ID to share cache between multiple instances of client loader.\n *\n * @defaultValue ''\n */\n id?: string;\n\n component: (loaded: Doc, props: Props) => ReactNode;\n}\n\nexport interface ClientLoader<Doc, Props> {\n preload: (path: string) => Promise<Doc>;\n /**\n * Get a component that renders content with `use()`.\n */\n getComponent: (path: string) => FC<Props>;\n /**\n * Get react nodes that renders content.\n */\n useContent: undefined extends Props\n ? (path: string, props?: Props) => ReactNode\n : (path: string, props: Props) => ReactNode;\n}\n\nexport type BrowserCreate<Config, TC extends InternalTypeConfig> = ReturnType<\n typeof browser<Config, TC>\n>;\n\nexport interface DocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n raw: Record<string, () => Promise<CompiledMDXFile<Name, Frontmatter, TC>>>;\n\n createClientLoader: <Props extends object | undefined = undefined>(\n options: ClientLoaderOptions<CompiledMDXFile<Name, Frontmatter, TC>, Props>,\n ) => ClientLoader<CompiledMDXFile<Name, Frontmatter, TC>, Props>;\n}\n\nexport function browser<Config, TC extends InternalTypeConfig>() {\n return {\n doc<Name extends keyof Config & string>(\n _name: Name,\n glob: Record<string, () => Promise<unknown>>,\n ) {\n const out: DocCollectionEntry = {\n raw: glob as DocCollectionEntry['raw'],\n createClientLoader({ id = _name as string, ...options }) {\n return createClientLoader(this.raw, { id, ...options });\n },\n };\n\n return out as Config[Name] extends DocCollection<infer Schema> | DocsCollection<infer Schema>\n ? DocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>\n : never;\n },\n };\n}\n\nconst loaderStore = new Map<\n string,\n {\n preloaded: Map<string, CompiledMDXProperties>;\n }\n>();\n\nexport function createClientLoader<\n Doc = CompiledMDXProperties,\n Props extends object | undefined = undefined,\n>(\n globEntries: Record<string, () => Promise<Doc>>,\n options: ClientLoaderOptions<Doc, Props>,\n): ClientLoader<Doc, Props> {\n const { id = '', component: useRenderer } = options;\n const renderers: Record<string, FC<Props>> = {};\n const loaders = new Map<string, () => Promise<Doc>>();\n const store = loaderStore.get(id) ?? {\n preloaded: new Map(),\n };\n loaderStore.set(id, store);\n\n for (const k in globEntries) {\n loaders.set(k.startsWith('./') ? k.slice(2) : k, globEntries[k]);\n }\n\n function getLoader(path: string) {\n const loader = loaders.get(path);\n if (!loader)\n throw new Error(`[createClientLoader] ${path} does not exist in available entries`);\n return loader;\n }\n\n function getRenderer(path: string): FC<Props> {\n if (path in renderers) return renderers[path];\n\n let promise: Promise<Doc> | undefined;\n function Renderer(props: Props) {\n let doc = store.preloaded.get(path);\n doc ??= use((promise ??= getLoader(path)()));\n\n return useRenderer(doc, props);\n }\n\n return (renderers[path] = Renderer);\n }\n\n return {\n async preload(path) {\n const loaded = await getLoader(path)();\n store.preloaded.set(path, loaded);\n return loaded;\n },\n getComponent(path) {\n return getRenderer(path);\n },\n useContent(path: string, props: Props & object) {\n const Comp = getRenderer(path);\n return <Comp {...props} />;\n },\n } as ClientLoader<Doc, Props>;\n}\n"],"mappings":";;;AAyDA,SAAgB,UAAiD;AAC/D,QAAO,EACL,IACE,OACA,MACA;AAQA,SAAO;GANL,KAAK;GACL,mBAAmB,EAAE,KAAK,OAAiB,GAAG,WAAW;AACvD,WAAO,mBAAmB,KAAK,KAAK;KAAE;KAAI,GAAG;KAAS,CAAC;;GAIjD;IAIb;;AAGH,MAAM,8BAAc,IAAI,KAKrB;AAEH,SAAgB,mBAId,aACA,SAC0B;CAC1B,MAAM,EAAE,KAAK,IAAI,WAAW,gBAAgB;CAC5C,MAAM,YAAuC,EAAE;CAC/C,MAAM,0BAAU,IAAI,KAAiC;CACrD,MAAM,QAAQ,YAAY,IAAI,GAAG,IAAI,EACnC,2BAAW,IAAI,KAAK,EACrB;AACD,aAAY,IAAI,IAAI,MAAM;AAE1B,MAAK,MAAM,KAAK,YACd,SAAQ,IAAI,EAAE,WAAW,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,YAAY,GAAG;CAGlE,SAAS,UAAU,MAAc;EAC/B,MAAM,SAAS,QAAQ,IAAI,KAAK;AAChC,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,wBAAwB,KAAK,sCAAsC;AACrF,SAAO;;CAGT,SAAS,YAAY,MAAyB;AAC5C,MAAI,QAAQ,UAAW,QAAO,UAAU;EAExC,IAAI;EACJ,SAAS,SAAS,OAAc;GAC9B,IAAI,MAAM,MAAM,UAAU,IAAI,KAAK;AACnC,WAAQ,IAAK,YAAY,UAAU,KAAK,EAAE,CAAE;AAE5C,UAAO,YAAY,KAAK,MAAM;;AAGhC,SAAQ,UAAU,QAAQ;;AAG5B,QAAO;EACL,MAAM,QAAQ,MAAM;GAClB,MAAM,SAAS,MAAM,UAAU,KAAK,EAAE;AACtC,SAAM,UAAU,IAAI,MAAM,OAAO;AACjC,UAAO;;EAET,aAAa,MAAM;AACjB,UAAO,YAAY,KAAK;;EAE1B,WAAW,MAAc,OAAuB;AAE9C,UAAO,oBADM,YAAY,KACb,EAAL,EAAM,GAAI,OAAS,CAAA;;EAE7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { A as DocCollection, g as AsyncDocsCollectionEntry, h as AsyncDocCollectionEntry, j as DocsCollection, r as CoreOptions, x as ServerOptions } from "../core-C5aAAT92.js";
|
|
2
2
|
import { i as InternalTypeConfig, r as FileInfo } from "../types-hAduruLB.js";
|
|
3
3
|
import * as _$_standard_schema_spec0 from "@standard-schema/spec";
|
|
4
4
|
import * as _$fumadocs_core_source0 from "fumadocs-core/source";
|
package/dist/runtime/dynamic.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as buildConfig } from "../build-DPafU2lu.js";
|
|
2
|
-
import { n as createCore } from "../core-
|
|
2
|
+
import { n as createCore } from "../core-Wd5WdPN4.js";
|
|
3
3
|
import { t as buildMDX } from "../build-mdx-82nyqL4J.js";
|
|
4
4
|
import { server } from "./server.js";
|
|
5
5
|
import { frontmatter } from "fumadocs-core/content/md/frontmatter";
|
package/dist/runtime/server.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as toFumadocsSource, S as server, _ as DocCollectionEntry, b as ServerCreate, g as AsyncDocsCollectionEntry, h as AsyncDocCollectionEntry, v as DocsCollectionEntry, x as ServerOptions, y as MetaCollectionEntry } from "../core-
|
|
1
|
+
import { C as toFumadocsSource, S as server, _ as DocCollectionEntry, b as ServerCreate, g as AsyncDocsCollectionEntry, h as AsyncDocCollectionEntry, v as DocsCollectionEntry, x as ServerOptions, y as MetaCollectionEntry } from "../core-C5aAAT92.js";
|
|
2
2
|
export { AsyncDocCollectionEntry, AsyncDocsCollectionEntry, DocCollectionEntry, DocsCollectionEntry, MetaCollectionEntry, ServerCreate, ServerOptions, server, toFumadocsSource };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","names":["path"],"sources":["../../src/runtime/server.ts"],"sourcesContent":["import type { MetaData, PageData, Source, VirtualFile } from 'fumadocs-core/source';\nimport * as path from 'node:path';\nimport type { DocCollection, DocsCollection, MetaCollection } from '@/config';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { CompiledMDXProperties } from '@/loaders/mdx/build-mdx';\nimport type { InternalTypeConfig, DocData, DocMethods, FileInfo, MetaMethods } from './types';\n\nexport type MetaCollectionEntry<Data> = Data & MetaMethods;\n\nexport type DocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> = DocData & DocMethods & Frontmatter & TC['DocData'][Name];\n\nexport type AsyncDocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> = {\n load: () => Promise<DocData & TC['DocData'][Name]>;\n} & DocMethods &\n Frontmatter;\n\nexport interface DocsCollectionEntry<\n Name extends string = string,\n Frontmatter extends PageData = PageData,\n Meta extends MetaData = MetaData,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n docs: DocCollectionEntry<Name, Frontmatter, TC>[];\n meta: MetaCollectionEntry<Meta>[];\n toFumadocsSource: () => Source<{\n pageData: DocCollectionEntry<Name, Frontmatter, TC>;\n metaData: MetaCollectionEntry<Meta>;\n }>;\n}\n\nexport interface AsyncDocsCollectionEntry<\n Name extends string = string,\n Frontmatter extends PageData = PageData,\n Meta extends MetaData = MetaData,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n docs: AsyncDocCollectionEntry<Name, Frontmatter, TC>[];\n meta: MetaCollectionEntry<Meta>[];\n toFumadocsSource: () => Source<{\n pageData: AsyncDocCollectionEntry<Name, Frontmatter, TC>;\n metaData: MetaCollectionEntry<Meta>;\n }>;\n}\n\ntype AwaitableGlobEntries<T> = Record<string, T | (() => Promise<T>)>;\n\nexport type ServerCreate<Config, TC extends InternalTypeConfig = InternalTypeConfig> = ReturnType<\n typeof server<Config, TC>\n>;\n\nexport interface ServerOptions {\n doc?: {\n passthroughs?: string[];\n };\n}\n\nexport function server<Config, TC extends InternalTypeConfig>(options: ServerOptions = {}) {\n const { doc: { passthroughs: docPassthroughs = [] } = {} } = options;\n\n function fileInfo(file: string, base: string): FileInfo {\n if (file.startsWith('./')) {\n file = file.slice(2);\n }\n\n return {\n path: file,\n fullPath: path.join(base, file),\n };\n }\n\n function mapDocData(entry: CompiledMDXProperties): DocData {\n const data: DocData = {\n body: entry.default,\n toc: entry.toc,\n structuredData: entry.structuredData,\n _exports: entry as unknown as Record<string, unknown>,\n };\n\n for (const key of docPassthroughs) {\n // @ts-expect-error -- handle passthrough properties\n data[key] = entry[key];\n }\n\n return data;\n }\n\n return {\n async doc<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n glob: AwaitableGlobEntries<unknown>,\n ) {\n const out = await Promise.all(\n Object.entries(glob).map(async ([k, v]) => {\n const data: CompiledMDXProperties = typeof v === 'function' ? await v() : v;\n\n return {\n ...mapDocData(data),\n ...(data.frontmatter as object),\n ...createDocMethods(fileInfo(k, base), () => data),\n } satisfies DocCollectionEntry;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | DocCollection<infer Schema>\n | DocsCollection<infer Schema>\n ? DocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>[]\n : never;\n },\n async docLazy<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n head: AwaitableGlobEntries<unknown>,\n body: Record<string, () => Promise<unknown>>,\n ) {\n const out = await Promise.all(\n Object.entries(head).map(async ([k, v]) => {\n const data = typeof v === 'function' ? await v() : v;\n const content = body[k] as () => Promise<CompiledMDXProperties>;\n\n return {\n ...data,\n ...createDocMethods(fileInfo(k, base), content),\n async load() {\n return mapDocData(await content());\n },\n } satisfies AsyncDocCollectionEntry;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | DocCollection<infer Schema>\n | DocsCollection<infer Schema>\n ? AsyncDocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>[]\n : never;\n },\n async meta<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n glob: AwaitableGlobEntries<unknown>,\n ) {\n const out = await Promise.all(\n Object.entries(glob).map(async ([k, v]) => {\n const data = typeof v === 'function' ? await v() : v;\n\n return {\n info: fileInfo(k, base),\n ...data,\n } satisfies MetaCollectionEntry<unknown>;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | MetaCollection<infer Schema>\n | DocsCollection<StandardSchemaV1, infer Schema>\n ? MetaCollectionEntry<StandardSchemaV1.InferOutput<Schema>>[]\n : never;\n },\n\n async docs<Name extends keyof Config & string>(\n name: Name,\n base: string,\n metaGlob: AwaitableGlobEntries<unknown>,\n docGlob: AwaitableGlobEntries<unknown>,\n ) {\n const entry = {\n docs: await this.doc(name, base, docGlob),\n meta: await this.meta(name, base, metaGlob),\n toFumadocsSource() {\n return toFumadocsSource(this.docs, this.meta);\n },\n } satisfies DocsCollectionEntry;\n\n return entry as Config[Name] extends DocsCollection<infer Page, infer Meta>\n ? StandardSchemaV1.InferOutput<Page> extends PageData\n ? StandardSchemaV1.InferOutput<Meta> extends MetaData\n ? DocsCollectionEntry<\n Name,\n StandardSchemaV1.InferOutput<Page>,\n StandardSchemaV1.InferOutput<Meta>,\n TC\n >\n : never\n : never\n : never;\n },\n async docsLazy<Name extends keyof Config & string>(\n name: Name,\n base: string,\n metaGlob: AwaitableGlobEntries<unknown>,\n docHeadGlob: AwaitableGlobEntries<unknown>,\n docBodyGlob: Record<string, () => Promise<unknown>>,\n ) {\n const entry = {\n docs: await this.docLazy(name, base, docHeadGlob, docBodyGlob),\n meta: await this.meta(name, base, metaGlob),\n toFumadocsSource() {\n return toFumadocsSource(this.docs, this.meta);\n },\n } satisfies AsyncDocsCollectionEntry;\n\n return entry as Config[Name] extends DocsCollection<infer Page, infer Meta>\n ? StandardSchemaV1.InferOutput<Page> extends PageData\n ? StandardSchemaV1.InferOutput<Meta> extends MetaData\n ? AsyncDocsCollectionEntry<\n Name,\n StandardSchemaV1.InferOutput<Page>,\n StandardSchemaV1.InferOutput<Meta>,\n TC\n >\n : never\n : never\n : never;\n },\n };\n}\n\nexport function toFumadocsSource<\n Page extends DocMethods & PageData,\n Meta extends MetaMethods & MetaData,\n>(\n pages: Page[],\n metas: Meta[],\n): Source<{\n pageData: Page;\n metaData: Meta;\n}> {\n const files: VirtualFile<{\n pageData: Page;\n metaData: Meta;\n }>[] = [];\n\n for (const entry of pages) {\n files.push({\n type: 'page',\n path: entry.info.path,\n absolutePath: entry.info.fullPath,\n data: entry,\n });\n }\n\n for (const entry of metas) {\n files.push({\n type: 'meta',\n path: entry.info.path,\n absolutePath: entry.info.fullPath,\n data: entry,\n });\n }\n\n return {\n files,\n };\n}\n\nfunction createDocMethods(\n info: FileInfo,\n load: () => CompiledMDXProperties | Promise<CompiledMDXProperties>,\n): DocMethods {\n return {\n info,\n async getText(type) {\n if (type === 'raw') {\n const fs = await import('node:fs/promises');\n\n return await fs.readFile(info.fullPath, 'utf-8');\n }\n\n const data = await load();\n if (typeof data._markdown !== 'string')\n throw new Error(\n \"getText('processed') requires `includeProcessedMarkdown` to be enabled in your collection config.\",\n );\n return data._markdown;\n },\n async getMDAST() {\n const data = await load();\n\n if (!data._mdast)\n throw new Error(\n 'getMDAST() requires `includeMDAST` to be enabled in your collection config.',\n );\n return JSON.parse(data._mdast);\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","names":["path"],"sources":["../../src/runtime/server.ts"],"sourcesContent":["import type { MetaData, PageData, Source, VirtualFile } from 'fumadocs-core/source';\nimport * as path from 'node:path';\nimport type { DocCollection, DocsCollection, MetaCollection } from '@/config';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { CompiledMDXProperties } from '@/loaders/mdx/build-mdx';\nimport type { InternalTypeConfig, DocData, DocMethods, FileInfo, MetaMethods } from './types';\n\nexport type MetaCollectionEntry<Data> = Data & MetaMethods;\n\nexport type DocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> = DocData & DocMethods & Frontmatter & TC['DocData'][Name];\n\nexport type AsyncDocCollectionEntry<\n Name extends string = string,\n Frontmatter = unknown,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> = {\n load: () => Promise<DocData & TC['DocData'][Name]>;\n} & DocMethods &\n Frontmatter;\n\nexport interface DocsCollectionEntry<\n Name extends string = string,\n Frontmatter extends PageData = PageData,\n Meta extends MetaData = MetaData,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n docs: DocCollectionEntry<Name, Frontmatter, TC>[];\n meta: MetaCollectionEntry<Meta>[];\n toFumadocsSource: () => Source<{\n pageData: DocCollectionEntry<Name, Frontmatter, TC>;\n metaData: MetaCollectionEntry<Meta>;\n }>;\n}\n\nexport interface AsyncDocsCollectionEntry<\n Name extends string = string,\n Frontmatter extends PageData = PageData,\n Meta extends MetaData = MetaData,\n TC extends InternalTypeConfig = InternalTypeConfig,\n> {\n docs: AsyncDocCollectionEntry<Name, Frontmatter, TC>[];\n meta: MetaCollectionEntry<Meta>[];\n toFumadocsSource: () => Source<{\n pageData: AsyncDocCollectionEntry<Name, Frontmatter, TC>;\n metaData: MetaCollectionEntry<Meta>;\n }>;\n}\n\ntype AwaitableGlobEntries<T> = Record<string, T | (() => Promise<T>)>;\n\nexport type ServerCreate<Config, TC extends InternalTypeConfig = InternalTypeConfig> = ReturnType<\n typeof server<Config, TC>\n>;\n\nexport interface ServerOptions {\n doc?: {\n passthroughs?: string[];\n };\n}\n\nexport function server<Config, TC extends InternalTypeConfig>(options: ServerOptions = {}) {\n const { doc: { passthroughs: docPassthroughs = [] } = {} } = options;\n\n function fileInfo(file: string, base: string): FileInfo {\n if (file.startsWith('./')) {\n file = file.slice(2);\n }\n\n return {\n path: file,\n fullPath: path.join(base, file),\n };\n }\n\n function mapDocData(entry: CompiledMDXProperties): DocData {\n const data: DocData = {\n body: entry.default,\n toc: entry.toc,\n structuredData: entry.structuredData,\n _exports: entry as unknown as Record<string, unknown>,\n };\n\n for (const key of docPassthroughs) {\n // @ts-expect-error -- handle passthrough properties\n data[key] = entry[key];\n }\n\n return data;\n }\n\n return {\n async doc<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n glob: AwaitableGlobEntries<unknown>,\n ) {\n const out = await Promise.all(\n Object.entries(glob).map(async ([k, v]) => {\n const data: CompiledMDXProperties = typeof v === 'function' ? await v() : v;\n\n return {\n ...mapDocData(data),\n ...(data.frontmatter as object),\n ...createDocMethods(fileInfo(k, base), () => data),\n } satisfies DocCollectionEntry;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | DocCollection<infer Schema>\n | DocsCollection<infer Schema>\n ? DocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>[]\n : never;\n },\n async docLazy<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n head: AwaitableGlobEntries<unknown>,\n body: Record<string, () => Promise<unknown>>,\n ) {\n const out = await Promise.all(\n Object.entries(head).map(async ([k, v]) => {\n const data = typeof v === 'function' ? await v() : v;\n const content = body[k] as () => Promise<CompiledMDXProperties>;\n\n return {\n ...data,\n ...createDocMethods(fileInfo(k, base), content),\n async load() {\n return mapDocData(await content());\n },\n } satisfies AsyncDocCollectionEntry;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | DocCollection<infer Schema>\n | DocsCollection<infer Schema>\n ? AsyncDocCollectionEntry<Name, StandardSchemaV1.InferOutput<Schema>, TC>[]\n : never;\n },\n async meta<Name extends keyof Config & string>(\n _name: Name,\n base: string,\n glob: AwaitableGlobEntries<unknown>,\n ) {\n const out = await Promise.all(\n Object.entries(glob).map(async ([k, v]) => {\n const data = typeof v === 'function' ? await v() : v;\n\n return {\n info: fileInfo(k, base),\n ...data,\n } satisfies MetaCollectionEntry<unknown>;\n }),\n );\n\n return out as unknown as Config[Name] extends\n | MetaCollection<infer Schema>\n | DocsCollection<StandardSchemaV1, infer Schema>\n ? MetaCollectionEntry<StandardSchemaV1.InferOutput<Schema>>[]\n : never;\n },\n\n async docs<Name extends keyof Config & string>(\n name: Name,\n base: string,\n metaGlob: AwaitableGlobEntries<unknown>,\n docGlob: AwaitableGlobEntries<unknown>,\n ) {\n const entry = {\n docs: await this.doc(name, base, docGlob),\n meta: await this.meta(name, base, metaGlob),\n toFumadocsSource() {\n return toFumadocsSource(this.docs, this.meta);\n },\n } satisfies DocsCollectionEntry;\n\n return entry as Config[Name] extends DocsCollection<infer Page, infer Meta>\n ? StandardSchemaV1.InferOutput<Page> extends PageData\n ? StandardSchemaV1.InferOutput<Meta> extends MetaData\n ? DocsCollectionEntry<\n Name,\n StandardSchemaV1.InferOutput<Page>,\n StandardSchemaV1.InferOutput<Meta>,\n TC\n >\n : never\n : never\n : never;\n },\n async docsLazy<Name extends keyof Config & string>(\n name: Name,\n base: string,\n metaGlob: AwaitableGlobEntries<unknown>,\n docHeadGlob: AwaitableGlobEntries<unknown>,\n docBodyGlob: Record<string, () => Promise<unknown>>,\n ) {\n const entry = {\n docs: await this.docLazy(name, base, docHeadGlob, docBodyGlob),\n meta: await this.meta(name, base, metaGlob),\n toFumadocsSource() {\n return toFumadocsSource(this.docs, this.meta);\n },\n } satisfies AsyncDocsCollectionEntry;\n\n return entry as Config[Name] extends DocsCollection<infer Page, infer Meta>\n ? StandardSchemaV1.InferOutput<Page> extends PageData\n ? StandardSchemaV1.InferOutput<Meta> extends MetaData\n ? AsyncDocsCollectionEntry<\n Name,\n StandardSchemaV1.InferOutput<Page>,\n StandardSchemaV1.InferOutput<Meta>,\n TC\n >\n : never\n : never\n : never;\n },\n };\n}\n\nexport function toFumadocsSource<\n Page extends DocMethods & PageData,\n Meta extends MetaMethods & MetaData,\n>(\n pages: Page[],\n metas: Meta[],\n): Source<{\n pageData: Page;\n metaData: Meta;\n}> {\n const files: VirtualFile<{\n pageData: Page;\n metaData: Meta;\n }>[] = [];\n\n for (const entry of pages) {\n files.push({\n type: 'page',\n path: entry.info.path,\n absolutePath: entry.info.fullPath,\n data: entry,\n });\n }\n\n for (const entry of metas) {\n files.push({\n type: 'meta',\n path: entry.info.path,\n absolutePath: entry.info.fullPath,\n data: entry,\n });\n }\n\n return {\n files,\n };\n}\n\nfunction createDocMethods(\n info: FileInfo,\n load: () => CompiledMDXProperties | Promise<CompiledMDXProperties>,\n): DocMethods {\n return {\n info,\n async getText(type) {\n if (type === 'raw') {\n const fs = await import('node:fs/promises');\n\n return await fs.readFile(info.fullPath, 'utf-8');\n }\n\n const data = await load();\n if (typeof data._markdown !== 'string')\n throw new Error(\n \"getText('processed') requires `includeProcessedMarkdown` to be enabled in your collection config.\",\n );\n return data._markdown;\n },\n async getMDAST() {\n const data = await load();\n\n if (!data._mdast)\n throw new Error(\n 'getMDAST() requires `includeMDAST` to be enabled in your collection config.',\n );\n return JSON.parse(data._mdast);\n },\n };\n}\n"],"mappings":";;AAgEA,SAAgB,OAA8C,UAAyB,EAAE,EAAE;CACzF,MAAM,EAAE,KAAK,EAAE,cAAc,kBAAkB,EAAE,KAAK,EAAE,KAAK;CAE7D,SAAS,SAAS,MAAc,MAAwB;AACtD,MAAI,KAAK,WAAW,KAAK,CACvB,QAAO,KAAK,MAAM,EAAE;AAGtB,SAAO;GACL,MAAM;GACN,UAAUA,OAAK,KAAK,MAAM,KAAK;GAChC;;CAGH,SAAS,WAAW,OAAuC;EACzD,MAAM,OAAgB;GACpB,MAAM,MAAM;GACZ,KAAK,MAAM;GACX,gBAAgB,MAAM;GACtB,UAAU;GACX;AAED,OAAK,MAAM,OAAO,gBAEhB,MAAK,OAAO,MAAM;AAGpB,SAAO;;AAGT,QAAO;EACL,MAAM,IACJ,OACA,MACA,MACA;AAaA,UAAO,MAZW,QAAQ,IACxB,OAAO,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO;IACzC,MAAM,OAA8B,OAAO,MAAM,aAAa,MAAM,GAAG,GAAG;AAE1E,WAAO;KACL,GAAG,WAAW,KAAK;KACnB,GAAI,KAAK;KACT,GAAG,iBAAiB,SAAS,GAAG,KAAK,QAAQ,KAAK;KACnD;KACD,CACH;;EAQH,MAAM,QACJ,OACA,MACA,MACA,MACA;AAgBA,UAAO,MAfW,QAAQ,IACxB,OAAO,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO;IACzC,MAAM,OAAO,OAAO,MAAM,aAAa,MAAM,GAAG,GAAG;IACnD,MAAM,UAAU,KAAK;AAErB,WAAO;KACL,GAAG;KACH,GAAG,iBAAiB,SAAS,GAAG,KAAK,EAAE,QAAQ;KAC/C,MAAM,OAAO;AACX,aAAO,WAAW,MAAM,SAAS,CAAC;;KAErC;KACD,CACH;;EAQH,MAAM,KACJ,OACA,MACA,MACA;AAYA,UAAO,MAXW,QAAQ,IACxB,OAAO,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO;IACzC,MAAM,OAAO,OAAO,MAAM,aAAa,MAAM,GAAG,GAAG;AAEnD,WAAO;KACL,MAAM,SAAS,GAAG,KAAK;KACvB,GAAG;KACJ;KACD,CACH;;EASH,MAAM,KACJ,MACA,MACA,UACA,SACA;AASA,UAAO;IAPL,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,QAAQ;IACzC,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,SAAS;IAC3C,mBAAmB;AACjB,YAAO,iBAAiB,KAAK,MAAM,KAAK,KAAK;;IAIrC;;EAad,MAAM,SACJ,MACA,MACA,UACA,aACA,aACA;AASA,UAAO;IAPL,MAAM,MAAM,KAAK,QAAQ,MAAM,MAAM,aAAa,YAAY;IAC9D,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,SAAS;IAC3C,mBAAmB;AACjB,YAAO,iBAAiB,KAAK,MAAM,KAAK,KAAK;;IAIrC;;EAaf;;AAGH,SAAgB,iBAId,OACA,OAIC;CACD,MAAM,QAGC,EAAE;AAET,MAAK,MAAM,SAAS,MAClB,OAAM,KAAK;EACT,MAAM;EACN,MAAM,MAAM,KAAK;EACjB,cAAc,MAAM,KAAK;EACzB,MAAM;EACP,CAAC;AAGJ,MAAK,MAAM,SAAS,MAClB,OAAM,KAAK;EACT,MAAM;EACN,MAAM,MAAM,KAAK;EACjB,cAAc,MAAM,KAAK;EACzB,MAAM;EACP,CAAC;AAGJ,QAAO,EACL,OACD;;AAGH,SAAS,iBACP,MACA,MACY;AACZ,QAAO;EACL;EACA,MAAM,QAAQ,MAAM;AAClB,OAAI,SAAS,MAGX,QAAO,OAAM,MAFI,OAAO,qBAER,SAAS,KAAK,UAAU,QAAQ;GAGlD,MAAM,OAAO,MAAM,MAAM;AACzB,OAAI,OAAO,KAAK,cAAc,SAC5B,OAAM,IAAI,MACR,oGACD;AACH,UAAO,KAAK;;EAEd,MAAM,WAAW;GACf,MAAM,OAAO,MAAM,MAAM;AAEzB,OAAI,CAAC,KAAK,OACR,OAAM,IAAI,MACR,8EACD;AACH,UAAO,KAAK,MAAM,KAAK,OAAO;;EAEjC"}
|
package/dist/vite/index.d.ts
CHANGED
package/dist/vite/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as createMdxLoader } from "../mdx-D2vcWdqv.js";
|
|
2
2
|
import { t as buildConfig } from "../build-DPafU2lu.js";
|
|
3
|
-
import { n as createCore, r as ValidationError, t as _Defaults } from "../core-
|
|
4
|
-
import { a as createIntegratedConfigLoader, r as toVite } from "../adapter-
|
|
3
|
+
import { n as createCore, r as ValidationError, t as _Defaults } from "../core-Wd5WdPN4.js";
|
|
4
|
+
import { a as createIntegratedConfigLoader, r as toVite } from "../adapter-DVxULZiU.js";
|
|
5
5
|
import { t as createMetaLoader } from "../meta-B6guI74I.js";
|
|
6
6
|
import { t as indexFile } from "../index-file-eVlUbKSO.js";
|
|
7
7
|
import { mergeConfig } from "vite";
|
package/dist/webpack/mdx.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as createMdxLoader } from "../mdx-D2vcWdqv.js";
|
|
2
|
-
import { i as toWebpack, o as createStandaloneConfigLoader } from "../adapter-
|
|
3
|
-
import { t as getCore } from "../webpack-
|
|
2
|
+
import { i as toWebpack, o as createStandaloneConfigLoader } from "../adapter-DVxULZiU.js";
|
|
3
|
+
import { t as getCore } from "../webpack-CBlMzMlJ.js";
|
|
4
4
|
//#region src/webpack/mdx.ts
|
|
5
5
|
let instance;
|
|
6
6
|
async function loader(source, callback) {
|
package/dist/webpack/meta.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as toWebpack, o as createStandaloneConfigLoader } from "../adapter-
|
|
1
|
+
import { i as toWebpack, o as createStandaloneConfigLoader } from "../adapter-DVxULZiU.js";
|
|
2
2
|
import { t as createMetaLoader } from "../meta-B6guI74I.js";
|
|
3
|
-
import { t as getCore } from "../webpack-
|
|
3
|
+
import { t as getCore } from "../webpack-CBlMzMlJ.js";
|
|
4
4
|
//#region src/webpack/meta.ts
|
|
5
5
|
let instance;
|
|
6
6
|
async function loader(source, callback) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as createCore } from "./core-
|
|
1
|
+
import { n as createCore } from "./core-Wd5WdPN4.js";
|
|
2
2
|
//#region src/webpack/index.ts
|
|
3
3
|
let core;
|
|
4
4
|
function getCore(options) {
|
|
@@ -11,4 +11,4 @@ function getCore(options) {
|
|
|
11
11
|
//#endregion
|
|
12
12
|
export { getCore as t };
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=webpack-
|
|
14
|
+
//# sourceMappingURL=webpack-CBlMzMlJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webpack-
|
|
1
|
+
{"version":3,"file":"webpack-CBlMzMlJ.js","names":[],"sources":["../src/webpack/index.ts"],"sourcesContent":["import { type Core, createCore } from '@/core';\n\nexport interface WebpackLoaderOptions {\n absoluteCompiledConfigPath: string;\n configPath: string;\n outDir: string;\n isDev: boolean;\n}\n\nlet core: Core;\n\nexport function getCore(options: WebpackLoaderOptions) {\n return (core ??= createCore({\n environment: 'webpack',\n outDir: options.outDir,\n configPath: options.configPath,\n }));\n}\n"],"mappings":";;AASA,IAAI;AAEJ,SAAgB,QAAQ,SAA+B;AACrD,QAAQ,SAAS,WAAW;EAC1B,aAAa;EACb,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-mdx",
|
|
3
|
-
"version": "14.3.
|
|
3
|
+
"version": "14.3.2",
|
|
4
4
|
"description": "The built-in source for Fumadocs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Docs",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"zod": "^4.3.6"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@types/bun": "^1.3.
|
|
65
|
+
"@types/bun": "^1.3.13",
|
|
66
66
|
"@types/js-yaml": "^4.0.9",
|
|
67
67
|
"@types/mdast": "^4.0.4",
|
|
68
68
|
"@types/mdx": "^2.0.13",
|
|
@@ -70,16 +70,16 @@
|
|
|
70
70
|
"@types/picomatch": "^4.0.3",
|
|
71
71
|
"@types/react": "^19.2.14",
|
|
72
72
|
"mdast-util-directive": "^3.1.0",
|
|
73
|
-
"next": "16.2.
|
|
73
|
+
"next": "16.2.4",
|
|
74
74
|
"react": "^19.2.5",
|
|
75
75
|
"remark": "^15.0.1",
|
|
76
76
|
"remark-directive": "^4.0.0",
|
|
77
77
|
"remark-mdx": "^3.1.1",
|
|
78
|
-
"rolldown": "1.0.0-rc.
|
|
79
|
-
"tsdown": "0.21.
|
|
80
|
-
"vite": "^8.0.
|
|
81
|
-
"webpack": "^5.106.
|
|
82
|
-
"fumadocs-core": "16.8.
|
|
78
|
+
"rolldown": "1.0.0-rc.17",
|
|
79
|
+
"tsdown": "0.21.10",
|
|
80
|
+
"vite": "^8.0.10",
|
|
81
|
+
"webpack": "^5.106.2",
|
|
82
|
+
"fumadocs-core": "16.8.5",
|
|
83
83
|
"tsconfig": "0.0.0"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-DzcubDJt.d.ts","names":[],"sources":["../src/config/preset.ts","../../core/dist/source/schema.js","../src/loaders/mdx/remark-postprocess.ts","../src/config/define.ts","../src/config/build.ts","../src/loaders/mdx/remark-include.ts","../src/runtime/server.ts","../src/plugins/index-file.ts","../src/core.ts"],"mappings":"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"}
|