fumadocs-mdx 13.0.0 → 13.0.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/bin.cjs +294 -257
- package/dist/{build-mdx-CzrQDBRZ.d.ts → build-mdx-CCNr86q6.d.ts} +1 -1
- package/dist/{build-mdx-BHG-_uxo.d.cts → build-mdx-D-r3_eQL.d.cts} +1 -1
- package/dist/bun/index.cjs +114 -34
- package/dist/bun/index.d.cts +8 -3
- package/dist/bun/index.d.ts +8 -3
- package/dist/bun/index.js +20 -10
- package/dist/{chunk-6Y5JDZHD.js → chunk-CXA4JO4Z.js} +1 -21
- package/dist/chunk-EELYB2XC.js +207 -0
- package/dist/{chunk-CEA6MYJU.js → chunk-XQ5O7IPO.js} +29 -27
- package/dist/chunk-XZY2AWJI.js +81 -0
- package/dist/{chunk-XV5Z4BFL.js → chunk-YVCR6FUH.js} +1 -1
- package/dist/config/index.d.cts +2 -2
- package/dist/config/index.d.ts +2 -2
- package/dist/{define-BCNh3n4O.d.cts → core-B6j6Fxse.d.cts} +101 -38
- package/dist/{define-bck_EB4t.d.ts → core-B6j6Fxse.d.ts} +101 -38
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/next/index.cjs +195 -163
- package/dist/next/index.js +79 -71
- package/dist/node/loader.cjs +120 -35
- package/dist/node/loader.js +10 -5
- package/dist/plugins/json-schema.cjs +103 -2
- package/dist/plugins/json-schema.d.cts +12 -4
- package/dist/plugins/json-schema.d.ts +12 -4
- package/dist/plugins/json-schema.js +40 -2
- package/dist/runtime/next/async.d.cts +4 -4
- package/dist/runtime/next/async.d.ts +4 -4
- package/dist/runtime/next/async.js +3 -3
- package/dist/runtime/next/index.d.cts +5 -5
- package/dist/runtime/next/index.d.ts +5 -5
- package/dist/runtime/vite/browser.d.cts +3 -3
- package/dist/runtime/vite/browser.d.ts +3 -3
- package/dist/runtime/vite/server.d.cts +3 -3
- package/dist/runtime/vite/server.d.ts +3 -3
- package/dist/{types-1cCFEzWt.d.ts → types-AGzTfBmf.d.ts} +1 -1
- package/dist/{types-D5NhXTJY.d.cts → types-DKGMoay5.d.cts} +1 -1
- package/dist/vite/index.cjs +145 -108
- package/dist/vite/index.js +53 -45
- package/dist/{loader-mdx.cjs → webpack/index.cjs} +151 -58
- package/dist/webpack/index.js +44 -0
- package/loader-mdx.cjs +1 -1
- package/package.json +4 -3
- package/dist/chunk-4MAYA5QX.js +0 -44
- package/dist/chunk-HI62EXSB.js +0 -127
- package/dist/loader-mdx.js +0 -39
- package/dist/plugins/index.cjs +0 -78
- package/dist/plugins/index.d.cts +0 -7
- package/dist/plugins/index.d.ts +0 -7
- package/dist/plugins/index.js +0 -6
- package/dist/remark-postprocess-K233ZVBK.d.cts +0 -22
- package/dist/remark-postprocess-K233ZVBK.d.ts +0 -22
- package/dist/watcher-WXJDWRZY.js +0 -22
- /package/dist/{loader-mdx.d.cts → webpack/index.d.cts} +0 -0
- /package/dist/{loader-mdx.d.ts → webpack/index.d.ts} +0 -0
package/dist/bin.cjs
CHANGED
|
@@ -34,13 +34,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
34
34
|
function findConfigFile() {
|
|
35
35
|
return import_node_path.default.resolve("source.config.ts");
|
|
36
36
|
}
|
|
37
|
-
function resolvedConfig(loaded) {
|
|
38
|
-
return {
|
|
39
|
-
getConfig() {
|
|
40
|
-
return loaded;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
37
|
var import_node_path, import_promises;
|
|
45
38
|
var init_config = __esm({
|
|
46
39
|
"src/loaders/config/index.ts"() {
|
|
@@ -50,53 +43,6 @@ var init_config = __esm({
|
|
|
50
43
|
}
|
|
51
44
|
});
|
|
52
45
|
|
|
53
|
-
// src/plugins/index.ts
|
|
54
|
-
function createPluginHandler(context, defaultPlugins = []) {
|
|
55
|
-
const plugins2 = [];
|
|
56
|
-
async function write(entry) {
|
|
57
|
-
const file = import_node_path2.default.join(context.outDir, entry.path);
|
|
58
|
-
await import_promises2.default.mkdir(import_node_path2.default.dirname(file), { recursive: true });
|
|
59
|
-
await import_promises2.default.writeFile(file, entry.content);
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
async init(config) {
|
|
63
|
-
if (config.global.plugins) {
|
|
64
|
-
defaultPlugins.push(...config.global.plugins);
|
|
65
|
-
}
|
|
66
|
-
for await (const option of defaultPlugins) {
|
|
67
|
-
if (!option) continue;
|
|
68
|
-
if (Array.isArray(option)) plugins2.push(...option);
|
|
69
|
-
else plugins2.push(option);
|
|
70
|
-
}
|
|
71
|
-
for (const plugin of plugins2) {
|
|
72
|
-
const out = await plugin.config?.call(context, config);
|
|
73
|
-
if (out) config = out;
|
|
74
|
-
}
|
|
75
|
-
return config;
|
|
76
|
-
},
|
|
77
|
-
async emit() {
|
|
78
|
-
const out = await Promise.all(
|
|
79
|
-
plugins2.map((plugin) => {
|
|
80
|
-
return plugin.emit?.call(context) ?? [];
|
|
81
|
-
})
|
|
82
|
-
);
|
|
83
|
-
return out.flat();
|
|
84
|
-
},
|
|
85
|
-
async emitAndWrite() {
|
|
86
|
-
const entries = await this.emit();
|
|
87
|
-
await Promise.all(entries.map(write));
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
var import_node_path2, import_promises2;
|
|
92
|
-
var init_plugins = __esm({
|
|
93
|
-
"src/plugins/index.ts"() {
|
|
94
|
-
"use strict";
|
|
95
|
-
import_node_path2 = __toESM(require("path"), 1);
|
|
96
|
-
import_promises2 = __toESM(require("fs/promises"), 1);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
46
|
// src/loaders/mdx/preset.ts
|
|
101
47
|
var preset_exports = {};
|
|
102
48
|
__export(preset_exports, {
|
|
@@ -266,18 +212,18 @@ async function compileConfig(configPath, outDir) {
|
|
|
266
212
|
}
|
|
267
213
|
async function loadConfig(configPath, outDir, build = false) {
|
|
268
214
|
if (build) await compileConfig(configPath, outDir);
|
|
269
|
-
const url = (0, import_node_url.pathToFileURL)(
|
|
215
|
+
const url = (0, import_node_url.pathToFileURL)(path2.resolve(outDir, "source.config.mjs"));
|
|
270
216
|
url.searchParams.set("hash", Date.now().toString());
|
|
271
217
|
const config = import(url.href).then(
|
|
272
218
|
(loaded) => buildConfig(loaded)
|
|
273
219
|
);
|
|
274
220
|
return await config;
|
|
275
221
|
}
|
|
276
|
-
var
|
|
222
|
+
var path2, import_node_url;
|
|
277
223
|
var init_load = __esm({
|
|
278
224
|
"src/loaders/config/load.ts"() {
|
|
279
225
|
"use strict";
|
|
280
|
-
|
|
226
|
+
path2 = __toESM(require("path"), 1);
|
|
281
227
|
import_node_url = require("url");
|
|
282
228
|
init_build();
|
|
283
229
|
}
|
|
@@ -285,8 +231,8 @@ var init_load = __esm({
|
|
|
285
231
|
|
|
286
232
|
// src/next/file-cache.ts
|
|
287
233
|
function toFullPath(file) {
|
|
288
|
-
if (
|
|
289
|
-
return
|
|
234
|
+
if (import_node_path2.default.isAbsolute(file)) {
|
|
235
|
+
return import_node_path2.default.relative(process.cwd(), file);
|
|
290
236
|
}
|
|
291
237
|
return file;
|
|
292
238
|
}
|
|
@@ -294,20 +240,20 @@ async function readFileWithCache(file) {
|
|
|
294
240
|
const fullPath = toFullPath(file);
|
|
295
241
|
const cached = map.get(fullPath);
|
|
296
242
|
if (cached) return cached;
|
|
297
|
-
const read =
|
|
243
|
+
const read = import_promises2.default.readFile(fullPath).then((s) => s.toString());
|
|
298
244
|
map.set(fullPath, read);
|
|
299
245
|
return read;
|
|
300
246
|
}
|
|
301
247
|
function removeFileCache(file) {
|
|
302
248
|
map.delete(toFullPath(file));
|
|
303
249
|
}
|
|
304
|
-
var import_lru_cache,
|
|
250
|
+
var import_lru_cache, import_promises2, import_node_path2, map;
|
|
305
251
|
var init_file_cache = __esm({
|
|
306
252
|
"src/next/file-cache.ts"() {
|
|
307
253
|
"use strict";
|
|
308
254
|
import_lru_cache = require("lru-cache");
|
|
309
|
-
|
|
310
|
-
|
|
255
|
+
import_promises2 = __toESM(require("fs/promises"), 1);
|
|
256
|
+
import_node_path2 = __toESM(require("path"), 1);
|
|
311
257
|
map = new import_lru_cache.LRUCache({
|
|
312
258
|
max: 100
|
|
313
259
|
});
|
|
@@ -365,7 +311,7 @@ async function getGitTimestamp(file) {
|
|
|
365
311
|
try {
|
|
366
312
|
const out = await (0, import_tinyexec.x)(
|
|
367
313
|
"git",
|
|
368
|
-
["log", "-1", '--pretty="%ai"',
|
|
314
|
+
["log", "-1", '--pretty="%ai"', import_node_path3.default.relative(process.cwd(), file)],
|
|
369
315
|
{
|
|
370
316
|
throwOnError: true
|
|
371
317
|
}
|
|
@@ -377,11 +323,11 @@ async function getGitTimestamp(file) {
|
|
|
377
323
|
return;
|
|
378
324
|
}
|
|
379
325
|
}
|
|
380
|
-
var
|
|
326
|
+
var import_node_path3, import_tinyexec, cache;
|
|
381
327
|
var init_git_timestamp = __esm({
|
|
382
328
|
"src/utils/git-timestamp.ts"() {
|
|
383
329
|
"use strict";
|
|
384
|
-
|
|
330
|
+
import_node_path3 = __toESM(require("path"), 1);
|
|
385
331
|
import_tinyexec = require("tinyexec");
|
|
386
332
|
cache = /* @__PURE__ */ new Map();
|
|
387
333
|
}
|
|
@@ -424,7 +370,7 @@ function getImportCode(info) {
|
|
|
424
370
|
return `import ${specifier}`;
|
|
425
371
|
}
|
|
426
372
|
function toImportPath(file, config) {
|
|
427
|
-
const ext =
|
|
373
|
+
const ext = import_node_path4.default.extname(file);
|
|
428
374
|
let filename;
|
|
429
375
|
if (ext === ".ts" && config.jsExtension) {
|
|
430
376
|
filename = file.substring(0, file.length - ext.length) + ".js";
|
|
@@ -435,55 +381,94 @@ function toImportPath(file, config) {
|
|
|
435
381
|
}
|
|
436
382
|
let importPath;
|
|
437
383
|
if ("relativeTo" in config) {
|
|
438
|
-
importPath =
|
|
439
|
-
if (!
|
|
384
|
+
importPath = import_node_path4.default.relative(config.relativeTo, filename);
|
|
385
|
+
if (!import_node_path4.default.isAbsolute(importPath) && !importPath.startsWith(".")) {
|
|
440
386
|
importPath = `./${importPath}`;
|
|
441
387
|
}
|
|
442
388
|
} else {
|
|
443
|
-
importPath =
|
|
389
|
+
importPath = import_node_path4.default.resolve(filename);
|
|
444
390
|
}
|
|
445
|
-
return importPath.replaceAll(
|
|
391
|
+
return importPath.replaceAll(import_node_path4.default.sep, "/");
|
|
446
392
|
}
|
|
447
393
|
function ident(code, tab = 1) {
|
|
448
394
|
return code.split("\n").map((v) => " ".repeat(tab) + v).join("\n");
|
|
449
395
|
}
|
|
450
|
-
var
|
|
396
|
+
var import_node_path4;
|
|
451
397
|
var init_import_formatter = __esm({
|
|
452
398
|
"src/utils/import-formatter.ts"() {
|
|
453
399
|
"use strict";
|
|
454
|
-
|
|
400
|
+
import_node_path4 = __toESM(require("path"), 1);
|
|
455
401
|
}
|
|
456
402
|
});
|
|
457
403
|
|
|
458
404
|
// src/utils/collections.ts
|
|
459
|
-
function getSupportedFormats(collection) {
|
|
460
|
-
return {
|
|
461
|
-
doc: ["mdx", "md"],
|
|
462
|
-
meta: ["json", "yaml"]
|
|
463
|
-
}[collection.type];
|
|
464
|
-
}
|
|
465
405
|
function getGlobPatterns(collection) {
|
|
466
406
|
if (collection.files) return collection.files;
|
|
467
|
-
return [`**/*.{${
|
|
407
|
+
return [`**/*.{${SupportedFormats[collection.type].join(",")}}`];
|
|
468
408
|
}
|
|
469
409
|
function isFileSupported(filePath, collection) {
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
410
|
+
return SupportedFormats[collection.type].some(
|
|
411
|
+
(format) => filePath.endsWith(`.${format}`)
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
async function getCollectionFiles(collection) {
|
|
415
|
+
const files = /* @__PURE__ */ new Map();
|
|
416
|
+
const dirs = Array.isArray(collection.dir) ? collection.dir : [collection.dir];
|
|
417
|
+
const patterns = getGlobPatterns(collection);
|
|
418
|
+
await Promise.all(
|
|
419
|
+
dirs.map(async (dir) => {
|
|
420
|
+
const result = await (0, import_tinyglobby.glob)(patterns, {
|
|
421
|
+
cwd: import_node_path5.default.resolve(dir)
|
|
422
|
+
});
|
|
423
|
+
for (const item of result) {
|
|
424
|
+
if (!isFileSupported(item, collection)) continue;
|
|
425
|
+
const fullPath = import_node_path5.default.join(dir, item);
|
|
426
|
+
files.set(fullPath, {
|
|
427
|
+
path: item,
|
|
428
|
+
fullPath
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
})
|
|
432
|
+
);
|
|
433
|
+
return Array.from(files.values());
|
|
474
434
|
}
|
|
435
|
+
var import_picomatch, import_tinyglobby, import_node_path5, SupportedFormats;
|
|
475
436
|
var init_collections = __esm({
|
|
476
437
|
"src/utils/collections.ts"() {
|
|
477
438
|
"use strict";
|
|
439
|
+
import_picomatch = __toESM(require("picomatch"), 1);
|
|
440
|
+
import_tinyglobby = require("tinyglobby");
|
|
441
|
+
import_node_path5 = __toESM(require("path"), 1);
|
|
442
|
+
SupportedFormats = {
|
|
443
|
+
doc: ["mdx", "md"],
|
|
444
|
+
meta: ["json", "yaml"]
|
|
445
|
+
};
|
|
478
446
|
}
|
|
479
447
|
});
|
|
480
448
|
|
|
481
449
|
// src/plugins/next.ts
|
|
482
450
|
function next() {
|
|
483
451
|
let config;
|
|
452
|
+
let shouldEmitOnChange = false;
|
|
484
453
|
return {
|
|
454
|
+
name: "next",
|
|
485
455
|
config(v) {
|
|
486
456
|
config = v;
|
|
457
|
+
shouldEmitOnChange = false;
|
|
458
|
+
for (const collection of config.collections.values()) {
|
|
459
|
+
if (collection.type === "doc" && collection.async || collection.type === "docs" && collection.docs.async) {
|
|
460
|
+
shouldEmitOnChange = true;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
configureServer(server) {
|
|
465
|
+
if (!server.watcher) return;
|
|
466
|
+
server.watcher.on("all", async () => {
|
|
467
|
+
if (!shouldEmitOnChange) return;
|
|
468
|
+
await this.core.emitAndWrite({
|
|
469
|
+
filterPlugin: (plugin) => plugin.name === "next"
|
|
470
|
+
});
|
|
471
|
+
});
|
|
487
472
|
},
|
|
488
473
|
async emit() {
|
|
489
474
|
return [
|
|
@@ -626,27 +611,6 @@ async function indexFile(configPath, config, importPath, configHash = false) {
|
|
|
626
611
|
...resolvedDeclares
|
|
627
612
|
].join("\n");
|
|
628
613
|
}
|
|
629
|
-
async function getCollectionFiles(collection) {
|
|
630
|
-
const files = /* @__PURE__ */ new Map();
|
|
631
|
-
const dirs = Array.isArray(collection.dir) ? collection.dir : [collection.dir];
|
|
632
|
-
const patterns = getGlobPatterns(collection);
|
|
633
|
-
await Promise.all(
|
|
634
|
-
dirs.map(async (dir) => {
|
|
635
|
-
const result = await (0, import_tinyglobby.glob)(patterns, {
|
|
636
|
-
cwd: path7.resolve(dir)
|
|
637
|
-
});
|
|
638
|
-
for (const item of result) {
|
|
639
|
-
if (!isFileSupported(item, collection)) continue;
|
|
640
|
-
const fullPath = path7.join(dir, item);
|
|
641
|
-
files.set(fullPath, {
|
|
642
|
-
path: item,
|
|
643
|
-
fullPath
|
|
644
|
-
});
|
|
645
|
-
}
|
|
646
|
-
})
|
|
647
|
-
);
|
|
648
|
-
return Array.from(files.values());
|
|
649
|
-
}
|
|
650
614
|
function parseMetaEntry(file, content) {
|
|
651
615
|
const extname4 = path7.extname(file);
|
|
652
616
|
try {
|
|
@@ -659,13 +623,12 @@ function parseMetaEntry(file, content) {
|
|
|
659
623
|
}
|
|
660
624
|
throw new Error(`Unknown meta file format: ${extname4}, in ${file}.`);
|
|
661
625
|
}
|
|
662
|
-
var path7, import_node_crypto,
|
|
626
|
+
var path7, import_node_crypto, import_js_yaml2;
|
|
663
627
|
var init_next = __esm({
|
|
664
628
|
"src/plugins/next.ts"() {
|
|
665
629
|
"use strict";
|
|
666
630
|
path7 = __toESM(require("path"), 1);
|
|
667
631
|
import_node_crypto = require("crypto");
|
|
668
|
-
import_tinyglobby = require("tinyglobby");
|
|
669
632
|
init_validation();
|
|
670
633
|
init_file_cache();
|
|
671
634
|
import_js_yaml2 = require("js-yaml");
|
|
@@ -676,33 +639,82 @@ var init_next = __esm({
|
|
|
676
639
|
}
|
|
677
640
|
});
|
|
678
641
|
|
|
679
|
-
// src/
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
}
|
|
696
|
-
|
|
642
|
+
// src/core.ts
|
|
643
|
+
function createCore(options, defaultPlugins = []) {
|
|
644
|
+
let config;
|
|
645
|
+
let plugins2;
|
|
646
|
+
return {
|
|
647
|
+
_options: options,
|
|
648
|
+
getPluginContext() {
|
|
649
|
+
return {
|
|
650
|
+
core: this,
|
|
651
|
+
...options
|
|
652
|
+
};
|
|
653
|
+
},
|
|
654
|
+
/**
|
|
655
|
+
* Convenient cache store, reset when config changes
|
|
656
|
+
*/
|
|
657
|
+
cache: /* @__PURE__ */ new Map(),
|
|
658
|
+
async init({ config: newConfig }) {
|
|
659
|
+
config = await newConfig;
|
|
660
|
+
this.cache.clear();
|
|
661
|
+
plugins2 = [];
|
|
662
|
+
for await (const option of [
|
|
663
|
+
...defaultPlugins,
|
|
664
|
+
...config.global.plugins ?? []
|
|
665
|
+
]) {
|
|
666
|
+
if (!option) continue;
|
|
667
|
+
if (Array.isArray(option)) plugins2.push(...option);
|
|
668
|
+
else plugins2.push(option);
|
|
669
|
+
}
|
|
670
|
+
for (const plugin of plugins2) {
|
|
671
|
+
const out = await plugin.config?.call(this.getPluginContext(), config);
|
|
672
|
+
if (out) config = out;
|
|
673
|
+
}
|
|
674
|
+
return this;
|
|
675
|
+
},
|
|
676
|
+
getConfig() {
|
|
677
|
+
return config;
|
|
678
|
+
},
|
|
679
|
+
creatConfigLoader() {
|
|
680
|
+
return {
|
|
681
|
+
getConfig() {
|
|
682
|
+
return config;
|
|
683
|
+
}
|
|
684
|
+
};
|
|
685
|
+
},
|
|
686
|
+
async initServer(server) {
|
|
687
|
+
for (const plugin of plugins2) {
|
|
688
|
+
await plugin.configureServer?.call(this.getPluginContext(), server);
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
async emitAndWrite({
|
|
692
|
+
filterPlugin = () => true
|
|
693
|
+
} = {}) {
|
|
694
|
+
const start2 = performance.now();
|
|
695
|
+
const out = await Promise.all(
|
|
696
|
+
plugins2.map((plugin) => {
|
|
697
|
+
if (!filterPlugin(plugin) || !plugin.emit) return [];
|
|
698
|
+
return plugin.emit.call(this.getPluginContext());
|
|
699
|
+
})
|
|
700
|
+
);
|
|
701
|
+
await Promise.all(
|
|
702
|
+
out.flat().map(async (entry) => {
|
|
703
|
+
const file = import_node_path6.default.join(options.outDir, entry.path);
|
|
704
|
+
await import_promises3.default.mkdir(import_node_path6.default.dirname(file), { recursive: true });
|
|
705
|
+
await import_promises3.default.writeFile(file, entry.content);
|
|
706
|
+
})
|
|
707
|
+
);
|
|
708
|
+
console.log(`[MDX] generated files in ${performance.now() - start2}ms`);
|
|
697
709
|
}
|
|
698
|
-
}
|
|
699
|
-
return watcher2;
|
|
710
|
+
};
|
|
700
711
|
}
|
|
701
|
-
var
|
|
702
|
-
var
|
|
703
|
-
"src/
|
|
712
|
+
var import_node_path6, import_promises3;
|
|
713
|
+
var init_core = __esm({
|
|
714
|
+
"src/core.ts"() {
|
|
704
715
|
"use strict";
|
|
705
|
-
|
|
716
|
+
import_node_path6 = __toESM(require("path"), 1);
|
|
717
|
+
import_promises3 = __toESM(require("fs/promises"), 1);
|
|
706
718
|
}
|
|
707
719
|
});
|
|
708
720
|
|
|
@@ -764,63 +776,63 @@ function createMDX(createOptions = {}) {
|
|
|
764
776
|
};
|
|
765
777
|
}
|
|
766
778
|
async function init(dev, options) {
|
|
767
|
-
const
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
);
|
|
779
|
+
const core = createNextCore(options);
|
|
780
|
+
async function initOrReload() {
|
|
781
|
+
await core.init({
|
|
782
|
+
config: loadConfig(options.configPath, options.outDir, true)
|
|
783
|
+
});
|
|
784
|
+
await core.emitAndWrite();
|
|
773
785
|
}
|
|
774
|
-
async function
|
|
775
|
-
const
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
786
|
+
async function devServer() {
|
|
787
|
+
const { FSWatcher } = await import("chokidar");
|
|
788
|
+
const watcher = new FSWatcher({
|
|
789
|
+
ignoreInitial: true,
|
|
790
|
+
persistent: true,
|
|
791
|
+
ignored: [options.outDir]
|
|
792
|
+
});
|
|
793
|
+
watcher.add(options.configPath);
|
|
794
|
+
for (const collection of core.getConfig().collections.values()) {
|
|
795
|
+
if (collection.type === "docs") {
|
|
796
|
+
watcher.add(collection.docs.dir);
|
|
797
|
+
watcher.add(collection.meta.dir);
|
|
781
798
|
} else {
|
|
782
|
-
|
|
799
|
+
watcher.add(collection.dir);
|
|
783
800
|
}
|
|
784
801
|
}
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
async function onUpdate(event, file) {
|
|
791
|
-
const absolutePath = path8.resolve(file);
|
|
802
|
+
watcher.on("ready", () => {
|
|
803
|
+
console.log("[MDX] started dev server");
|
|
804
|
+
});
|
|
805
|
+
watcher.on("all", async (event, file) => {
|
|
806
|
+
const absolutePath = path9.resolve(file);
|
|
792
807
|
if (event === "change") removeFileCache(absolutePath);
|
|
793
|
-
if (absolutePath ===
|
|
794
|
-
|
|
808
|
+
if (absolutePath === path9.resolve(options.configPath)) {
|
|
809
|
+
watcher.removeAllListeners();
|
|
810
|
+
await watcher.close();
|
|
811
|
+
await initOrReload();
|
|
795
812
|
console.log("[MDX] restarting dev server");
|
|
796
|
-
await
|
|
797
|
-
void devServer();
|
|
813
|
+
await devServer();
|
|
798
814
|
}
|
|
799
|
-
await emitFiles();
|
|
800
|
-
}
|
|
801
|
-
instance.on("ready", () => {
|
|
802
|
-
console.log("[MDX] started dev server");
|
|
803
|
-
});
|
|
804
|
-
instance.on("all", (event, file) => {
|
|
805
|
-
void onUpdate(event, file);
|
|
806
815
|
});
|
|
807
816
|
process.on("exit", () => {
|
|
817
|
+
if (watcher.closed) return;
|
|
808
818
|
console.log("[MDX] closing dev server");
|
|
809
|
-
void
|
|
819
|
+
void watcher.close();
|
|
810
820
|
});
|
|
821
|
+
await core.initServer({ watcher });
|
|
822
|
+
}
|
|
823
|
+
await initOrReload();
|
|
824
|
+
if (dev) {
|
|
825
|
+
await devServer();
|
|
811
826
|
}
|
|
812
|
-
await updateConfig();
|
|
813
|
-
await emitFiles();
|
|
814
|
-
if (dev) void devServer();
|
|
815
827
|
}
|
|
816
828
|
async function postInstall(configPath = findConfigFile(), outDir = ".source") {
|
|
817
|
-
const
|
|
829
|
+
const core = await createNextCore({
|
|
818
830
|
outDir,
|
|
819
831
|
configPath
|
|
832
|
+
}).init({
|
|
833
|
+
config: loadConfig(configPath, outDir, true)
|
|
820
834
|
});
|
|
821
|
-
await
|
|
822
|
-
await pluginHandler.emitAndWrite();
|
|
823
|
-
console.log("[MDX] types generated");
|
|
835
|
+
await core.emitAndWrite();
|
|
824
836
|
}
|
|
825
837
|
function applyDefaults(options) {
|
|
826
838
|
return {
|
|
@@ -828,11 +840,11 @@ function applyDefaults(options) {
|
|
|
828
840
|
configPath: options.configPath ?? findConfigFile()
|
|
829
841
|
};
|
|
830
842
|
}
|
|
831
|
-
function
|
|
843
|
+
function createNextCore({
|
|
832
844
|
outDir,
|
|
833
845
|
configPath
|
|
834
846
|
}) {
|
|
835
|
-
|
|
847
|
+
const core = createCore(
|
|
836
848
|
{
|
|
837
849
|
environment: "next",
|
|
838
850
|
outDir,
|
|
@@ -840,18 +852,32 @@ function createNextPluginHandler({
|
|
|
840
852
|
},
|
|
841
853
|
[next()]
|
|
842
854
|
);
|
|
855
|
+
return {
|
|
856
|
+
...core,
|
|
857
|
+
async emitAndWrite(...args) {
|
|
858
|
+
try {
|
|
859
|
+
await core.emitAndWrite(...args);
|
|
860
|
+
} catch (err) {
|
|
861
|
+
if (err instanceof ValidationError) {
|
|
862
|
+
console.error(err.toStringFormatted());
|
|
863
|
+
} else {
|
|
864
|
+
console.error(err);
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
};
|
|
843
869
|
}
|
|
844
|
-
var
|
|
870
|
+
var path9, defaultPageExtensions;
|
|
845
871
|
var init_next2 = __esm({
|
|
846
872
|
"src/next/index.ts"() {
|
|
847
873
|
"use strict";
|
|
848
874
|
init_config();
|
|
849
|
-
|
|
850
|
-
path8 = __toESM(require("path"), 1);
|
|
875
|
+
path9 = __toESM(require("path"), 1);
|
|
851
876
|
init_load();
|
|
852
877
|
init_file_cache();
|
|
853
878
|
init_validation();
|
|
854
879
|
init_next();
|
|
880
|
+
init_core();
|
|
855
881
|
defaultPageExtensions = ["mdx", "md", "jsx", "js", "tsx", "ts"];
|
|
856
882
|
}
|
|
857
883
|
});
|
|
@@ -982,7 +1008,7 @@ ${e instanceof Error ? e.message : String(e)}`,
|
|
|
982
1008
|
{ cause: e }
|
|
983
1009
|
);
|
|
984
1010
|
}
|
|
985
|
-
const ext =
|
|
1011
|
+
const ext = path10.extname(file);
|
|
986
1012
|
data._compiler?.addDependency(file);
|
|
987
1013
|
if (params.lang || ext !== ".md" && ext !== ".mdx") {
|
|
988
1014
|
const lang = params.lang ?? ext.slice(1);
|
|
@@ -1015,7 +1041,7 @@ ${e instanceof Error ? e.message : String(e)}`,
|
|
|
1015
1041
|
} else {
|
|
1016
1042
|
mdast = await baseProcessor.run(mdast);
|
|
1017
1043
|
}
|
|
1018
|
-
await update(mdast,
|
|
1044
|
+
await update(mdast, path10.dirname(file), data);
|
|
1019
1045
|
return mdast;
|
|
1020
1046
|
};
|
|
1021
1047
|
async function update(tree, directory, data) {
|
|
@@ -1027,7 +1053,7 @@ ${e instanceof Error ? e.message : String(e)}`,
|
|
|
1027
1053
|
if (specifier.length === 0) return "skip";
|
|
1028
1054
|
const attributes = parseElementAttributes(node);
|
|
1029
1055
|
const { file: relativePath, section } = parseSpecifier(specifier);
|
|
1030
|
-
const file =
|
|
1056
|
+
const file = path10.resolve(
|
|
1031
1057
|
"cwd" in attributes ? process.cwd() : directory,
|
|
1032
1058
|
relativePath
|
|
1033
1059
|
);
|
|
@@ -1044,16 +1070,16 @@ ${e instanceof Error ? e.message : String(e)}`,
|
|
|
1044
1070
|
await Promise.all(queue);
|
|
1045
1071
|
}
|
|
1046
1072
|
return async (tree, file) => {
|
|
1047
|
-
await update(tree,
|
|
1073
|
+
await update(tree, path10.dirname(file.path), file.data);
|
|
1048
1074
|
};
|
|
1049
1075
|
}
|
|
1050
|
-
var import_unified, import_unist_util_visit2,
|
|
1076
|
+
var import_unified, import_unist_util_visit2, path10, fs4, import_mdx_plugins, ElementLikeTypes;
|
|
1051
1077
|
var init_remark_include = __esm({
|
|
1052
1078
|
"src/loaders/mdx/remark-include.ts"() {
|
|
1053
1079
|
"use strict";
|
|
1054
1080
|
import_unified = require("unified");
|
|
1055
1081
|
import_unist_util_visit2 = require("unist-util-visit");
|
|
1056
|
-
|
|
1082
|
+
path10 = __toESM(require("path"), 1);
|
|
1057
1083
|
fs4 = __toESM(require("fs/promises"), 1);
|
|
1058
1084
|
init_fuma_matter();
|
|
1059
1085
|
import_mdx_plugins = require("fumadocs-core/mdx-plugins");
|
|
@@ -1234,13 +1260,6 @@ var init_build_mdx = __esm({
|
|
|
1234
1260
|
});
|
|
1235
1261
|
|
|
1236
1262
|
// src/loaders/mdx/index.ts
|
|
1237
|
-
function getConfigHash(config) {
|
|
1238
|
-
let hash = hashes.get(config);
|
|
1239
|
-
if (hash) return hash;
|
|
1240
|
-
hash = Date.now().toString();
|
|
1241
|
-
hashes.set(config, hash);
|
|
1242
|
-
return hash;
|
|
1243
|
-
}
|
|
1244
1263
|
function createMdxLoader(configLoader) {
|
|
1245
1264
|
return async ({
|
|
1246
1265
|
source: value,
|
|
@@ -1251,14 +1270,25 @@ function createMdxLoader(configLoader) {
|
|
|
1251
1270
|
}) => {
|
|
1252
1271
|
const matter = fumaMatter(value);
|
|
1253
1272
|
const parsed = querySchema.parse(query);
|
|
1254
|
-
const
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
const
|
|
1273
|
+
const config = await configLoader.getConfig();
|
|
1274
|
+
let after;
|
|
1275
|
+
if (!isDevelopment && config.global.experimentalBuildCache) {
|
|
1276
|
+
const cacheDir = config.global.experimentalBuildCache;
|
|
1277
|
+
const cacheKey = `${parsed.hash}_${parsed.collection ?? "global"}_${generateCacheHash(filePath)}`;
|
|
1278
|
+
const cached = await import_promises4.default.readFile(import_node_path7.default.join(cacheDir, cacheKey)).then((content) => cacheEntry.parse(JSON.parse(content.toString()))).catch(() => null);
|
|
1259
1279
|
if (cached && cached.hash === generateCacheHash(value)) return cached;
|
|
1280
|
+
after = async () => {
|
|
1281
|
+
await import_promises4.default.mkdir(cacheDir, { recursive: true });
|
|
1282
|
+
await import_promises4.default.writeFile(
|
|
1283
|
+
import_node_path7.default.join(cacheDir, cacheKey),
|
|
1284
|
+
JSON.stringify({
|
|
1285
|
+
...out,
|
|
1286
|
+
hash: generateCacheHash(value)
|
|
1287
|
+
})
|
|
1288
|
+
);
|
|
1289
|
+
};
|
|
1260
1290
|
}
|
|
1261
|
-
const collection = parsed.collection ?
|
|
1291
|
+
const collection = parsed.collection ? config.collections.get(parsed.collection) : void 0;
|
|
1262
1292
|
let docCollection;
|
|
1263
1293
|
switch (collection?.type) {
|
|
1264
1294
|
case "doc":
|
|
@@ -1286,16 +1316,16 @@ function createMdxLoader(configLoader) {
|
|
|
1286
1316
|
};
|
|
1287
1317
|
}
|
|
1288
1318
|
const data = {};
|
|
1289
|
-
if (
|
|
1319
|
+
if (config.global.lastModifiedTime === "git") {
|
|
1290
1320
|
data.lastModified = (await getGitTimestamp(filePath))?.getTime();
|
|
1291
1321
|
}
|
|
1292
1322
|
const lineOffset = isDevelopment ? countLines(matter.matter) : 0;
|
|
1293
1323
|
const compiled = await buildMDX(
|
|
1294
|
-
`${getConfigHash(
|
|
1324
|
+
`${getConfigHash(config)}:${parsed.collection ?? "global"}`,
|
|
1295
1325
|
"\n".repeat(lineOffset) + matter.content,
|
|
1296
1326
|
{
|
|
1297
1327
|
development: isDevelopment,
|
|
1298
|
-
...docCollection?.mdxOptions ?? await
|
|
1328
|
+
...docCollection?.mdxOptions ?? await config.getDefaultMDXOptions(),
|
|
1299
1329
|
postprocess: docCollection?.postprocess,
|
|
1300
1330
|
data,
|
|
1301
1331
|
filePath,
|
|
@@ -1307,19 +1337,17 @@ function createMdxLoader(configLoader) {
|
|
|
1307
1337
|
code: String(compiled.value),
|
|
1308
1338
|
map: compiled.map
|
|
1309
1339
|
};
|
|
1310
|
-
|
|
1311
|
-
await import_promises4.default.mkdir(cacheDir, { recursive: true });
|
|
1312
|
-
await import_promises4.default.writeFile(
|
|
1313
|
-
import_node_path6.default.join(cacheDir, cacheKey),
|
|
1314
|
-
JSON.stringify({
|
|
1315
|
-
...out,
|
|
1316
|
-
hash: generateCacheHash(value)
|
|
1317
|
-
})
|
|
1318
|
-
);
|
|
1319
|
-
}
|
|
1340
|
+
await after?.();
|
|
1320
1341
|
return out;
|
|
1321
1342
|
};
|
|
1322
1343
|
}
|
|
1344
|
+
function getConfigHash(config) {
|
|
1345
|
+
let hash = hashes.get(config);
|
|
1346
|
+
if (hash) return hash;
|
|
1347
|
+
hash = Date.now().toString();
|
|
1348
|
+
hashes.set(config, hash);
|
|
1349
|
+
return hash;
|
|
1350
|
+
}
|
|
1323
1351
|
function generateCacheHash(input) {
|
|
1324
1352
|
return (0, import_node_crypto2.createHash)("md5").update(input).digest("hex");
|
|
1325
1353
|
}
|
|
@@ -1330,7 +1358,7 @@ function countLines(s) {
|
|
|
1330
1358
|
}
|
|
1331
1359
|
return num;
|
|
1332
1360
|
}
|
|
1333
|
-
var import_zod, import_promises4,
|
|
1361
|
+
var import_zod, import_promises4, import_node_path7, import_node_crypto2, querySchema, cacheEntry, hashes;
|
|
1334
1362
|
var init_mdx = __esm({
|
|
1335
1363
|
"src/loaders/mdx/index.ts"() {
|
|
1336
1364
|
"use strict";
|
|
@@ -1340,7 +1368,7 @@ var init_mdx = __esm({
|
|
|
1340
1368
|
init_build_mdx();
|
|
1341
1369
|
import_zod = require("zod");
|
|
1342
1370
|
import_promises4 = __toESM(require("fs/promises"), 1);
|
|
1343
|
-
|
|
1371
|
+
import_node_path7 = __toESM(require("path"), 1);
|
|
1344
1372
|
import_node_crypto2 = require("crypto");
|
|
1345
1373
|
querySchema = import_zod.z.object({
|
|
1346
1374
|
only: import_zod.z.literal(["frontmatter", "all"]).default("all"),
|
|
@@ -1375,7 +1403,7 @@ function toVite(loader) {
|
|
|
1375
1403
|
};
|
|
1376
1404
|
};
|
|
1377
1405
|
}
|
|
1378
|
-
var import_node_url2, import_promises5, import_node_querystring,
|
|
1406
|
+
var import_node_url2, import_promises5, import_node_querystring, import_node_path8;
|
|
1379
1407
|
var init_adapter = __esm({
|
|
1380
1408
|
"src/loaders/adapter.ts"() {
|
|
1381
1409
|
"use strict";
|
|
@@ -1383,7 +1411,7 @@ var init_adapter = __esm({
|
|
|
1383
1411
|
import_promises5 = __toESM(require("fs/promises"), 1);
|
|
1384
1412
|
import_node_querystring = require("querystring");
|
|
1385
1413
|
init_validation();
|
|
1386
|
-
|
|
1414
|
+
import_node_path8 = __toESM(require("path"), 1);
|
|
1387
1415
|
}
|
|
1388
1416
|
});
|
|
1389
1417
|
|
|
@@ -1394,7 +1422,7 @@ function generateGlobImport(patterns, options) {
|
|
|
1394
1422
|
cwd: options.base
|
|
1395
1423
|
});
|
|
1396
1424
|
for (const item of result) {
|
|
1397
|
-
const fullPath =
|
|
1425
|
+
const fullPath = import_node_path9.default.join(options.base, item);
|
|
1398
1426
|
const url = (0, import_node_url3.pathToFileURL)(fullPath);
|
|
1399
1427
|
for (const [k, v] of Object.entries(options.query ?? {})) {
|
|
1400
1428
|
url.searchParams.set(k, v);
|
|
@@ -1408,12 +1436,12 @@ function generateGlobImport(patterns, options) {
|
|
|
1408
1436
|
code += "}";
|
|
1409
1437
|
return code;
|
|
1410
1438
|
}
|
|
1411
|
-
var import_tinyglobby2,
|
|
1439
|
+
var import_tinyglobby2, import_node_path9, import_node_url3;
|
|
1412
1440
|
var init_glob_import = __esm({
|
|
1413
1441
|
"src/utils/glob-import.ts"() {
|
|
1414
1442
|
"use strict";
|
|
1415
1443
|
import_tinyglobby2 = require("tinyglobby");
|
|
1416
|
-
|
|
1444
|
+
import_node_path9 = __toESM(require("path"), 1);
|
|
1417
1445
|
import_node_url3 = require("url");
|
|
1418
1446
|
}
|
|
1419
1447
|
});
|
|
@@ -1426,7 +1454,6 @@ function vite(options) {
|
|
|
1426
1454
|
config = v;
|
|
1427
1455
|
},
|
|
1428
1456
|
emit() {
|
|
1429
|
-
console.log("[Fumadocs MDX] Generating index files");
|
|
1430
1457
|
return [
|
|
1431
1458
|
{
|
|
1432
1459
|
path: "index.ts",
|
|
@@ -1459,12 +1486,12 @@ ${obj}
|
|
|
1459
1486
|
}
|
|
1460
1487
|
function doc(name, collection) {
|
|
1461
1488
|
const patterns = getGlobPatterns(collection);
|
|
1462
|
-
const
|
|
1489
|
+
const dir = getCollectionDir(collection);
|
|
1463
1490
|
const docGlob = generateGlob(patterns, {
|
|
1464
1491
|
query: {
|
|
1465
1492
|
collection: name
|
|
1466
1493
|
},
|
|
1467
|
-
base
|
|
1494
|
+
base: dir
|
|
1468
1495
|
});
|
|
1469
1496
|
if (collection.async) {
|
|
1470
1497
|
const headBlob = generateGlob(patterns, {
|
|
@@ -1473,32 +1500,32 @@ ${obj}
|
|
|
1473
1500
|
collection: name
|
|
1474
1501
|
},
|
|
1475
1502
|
import: "frontmatter",
|
|
1476
|
-
base
|
|
1503
|
+
base: dir
|
|
1477
1504
|
});
|
|
1478
|
-
return `create.docLazy("${name}", "${
|
|
1505
|
+
return `create.docLazy("${name}", "${dir}", ${headBlob}, ${docGlob})`;
|
|
1479
1506
|
}
|
|
1480
|
-
return `create.doc("${name}", "${
|
|
1507
|
+
return `create.doc("${name}", "${dir}", ${docGlob})`;
|
|
1481
1508
|
}
|
|
1482
1509
|
function meta(name, collection) {
|
|
1483
1510
|
const patterns = getGlobPatterns(collection);
|
|
1484
|
-
const
|
|
1485
|
-
return `create.meta("${name}", "${
|
|
1511
|
+
const dir = getCollectionDir(collection);
|
|
1512
|
+
return `create.meta("${name}", "${dir}", ${generateGlob(patterns, {
|
|
1486
1513
|
import: "default",
|
|
1487
|
-
base,
|
|
1514
|
+
base: dir,
|
|
1488
1515
|
query: {
|
|
1489
1516
|
collection: name
|
|
1490
1517
|
}
|
|
1491
1518
|
})})`;
|
|
1492
1519
|
}
|
|
1493
1520
|
function generateGlob(patterns, options2) {
|
|
1494
|
-
patterns =
|
|
1521
|
+
patterns = patterns.map(normalizeGlobPath);
|
|
1495
1522
|
if (runtime === "node" || runtime === "bun") {
|
|
1496
1523
|
return generateGlobImport(patterns, options2);
|
|
1497
1524
|
} else {
|
|
1498
1525
|
return `import.meta.glob(${JSON.stringify(patterns)}, ${JSON.stringify(
|
|
1499
1526
|
{
|
|
1500
1527
|
...options2,
|
|
1501
|
-
base:
|
|
1528
|
+
base: normalizeGlobPath(import_node_path10.default.relative(outDir, options2.base))
|
|
1502
1529
|
},
|
|
1503
1530
|
null,
|
|
1504
1531
|
2
|
|
@@ -1519,33 +1546,38 @@ ${obj}
|
|
|
1519
1546
|
}
|
|
1520
1547
|
return lines.join("\n");
|
|
1521
1548
|
}
|
|
1522
|
-
function
|
|
1523
|
-
|
|
1524
|
-
}
|
|
1525
|
-
function enforceRelative(file) {
|
|
1549
|
+
function normalizeGlobPath(file) {
|
|
1550
|
+
file = slash(file);
|
|
1526
1551
|
if (file.startsWith("./")) return file;
|
|
1527
1552
|
if (file.startsWith("/")) return `.${file}`;
|
|
1528
1553
|
return `./${file}`;
|
|
1529
1554
|
}
|
|
1530
|
-
function
|
|
1531
|
-
|
|
1555
|
+
function getCollectionDir(collection) {
|
|
1556
|
+
const dir = collection.dir;
|
|
1532
1557
|
if (Array.isArray(dir)) {
|
|
1533
1558
|
if (dir.length !== 1)
|
|
1534
1559
|
throw new Error(
|
|
1535
1560
|
`[Fumadocs MDX] Vite Plugin doesn't support multiple \`dir\` for a collection at the moment.`
|
|
1536
1561
|
);
|
|
1537
|
-
|
|
1562
|
+
return dir[0];
|
|
1563
|
+
}
|
|
1564
|
+
return dir;
|
|
1565
|
+
}
|
|
1566
|
+
function slash(path16) {
|
|
1567
|
+
const isExtendedLengthPath = path16.startsWith("\\\\?\\");
|
|
1568
|
+
if (isExtendedLengthPath) {
|
|
1569
|
+
return path16;
|
|
1538
1570
|
}
|
|
1539
|
-
return
|
|
1571
|
+
return path16.replaceAll("\\", "/");
|
|
1540
1572
|
}
|
|
1541
|
-
var
|
|
1573
|
+
var import_node_path10;
|
|
1542
1574
|
var init_vite = __esm({
|
|
1543
1575
|
"src/plugins/vite.ts"() {
|
|
1544
1576
|
"use strict";
|
|
1545
1577
|
init_import_formatter();
|
|
1546
1578
|
init_collections();
|
|
1547
1579
|
init_glob_import();
|
|
1548
|
-
|
|
1580
|
+
import_node_path10 = __toESM(require("path"), 1);
|
|
1549
1581
|
}
|
|
1550
1582
|
});
|
|
1551
1583
|
|
|
@@ -1557,14 +1589,14 @@ __export(vite_exports, {
|
|
|
1557
1589
|
});
|
|
1558
1590
|
async function mdx(config, pluginOptions = {}) {
|
|
1559
1591
|
const options = applyDefaults2(pluginOptions);
|
|
1560
|
-
const
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
const mdxLoader = toVite(createMdxLoader(
|
|
1564
|
-
async function transformMeta(
|
|
1565
|
-
const isJson =
|
|
1592
|
+
const core = await createViteCore(options).init({
|
|
1593
|
+
config: buildConfig(config)
|
|
1594
|
+
});
|
|
1595
|
+
const mdxLoader = toVite(createMdxLoader(core.creatConfigLoader()));
|
|
1596
|
+
async function transformMeta(path16, query, value) {
|
|
1597
|
+
const isJson = path16.endsWith(".json");
|
|
1566
1598
|
const parsed = (0, import_node_querystring2.parse)(query);
|
|
1567
|
-
const collection = parsed.collection ?
|
|
1599
|
+
const collection = parsed.collection ? core.getConfig().collections.get(parsed.collection) : void 0;
|
|
1568
1600
|
if (!collection) return null;
|
|
1569
1601
|
let schema;
|
|
1570
1602
|
switch (collection.type) {
|
|
@@ -1585,8 +1617,8 @@ async function mdx(config, pluginOptions = {}) {
|
|
|
1585
1617
|
const out = await validate(
|
|
1586
1618
|
schema,
|
|
1587
1619
|
data,
|
|
1588
|
-
{ path:
|
|
1589
|
-
`invalid data in ${
|
|
1620
|
+
{ path: path16, source: value },
|
|
1621
|
+
`invalid data in ${path16}`
|
|
1590
1622
|
);
|
|
1591
1623
|
return {
|
|
1592
1624
|
code: isJson ? JSON.stringify(out) : `export default ${JSON.stringify(out)}`,
|
|
@@ -1598,7 +1630,7 @@ async function mdx(config, pluginOptions = {}) {
|
|
|
1598
1630
|
// needed, otherwise other plugins will be executed before our `transform`.
|
|
1599
1631
|
enforce: "pre",
|
|
1600
1632
|
config(config2) {
|
|
1601
|
-
if (!updateViteConfig) return config2;
|
|
1633
|
+
if (!options.updateViteConfig) return config2;
|
|
1602
1634
|
return (0, import_vite.mergeConfig)(config2, {
|
|
1603
1635
|
optimizeDeps: {
|
|
1604
1636
|
exclude: FumadocsDeps
|
|
@@ -1610,11 +1642,16 @@ async function mdx(config, pluginOptions = {}) {
|
|
|
1610
1642
|
});
|
|
1611
1643
|
},
|
|
1612
1644
|
async buildStart() {
|
|
1613
|
-
await
|
|
1645
|
+
await core.emitAndWrite();
|
|
1646
|
+
},
|
|
1647
|
+
async configureServer(server) {
|
|
1648
|
+
await core.initServer({
|
|
1649
|
+
watcher: server.watcher
|
|
1650
|
+
});
|
|
1614
1651
|
},
|
|
1615
1652
|
async transform(value, id) {
|
|
1616
1653
|
const [file, query = ""] = id.split("?");
|
|
1617
|
-
const ext =
|
|
1654
|
+
const ext = path15.extname(file);
|
|
1618
1655
|
try {
|
|
1619
1656
|
if ([".yaml", ".json"].includes(ext))
|
|
1620
1657
|
return await transformMeta(file, query, value);
|
|
@@ -1632,17 +1669,17 @@ async function mdx(config, pluginOptions = {}) {
|
|
|
1632
1669
|
async function postInstall2(configPath = findConfigFile(), pluginOptions = {}) {
|
|
1633
1670
|
const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_load(), load_exports));
|
|
1634
1671
|
const options = applyDefaults2(pluginOptions);
|
|
1635
|
-
const
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1672
|
+
const core = await createViteCore(options).init({
|
|
1673
|
+
config: loadConfig2(configPath, options.outDir, true)
|
|
1674
|
+
});
|
|
1675
|
+
await core.emitAndWrite();
|
|
1639
1676
|
}
|
|
1640
|
-
function
|
|
1677
|
+
function createViteCore({
|
|
1641
1678
|
configPath,
|
|
1642
1679
|
outDir,
|
|
1643
1680
|
generateIndexFile
|
|
1644
1681
|
}) {
|
|
1645
|
-
return
|
|
1682
|
+
return createCore(
|
|
1646
1683
|
{
|
|
1647
1684
|
environment: "vite",
|
|
1648
1685
|
configPath,
|
|
@@ -1661,7 +1698,7 @@ function applyDefaults2(options) {
|
|
|
1661
1698
|
outDir: options.outDir ?? ".source"
|
|
1662
1699
|
};
|
|
1663
1700
|
}
|
|
1664
|
-
var import_vite, import_node_querystring2,
|
|
1701
|
+
var import_vite, import_node_querystring2, path15, import_js_yaml3, FumadocsDeps;
|
|
1665
1702
|
var init_vite2 = __esm({
|
|
1666
1703
|
"src/vite/index.ts"() {
|
|
1667
1704
|
"use strict";
|
|
@@ -1669,13 +1706,13 @@ var init_vite2 = __esm({
|
|
|
1669
1706
|
init_build();
|
|
1670
1707
|
import_node_querystring2 = require("querystring");
|
|
1671
1708
|
init_validation();
|
|
1672
|
-
|
|
1709
|
+
path15 = __toESM(require("path"), 1);
|
|
1673
1710
|
import_js_yaml3 = require("js-yaml");
|
|
1674
1711
|
init_mdx();
|
|
1675
1712
|
init_config();
|
|
1676
1713
|
init_adapter();
|
|
1677
1714
|
init_vite();
|
|
1678
|
-
|
|
1715
|
+
init_core();
|
|
1679
1716
|
FumadocsDeps = ["fumadocs-core", "fumadocs-ui", "fumadocs-openapi"];
|
|
1680
1717
|
}
|
|
1681
1718
|
});
|