fuma-content 1.1.3 → 1.1.4
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/{async-cache-CBEZB25o.d.ts → async-cache-BVuJiIDT.d.ts} +1 -1
- package/dist/{async-cache-CBEZB25o.d.ts.map → async-cache-BVuJiIDT.d.ts.map} +1 -1
- package/dist/{build-mdx-DkAvzRNg.d.ts → build-mdx-DRqbcE1d.d.ts} +10 -4
- package/dist/build-mdx-DRqbcE1d.d.ts.map +1 -0
- package/dist/{build-mdx-oug7zk0w.js → build-mdx-DgzggXIL.js} +6 -6
- package/dist/build-mdx-DgzggXIL.js.map +1 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.js +1 -1
- package/dist/{bun-cxKGeSx6.js → bun-Be5pgXW_.js} +4 -3
- package/dist/bun-Be5pgXW_.js.map +1 -0
- package/dist/{code-generator-C_Gu9y3h.js → code-generator-CHcOrCeM.js} +2 -4
- package/dist/code-generator-CHcOrCeM.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +2 -2
- package/dist/collections/data.d.ts +2 -2
- package/dist/collections/data.js +3 -3
- package/dist/collections/fs.d.ts +1 -1
- package/dist/collections/index.d.ts +1 -1
- package/dist/collections/json/loader-webpack.d.ts +2 -2
- package/dist/collections/json/loader-webpack.js +2 -2
- package/dist/collections/mdx/loader-webpack.d.ts +2 -2
- package/dist/collections/mdx/loader-webpack.js +2 -2
- package/dist/collections/mdx/react.d.ts +2 -3
- package/dist/collections/mdx/react.d.ts.map +1 -1
- package/dist/collections/mdx/react.js +2 -1
- package/dist/collections/mdx/react.js.map +1 -1
- package/dist/collections/mdx/runtime-browser.d.ts +3 -4
- package/dist/collections/mdx/runtime-browser.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +2 -3
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +9 -4
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +2 -3
- package/dist/collections/mdx/runtime.d.ts.map +1 -1
- package/dist/collections/mdx.d.ts +2 -3
- package/dist/collections/mdx.d.ts.map +1 -1
- package/dist/collections/mdx.js +24 -26
- package/dist/collections/mdx.js.map +1 -1
- package/dist/collections/obsidian.d.ts +10 -0
- package/dist/collections/obsidian.d.ts.map +1 -0
- package/dist/collections/obsidian.js +497 -0
- package/dist/collections/obsidian.js.map +1 -0
- package/dist/collections/runtime/file-store.d.ts +1 -1
- package/dist/collections/runtime/store.d.ts +1 -1
- package/dist/collections/yaml/loader-webpack.d.ts +2 -2
- package/dist/collections/yaml/loader-webpack.js +2 -2
- package/dist/config/index.d.ts +1 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/{core-DmbQk8Z2.js → core-BuUsOElL.js} +2 -2
- package/dist/{core-DmbQk8Z2.js.map → core-BuUsOElL.js.map} +1 -1
- package/dist/{core-CG2zTL4c.d.ts → core-FjA_Xoho.d.ts} +1 -2
- package/dist/core-FjA_Xoho.d.ts.map +1 -0
- package/dist/dynamic.d.ts +2 -2
- package/dist/dynamic.js +1 -1
- package/dist/{fuma-matter-Pwr2S9Ab.js → fuma-matter-B4gT09gM.js} +1 -1
- package/dist/{fuma-matter-Pwr2S9Ab.js.map → fuma-matter-B4gT09gM.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/is-promise-like-DYHv0Yap.js +8 -0
- package/dist/is-promise-like-DYHv0Yap.js.map +1 -0
- package/dist/{load-from-file-BeLFB77e.js → load-from-file-BhdBOcQT.js} +1 -1
- package/dist/{load-from-file-BeLFB77e.js.map → load-from-file-BhdBOcQT.js.map} +1 -1
- package/dist/{load-from-file-CpA8UQXX.d.ts → load-from-file-CIYdu-B5.d.ts} +1 -1
- package/dist/load-from-file-CIYdu-B5.d.ts.map +1 -0
- package/dist/{loader-DTODFdmk.js → loader-BOYLUNfh.js} +2 -2
- package/dist/{loader-DTODFdmk.js.map → loader-BOYLUNfh.js.map} +1 -1
- package/dist/{loader-DOjRBsog.js → loader-BT4fwLTJ.js} +9 -5
- package/dist/loader-BT4fwLTJ.js.map +1 -0
- package/dist/{loader-DKTW82eK.js → loader-Cb9kSSxT.js} +2 -2
- package/dist/{loader-DKTW82eK.js.map → loader-Cb9kSSxT.js.map} +1 -1
- package/dist/{loader-gwXIGo5Q.js → loader-UhlX4xbz.js} +1 -1
- package/dist/{loader-gwXIGo5Q.js.map → loader-UhlX4xbz.js.map} +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.js +2 -2
- package/dist/node/index.d.ts +1 -1
- package/dist/node/loader.d.ts +1 -1
- package/dist/node/loader.js +1 -1
- package/dist/{node-l03HaPSS.js → node-Cu5Pqxxo.js} +2 -2
- package/dist/node-Cu5Pqxxo.js.map +1 -0
- package/dist/plugins/git.d.ts +1 -1
- package/dist/plugins/json-schema.d.ts +1 -1
- package/dist/plugins/loader/index.d.ts +4 -7
- package/dist/plugins/loader/index.d.ts.map +1 -1
- package/dist/plugins/loader/index.js +5 -4
- package/dist/plugins/loader/index.js.map +1 -1
- package/dist/plugins/loader/webpack.d.ts +2 -2
- package/dist/plugins/loader/webpack.js +4 -2
- package/dist/plugins/loader/webpack.js.map +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +3 -14
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-mAc2TZyp.js → vite-CoJIMNWk.js} +3 -3
- package/dist/vite-CoJIMNWk.js.map +1 -0
- package/package.json +14 -7
- package/dist/build-mdx-DkAvzRNg.d.ts.map +0 -1
- package/dist/build-mdx-oug7zk0w.js.map +0 -1
- package/dist/bun-cxKGeSx6.js.map +0 -1
- package/dist/code-generator-C_Gu9y3h.js.map +0 -1
- package/dist/core-CG2zTL4c.d.ts.map +0 -1
- package/dist/load-from-file-CpA8UQXX.d.ts.map +0 -1
- package/dist/loader-DOjRBsog.js.map +0 -1
- package/dist/node-l03HaPSS.js.map +0 -1
- package/dist/vite-mAc2TZyp.js.map +0 -1
package/dist/collections/mdx.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as pipe, t as asyncPipe } from "../pipe-CvCqOpXX.js";
|
|
2
|
-
import { n as slash } from "../code-generator-
|
|
2
|
+
import { n as slash } from "../code-generator-CHcOrCeM.js";
|
|
3
3
|
import { r as validate } from "../validation-C3kXuveD.js";
|
|
4
4
|
import { loaderHook } from "../plugins/loader/index.js";
|
|
5
5
|
import { FileSystemCollection } from "./fs.js";
|
|
@@ -55,30 +55,28 @@ var MDXCollection = class extends FileSystemCollection {
|
|
|
55
55
|
this.onEmit.pipe(this.#onEmitHandler.bind(this));
|
|
56
56
|
this.pluginHook(loaderHook).loaders.push(mdxLoader());
|
|
57
57
|
this.pluginHook(gitHook).onClient.hook(this.#onGitHandler.bind(this));
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
});
|
|
81
|
-
}
|
|
58
|
+
const { processedMarkdown, linkReferences, mdast } = this.postprocess ?? {};
|
|
59
|
+
if (processedMarkdown) {
|
|
60
|
+
const { as = "_markdown" } = processedMarkdown === true ? {} : processedMarkdown;
|
|
61
|
+
this.storeInitializer.pipe((code) => {
|
|
62
|
+
code.typeParams[2] += ` & { /** Processed Markdown */ ${as}: string; }`;
|
|
63
|
+
return code;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (mdast) {
|
|
67
|
+
const { as = "_mdast" } = mdast === true ? {} : mdast;
|
|
68
|
+
this.storeInitializer.pipe((code) => {
|
|
69
|
+
code.typeParams[2] += ` & { /** MDAST (as JSON string) */ ${as}: string; }`;
|
|
70
|
+
return code;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (linkReferences) {
|
|
74
|
+
const { as = "_linkReferences" } = linkReferences === true ? {} : linkReferences;
|
|
75
|
+
this.storeInitializer.pipe((code, { codegen }) => {
|
|
76
|
+
codegen.addNamedImport(["LinkReference"], "fuma-content/collections/mdx", true);
|
|
77
|
+
code.typeParams[2] += ` & { /** extracted link references (e.g. hrefs, paths), useful for analyzing relationships between pages. */ ${as}: LinkReference[] }`;
|
|
78
|
+
return code;
|
|
79
|
+
});
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
#onFrontmatter = (data, { filePath }) => {
|
|
@@ -308,7 +306,7 @@ function mdxLoader() {
|
|
|
308
306
|
};
|
|
309
307
|
},
|
|
310
308
|
async createLoader() {
|
|
311
|
-
const { createMdxLoader } = await import("../loader-
|
|
309
|
+
const { createMdxLoader } = await import("../loader-BT4fwLTJ.js").then((n) => n.n);
|
|
312
310
|
return createMdxLoader({ getCore: () => this.core });
|
|
313
311
|
}
|
|
314
312
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdx.js","names":["#onFrontmatter","#onServerHandler","#onEmitHandler","#onGitHandler"],"sources":["../../src/collections/mdx.ts"],"sourcesContent":["import type { Collection } from \"@/collections\";\nimport type { PostprocessOptions } from \"@/collections/mdx/remark-postprocess\";\nimport type { Core, CoreOptions } from \"@/core\";\nimport type { ProcessorOptions } from \"@mdx-js/mdx\";\nimport type { VFile } from \"vfile\";\nimport type { TurbopackLoaderOptions } from \"next/dist/server/config-shared\";\nimport type { Configuration } from \"webpack\";\nimport { LoaderConfig, loaderHook } from \"@/plugins/loader\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { CodeGenerator, slash } from \"@/utils/code-generator\";\nimport { validate } from \"@/utils/validation\";\nimport type { Awaitable } from \"@/types\";\nimport { asyncPipe, pipe } from \"@/utils/pipe\";\nimport { FileSystemCollection, FileSystemCollectionConfig } from \"./fs\";\nimport { GitHook, gitHook } from \"@/plugins/git\";\nimport path from \"node:path\";\nimport type { PluggableList } from \"unified\";\n\ninterface CompilationContext {\n collection: Collection;\n filePath: string;\n source: string;\n}\n\nexport interface MDXCollectionConfig<\n FrontmatterSchema extends StandardSchemaV1 | undefined,\n> extends Omit<FileSystemCollectionConfig, \"supportedFormats\"> {\n postprocess?: Partial<PostprocessOptions>;\n preprocess?: PreprocessOptions;\n frontmatter?: FrontmatterSchema;\n options?: (environment: \"bundler\" | \"runtime\") => Awaitable<ProcessorOptions>;\n lazy?: boolean;\n dynamic?: boolean;\n}\n\ninterface PreprocessOptions {\n remarkPlugins?: PluggableList;\n}\n\nconst RuntimePaths = {\n browser: \"fuma-content/collections/mdx/runtime-browser\",\n dynamic: \"fuma-content/collections/mdx/runtime-dynamic\",\n server: \"fuma-content/collections/mdx/runtime\",\n};\n\ninterface InitializerCode {\n fn: string;\n typeParams: [config: string, name: string, attached: string];\n params: string[];\n}\n\nfunction formatInitializer(code: InitializerCode) {\n return `${code.fn}<${code.typeParams.join()}>(${code.params.join()})`;\n}\n\nexport class MDXCollection<\n FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined,\n> extends FileSystemCollection {\n readonly dynamic: boolean;\n readonly lazy: boolean;\n readonly preprocess?: PreprocessOptions;\n readonly postprocess?: Partial<PostprocessOptions>;\n readonly getMDXOptions?: (environment: \"bundler\" | \"runtime\") => Awaitable<ProcessorOptions>;\n /**\n * Frontmatter schema\n */\n frontmatterSchema?: FrontmatterSchema;\n /**\n * Transform & validate frontmatter\n */\n frontmatter = asyncPipe<Record<string, unknown> | undefined, CompilationContext>();\n /**\n * Transform `vfile` on compilation stage\n */\n vfile = asyncPipe<VFile, CompilationContext>();\n /**\n * Transform the generated initializer code (TypeScript) for collection store\n */\n storeInitializer = pipe<\n InitializerCode,\n {\n codegen: CodeGenerator;\n environment: \"browser\" | \"server\" | \"dynamic\";\n }\n >();\n\n $inferFrontmatter: FrontmatterSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<FrontmatterSchema>\n : Record<string, unknown> = undefined as never;\n\n constructor(config: MDXCollectionConfig<FrontmatterSchema>) {\n super({\n dir: config.dir,\n files: config.files,\n supportedFormats: [\"md\", \"mdx\"],\n });\n this.postprocess = config.postprocess;\n this.preprocess = config.preprocess;\n this.getMDXOptions = config.options;\n this.dynamic = config.dynamic ?? false;\n this.lazy = config.lazy ?? false;\n this.frontmatterSchema = config.frontmatter;\n this.frontmatter.pipe(this.#onFrontmatter.bind(this));\n this.onServer.hook(this.#onServerHandler.bind(this));\n this.onEmit.pipe(this.#onEmitHandler.bind(this));\n this.pluginHook(loaderHook).loaders.push(mdxLoader());\n this.pluginHook(gitHook).onClient.hook(this.#onGitHandler.bind(this));\n\n if (this.postprocess) {\n const { processedMarkdown, linkReferences, mdast } = this.postprocess;\n\n if (processedMarkdown) {\n const { as = \"_markdown\" } = processedMarkdown === true ? {} : processedMarkdown;\n\n this.storeInitializer.pipe((code) => {\n code.typeParams[2] += ` & { /** Processed Markdown */ ${as}: string; }`;\n return code;\n });\n }\n\n if (mdast) {\n const { as = \"_mdast\" } = mdast === true ? {} : mdast;\n\n this.storeInitializer.pipe((code) => {\n code.typeParams[2] += ` & { /** MDAST (as JSON string) */ ${as}: string; }`;\n return code;\n });\n }\n\n if (linkReferences) {\n const { as = \"_linkReferences\" } = linkReferences === true ? {} : linkReferences;\n\n this.storeInitializer.pipe((code, { codegen }) => {\n codegen.addNamedImport([\"LinkReference\"], \"fuma-content/collections/mdx\", true);\n code.typeParams[2] += ` & { /** extracted link references (e.g. hrefs, paths), useful for analyzing relationships between pages. */ ${as}: LinkReference[] }`;\n return code;\n });\n }\n }\n }\n\n #onFrontmatter: (typeof this.frontmatter)[\"$inferHandler\"] = (data, { filePath }) => {\n if (!this.frontmatterSchema) return data;\n\n return validate(\n this.frontmatterSchema,\n data,\n undefined,\n `invalid frontmatter in ${filePath}`,\n ) as Promise<Record<string, unknown>>;\n };\n\n #onServerHandler: (typeof this.onServer)[\"$inferHandler\"] = ({ server, core }) => {\n if (!server.watcher) return;\n\n server.watcher.on(\"all\", async (event, file) => {\n if (event === \"change\" && !this.dynamic) return;\n if (!this.hasFile(file)) return;\n\n await core.emit({\n filterCollection: (item) => item === this,\n filterWorkspace: () => false,\n write: true,\n });\n });\n };\n\n #onEmitHandler: (typeof this.onEmit)[\"$inferHandler\"] = async (\n entries,\n { core, createCodeGenerator },\n ) => {\n entries.push(\n await createCodeGenerator(`${this.name}.ts`, async ({ codegen }) => {\n const runtimePath = RuntimePaths.server;\n const base = slash(core._toRuntimePath(this.dir));\n let code: InitializerCode;\n codegen.addNamespaceImport(\n \"Config\",\n codegen.formatImportPath(core.getOptions().configPath),\n true,\n );\n\n if (this.lazy) {\n codegen.addNamedImport([\"mdxStoreLazy\"], runtimePath);\n const headGlob = await this.generateDocCollectionFrontmatterGlob(core, codegen, true);\n const bodyGlob = await this.generateDocCollectionGlob(core, codegen);\n\n code = {\n fn: \"mdxStoreLazy\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [`\"${this.name}\"`, `\"${base}\"`, `{ head: ${headGlob}, body: ${bodyGlob} }`],\n };\n } else {\n codegen.addNamedImport([\"mdxStore\"], runtimePath);\n code = {\n fn: \"mdxStore\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [\n `\"${this.name}\"`,\n `\"${base}\"`,\n await this.generateDocCollectionGlob(core, codegen, true),\n ],\n };\n }\n\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"server\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n await createCodeGenerator(`${this.name}.browser.ts`, async ({ codegen }) => {\n const runtimePath = RuntimePaths.browser;\n codegen.addNamedImport([\"mdxStoreBrowser\"], runtimePath);\n codegen.addNamespaceImport(\n \"Config\",\n codegen.formatImportPath(core.getOptions().configPath),\n true,\n );\n\n let code: InitializerCode = {\n fn: `mdxStoreBrowser`,\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [`\"${this.name}\"`, await this.generateDocCollectionGlob(core, codegen)],\n };\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"browser\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n );\n if (this.dynamic)\n entries.push(\n await createCodeGenerator(`${this.name}.dynamic.ts`, async ({ codegen }) => {\n const coreOptions = core.getOptions();\n const runtimePath = RuntimePaths.dynamic;\n const base = slash(core._toRuntimePath(this.dir));\n codegen.addNamespaceImport(\"Config\", codegen.formatImportPath(coreOptions.configPath));\n codegen.addNamedImport([\"mdxStoreDynamic\"], runtimePath);\n\n const serializableCoreOptions: CoreOptions = {\n configPath: core._toRuntimePath(coreOptions.configPath),\n outDir: core._toRuntimePath(coreOptions.outDir),\n cwd: core._toRuntimePath(coreOptions.cwd),\n };\n\n const jsxImportSource =\n (await this.getMDXOptions?.(\"runtime\"))?.jsxImportSource ?? \"react\";\n if (!jsxImportSource)\n throw new Error(\n `[Fuma Content] \"jsxImportSource\" is required for dynamic MDX collection \"${this.name}\".`,\n );\n codegen.addNamespaceImport(\"_jsx_runtime\", `${jsxImportSource}/jsx-runtime`);\n\n let code: InitializerCode = {\n fn: \"mdxStoreDynamic\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [\n \"Config\",\n JSON.stringify(serializableCoreOptions),\n `\"${this.name}\"`,\n `\"${base}\"`,\n await this.generateDocCollectionFrontmatterGlob(core, codegen, true),\n \"_jsx_runtime\",\n ],\n };\n\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"dynamic\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n );\n return entries;\n };\n\n #onGitHandler: GitHook[\"onClient\"][\"$inferHandler\"] = async ({ client }) => {\n this.storeInitializer.pipe((code, { codegen, environment }) => {\n codegen.addNamedImport([\"WithGit\"], RuntimePaths[environment], true);\n code.typeParams[2] += \" & WithGit\";\n return code;\n });\n\n this.vfile.pipe(async (file) => {\n const vcData = await client.getFileData({ filePath: file.path });\n file.data[\"mdx-export\"] ??= [];\n file.data[\"mdx-export\"].push(\n {\n name: \"lastModified\",\n value: vcData.lastModified,\n },\n {\n name: \"creationDate\",\n value: vcData.creationDate,\n },\n );\n return file;\n });\n };\n\n private async generateDocCollectionFrontmatterGlob(\n core: Core,\n codegen: CodeGenerator,\n eager = false,\n ) {\n let s = `{`;\n const files = await this.getFiles();\n const query = codegen.formatQuery({\n collection: this.name,\n only: \"frontmatter\",\n workspace: core.getWorkspace()?.name,\n });\n for (const file of files) {\n const fullPath = path.join(this.dir, file);\n const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;\n if (eager) {\n const name = codegen.generateImportName();\n codegen.addNamedImport([`frontmatter as ${name}`], specifier);\n s += `\"${slash(file)}\": ${name},`;\n } else {\n s += `\"${slash(file)}\": () => ${codegen.formatDynamicImport(specifier, \"frontmatter\")},`;\n }\n }\n s += \"}\";\n return s;\n }\n\n private async generateDocCollectionGlob(core: Core, codegen: CodeGenerator, eager = false) {\n let s = `{`;\n const files = await this.getFiles();\n const query = codegen.formatQuery({\n collection: this.name,\n workspace: core.getWorkspace()?.name,\n });\n for (const file of files) {\n const fullPath = path.join(this.dir, file);\n const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;\n if (eager) {\n const name = codegen.generateImportName();\n codegen.addNamespaceImport(name, specifier);\n s += `\"${slash(file)}\": ${name},`;\n } else {\n s += `\"${slash(file)}\": () => ${codegen.formatDynamicImport(specifier)},`;\n }\n }\n s += \"}\";\n return s;\n }\n}\n\nexport function mdxCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(\n config: MDXCollectionConfig<FrontmatterSchema>,\n) {\n return new MDXCollection(config);\n}\n\nfunction mdxLoader(): LoaderConfig {\n const test = /\\.mdx?(\\?.+?)?$/;\n\n return {\n id: \"mdx\",\n test,\n configureNext(nextConfig) {\n const loaderPath = \"fuma-content/collections/mdx/loader-webpack\";\n const loaderOptions = this.getLoaderOptions();\n\n return {\n ...nextConfig,\n turbopack: {\n ...nextConfig.turbopack,\n rules: {\n ...nextConfig.turbopack?.rules,\n \"*.{md,mdx}\": {\n loaders: [\n {\n loader: loaderPath,\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: \"*.js\",\n },\n },\n },\n pageExtensions: [...(nextConfig.pageExtensions ?? [\"js\", \"jsx\", \"tsx\", \"ts\"]), \"mdx\", \"md\"],\n webpack(config: Configuration, options) {\n config.module ||= {};\n config.module.rules ||= [];\n config.module.rules.push({\n test,\n use: [\n options.defaultLoaders.babel,\n {\n loader: loaderPath,\n options: loaderOptions,\n },\n ],\n });\n\n return nextConfig.webpack?.(config, options) ?? config;\n },\n };\n },\n async createLoader() {\n const { createMdxLoader } = await import(\"./mdx/loader\");\n return createMdxLoader({\n getCore: () => this.core,\n });\n },\n };\n}\n\nexport type { LinkReference } from \"@/collections/mdx/remark-postprocess\";\nexport type { CompiledMDX } from \"@/collections/mdx/build-mdx\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mdx.js","names":["#onFrontmatter","#onServerHandler","#onEmitHandler","#onGitHandler"],"sources":["../../src/collections/mdx.ts"],"sourcesContent":["import type { Collection } from \"@/collections\";\nimport type { PostprocessOptions } from \"@/collections/mdx/remark-postprocess\";\nimport type { Core, CoreOptions } from \"@/core\";\nimport type { ProcessorOptions } from \"@mdx-js/mdx\";\nimport type { VFile } from \"vfile\";\nimport type { TurbopackLoaderOptions } from \"next/dist/server/config-shared\";\nimport type { Configuration } from \"webpack\";\nimport { LoaderConfig, loaderHook } from \"@/plugins/loader\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { CodeGenerator, slash } from \"@/utils/code-generator\";\nimport { validate } from \"@/utils/validation\";\nimport type { Awaitable } from \"@/types\";\nimport { asyncPipe, pipe } from \"@/utils/pipe\";\nimport { FileSystemCollection, FileSystemCollectionConfig } from \"./fs\";\nimport { GitHook, gitHook } from \"@/plugins/git\";\nimport path from \"node:path\";\nimport type { PluggableList } from \"unified\";\n\ninterface CompilationContext {\n collection: Collection;\n filePath: string;\n source: string;\n}\n\nexport interface MDXCollectionConfig<\n FrontmatterSchema extends StandardSchemaV1 | undefined,\n> extends Omit<FileSystemCollectionConfig, \"supportedFormats\"> {\n postprocess?: Partial<PostprocessOptions>;\n preprocess?: PreprocessOptions;\n frontmatter?: FrontmatterSchema;\n options?: (environment: \"bundler\" | \"runtime\") => Awaitable<ProcessorOptions>;\n lazy?: boolean;\n dynamic?: boolean;\n}\n\ninterface PreprocessOptions {\n remarkPlugins?: PluggableList;\n}\n\nconst RuntimePaths = {\n browser: \"fuma-content/collections/mdx/runtime-browser\",\n dynamic: \"fuma-content/collections/mdx/runtime-dynamic\",\n server: \"fuma-content/collections/mdx/runtime\",\n};\n\ninterface InitializerCode {\n fn: string;\n typeParams: [config: string, name: string, attached: string];\n params: string[];\n}\n\nfunction formatInitializer(code: InitializerCode) {\n return `${code.fn}<${code.typeParams.join()}>(${code.params.join()})`;\n}\n\nexport class MDXCollection<\n FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined,\n> extends FileSystemCollection {\n readonly dynamic: boolean;\n readonly lazy: boolean;\n readonly preprocess?: PreprocessOptions;\n readonly postprocess?: Partial<PostprocessOptions>;\n readonly getMDXOptions?: (environment: \"bundler\" | \"runtime\") => Awaitable<ProcessorOptions>;\n /**\n * Frontmatter schema\n */\n frontmatterSchema?: FrontmatterSchema;\n /**\n * Transform & validate frontmatter\n */\n frontmatter = asyncPipe<Record<string, unknown> | undefined, CompilationContext>();\n /**\n * Transform `vfile` on compilation stage\n */\n vfile = asyncPipe<VFile, CompilationContext>();\n /**\n * Transform the generated initializer code (TypeScript) for collection store\n */\n storeInitializer = pipe<\n InitializerCode,\n {\n codegen: CodeGenerator;\n environment: \"browser\" | \"server\" | \"dynamic\";\n }\n >();\n\n $inferFrontmatter: FrontmatterSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<FrontmatterSchema>\n : Record<string, unknown> = undefined as never;\n\n constructor(config: MDXCollectionConfig<FrontmatterSchema>) {\n super({\n dir: config.dir,\n files: config.files,\n supportedFormats: [\"md\", \"mdx\"],\n });\n this.postprocess = config.postprocess;\n this.preprocess = config.preprocess;\n this.getMDXOptions = config.options;\n this.dynamic = config.dynamic ?? false;\n this.lazy = config.lazy ?? false;\n this.frontmatterSchema = config.frontmatter;\n this.frontmatter.pipe(this.#onFrontmatter.bind(this));\n this.onServer.hook(this.#onServerHandler.bind(this));\n this.onEmit.pipe(this.#onEmitHandler.bind(this));\n this.pluginHook(loaderHook).loaders.push(mdxLoader());\n this.pluginHook(gitHook).onClient.hook(this.#onGitHandler.bind(this));\n\n const { processedMarkdown, linkReferences, mdast } = this.postprocess ?? {};\n\n if (processedMarkdown) {\n const { as = \"_markdown\" } = processedMarkdown === true ? {} : processedMarkdown;\n\n this.storeInitializer.pipe((code) => {\n code.typeParams[2] += ` & { /** Processed Markdown */ ${as}: string; }`;\n return code;\n });\n }\n\n if (mdast) {\n const { as = \"_mdast\" } = mdast === true ? {} : mdast;\n\n this.storeInitializer.pipe((code) => {\n code.typeParams[2] += ` & { /** MDAST (as JSON string) */ ${as}: string; }`;\n return code;\n });\n }\n\n if (linkReferences) {\n const { as = \"_linkReferences\" } = linkReferences === true ? {} : linkReferences;\n\n this.storeInitializer.pipe((code, { codegen }) => {\n codegen.addNamedImport([\"LinkReference\"], \"fuma-content/collections/mdx\", true);\n code.typeParams[2] += ` & { /** extracted link references (e.g. hrefs, paths), useful for analyzing relationships between pages. */ ${as}: LinkReference[] }`;\n return code;\n });\n }\n }\n\n #onFrontmatter: (typeof this.frontmatter)[\"$inferHandler\"] = (data, { filePath }) => {\n if (!this.frontmatterSchema) return data;\n\n return validate(\n this.frontmatterSchema,\n data,\n undefined,\n `invalid frontmatter in ${filePath}`,\n ) as Promise<Record<string, unknown>>;\n };\n\n #onServerHandler: (typeof this.onServer)[\"$inferHandler\"] = ({ server, core }) => {\n if (!server.watcher) return;\n\n server.watcher.on(\"all\", async (event, file) => {\n if (event === \"change\" && !this.dynamic) return;\n if (!this.hasFile(file)) return;\n\n await core.emit({\n filterCollection: (item) => item === this,\n filterWorkspace: () => false,\n write: true,\n });\n });\n };\n\n #onEmitHandler: (typeof this.onEmit)[\"$inferHandler\"] = async (\n entries,\n { core, createCodeGenerator },\n ) => {\n entries.push(\n await createCodeGenerator(`${this.name}.ts`, async ({ codegen }) => {\n const runtimePath = RuntimePaths.server;\n const base = slash(core._toRuntimePath(this.dir));\n let code: InitializerCode;\n codegen.addNamespaceImport(\n \"Config\",\n codegen.formatImportPath(core.getOptions().configPath),\n true,\n );\n\n if (this.lazy) {\n codegen.addNamedImport([\"mdxStoreLazy\"], runtimePath);\n const headGlob = await this.generateDocCollectionFrontmatterGlob(core, codegen, true);\n const bodyGlob = await this.generateDocCollectionGlob(core, codegen);\n\n code = {\n fn: \"mdxStoreLazy\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [`\"${this.name}\"`, `\"${base}\"`, `{ head: ${headGlob}, body: ${bodyGlob} }`],\n };\n } else {\n codegen.addNamedImport([\"mdxStore\"], runtimePath);\n code = {\n fn: \"mdxStore\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [\n `\"${this.name}\"`,\n `\"${base}\"`,\n await this.generateDocCollectionGlob(core, codegen, true),\n ],\n };\n }\n\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"server\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n await createCodeGenerator(`${this.name}.browser.ts`, async ({ codegen }) => {\n const runtimePath = RuntimePaths.browser;\n codegen.addNamedImport([\"mdxStoreBrowser\"], runtimePath);\n codegen.addNamespaceImport(\n \"Config\",\n codegen.formatImportPath(core.getOptions().configPath),\n true,\n );\n\n let code: InitializerCode = {\n fn: `mdxStoreBrowser`,\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [`\"${this.name}\"`, await this.generateDocCollectionGlob(core, codegen)],\n };\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"browser\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n );\n if (this.dynamic)\n entries.push(\n await createCodeGenerator(`${this.name}.dynamic.ts`, async ({ codegen }) => {\n const coreOptions = core.getOptions();\n const runtimePath = RuntimePaths.dynamic;\n const base = slash(core._toRuntimePath(this.dir));\n codegen.addNamespaceImport(\"Config\", codegen.formatImportPath(coreOptions.configPath));\n codegen.addNamedImport([\"mdxStoreDynamic\"], runtimePath);\n\n const serializableCoreOptions: CoreOptions = {\n configPath: core._toRuntimePath(coreOptions.configPath),\n outDir: core._toRuntimePath(coreOptions.outDir),\n cwd: core._toRuntimePath(coreOptions.cwd),\n };\n\n const jsxImportSource =\n (await this.getMDXOptions?.(\"runtime\"))?.jsxImportSource ?? \"react\";\n if (!jsxImportSource)\n throw new Error(\n `[Fuma Content] \"jsxImportSource\" is required for dynamic MDX collection \"${this.name}\".`,\n );\n codegen.addNamespaceImport(\"_jsx_runtime\", `${jsxImportSource}/jsx-runtime`);\n\n let code: InitializerCode = {\n fn: \"mdxStoreDynamic\",\n typeParams: [\"typeof Config\", `\"${this.name}\"`, \"unknown\"],\n params: [\n \"Config\",\n JSON.stringify(serializableCoreOptions),\n `\"${this.name}\"`,\n `\"${base}\"`,\n await this.generateDocCollectionFrontmatterGlob(core, codegen, true),\n \"_jsx_runtime\",\n ],\n };\n\n code = this.storeInitializer.run(code, {\n codegen,\n environment: \"dynamic\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }),\n );\n return entries;\n };\n\n #onGitHandler: GitHook[\"onClient\"][\"$inferHandler\"] = async ({ client }) => {\n this.storeInitializer.pipe((code, { codegen, environment }) => {\n codegen.addNamedImport([\"WithGit\"], RuntimePaths[environment], true);\n code.typeParams[2] += \" & WithGit\";\n return code;\n });\n\n this.vfile.pipe(async (file) => {\n const vcData = await client.getFileData({ filePath: file.path });\n file.data[\"mdx-export\"] ??= [];\n file.data[\"mdx-export\"].push(\n {\n name: \"lastModified\",\n value: vcData.lastModified,\n },\n {\n name: \"creationDate\",\n value: vcData.creationDate,\n },\n );\n return file;\n });\n };\n\n private async generateDocCollectionFrontmatterGlob(\n core: Core,\n codegen: CodeGenerator,\n eager = false,\n ) {\n let s = `{`;\n const files = await this.getFiles();\n const query = codegen.formatQuery({\n collection: this.name,\n only: \"frontmatter\",\n workspace: core.getWorkspace()?.name,\n });\n for (const file of files) {\n const fullPath = path.join(this.dir, file);\n const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;\n if (eager) {\n const name = codegen.generateImportName();\n codegen.addNamedImport([`frontmatter as ${name}`], specifier);\n s += `\"${slash(file)}\": ${name},`;\n } else {\n s += `\"${slash(file)}\": () => ${codegen.formatDynamicImport(specifier, \"frontmatter\")},`;\n }\n }\n s += \"}\";\n return s;\n }\n\n private async generateDocCollectionGlob(core: Core, codegen: CodeGenerator, eager = false) {\n let s = `{`;\n const files = await this.getFiles();\n const query = codegen.formatQuery({\n collection: this.name,\n workspace: core.getWorkspace()?.name,\n });\n for (const file of files) {\n const fullPath = path.join(this.dir, file);\n const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;\n if (eager) {\n const name = codegen.generateImportName();\n codegen.addNamespaceImport(name, specifier);\n s += `\"${slash(file)}\": ${name},`;\n } else {\n s += `\"${slash(file)}\": () => ${codegen.formatDynamicImport(specifier)},`;\n }\n }\n s += \"}\";\n return s;\n }\n}\n\nexport function mdxCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(\n config: MDXCollectionConfig<FrontmatterSchema>,\n) {\n return new MDXCollection(config);\n}\n\nfunction mdxLoader(): LoaderConfig {\n const test = /\\.mdx?(\\?.+?)?$/;\n\n return {\n id: \"mdx\",\n test,\n configureNext(nextConfig) {\n const loaderPath = \"fuma-content/collections/mdx/loader-webpack\";\n const loaderOptions = this.getLoaderOptions();\n\n return {\n ...nextConfig,\n turbopack: {\n ...nextConfig.turbopack,\n rules: {\n ...nextConfig.turbopack?.rules,\n \"*.{md,mdx}\": {\n loaders: [\n {\n loader: loaderPath,\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: \"*.js\",\n },\n },\n },\n pageExtensions: [...(nextConfig.pageExtensions ?? [\"js\", \"jsx\", \"tsx\", \"ts\"]), \"mdx\", \"md\"],\n webpack(config: Configuration, options) {\n config.module ||= {};\n config.module.rules ||= [];\n config.module.rules.push({\n test,\n use: [\n options.defaultLoaders.babel,\n {\n loader: loaderPath,\n options: loaderOptions,\n },\n ],\n });\n\n return nextConfig.webpack?.(config, options) ?? config;\n },\n };\n },\n async createLoader() {\n const { createMdxLoader } = await import(\"./mdx/loader\");\n return createMdxLoader({\n getCore: () => this.core,\n });\n },\n };\n}\n\nexport type { LinkReference } from \"@/collections/mdx/remark-postprocess\";\nexport type { CompiledMDX } from \"@/collections/mdx/build-mdx\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "../core-FjA_Xoho.js";
|
|
2
|
+
import "../build-mdx-DRqbcE1d.js";
|
|
3
|
+
import { MDXCollection, MDXCollectionConfig } from "./mdx.js";
|
|
4
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
|
+
|
|
6
|
+
//#region src/collections/obsidian.d.ts
|
|
7
|
+
declare function mdxObsidianCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(config: MDXCollectionConfig<FrontmatterSchema>): MDXCollection<FrontmatterSchema>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { mdxObsidianCollection };
|
|
10
|
+
//# sourceMappingURL=obsidian.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian.d.ts","names":[],"sources":["../../src/collections/obsidian.ts"],"mappings":";;;;;;iBAIgB,qBAAA,2BACY,gBAAA,yBAAA,CAC1B,MAAA,EAAQ,mBAAA,CAAoB,iBAAA,IAAkB,aAAA,CAAA,iBAAA"}
|