fuma-content 1.0.2 → 1.1.0
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-BM9Yf4Nw.js → async-cache-U87GzQTb.js} +1 -1
- package/dist/async-cache-U87GzQTb.js.map +1 -0
- package/dist/{build-mdx-C1PZsGp2.js → build-mdx-BZxE8t2a.js} +16 -11
- package/dist/build-mdx-BZxE8t2a.js.map +1 -0
- package/dist/build-mdx-LhpFasX-.js +4 -0
- package/dist/bun/index.d.ts +7 -4
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +25 -19
- package/dist/bun/index.js.map +1 -1
- package/dist/{bun-QKQnqgIi.js → bun-CBROq3I0.js} +3 -3
- package/dist/bun-CBROq3I0.js.map +1 -0
- package/dist/code-generator-CjC4EEXg.js +102 -0
- package/dist/code-generator-CjC4EEXg.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +15 -0
- package/dist/collections/data/runtime.d.ts.map +1 -0
- package/dist/collections/{meta → data}/runtime.js +4 -4
- package/dist/collections/data/runtime.js.map +1 -0
- package/dist/collections/data.d.ts +47 -0
- package/dist/collections/data.d.ts.map +1 -0
- package/dist/collections/data.js +5 -0
- package/dist/collections/fs.d.ts +3 -0
- package/dist/collections/fs.js +3 -0
- package/dist/collections/index.d.ts +2 -2
- package/dist/collections/index.js +2 -15
- package/dist/collections/json/loader-webpack.d.ts +9 -0
- package/dist/collections/json/loader-webpack.d.ts.map +1 -0
- package/dist/collections/json/loader-webpack.js +15 -0
- package/dist/collections/json/loader-webpack.js.map +1 -0
- package/dist/collections/mdx/loader-webpack.d.ts +5 -5
- package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
- package/dist/collections/mdx/loader-webpack.js +11 -21
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +22 -0
- package/dist/collections/mdx/react.d.ts.map +1 -0
- package/dist/collections/mdx/react.js +35 -0
- package/dist/collections/mdx/react.js.map +1 -0
- package/dist/collections/mdx/runtime-browser.d.ts +11 -45
- package/dist/collections/mdx/runtime-browser.js +6 -44
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +16 -28
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +19 -23
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +10 -49
- package/dist/collections/mdx/runtime.js +2 -11
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx.d.ts +6 -2
- package/dist/collections/mdx.js +6 -246
- package/dist/collections/runtime/file-store.d.ts +4 -22
- package/dist/collections/runtime/file-store.js +15 -14
- package/dist/collections/runtime/file-store.js.map +1 -1
- package/dist/collections/runtime/store.d.ts +3 -3
- package/dist/collections/runtime/store.js +2 -2
- package/dist/collections/yaml/loader-webpack.d.ts +9 -0
- package/dist/collections/yaml/loader-webpack.d.ts.map +1 -0
- package/dist/collections/yaml/loader-webpack.js +15 -0
- package/dist/collections/yaml/loader-webpack.js.map +1 -0
- package/dist/collections-DNFRdCuB.js +98 -0
- package/dist/collections-DNFRdCuB.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/core-BO3b8jMg.d.ts +313 -0
- package/dist/core-BO3b8jMg.d.ts.map +1 -0
- package/dist/core-D5QHSKk6.js +223 -0
- package/dist/core-D5QHSKk6.js.map +1 -0
- package/dist/data-9h98oZwj.js +158 -0
- package/dist/data-9h98oZwj.js.map +1 -0
- package/dist/dynamic-CTYYdl7_.d.ts +33 -0
- package/dist/dynamic-CTYYdl7_.d.ts.map +1 -0
- package/dist/{dynamic-B40uAtdo.js → dynamic-DhKTOrIl.js} +8 -7
- package/dist/dynamic-DhKTOrIl.js.map +1 -0
- package/dist/dynamic.d.ts +3 -0
- package/dist/dynamic.js +3 -0
- package/dist/file-store-laO4IjvB.d.ts +21 -0
- package/dist/file-store-laO4IjvB.d.ts.map +1 -0
- package/dist/fs-D34Sztbh.d.ts +44 -0
- package/dist/fs-D34Sztbh.d.ts.map +1 -0
- package/dist/fs-WWbLA7Gx.js +66 -0
- package/dist/fs-WWbLA7Gx.js.map +1 -0
- package/dist/{fuma-matter-O4fA6nSx.js → fuma-matter-BuBO2w-p.js} +2 -2
- package/dist/fuma-matter-BuBO2w-p.js.map +1 -0
- package/dist/git-2CjUW3M5.d.ts +37 -0
- package/dist/git-2CjUW3M5.d.ts.map +1 -0
- package/dist/git-CQWA37-X.js +60 -0
- package/dist/git-CQWA37-X.js.map +1 -0
- package/dist/index-Da88Sj8w.d.ts +87 -0
- package/dist/index-Da88Sj8w.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/load-from-file-BZxc_BhC.js +3 -0
- package/dist/{load-from-file-1f4WaHsf.js → load-from-file-irx0JI6j.js} +5 -8
- package/dist/load-from-file-irx0JI6j.js.map +1 -0
- package/dist/loader-AIEwGc2f.js +9 -0
- package/dist/loader-BhXHF8vy.js +16 -0
- package/dist/loader-BhXHF8vy.js.map +1 -0
- package/dist/loader-BuR4gkKg.js +77 -0
- package/dist/loader-BuR4gkKg.js.map +1 -0
- package/dist/loader-BzQpSBvP.js +59 -0
- package/dist/loader-BzQpSBvP.js.map +1 -0
- package/dist/{loader-CXnMFuyE.js → loader-D6StkShK.js} +8 -7
- package/dist/loader-D6StkShK.js.map +1 -0
- package/dist/loader-DCK4RwOh.js +8 -0
- package/dist/loader-DwpOcxgh.js +17 -0
- package/dist/loader-DwpOcxgh.js.map +1 -0
- package/dist/loader-zsTVgQjO.js +8 -0
- package/dist/mdx-Dt9hirUu.d.ts +144 -0
- package/dist/mdx-Dt9hirUu.d.ts.map +1 -0
- package/dist/mdx-iZ2uP27Z.js +303 -0
- package/dist/mdx-iZ2uP27Z.js.map +1 -0
- package/dist/next/index.d.ts +6 -10
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +23 -31
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +8 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +10 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/loader.d.ts +5 -2
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +17 -14
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-CGIIJIcs.js → node-2VZOh3P9.js} +7 -5
- package/dist/node-2VZOh3P9.js.map +1 -0
- package/dist/plugins/git.d.ts +3 -2
- package/dist/plugins/git.js +2 -61
- package/dist/plugins/json-schema.d.ts +26 -2
- package/dist/plugins/json-schema.d.ts.map +1 -0
- package/dist/plugins/json-schema.js +42 -51
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +4 -0
- package/dist/plugins/loader/index.js +3 -0
- package/dist/plugins/loader/webpack.d.ts +4 -0
- package/dist/plugins/loader/webpack.js +60 -0
- package/dist/plugins/loader/webpack.js.map +1 -0
- package/dist/runtime-HN-HSB0Z.d.ts +31 -0
- package/dist/runtime-HN-HSB0Z.d.ts.map +1 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts +29 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts.map +1 -0
- package/dist/store-DiuGdV5M.d.ts +31 -0
- package/dist/store-DiuGdV5M.d.ts.map +1 -0
- package/dist/{store-0LQ2PlH6.js → store-IvpEBdxi.js} +4 -4
- package/dist/store-IvpEBdxi.js.map +1 -0
- package/dist/{validation-BOJKRAp5.js → validation-BvVvvLII.js} +11 -2
- package/dist/validation-BvVvvLII.js.map +1 -0
- package/dist/vite/index.d.ts +5 -15
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +24 -21
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-X-2Al8fq.js → vite-C1qXY47G.js} +4 -3
- package/dist/vite-C1qXY47G.js.map +1 -0
- package/package.json +51 -46
- package/dist/async-cache-BM9Yf4Nw.js.map +0 -1
- package/dist/build-D8A5ByFk.js +0 -42
- package/dist/build-D8A5ByFk.js.map +0 -1
- package/dist/build-mdx-C1PZsGp2.js.map +0 -1
- package/dist/build-mdx-DFndaVbS.js +0 -4
- package/dist/bun-QKQnqgIi.js.map +0 -1
- package/dist/code-generator-gPtrfZ6Q.js +0 -133
- package/dist/code-generator-gPtrfZ6Q.js.map +0 -1
- package/dist/collections/handlers/fs.d.ts +0 -2
- package/dist/collections/handlers/fs.js +0 -28
- package/dist/collections/handlers/fs.js.map +0 -1
- package/dist/collections/index.js.map +0 -1
- package/dist/collections/mdx/runtime-browser.d.ts.map +0 -1
- package/dist/collections/mdx/runtime.d.ts.map +0 -1
- package/dist/collections/mdx.js.map +0 -1
- package/dist/collections/meta/loader-webpack.d.ts +0 -9
- package/dist/collections/meta/loader-webpack.d.ts.map +0 -1
- package/dist/collections/meta/loader-webpack.js +0 -28
- package/dist/collections/meta/loader-webpack.js.map +0 -1
- package/dist/collections/meta/runtime.d.ts +0 -11
- package/dist/collections/meta/runtime.d.ts.map +0 -1
- package/dist/collections/meta/runtime.js.map +0 -1
- package/dist/collections/meta.d.ts +0 -2
- package/dist/collections/meta.js +0 -134
- package/dist/collections/meta.js.map +0 -1
- package/dist/collections/runtime/file-store.d.ts.map +0 -1
- package/dist/core-Bkh-SI_3.d.ts +0 -561
- package/dist/core-Bkh-SI_3.d.ts.map +0 -1
- package/dist/core-ZuoVBkeg.js +0 -170
- package/dist/core-ZuoVBkeg.js.map +0 -1
- package/dist/dynamic-B40uAtdo.js.map +0 -1
- package/dist/fuma-matter-O4fA6nSx.js.map +0 -1
- package/dist/load-from-file-1f4WaHsf.js.map +0 -1
- package/dist/load-from-file-BTNnBu6f.js +0 -3
- package/dist/loader-80abXEHx.js +0 -4
- package/dist/loader-BFhPyg3z.js +0 -4
- package/dist/loader-CXnMFuyE.js.map +0 -1
- package/dist/loader-gk94iHf5.js +0 -66
- package/dist/loader-gk94iHf5.js.map +0 -1
- package/dist/next/index.cjs +0 -502
- package/dist/node-CGIIJIcs.js.map +0 -1
- package/dist/pipe-5cnvE6KY.js +0 -31
- package/dist/pipe-5cnvE6KY.js.map +0 -1
- package/dist/plugins/git.js.map +0 -1
- package/dist/plugins/with-loader/index.d.ts +0 -2
- package/dist/plugins/with-loader/index.js +0 -28
- package/dist/plugins/with-loader/index.js.map +0 -1
- package/dist/plugins/with-loader/webpack.d.ts +0 -19
- package/dist/plugins/with-loader/webpack.d.ts.map +0 -1
- package/dist/plugins/with-loader/webpack.js +0 -43
- package/dist/plugins/with-loader/webpack.js.map +0 -1
- package/dist/store-0LQ2PlH6.js.map +0 -1
- package/dist/store-DEjYYF6a.d.ts +0 -31
- package/dist/store-DEjYYF6a.d.ts.map +0 -1
- package/dist/validation-BOJKRAp5.js.map +0 -1
- package/dist/vite-X-2Al8fq.js.map +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
import { t as Core } from "../core-
|
|
1
|
+
import { n as CoreOptions, t as Core } from "../core-BO3b8jMg.js";
|
|
2
2
|
import { NextConfig } from "next";
|
|
3
3
|
|
|
4
4
|
//#region src/next/index.d.ts
|
|
5
|
-
interface NextOptions {
|
|
5
|
+
interface NextOptions extends Pick<CoreOptions, "cwd" | "configPath" | "outDir"> {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
configPath?: string;
|
|
10
|
-
/**
|
|
11
|
-
* Directory for output files
|
|
7
|
+
* clean output directory on start
|
|
12
8
|
*
|
|
13
|
-
* @defaultValue
|
|
9
|
+
* @defaultValue true
|
|
14
10
|
*/
|
|
15
|
-
|
|
11
|
+
clean?: boolean;
|
|
16
12
|
}
|
|
17
|
-
declare function createContent(
|
|
13
|
+
declare function createContent(options?: NextOptions): Promise<(nextConfig?: NextConfig) => NextConfig>;
|
|
18
14
|
declare function createStandaloneCore(options: NextOptions): Promise<Core>;
|
|
19
15
|
//#endregion
|
|
20
16
|
export { NextOptions, createContent, createStandaloneCore };
|
package/dist/next/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/next/index.ts"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/next/index.ts"],"sourcesContent":[],"mappings":";;;;UAOiB,WAAA,SAAoB,KAAK;;AAA1C;AASA;;;EAiBwC,KAAA,CAAA,EAAA,OAAA;;AAjBqB,iBAAvC,aAAA,CAAuC,OAAA,CAAA,EAAhB,WAAgB,CAAA,EAAA,OAAA,CAAA,CAAA,UAAA,CAAA,EAiBvC,UAjBuC,EAAA,GAiBrB,UAjBqB,CAAA;AA6EvC,iBAAA,oBAAA,CAAoB,OAAA,EAAU,WAAV,CAAA,EAAqB,OAArB,CAAqB,IAArB,CAAA"}
|
package/dist/next/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import {
|
|
3
|
-
import { t as loadConfig } from "../load-from-file-
|
|
4
|
-
import
|
|
1
|
+
import { t as Core } from "../core-D5QHSKk6.js";
|
|
2
|
+
import { n as loaderPlugin } from "../loader-BuR4gkKg.js";
|
|
3
|
+
import { t as loadConfig } from "../load-from-file-irx0JI6j.js";
|
|
4
|
+
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/next/index.ts
|
|
7
|
-
async function createContent(
|
|
8
|
-
const
|
|
7
|
+
async function createContent(options = {}) {
|
|
8
|
+
const { clean = true } = options;
|
|
9
|
+
const isFirstStart = process.env._FUMA_CONTENT !== "1";
|
|
10
|
+
process.env._FUMA_CONTENT = "1";
|
|
11
|
+
const core = createNextCore(options);
|
|
12
|
+
if (clean && isFirstStart) await core.clearOutputDirectory();
|
|
9
13
|
await core.init({ config: loadConfig(core, true) });
|
|
10
|
-
if (process.env.
|
|
11
|
-
process.env._FUMADOCS_MDX = "1";
|
|
12
|
-
await core.emit({ write: true });
|
|
13
|
-
await init(process.env.NODE_ENV === "development", core);
|
|
14
|
-
}
|
|
14
|
+
if (isFirstStart) await init(process.env.NODE_ENV === "development", core);
|
|
15
15
|
return (nextConfig = {}) => {
|
|
16
16
|
const ctx = core.getPluginContext();
|
|
17
17
|
for (const plugin of core.getPlugins(true)) nextConfig = plugin.next?.config?.call(ctx, nextConfig) ?? nextConfig;
|
|
@@ -19,10 +19,11 @@ async function createContent(nextOptions = {}) {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
async function init(dev, core) {
|
|
22
|
+
await core.emit({ write: true });
|
|
22
23
|
if (!dev) return;
|
|
23
24
|
const { FSWatcher } = await import("chokidar");
|
|
24
25
|
const { configPath, outDir } = core.getOptions();
|
|
25
|
-
const absoluteConfigPath = path
|
|
26
|
+
const absoluteConfigPath = path.resolve(configPath);
|
|
26
27
|
let watcher;
|
|
27
28
|
async function devServer() {
|
|
28
29
|
if (watcher && !watcher.closed) await watcher.close();
|
|
@@ -31,17 +32,12 @@ async function init(dev, core) {
|
|
|
31
32
|
persistent: true,
|
|
32
33
|
ignored: [outDir]
|
|
33
34
|
});
|
|
34
|
-
watcher.add(configPath);
|
|
35
|
-
for (const collection of core.getCollections(true)) {
|
|
36
|
-
const handler = collection.handlers.fs;
|
|
37
|
-
if (handler) watcher.add(handler.dir);
|
|
38
|
-
}
|
|
39
35
|
watcher.once("ready", () => {
|
|
40
|
-
console.log("[
|
|
36
|
+
console.log("[fuma-content] started dev server");
|
|
41
37
|
});
|
|
42
38
|
watcher.on("all", (_event, file) => {
|
|
43
|
-
if (path
|
|
44
|
-
console.log("[
|
|
39
|
+
if (path.resolve(file) === absoluteConfigPath) {
|
|
40
|
+
console.log("[fuma-content] restarting dev server");
|
|
45
41
|
watcher?.removeAllListeners();
|
|
46
42
|
(async () => {
|
|
47
43
|
await core.init({ config: loadConfig(core, true) });
|
|
@@ -54,26 +50,22 @@ async function init(dev, core) {
|
|
|
54
50
|
}
|
|
55
51
|
process.on("exit", () => {
|
|
56
52
|
if (!watcher || watcher.closed) return;
|
|
57
|
-
console.log("[
|
|
53
|
+
console.log("[fuma-content] closing dev server");
|
|
58
54
|
watcher.close();
|
|
59
55
|
});
|
|
60
56
|
await devServer();
|
|
61
57
|
}
|
|
62
58
|
async function createStandaloneCore(options) {
|
|
63
|
-
const core = createNextCore(
|
|
59
|
+
const core = createNextCore(options);
|
|
64
60
|
await core.init({ config: loadConfig(core, true) });
|
|
65
61
|
return core;
|
|
66
62
|
}
|
|
67
|
-
function
|
|
68
|
-
return {
|
|
69
|
-
outDir: options.outDir ?? Core.defaultOptions.outDir,
|
|
70
|
-
configPath: options.configPath ?? Core.defaultOptions.configPath
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function createNextCore(options) {
|
|
63
|
+
function createNextCore({ configPath, cwd, outDir }) {
|
|
74
64
|
return new Core({
|
|
75
|
-
|
|
76
|
-
|
|
65
|
+
configPath,
|
|
66
|
+
cwd,
|
|
67
|
+
outDir,
|
|
68
|
+
plugins: [loaderPlugin()]
|
|
77
69
|
});
|
|
78
70
|
}
|
|
79
71
|
|
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["watcher: FSWatcher | undefined"],"sources":["../../src/next/index.ts"],"sourcesContent":["import type { NextConfig } from \"next\";\nimport path from \"node:path\";\nimport { loadConfig } from \"@/config/load-from-file\";\nimport { Core, CoreOptions } from \"@/core\";\nimport type { FSWatcher } from \"chokidar\";\nimport { loaderPlugin } from \"@/plugins/loader\";\n\nexport interface NextOptions extends Pick<CoreOptions, \"cwd\" | \"configPath\" | \"outDir\"> {\n /**\n * clean output directory on start\n *\n * @defaultValue true\n */\n clean?: boolean;\n}\n\nexport async function createContent(options: NextOptions = {}) {\n const { clean = true } = options;\n const isFirstStart = process.env._FUMA_CONTENT !== \"1\";\n process.env._FUMA_CONTENT = \"1\";\n\n const core = createNextCore(options);\n if (clean && isFirstStart) {\n await core.clearOutputDirectory();\n }\n\n await core.init({\n config: loadConfig(core, true),\n });\n\n if (isFirstStart) {\n await init(process.env.NODE_ENV === \"development\", core);\n }\n return (nextConfig: NextConfig = {}): NextConfig => {\n const ctx = core.getPluginContext();\n for (const plugin of core.getPlugins(true)) {\n nextConfig = plugin.next?.config?.call(ctx, nextConfig) ?? nextConfig;\n }\n\n return nextConfig;\n };\n}\n\nasync function init(dev: boolean, core: Core): Promise<void> {\n await core.emit({ write: true });\n\n if (!dev) return;\n const { FSWatcher } = await import(\"chokidar\");\n const { configPath, outDir } = core.getOptions();\n const absoluteConfigPath = path.resolve(configPath);\n let watcher: FSWatcher | undefined;\n\n async function devServer() {\n if (watcher && !watcher.closed) {\n await watcher.close();\n }\n\n watcher = new FSWatcher({\n ignoreInitial: true,\n persistent: true,\n ignored: [outDir],\n });\n\n watcher.once(\"ready\", () => {\n console.log(\"[fuma-content] started dev server\");\n });\n\n watcher.on(\"all\", (_event, file) => {\n if (path.resolve(file) === absoluteConfigPath) {\n console.log(\"[fuma-content] restarting dev server\");\n watcher?.removeAllListeners();\n void (async () => {\n await core.init({\n config: loadConfig(core, true),\n });\n await devServer();\n await core.emit({ write: true });\n })();\n }\n });\n\n await core.initServer({ watcher });\n }\n\n process.on(\"exit\", () => {\n if (!watcher || watcher.closed) return;\n console.log(\"[fuma-content] closing dev server\");\n void watcher.close();\n });\n\n await devServer();\n}\n\nexport async function createStandaloneCore(options: NextOptions) {\n const core = createNextCore(options);\n await core.init({\n config: loadConfig(core, true),\n });\n return core;\n}\n\nfunction createNextCore({ configPath, cwd, outDir }: NextOptions): Core {\n return new Core({\n configPath,\n cwd,\n outDir,\n plugins: [loaderPlugin()],\n });\n}\n"],"mappings":";;;;;;AAgBA,eAAsB,cAAc,UAAuB,EAAE,EAAE;CAC7D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,eAAe,QAAQ,IAAI,kBAAkB;AACnD,SAAQ,IAAI,gBAAgB;CAE5B,MAAM,OAAO,eAAe,QAAQ;AACpC,KAAI,SAAS,aACX,OAAM,KAAK,sBAAsB;AAGnC,OAAM,KAAK,KAAK,EACd,QAAQ,WAAW,MAAM,KAAK,EAC/B,CAAC;AAEF,KAAI,aACF,OAAM,KAAK,QAAQ,IAAI,aAAa,eAAe,KAAK;AAE1D,SAAQ,aAAyB,EAAE,KAAiB;EAClD,MAAM,MAAM,KAAK,kBAAkB;AACnC,OAAK,MAAM,UAAU,KAAK,WAAW,KAAK,CACxC,cAAa,OAAO,MAAM,QAAQ,KAAK,KAAK,WAAW,IAAI;AAG7D,SAAO;;;AAIX,eAAe,KAAK,KAAc,MAA2B;AAC3D,OAAM,KAAK,KAAK,EAAE,OAAO,MAAM,CAAC;AAEhC,KAAI,CAAC,IAAK;CACV,MAAM,EAAE,cAAc,MAAM,OAAO;CACnC,MAAM,EAAE,YAAY,WAAW,KAAK,YAAY;CAChD,MAAM,qBAAqB,KAAK,QAAQ,WAAW;CACnD,IAAIA;CAEJ,eAAe,YAAY;AACzB,MAAI,WAAW,CAAC,QAAQ,OACtB,OAAM,QAAQ,OAAO;AAGvB,YAAU,IAAI,UAAU;GACtB,eAAe;GACf,YAAY;GACZ,SAAS,CAAC,OAAO;GAClB,CAAC;AAEF,UAAQ,KAAK,eAAe;AAC1B,WAAQ,IAAI,oCAAoC;IAChD;AAEF,UAAQ,GAAG,QAAQ,QAAQ,SAAS;AAClC,OAAI,KAAK,QAAQ,KAAK,KAAK,oBAAoB;AAC7C,YAAQ,IAAI,uCAAuC;AACnD,aAAS,oBAAoB;AAC7B,KAAM,YAAY;AAChB,WAAM,KAAK,KAAK,EACd,QAAQ,WAAW,MAAM,KAAK,EAC/B,CAAC;AACF,WAAM,WAAW;AACjB,WAAM,KAAK,KAAK,EAAE,OAAO,MAAM,CAAC;QAC9B;;IAEN;AAEF,QAAM,KAAK,WAAW,EAAE,SAAS,CAAC;;AAGpC,SAAQ,GAAG,cAAc;AACvB,MAAI,CAAC,WAAW,QAAQ,OAAQ;AAChC,UAAQ,IAAI,oCAAoC;AAChD,EAAK,QAAQ,OAAO;GACpB;AAEF,OAAM,WAAW;;AAGnB,eAAsB,qBAAqB,SAAsB;CAC/D,MAAM,OAAO,eAAe,QAAQ;AACpC,OAAM,KAAK,KAAK,EACd,QAAQ,WAAW,MAAM,KAAK,EAC/B,CAAC;AACF,QAAO;;AAGT,SAAS,eAAe,EAAE,YAAY,KAAK,UAA6B;AACtE,QAAO,IAAI,KAAK;EACd;EACA;EACA;EACA,SAAS,CAAC,cAAc,CAAC;EAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/node/index.ts"],"sourcesContent":[],"mappings":";;;;iBAGgB,QAAA,WAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/node/index.ts"],"sourcesContent":["import * as module from \"node:module\";\nimport type { LoaderOptions } from \"./loader\";\n\nexport function register(options: LoaderOptions = {}) {\n module.register(\"./loader.js\", import.meta.url, {\n data: options,\n });\n}\n"],"mappings":";;;AAGA,SAAgB,SAAS,UAAyB,EAAE,EAAE;AACpD,QAAO,SAAS,eAAe,OAAO,KAAK,KAAK,EAC9C,MAAM,SACP,CAAC"}
|
package/dist/node/loader.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as CoreOptions } from "../core-BO3b8jMg.js";
|
|
2
|
+
import { InitializeHook, LoadHook } from "node:module";
|
|
2
3
|
|
|
3
4
|
//#region src/node/loader.d.ts
|
|
5
|
+
type LoaderOptions = Omit<CoreOptions, "plugins" | "workspace">;
|
|
6
|
+
declare const initialize: InitializeHook<LoaderOptions>;
|
|
4
7
|
declare const load: LoadHook;
|
|
5
8
|
//#endregion
|
|
6
|
-
export { load };
|
|
9
|
+
export { LoaderOptions, initialize, load };
|
|
7
10
|
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"sourcesContent":[],"mappings":";;;;KAQY,aAAA,GAAgB,KAAK;cAEpB,YAAY,eAAe;AAF5B,cAYC,IAZY,EAYN,QAZc"}
|
package/dist/node/loader.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import "../
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
1
|
+
import { t as createDynamicCore } from "../dynamic-DhKTOrIl.js";
|
|
2
|
+
import { t as Core } from "../core-D5QHSKk6.js";
|
|
3
|
+
import { t as createCache } from "../async-cache-U87GzQTb.js";
|
|
4
|
+
import { n as loaderPlugin } from "../loader-BuR4gkKg.js";
|
|
5
5
|
|
|
6
6
|
//#region src/node/loader.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
let configLoader;
|
|
8
|
+
const initialize = (options) => {
|
|
9
|
+
configLoader = createDynamicCore({
|
|
10
|
+
core: new Core({
|
|
11
|
+
...options,
|
|
12
|
+
plugins: [loaderPlugin()]
|
|
13
|
+
}),
|
|
14
|
+
mode: "production"
|
|
15
|
+
});
|
|
16
|
+
};
|
|
15
17
|
const load = async (url, context, nextLoad) => {
|
|
18
|
+
if (!configLoader) throw new Error("not initialized");
|
|
16
19
|
const core = await configLoader.getCore();
|
|
17
|
-
const hooks = await createCache(core.cache).cached("node:load-hooks", async () => {
|
|
20
|
+
const hooks = await createCache(core.cache).$value().cached("node:load-hooks", async () => {
|
|
18
21
|
const ctx = core.getPluginContext();
|
|
19
22
|
return (await Promise.all(core.getPlugins(true).map(async (plugin) => {
|
|
20
23
|
return plugin.node?.createLoad?.call(ctx);
|
|
@@ -31,5 +34,5 @@ const load = async (url, context, nextLoad) => {
|
|
|
31
34
|
};
|
|
32
35
|
|
|
33
36
|
//#endregion
|
|
34
|
-
export { load };
|
|
37
|
+
export { initialize, load };
|
|
35
38
|
//# sourceMappingURL=loader.js.map
|
package/dist/node/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","names":["load: LoadHook","url","context"],"sources":["../../src/node/loader.ts"],"sourcesContent":["import { Core } from \"@/core\";\nimport type { LoadFnOutput, LoadHook, LoadHookContext } from \"node:module\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { createDynamicCore } from \"@/
|
|
1
|
+
{"version":3,"file":"loader.js","names":["configLoader: DynamicCore | undefined","initialize: InitializeHook<LoaderOptions>","load: LoadHook","url","context"],"sources":["../../src/node/loader.ts"],"sourcesContent":["import { Core, CoreOptions } from \"@/core\";\nimport type { InitializeHook, LoadFnOutput, LoadHook, LoadHookContext } from \"node:module\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { createDynamicCore, DynamicCore } from \"@/dynamic\";\nimport { loaderPlugin } from \"@/plugins/loader\";\n\nlet configLoader: DynamicCore | undefined;\n\nexport type LoaderOptions = Omit<CoreOptions, \"plugins\" | \"workspace\">;\n\nexport const initialize: InitializeHook<LoaderOptions> = (options) => {\n configLoader = createDynamicCore({\n core: new Core({\n ...options,\n plugins: [loaderPlugin()],\n }),\n mode: \"production\",\n });\n};\n\nexport const load: LoadHook = async (url, context, nextLoad) => {\n if (!configLoader) throw new Error(\"not initialized\");\n const core = await configLoader.getCore();\n const store = createCache(core.cache).$value<LoadHook[]>();\n\n const hooks = await store.cached(\"node:load-hooks\", async () => {\n const ctx = core.getPluginContext();\n\n const hooks = await Promise.all(\n core.getPlugins(true).map<Promise<LoadHook | undefined>>(async (plugin) => {\n return plugin.node?.createLoad?.call(ctx);\n }),\n );\n return hooks.filter((v) => v !== undefined);\n });\n\n function run(\n i: number,\n url: string,\n context: LoadHookContext,\n ): LoadFnOutput | Promise<LoadFnOutput> {\n if (i >= hooks.length) {\n return nextLoad(url, context);\n }\n\n return hooks[i](url, context, (url, ctx) => run(i + 1, url, { ...context, ...ctx }));\n }\n\n return run(0, url, context);\n};\n"],"mappings":";;;;;;AAMA,IAAIA;AAIJ,MAAaC,cAA6C,YAAY;AACpE,gBAAe,kBAAkB;EAC/B,MAAM,IAAI,KAAK;GACb,GAAG;GACH,SAAS,CAAC,cAAc,CAAC;GAC1B,CAAC;EACF,MAAM;EACP,CAAC;;AAGJ,MAAaC,OAAiB,OAAO,KAAK,SAAS,aAAa;AAC9D,KAAI,CAAC,aAAc,OAAM,IAAI,MAAM,kBAAkB;CACrD,MAAM,OAAO,MAAM,aAAa,SAAS;CAGzC,MAAM,QAAQ,MAFA,YAAY,KAAK,MAAM,CAAC,QAAoB,CAEhC,OAAO,mBAAmB,YAAY;EAC9D,MAAM,MAAM,KAAK,kBAAkB;AAOnC,UALc,MAAM,QAAQ,IAC1B,KAAK,WAAW,KAAK,CAAC,IAAmC,OAAO,WAAW;AACzE,UAAO,OAAO,MAAM,YAAY,KAAK,IAAI;IACzC,CACH,EACY,QAAQ,MAAM,MAAM,OAAU;GAC3C;CAEF,SAAS,IACP,GACA,OACA,WACsC;AACtC,MAAI,KAAK,MAAM,OACb,QAAO,SAASC,OAAKC,UAAQ;AAG/B,SAAO,MAAM,GAAGD,OAAKC,YAAU,OAAK,QAAQ,IAAI,IAAI,GAAGD,OAAK;GAAE,GAAGC;GAAS,GAAG;GAAK,CAAC,CAAC;;AAGtF,QAAO,IAAI,GAAG,KAAK,QAAQ"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
|
|
4
|
-
//#region src/plugins/
|
|
5
|
-
function toNode(
|
|
4
|
+
//#region src/plugins/loader/node.ts
|
|
5
|
+
function toNode(loaders) {
|
|
6
6
|
return async (url, _context, nextLoad) => {
|
|
7
|
-
if (url.startsWith("file:///")
|
|
7
|
+
if (!url.startsWith("file:///")) return nextLoad(url);
|
|
8
|
+
const config = loaders.find((loader) => !loader.test || loader.test.test(url));
|
|
9
|
+
if (config) {
|
|
8
10
|
const parsedUrl = new URL(url);
|
|
9
11
|
const filePath = fileURLToPath(parsedUrl);
|
|
10
|
-
const result = await loader.load({
|
|
12
|
+
const result = await config.loader.load({
|
|
11
13
|
filePath,
|
|
12
14
|
query: Object.fromEntries(parsedUrl.searchParams.entries()),
|
|
13
15
|
async getSource() {
|
|
@@ -28,4 +30,4 @@ function toNode(test, loader) {
|
|
|
28
30
|
|
|
29
31
|
//#endregion
|
|
30
32
|
export { toNode };
|
|
31
|
-
//# sourceMappingURL=node-
|
|
33
|
+
//# sourceMappingURL=node-2VZOh3P9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-2VZOh3P9.js","names":[],"sources":["../src/plugins/loader/node.ts"],"sourcesContent":["import type { LoadFnOutput, LoadHook } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport fs from \"node:fs/promises\";\nimport type { Loader } from \"@/plugins/loader\";\n\nexport function toNode(loaders: { test: RegExp | undefined; loader: Loader }[]): LoadHook {\n return async (url, _context, nextLoad): Promise<LoadFnOutput> => {\n if (!url.startsWith(\"file:///\")) return nextLoad(url);\n\n const config = loaders.find((loader) => !loader.test || loader.test.test(url));\n if (config) {\n const parsedUrl = new URL(url);\n const filePath = fileURLToPath(parsedUrl);\n\n const result = await config.loader.load({\n filePath,\n query: Object.fromEntries(parsedUrl.searchParams.entries()),\n async getSource() {\n return (await fs.readFile(filePath)).toString();\n },\n development: false,\n compiler: {\n addDependency() {},\n },\n });\n\n if (result) {\n return {\n source: result.code,\n format: \"module\",\n shortCircuit: true,\n };\n }\n }\n\n return nextLoad(url);\n };\n}\n"],"mappings":";;;;AAKA,SAAgB,OAAO,SAAmE;AACxF,QAAO,OAAO,KAAK,UAAU,aAAoC;AAC/D,MAAI,CAAC,IAAI,WAAW,WAAW,CAAE,QAAO,SAAS,IAAI;EAErD,MAAM,SAAS,QAAQ,MAAM,WAAW,CAAC,OAAO,QAAQ,OAAO,KAAK,KAAK,IAAI,CAAC;AAC9E,MAAI,QAAQ;GACV,MAAM,YAAY,IAAI,IAAI,IAAI;GAC9B,MAAM,WAAW,cAAc,UAAU;GAEzC,MAAM,SAAS,MAAM,OAAO,OAAO,KAAK;IACtC;IACA,OAAO,OAAO,YAAY,UAAU,aAAa,SAAS,CAAC;IAC3D,MAAM,YAAY;AAChB,aAAQ,MAAM,GAAG,SAAS,SAAS,EAAE,UAAU;;IAEjD,aAAa;IACb,UAAU,EACR,gBAAgB,IACjB;IACF,CAAC;AAEF,OAAI,OACF,QAAO;IACL,QAAQ,OAAO;IACf,QAAQ;IACR,cAAc;IACf;;AAIL,SAAO,SAAS,IAAI"}
|