fuma-content 1.1.0 → 1.1.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.
Files changed (125) hide show
  1. package/dist/{build-mdx-BZxE8t2a.js → build-mdx-CUp6FpfT.js} +2 -2
  2. package/dist/{build-mdx-BZxE8t2a.js.map → build-mdx-CUp6FpfT.js.map} +1 -1
  3. package/dist/build-mdx-D6zM3Sgl.js +4 -0
  4. package/dist/bun/index.d.ts +1 -1
  5. package/dist/bun/index.js +2 -2
  6. package/dist/{code-generator-CjC4EEXg.js → code-generator-Qhhq7kHh.js} +30 -24
  7. package/dist/code-generator-Qhhq7kHh.js.map +1 -0
  8. package/dist/collections/data/runtime.d.ts +6 -6
  9. package/dist/collections/data.d.ts +5 -5
  10. package/dist/collections/data.d.ts.map +1 -1
  11. package/dist/collections/data.js +3 -3
  12. package/dist/collections/fs.d.ts +2 -2
  13. package/dist/collections/fs.js +1 -1
  14. package/dist/collections/index.d.ts +1 -1
  15. package/dist/collections/index.js +1 -1
  16. package/dist/collections/json/loader-webpack.d.ts +3 -3
  17. package/dist/collections/json/loader-webpack.js +6 -6
  18. package/dist/collections/mdx/loader-webpack.d.ts +3 -3
  19. package/dist/collections/mdx/loader-webpack.js +6 -6
  20. package/dist/collections/mdx/react.d.ts +10 -10
  21. package/dist/collections/mdx/runtime-browser.d.ts +10 -10
  22. package/dist/collections/mdx/runtime-browser.js +1 -1
  23. package/dist/collections/mdx/runtime-dynamic.d.ts +9 -9
  24. package/dist/collections/mdx/runtime-dynamic.js +6 -6
  25. package/dist/collections/mdx/runtime.d.ts +9 -9
  26. package/dist/collections/mdx.d.ts +5 -5
  27. package/dist/collections/mdx.js +4 -4
  28. package/dist/collections/runtime/file-store.d.ts +3 -3
  29. package/dist/collections/runtime/file-store.js +1 -4
  30. package/dist/collections/runtime/file-store.js.map +1 -1
  31. package/dist/collections/runtime/store.d.ts +2 -2
  32. package/dist/collections/runtime/store.js +1 -1
  33. package/dist/collections/yaml/loader-webpack.d.ts +3 -3
  34. package/dist/collections/yaml/loader-webpack.js +6 -6
  35. package/dist/{collections-DNFRdCuB.js → collections-CNWuMDAZ.js} +7 -13
  36. package/dist/collections-CNWuMDAZ.js.map +1 -0
  37. package/dist/config/index.d.ts +2 -2
  38. package/dist/config/index.js.map +1 -1
  39. package/dist/{core-BO3b8jMg.d.ts → core-CT06v32N.d.ts} +23 -24
  40. package/dist/core-CT06v32N.d.ts.map +1 -0
  41. package/dist/{core-D5QHSKk6.js → core-Uv3jZqL-.js} +15 -20
  42. package/dist/core-Uv3jZqL-.js.map +1 -0
  43. package/dist/{data-9h98oZwj.js → data-Cxsx5KPD.js} +34 -33
  44. package/dist/data-Cxsx5KPD.js.map +1 -0
  45. package/dist/{dynamic-CTYYdl7_.d.ts → dynamic-Ck1wYoaL.d.ts} +2 -2
  46. package/dist/{dynamic-CTYYdl7_.d.ts.map → dynamic-Ck1wYoaL.d.ts.map} +1 -1
  47. package/dist/{dynamic-DhKTOrIl.js → dynamic-CtOB4Rkp.js} +2 -2
  48. package/dist/{dynamic-DhKTOrIl.js.map → dynamic-CtOB4Rkp.js.map} +1 -1
  49. package/dist/dynamic.d.ts +2 -2
  50. package/dist/dynamic.js +1 -1
  51. package/dist/{file-store-laO4IjvB.d.ts → file-store-Dm1SjuLg.d.ts} +2 -3
  52. package/dist/file-store-Dm1SjuLg.d.ts.map +1 -0
  53. package/dist/fs-CXzVd2Dp.js +68 -0
  54. package/dist/fs-CXzVd2Dp.js.map +1 -0
  55. package/dist/{fs-D34Sztbh.d.ts → fs-CmwaaFyx.d.ts} +6 -5
  56. package/dist/fs-CmwaaFyx.d.ts.map +1 -0
  57. package/dist/{git-CQWA37-X.js → git-DnejL9r_.js} +2 -2
  58. package/dist/{git-CQWA37-X.js.map → git-DnejL9r_.js.map} +1 -1
  59. package/dist/{git-2CjUW3M5.d.ts → git-n-9ddn78.d.ts} +2 -2
  60. package/dist/{git-2CjUW3M5.d.ts.map → git-n-9ddn78.d.ts.map} +1 -1
  61. package/dist/{index-Da88Sj8w.d.ts → index-BheUVWBm.d.ts} +3 -3
  62. package/dist/{index-Da88Sj8w.d.ts.map → index-BheUVWBm.d.ts.map} +1 -1
  63. package/dist/index.d.ts +2 -2
  64. package/dist/index.js +2 -2
  65. package/dist/load-from-file-D-Xm95Fz.js +3 -0
  66. package/dist/{load-from-file-irx0JI6j.js → load-from-file-z7EGuf2n.js} +2 -2
  67. package/dist/{load-from-file-irx0JI6j.js.map → load-from-file-z7EGuf2n.js.map} +1 -1
  68. package/dist/{loader-BuR4gkKg.js → loader-B4nQrRwA.js} +2 -2
  69. package/dist/{loader-BuR4gkKg.js.map → loader-B4nQrRwA.js.map} +1 -1
  70. package/dist/loader-B6ordrWK.js +9 -0
  71. package/dist/{loader-BhXHF8vy.js → loader-BK8PnqRg.js} +2 -2
  72. package/dist/{loader-BhXHF8vy.js.map → loader-BK8PnqRg.js.map} +1 -1
  73. package/dist/{loader-D6StkShK.js → loader-CnksfM7I.js} +3 -3
  74. package/dist/{loader-D6StkShK.js.map → loader-CnksfM7I.js.map} +1 -1
  75. package/dist/{loader-DwpOcxgh.js → loader-Cnz-VHne.js} +2 -2
  76. package/dist/{loader-DwpOcxgh.js.map → loader-Cnz-VHne.js.map} +1 -1
  77. package/dist/{loader-BzQpSBvP.js → loader-CuntMmR4.js} +2 -2
  78. package/dist/{loader-BzQpSBvP.js.map → loader-CuntMmR4.js.map} +1 -1
  79. package/dist/loader-Cx1Rg_VM.js +8 -0
  80. package/dist/loader-Dao_nv3e.js +8 -0
  81. package/dist/mdx-Cw1nBJ0D.js +306 -0
  82. package/dist/mdx-Cw1nBJ0D.js.map +1 -0
  83. package/dist/{mdx-Dt9hirUu.d.ts → mdx-PaqRNZMS.d.ts} +7 -16
  84. package/dist/mdx-PaqRNZMS.d.ts.map +1 -0
  85. package/dist/next/index.d.ts +1 -1
  86. package/dist/next/index.js +3 -3
  87. package/dist/node/index.d.ts +1 -1
  88. package/dist/node/loader.d.ts +1 -1
  89. package/dist/node/loader.js +3 -3
  90. package/dist/plugins/git.d.ts +2 -2
  91. package/dist/plugins/git.js +1 -1
  92. package/dist/plugins/json-schema.d.ts +1 -1
  93. package/dist/plugins/json-schema.js +2 -2
  94. package/dist/plugins/loader/index.d.ts +3 -3
  95. package/dist/plugins/loader/index.js +1 -1
  96. package/dist/plugins/loader/webpack.d.ts +3 -3
  97. package/dist/plugins/loader/webpack.js +2 -2
  98. package/dist/{runtime-HN-HSB0Z.d.ts → runtime-BUUHSFlR.d.ts} +5 -5
  99. package/dist/{runtime-HN-HSB0Z.d.ts.map → runtime-BUUHSFlR.d.ts.map} +1 -1
  100. package/dist/{runtime-browser-BQEk7qjc.d.ts → runtime-browser-B70WGxeQ.d.ts} +4 -4
  101. package/dist/{runtime-browser-BQEk7qjc.d.ts.map → runtime-browser-B70WGxeQ.d.ts.map} +1 -1
  102. package/dist/{store-IvpEBdxi.js → store-CRyvZFKN.js} +7 -10
  103. package/dist/{store-IvpEBdxi.js.map → store-CRyvZFKN.js.map} +1 -1
  104. package/dist/{store-DiuGdV5M.d.ts → store-D_PPrdRE.d.ts} +4 -4
  105. package/dist/{store-DiuGdV5M.d.ts.map → store-D_PPrdRE.d.ts.map} +1 -1
  106. package/dist/vite/index.d.ts +1 -1
  107. package/dist/vite/index.js +3 -3
  108. package/package.json +10 -10
  109. package/dist/build-mdx-LhpFasX-.js +0 -4
  110. package/dist/code-generator-CjC4EEXg.js.map +0 -1
  111. package/dist/collections-DNFRdCuB.js.map +0 -1
  112. package/dist/core-BO3b8jMg.d.ts.map +0 -1
  113. package/dist/core-D5QHSKk6.js.map +0 -1
  114. package/dist/data-9h98oZwj.js.map +0 -1
  115. package/dist/file-store-laO4IjvB.d.ts.map +0 -1
  116. package/dist/fs-D34Sztbh.d.ts.map +0 -1
  117. package/dist/fs-WWbLA7Gx.js +0 -66
  118. package/dist/fs-WWbLA7Gx.js.map +0 -1
  119. package/dist/load-from-file-BZxc_BhC.js +0 -3
  120. package/dist/loader-AIEwGc2f.js +0 -9
  121. package/dist/loader-DCK4RwOh.js +0 -8
  122. package/dist/loader-zsTVgQjO.js +0 -8
  123. package/dist/mdx-Dt9hirUu.d.ts.map +0 -1
  124. package/dist/mdx-iZ2uP27Z.js +0 -303
  125. package/dist/mdx-iZ2uP27Z.js.map +0 -1
@@ -1,303 +0,0 @@
1
- import { i as pipe, r as asyncPipe } from "./collections-DNFRdCuB.js";
2
- import { n as slash } from "./code-generator-CjC4EEXg.js";
3
- import { r as validate } from "./validation-BvVvvLII.js";
4
- import { t as loaderHook } from "./loader-BuR4gkKg.js";
5
- import { t as FileSystemCollection } from "./fs-WWbLA7Gx.js";
6
- import { n as gitHook } from "./git-CQWA37-X.js";
7
- import path from "node:path";
8
-
9
- //#region src/collections/mdx.ts
10
- const RuntimePaths = {
11
- browser: "fuma-content/collections/mdx/runtime-browser",
12
- dynamic: "fuma-content/collections/mdx/runtime-dynamic",
13
- server: "fuma-content/collections/mdx/runtime"
14
- };
15
- function formatInitializer(code) {
16
- return `${code.fn}<${code.typeParams.join()}>(${code.params.join()})`;
17
- }
18
- var MDXCollection = class extends FileSystemCollection {
19
- dynamic;
20
- lazy;
21
- preprocess;
22
- postprocess;
23
- getMDXOptions;
24
- /**
25
- * Frontmatter schema
26
- */
27
- frontmatterSchema;
28
- /**
29
- * Transform & validate frontmatter
30
- */
31
- frontmatter = asyncPipe();
32
- /**
33
- * Transform `vfile` on compilation stage
34
- */
35
- vfile = asyncPipe();
36
- /**
37
- * Transform the generated initializer code (TypeScript) for collection store
38
- */
39
- storeInitializer = pipe();
40
- $inferFrontmatter = void 0;
41
- constructor(config) {
42
- super({
43
- dir: config.dir,
44
- files: config.files,
45
- supportedFormats: ["md", "mdx"]
46
- });
47
- this.postprocess = config.postprocess;
48
- this.getMDXOptions = config.options;
49
- this.dynamic = config.dynamic ?? false;
50
- this.lazy = config.lazy ?? false;
51
- if (config.frontmatter) {
52
- const frontmatter = config.frontmatter;
53
- this.frontmatterSchema = frontmatter;
54
- this.frontmatter.pipe((data, { filePath }) => {
55
- return validate(frontmatter, data, void 0, `invalid frontmatter in ${filePath}`);
56
- });
57
- }
58
- if (this.postprocess?.extractLinkReferences) this.storeInitializer.pipe((code, { codegen, environment }) => {
59
- codegen.addNamedImport(["WithExtractedReferences"], RuntimePaths[environment], true);
60
- code.typeParams[2] += " & WithExtractedReferences";
61
- return code;
62
- });
63
- this.onEmit.pipe(async (entries, { createCodeGenerator }) => {
64
- entries.push(await createCodeGenerator(`${this.name}.ts`, (ctx) => this.generateCollectionStoreServer(ctx)), await createCodeGenerator(`${this.name}.browser.ts`, (ctx) => this.generateCollectionStoreBrowser(ctx)));
65
- if (this.dynamic) entries.push(await createCodeGenerator(`${this.name}.dynamic.ts`, (ctx) => this.generateCollectionStoreDynamic(ctx)));
66
- return entries;
67
- });
68
- this.onServer.hook(({ core, server }) => {
69
- if (!server.watcher) return;
70
- server.watcher.on("all", async (event, file) => {
71
- if (event === "change" && !this.dynamic) return;
72
- if (!this.hasFile(file)) return;
73
- await core.emit({
74
- filterCollection: (item) => item === this,
75
- filterWorkspace: () => false,
76
- write: true
77
- });
78
- });
79
- });
80
- const { loaders } = this.pluginHook(loaderHook);
81
- loaders.push(mdxLoader());
82
- this.pluginHook(gitHook).onClient.hook(({ client }) => {
83
- this.storeInitializer.pipe((code, { codegen, environment }) => {
84
- codegen.addNamedImport(["WithGit"], RuntimePaths[environment], true);
85
- code.typeParams[2] += " & WithGit";
86
- return code;
87
- });
88
- this.vfile.pipe(async (file) => {
89
- const vcData = await client.getFileData({ filePath: file.path });
90
- file.data["mdx-export"] ??= [];
91
- file.data["mdx-export"].push({
92
- name: "lastModified",
93
- value: vcData.lastModified
94
- }, {
95
- name: "creationDate",
96
- value: vcData.creationDate
97
- });
98
- return file;
99
- });
100
- });
101
- }
102
- async generateDocCollectionFrontmatterGlob({ workspace, codegen }, eager = false) {
103
- let s = `{`;
104
- const files = await this.getFiles();
105
- const query = codegen.formatQuery({
106
- collection: this.name,
107
- only: "frontmatter",
108
- workspace
109
- });
110
- for (const file of files) {
111
- const fullPath = path.join(this.dir, file);
112
- const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;
113
- if (eager) {
114
- const name = codegen.generateImportName();
115
- codegen.addNamedImport([`frontmatter as ${name}`], specifier);
116
- s += `"${slash(file)}": ${name},`;
117
- } else s += `"${slash(file)}": () => ${codegen.formatDynamicImport(specifier, "frontmatter")},`;
118
- }
119
- s += "}";
120
- return s;
121
- }
122
- async generateDocCollectionGlob({ codegen, workspace }, eager = false) {
123
- let s = `{`;
124
- const files = await this.getFiles();
125
- const query = codegen.formatQuery({
126
- collection: this.name,
127
- workspace
128
- });
129
- for (const file of files) {
130
- const fullPath = path.join(this.dir, file);
131
- const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;
132
- if (eager) {
133
- const name = codegen.generateImportName();
134
- codegen.addNamespaceImport(name, specifier);
135
- s += `"${slash(file)}": ${name},`;
136
- } else s += `"${slash(file)}": () => ${codegen.formatDynamicImport(specifier)},`;
137
- }
138
- s += "}";
139
- return s;
140
- }
141
- async generateCollectionStoreServer(context) {
142
- const { core, codegen } = context;
143
- const runtimePath = RuntimePaths.server;
144
- const base = slash(core._toRuntimePath(this.dir));
145
- let code;
146
- codegen.addNamespaceImport("Config", codegen.formatImportPath(core.getOptions().configPath), true);
147
- if (this.lazy) {
148
- codegen.addNamedImport(["mdxStoreLazy"], runtimePath);
149
- const headGlob = await this.generateDocCollectionFrontmatterGlob(context, true);
150
- const bodyGlob = await this.generateDocCollectionGlob(context);
151
- code = {
152
- fn: "mdxStoreLazy",
153
- typeParams: [
154
- "typeof Config",
155
- `"${this.name}"`,
156
- "unknown"
157
- ],
158
- params: [
159
- `"${this.name}"`,
160
- `"${base}"`,
161
- `{ head: ${headGlob}, body: ${bodyGlob} }`
162
- ]
163
- };
164
- } else {
165
- codegen.addNamedImport(["mdxStore"], runtimePath);
166
- code = {
167
- fn: "mdxStore",
168
- typeParams: [
169
- "typeof Config",
170
- `"${this.name}"`,
171
- "unknown"
172
- ],
173
- params: [
174
- `"${this.name}"`,
175
- `"${base}"`,
176
- await this.generateDocCollectionGlob(context, true)
177
- ]
178
- };
179
- }
180
- code = this.storeInitializer.run(code, {
181
- ...context,
182
- environment: "server"
183
- });
184
- codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);
185
- }
186
- async generateCollectionStoreBrowser(context) {
187
- const { core, codegen } = context;
188
- const runtimePath = RuntimePaths.browser;
189
- codegen.addNamedImport(["mdxStoreBrowser"], runtimePath);
190
- codegen.addNamespaceImport("Config", codegen.formatImportPath(core.getOptions().configPath), true);
191
- let code = {
192
- fn: `mdxStoreBrowser`,
193
- typeParams: [
194
- "typeof Config",
195
- `"${this.name}"`,
196
- "unknown"
197
- ],
198
- params: [`"${this.name}"`, await this.generateDocCollectionGlob(context)]
199
- };
200
- code = this.storeInitializer.run(code, {
201
- ...context,
202
- environment: "browser"
203
- });
204
- codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);
205
- }
206
- async generateCollectionStoreDynamic(context) {
207
- const { core, codegen } = context;
208
- const coreOptions = core.getOptions();
209
- const runtimePath = RuntimePaths.dynamic;
210
- const base = slash(core._toRuntimePath(this.dir));
211
- codegen.addNamespaceImport("Config", codegen.formatImportPath(coreOptions.configPath));
212
- codegen.addNamedImport(["mdxStoreDynamic"], runtimePath);
213
- const serializableCoreOptions = {
214
- configPath: core._toRuntimePath(coreOptions.configPath),
215
- outDir: core._toRuntimePath(coreOptions.outDir),
216
- cwd: core._toRuntimePath(coreOptions.cwd)
217
- };
218
- const jsxImportSource = (await this.getMDXOptions?.("runtime"))?.jsxImportSource ?? "react";
219
- if (!jsxImportSource) throw new Error(`[Fuma Content] "jsxImportSource" is required for dynamic MDX collection "${this.name}".`);
220
- codegen.addNamespaceImport("_jsx_runtime", `${jsxImportSource}/jsx-runtime`);
221
- let code = {
222
- fn: "mdxStoreDynamic",
223
- typeParams: [
224
- "typeof Config",
225
- `"${this.name}"`,
226
- "unknown"
227
- ],
228
- params: [
229
- "Config",
230
- JSON.stringify(serializableCoreOptions),
231
- `"${this.name}"`,
232
- `"${base}"`,
233
- await this.generateDocCollectionFrontmatterGlob(context, true),
234
- "_jsx_runtime"
235
- ]
236
- };
237
- code = this.storeInitializer.run(code, {
238
- ...context,
239
- environment: "dynamic"
240
- });
241
- codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);
242
- }
243
- };
244
- function mdxCollection(config) {
245
- return new MDXCollection(config);
246
- }
247
- function mdxLoader() {
248
- const test = /\.mdx?(\?.+?)?$/;
249
- return {
250
- id: "mdx",
251
- test,
252
- configureNext(nextConfig) {
253
- const loaderPath = "fuma-content/collections/mdx/loader-webpack";
254
- const loaderOptions = this.getLoaderOptions();
255
- return {
256
- ...nextConfig,
257
- turbopack: {
258
- ...nextConfig.turbopack,
259
- rules: {
260
- ...nextConfig.turbopack?.rules,
261
- "*.{md,mdx}": {
262
- loaders: [{
263
- loader: loaderPath,
264
- options: loaderOptions
265
- }],
266
- as: "*.js"
267
- }
268
- }
269
- },
270
- pageExtensions: [
271
- ...nextConfig.pageExtensions ?? [
272
- "js",
273
- "jsx",
274
- "tsx",
275
- "ts"
276
- ],
277
- "mdx",
278
- "md"
279
- ],
280
- webpack(config, options) {
281
- config.module ||= {};
282
- config.module.rules ||= [];
283
- config.module.rules.push({
284
- test,
285
- use: [options.defaultLoaders.babel, {
286
- loader: loaderPath,
287
- options: loaderOptions
288
- }]
289
- });
290
- return nextConfig.webpack?.(config, options) ?? config;
291
- }
292
- };
293
- },
294
- async createLoader() {
295
- const { createMdxLoader } = await import("./loader-AIEwGc2f.js");
296
- return createMdxLoader({ getCore: () => this.core });
297
- }
298
- };
299
- }
300
-
301
- //#endregion
302
- export { mdxCollection as n, MDXCollection as t };
303
- //# sourceMappingURL=mdx-iZ2uP27Z.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mdx-iZ2uP27Z.js","names":["code: InitializerCode","serializableCoreOptions: CoreOptions"],"sources":["../src/collections/mdx.ts"],"sourcesContent":["import type { Collection } from \"@/collections\";\nimport type { PostprocessOptions } from \"@/collections/mdx/remark-postprocess\";\nimport type { CoreOptions, EmitCodeGeneratorContext } 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 type { PreprocessOptions } from \"@/collections/mdx/remark-preprocess\";\nimport { 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 } from \"@/plugins/git\";\nimport path from \"node:path\";\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 frontmatter?: FrontmatterSchema;\n options?: (environment: \"bundler\" | \"runtime\") => Awaitable<ProcessorOptions>;\n lazy?: boolean;\n dynamic?: boolean;\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 EmitCodeGeneratorContext & {\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.getMDXOptions = config.options;\n this.dynamic = config.dynamic ?? false;\n this.lazy = config.lazy ?? false;\n if (config.frontmatter) {\n const frontmatter = config.frontmatter;\n // Store schema for use in studio/editors\n this.frontmatterSchema = frontmatter;\n this.frontmatter.pipe((data, { filePath }) => {\n return validate(\n frontmatter,\n data,\n undefined,\n `invalid frontmatter in ${filePath}`,\n ) as Promise<Record<string, unknown>>;\n });\n }\n\n if (this.postprocess?.extractLinkReferences) {\n this.storeInitializer.pipe((code, { codegen, environment }) => {\n codegen.addNamedImport([\"WithExtractedReferences\"], RuntimePaths[environment], true);\n code.typeParams[2] += \" & WithExtractedReferences\";\n return code;\n });\n }\n\n this.onEmit.pipe(async (entries, { createCodeGenerator }) => {\n entries.push(\n await createCodeGenerator(`${this.name}.ts`, (ctx) =>\n this.generateCollectionStoreServer(ctx),\n ),\n await createCodeGenerator(`${this.name}.browser.ts`, (ctx) =>\n this.generateCollectionStoreBrowser(ctx),\n ),\n );\n if (this.dynamic)\n entries.push(\n await createCodeGenerator(`${this.name}.dynamic.ts`, (ctx) =>\n this.generateCollectionStoreDynamic(ctx),\n ),\n );\n return entries;\n });\n this.onServer.hook(({ core, server }) => {\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 const { loaders } = this.pluginHook(loaderHook);\n loaders.push(mdxLoader());\n\n this.pluginHook(gitHook).onClient.hook(({ 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\n private async generateDocCollectionFrontmatterGlob(\n { workspace, codegen }: EmitCodeGeneratorContext,\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,\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(\n { codegen, workspace }: EmitCodeGeneratorContext,\n eager = false,\n ) {\n let s = `{`;\n const files = await this.getFiles();\n const query = codegen.formatQuery({\n collection: this.name,\n workspace,\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 private async generateCollectionStoreServer(context: EmitCodeGeneratorContext) {\n const { core, codegen } = context;\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(context, true);\n const bodyGlob = await this.generateDocCollectionGlob(context);\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(context, true),\n ],\n };\n }\n\n code = this.storeInitializer.run(code, {\n ...context,\n environment: \"server\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }\n\n private async generateCollectionStoreBrowser(context: EmitCodeGeneratorContext) {\n const { core, codegen } = context;\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(context)],\n };\n code = this.storeInitializer.run(code, {\n ...context,\n environment: \"browser\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\n }\n\n private async generateCollectionStoreDynamic(context: EmitCodeGeneratorContext) {\n const { core, codegen } = context;\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 = (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(context, true),\n \"_jsx_runtime\",\n ],\n };\n\n code = this.storeInitializer.run(code, {\n ...context,\n environment: \"dynamic\",\n });\n codegen.push(`export const ${this.name} = ${formatInitializer(code)};`);\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 { ExtractedReference } from \"@/collections/mdx/remark-postprocess\";\nexport type { CompiledMDX } from \"@/collections/mdx/build-mdx\";\n"],"mappings":"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"}