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
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as Hook, D as GetCollectionConfig, S as AsyncHook, T as hook, a as EmitEntry, b as asyncPipe, c as Plugin, d as ResolvedConfig, f as ResolvedCoreOptions, i as EmitContext, l as PluginContext, n as CoreOptions, o as EmitOptions, p as ServerContext, r as EmitCodeGeneratorContext, s as EmitOutput, t as Core, u as PluginOption, v as AsyncPipe, w as asyncHook, x as pipe, y as Pipe } from "./core-BO3b8jMg.js";
|
|
2
2
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/validation.d.ts
|
|
@@ -9,6 +9,10 @@ declare class ValidationError extends Error {
|
|
|
9
9
|
toStringFormatted(): Promise<string>;
|
|
10
10
|
}
|
|
11
11
|
declare function validate<Schema extends StandardSchemaV1, Context>(schema: StandardSchemaV1 | ((context: Context) => StandardSchemaV1), data: unknown, context: Context, errorMessage: string): Promise<StandardSchemaV1.InferOutput<Schema>>;
|
|
12
|
+
/**
|
|
13
|
+
* get JSON Schema from a Standard Schema
|
|
14
|
+
*/
|
|
15
|
+
declare function getJSONSchema(schema: StandardSchemaV1): Record<string, unknown> | undefined;
|
|
12
16
|
//#endregion
|
|
13
|
-
export {
|
|
17
|
+
export { AsyncHook, AsyncPipe, Core, CoreOptions, EmitCodeGeneratorContext, EmitContext, EmitEntry, EmitOptions, EmitOutput, type GetCollectionConfig, Hook, Pipe, Plugin, PluginContext, PluginOption, ResolvedConfig, ResolvedCoreOptions, ServerContext, ValidationError, asyncHook, asyncPipe, getJSONSchema, hook, pipe, validate };
|
|
14
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/validation.ts"],"sourcesContent":[],"mappings":";;;;cAEa,eAAA,SAAwB,KAAA;;mBAElB,gBAAA,CAAiB;EAFvB,WAAA,CAAA,OAAgB,EAAA,MAAA,EAAA,MAAA,EAAA,SAImB,gBAAA,CAAiB,KAJpC,EAAA;EAEV,iBAAiB,CAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/validation.ts"],"sourcesContent":[],"mappings":";;;;cAEa,eAAA,SAAwB,KAAA;;mBAElB,gBAAA,CAAiB;EAFvB,WAAA,CAAA,OAAgB,EAAA,MAAA,EAAA,MAAA,EAAA,SAImB,gBAAA,CAAiB,KAJpC,EAAA;EAEV,iBAAiB,CAAA,CAAA,EASX,OATW,CAAA,MAAA,CAAA;;AASX,iBAkBH,QAlBG,CAAA,eAkBqB,gBAlBrB,EAAA,OAAA,CAAA,CAAA,MAAA,EAmBf,gBAnBe,GAAA,CAAA,CAAA,OAAA,EAmBe,OAnBf,EAAA,GAmB2B,gBAnB3B,CAAA,EAAA,IAAA,EAAA,OAAA,EAAA,OAAA,EAqBd,OArBc,EAAA,YAAA,EAAA,MAAA,CAAA,EAuBtB,OAvBsB,CAuBd,gBAAA,CAAiB,WAvBH,CAuBe,MAvBf,CAAA,CAAA;;;AAkBzB;AAA8C,iBA0B9B,aAAA,CA1B8B,MAAA,EA0BR,gBA1BQ,CAAA,EA0BQ,MA1BR,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,SAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import { t as Core } from "./core-
|
|
3
|
-
import { n as
|
|
4
|
-
import { n as validate, t as ValidationError } from "./validation-BOJKRAp5.js";
|
|
1
|
+
import { a as asyncHook, i as pipe, o as hook, r as asyncPipe } from "./collections-DNFRdCuB.js";
|
|
2
|
+
import { t as Core } from "./core-D5QHSKk6.js";
|
|
3
|
+
import { n as getJSONSchema, r as validate, t as ValidationError } from "./validation-BvVvvLII.js";
|
|
5
4
|
|
|
6
|
-
export { Core, ValidationError, asyncPipe, pipe, validate };
|
|
5
|
+
export { Core, ValidationError, asyncHook, asyncPipe, getJSONSchema, hook, pipe, validate };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { t as buildConfig } from "./build-D8A5ByFk.js";
|
|
2
1
|
import { pathToFileURL } from "node:url";
|
|
3
2
|
|
|
4
3
|
//#region src/config/load-from-file.ts
|
|
@@ -23,16 +22,14 @@ async function compileConfig(core) {
|
|
|
23
22
|
}
|
|
24
23
|
/**
|
|
25
24
|
* Load config
|
|
26
|
-
*
|
|
27
|
-
* @param build - By default, it assumes the config file has been compiled. Set this `true` to compile the config first.
|
|
28
25
|
*/
|
|
29
|
-
async function loadConfig(core,
|
|
30
|
-
if (
|
|
31
|
-
const url = pathToFileURL(core.getCompiledConfigPath());
|
|
26
|
+
async function loadConfig(core, compileMode) {
|
|
27
|
+
if (compileMode === true) await compileConfig(core);
|
|
28
|
+
const url = compileMode === false ? pathToFileURL(core.getOptions().configPath) : pathToFileURL(core.getCompiledConfigPath());
|
|
32
29
|
url.searchParams.set("hash", Date.now().toString());
|
|
33
|
-
return
|
|
30
|
+
return import(url.href);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
//#endregion
|
|
37
34
|
export { loadConfig as t };
|
|
38
|
-
//# sourceMappingURL=load-from-file-
|
|
35
|
+
//# sourceMappingURL=load-from-file-irx0JI6j.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-from-file-irx0JI6j.js","names":[],"sources":["../src/config/load-from-file.ts"],"sourcesContent":["import { pathToFileURL } from \"node:url\";\nimport type { Core } from \"@/core\";\n\n/**\n * - `true`: compile the config before loading.\n * - `false`: import the config directly (without compiling it).\n * - `skip`: assume the config is already compiled.\n */\nexport type CompileMode = boolean | \"skip\";\n\nasync function compileConfig(core: Core) {\n const { build } = await import(\"esbuild\");\n const { configPath, outDir } = core.getOptions();\n\n const transformed = await build({\n entryPoints: [{ in: configPath, out: \"content.config\" }],\n bundle: true,\n outdir: outDir,\n target: \"node20\",\n write: true,\n platform: \"node\",\n format: \"esm\",\n packages: \"external\",\n outExtension: {\n \".js\": \".mjs\",\n },\n allowOverwrite: true,\n });\n\n if (transformed.errors.length > 0) {\n throw new Error(\"failed to compile configuration file\");\n }\n}\n\n/**\n * Load config\n */\nexport async function loadConfig(\n core: Core,\n compileMode: CompileMode,\n): Promise<Record<string, unknown>> {\n if (compileMode === true) await compileConfig(core);\n\n const url =\n compileMode === false\n ? pathToFileURL(core.getOptions().configPath)\n : pathToFileURL(core.getCompiledConfigPath());\n // always return a new config\n url.searchParams.set(\"hash\", Date.now().toString());\n\n return import(url.href);\n}\n"],"mappings":";;;AAUA,eAAe,cAAc,MAAY;CACvC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,EAAE,YAAY,WAAW,KAAK,YAAY;AAiBhD,MAfoB,MAAM,MAAM;EAC9B,aAAa,CAAC;GAAE,IAAI;GAAY,KAAK;GAAkB,CAAC;EACxD,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,UAAU;EACV,QAAQ;EACR,UAAU;EACV,cAAc,EACZ,OAAO,QACR;EACD,gBAAgB;EACjB,CAAC,EAEc,OAAO,SAAS,EAC9B,OAAM,IAAI,MAAM,uCAAuC;;;;;AAO3D,eAAsB,WACpB,MACA,aACkC;AAClC,KAAI,gBAAgB,KAAM,OAAM,cAAc,KAAK;CAEnD,MAAM,MACJ,gBAAgB,QACZ,cAAc,KAAK,YAAY,CAAC,WAAW,GAC3C,cAAc,KAAK,uBAAuB,CAAC;AAEjD,KAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,CAAC,UAAU,CAAC;AAEnD,QAAO,OAAO,IAAI"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "./validation-BvVvvLII.js";
|
|
2
|
+
import "./loader-BuR4gkKg.js";
|
|
3
|
+
import "./fs-WWbLA7Gx.js";
|
|
4
|
+
import "./git-CQWA37-X.js";
|
|
5
|
+
import "./mdx-iZ2uP27Z.js";
|
|
6
|
+
import "./fuma-matter-BuBO2w-p.js";
|
|
7
|
+
import { t as createMdxLoader } from "./loader-D6StkShK.js";
|
|
8
|
+
|
|
9
|
+
export { createMdxLoader };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { t as createDataLoader } from "./loader-BzQpSBvP.js";
|
|
2
|
+
|
|
3
|
+
//#region src/collections/json/loader.ts
|
|
4
|
+
function createJsonLoader(core, resolveJson = "js") {
|
|
5
|
+
return createDataLoader(core, (filePath, source) => {
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(source);
|
|
8
|
+
} catch (e) {
|
|
9
|
+
throw new Error(`invalid data in ${filePath}`, { cause: e });
|
|
10
|
+
}
|
|
11
|
+
}, resolveJson);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { createJsonLoader as t };
|
|
16
|
+
//# sourceMappingURL=loader-BhXHF8vy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-BhXHF8vy.js","names":[],"sources":["../src/collections/json/loader.ts"],"sourcesContent":["import type { Loader } from \"@/plugins/loader\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { createDataLoader } from \"../data/loader\";\n\nexport function createJsonLoader(core: DynamicCore, resolveJson: \"json\" | \"js\" = \"js\"): Loader {\n return createDataLoader(\n core,\n (filePath, source) => {\n try {\n return JSON.parse(source);\n } catch (e) {\n throw new Error(`invalid data in ${filePath}`, { cause: e });\n }\n },\n resolveJson,\n );\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,MAAmB,cAA6B,MAAc;AAC7F,QAAO,iBACL,OACC,UAAU,WAAW;AACpB,MAAI;AACF,UAAO,KAAK,MAAM,OAAO;WAClB,GAAG;AACV,SAAM,IAAI,MAAM,mBAAmB,YAAY,EAAE,OAAO,GAAG,CAAC;;IAGhE,YACD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { n as defineCollectionHook } from "./collections-DNFRdCuB.js";
|
|
2
|
+
import { t as createCache } from "./async-cache-U87GzQTb.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
//#region src/plugins/loader/index.ts
|
|
6
|
+
/**
|
|
7
|
+
* a light layer for implementing loaders.
|
|
8
|
+
*/
|
|
9
|
+
function loaderPlugin() {
|
|
10
|
+
const cachedLoaders = createCache();
|
|
11
|
+
function initLoaders(ctx, env) {
|
|
12
|
+
return cachedLoaders.cached(env, async () => {
|
|
13
|
+
const usedIds = /* @__PURE__ */ new Set();
|
|
14
|
+
const out = [];
|
|
15
|
+
for (const collection of ctx.core.getCollections()) {
|
|
16
|
+
const hook = collection.getPluginHook(loaderHook);
|
|
17
|
+
if (!hook) continue;
|
|
18
|
+
let nextId = 0;
|
|
19
|
+
for (const loader of hook.loaders) {
|
|
20
|
+
if (loader.id && usedIds.has(loader.id)) continue;
|
|
21
|
+
if (loader.id) usedIds.add(loader.id);
|
|
22
|
+
out.push({
|
|
23
|
+
id: loader.id ?? `${collection.name}:${nextId++}`,
|
|
24
|
+
test: loader.test,
|
|
25
|
+
loader: await loader.createLoader.call(ctx, env)
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
name: "fuma-content:loader",
|
|
34
|
+
next: { config(config) {
|
|
35
|
+
const ctx = {
|
|
36
|
+
...this,
|
|
37
|
+
getLoaderOptions: () => {
|
|
38
|
+
const { configPath, outDir } = this.core.getOptions();
|
|
39
|
+
return {
|
|
40
|
+
configPath,
|
|
41
|
+
outDir,
|
|
42
|
+
absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),
|
|
43
|
+
isDev: process.env.NODE_ENV === "development"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
for (const collection of this.core.getCollections()) {
|
|
48
|
+
const hook = collection.getPluginHook(loaderHook);
|
|
49
|
+
if (!hook) continue;
|
|
50
|
+
for (const loader of hook.loaders) {
|
|
51
|
+
if (!loader.configureNext) continue;
|
|
52
|
+
config = loader.configureNext.call(ctx, config);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return config;
|
|
56
|
+
} },
|
|
57
|
+
bun: { async setup(build) {
|
|
58
|
+
const { toBun } = await import("./bun-CBROq3I0.js");
|
|
59
|
+
for (const loader of await initLoaders(this, "bun")) toBun(loader.test, loader.loader)(build);
|
|
60
|
+
} },
|
|
61
|
+
node: { async createLoad() {
|
|
62
|
+
const { toNode } = await import("./node-2VZOh3P9.js");
|
|
63
|
+
return toNode(await initLoaders(this, "node"));
|
|
64
|
+
} },
|
|
65
|
+
vite: { async createPlugin() {
|
|
66
|
+
const { toVite } = await import("./vite-C1qXY47G.js");
|
|
67
|
+
return (await initLoaders(this, "vite")).map((loader) => {
|
|
68
|
+
return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);
|
|
69
|
+
});
|
|
70
|
+
} }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const loaderHook = defineCollectionHook(() => ({ loaders: [] }));
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { loaderPlugin as n, loaderHook as t };
|
|
77
|
+
//# sourceMappingURL=loader-BuR4gkKg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-BuR4gkKg.js","names":["out: ResolvedLoader[]","ctx: NextLoaderContext"],"sources":["../src/plugins/loader/index.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport type { Plugin, PluginContext } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { NextConfig } from \"next\";\nimport { WebpackLoaderOptions } from \"./webpack.js\";\nimport path from \"node:path\";\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface CompilerOptions {\n addDependency: (file: string) => void;\n}\n\ntype LoaderEnvironment = \"vite\" | \"bun\" | \"node\";\n\nexport interface Loader {\n /**\n * Transform input into JavaScript.\n *\n * Returns:\n * - `LoaderOutput`: JavaScript code & source map.\n * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.\n */\n load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;\n\n bun?: {\n /**\n * 1. Bun doesn't allow `null` in loaders.\n * 2. Bun requires sync result to support dynamic require().\n */\n load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;\n };\n}\n\nexport interface LoaderInput {\n development: boolean;\n compiler: CompilerOptions;\n\n filePath: string;\n query: Record<string, string | string[] | undefined>;\n getSource: () => string | Promise<string>;\n}\n\nexport interface LoaderOutput {\n code: string;\n map?: unknown;\n\n /**\n * only supported on Vite 8 at the moment, specify the output module type.\n *\n * on unsupported environments, it will be ignored.\n */\n moduleType?: \"js\" | \"json\";\n}\n\ninterface NextLoaderContext extends PluginContext {\n getLoaderOptions: () => WebpackLoaderOptions;\n}\n\nexport interface LoaderConfig {\n /** unique ID for loader, used to deduplicate loaders */\n id?: string;\n\n /**\n * Filter file paths, the input can be either a file URL or file path.\n *\n * Must take resource query into consideration.\n */\n test?: RegExp;\n\n /**\n * @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.\n */\n createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;\n configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;\n}\n\ninterface ResolvedLoader {\n id: string;\n test: RegExp | undefined;\n loader: Loader;\n}\n\n/**\n * a light layer for implementing loaders.\n */\nexport function loaderPlugin(): Plugin {\n // env -> loaders\n const cachedLoaders = createCache<ResolvedLoader[]>();\n\n function initLoaders(ctx: PluginContext, env: LoaderEnvironment) {\n return cachedLoaders.cached(env, async () => {\n const usedIds = new Set<string>();\n const out: ResolvedLoader[] = [];\n\n for (const collection of ctx.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n let nextId = 0;\n for (const loader of hook.loaders) {\n if (loader.id && usedIds.has(loader.id)) continue;\n if (loader.id) usedIds.add(loader.id);\n\n out.push({\n id: loader.id ?? `${collection.name}:${nextId++}`,\n test: loader.test,\n loader: await loader.createLoader.call(ctx, env),\n });\n }\n }\n return out;\n });\n }\n\n return {\n name: \"fuma-content:loader\",\n next: {\n config(config) {\n const ctx: NextLoaderContext = {\n ...this,\n getLoaderOptions: () => {\n const { configPath, outDir } = this.core.getOptions();\n return {\n configPath,\n outDir,\n absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),\n isDev: process.env.NODE_ENV === \"development\",\n };\n },\n };\n for (const collection of this.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n for (const loader of hook.loaders) {\n if (!loader.configureNext) continue;\n\n config = loader.configureNext.call(ctx, config);\n }\n }\n\n return config;\n },\n },\n bun: {\n async setup(build) {\n const { toBun } = await import(\"./bun\");\n\n for (const loader of await initLoaders(this, \"bun\")) {\n toBun(loader.test, loader.loader)(build);\n }\n },\n },\n node: {\n async createLoad() {\n const { toNode } = await import(\"./node\");\n return toNode(await initLoaders(this, \"node\"));\n },\n },\n vite: {\n async createPlugin() {\n const { toVite } = await import(\"./vite\");\n return (await initLoaders(this, \"vite\")).map((loader) => {\n return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);\n });\n },\n },\n };\n}\n\nexport interface LoaderHook {\n loaders: LoaderConfig[];\n}\n\nexport const loaderHook = defineCollectionHook<LoaderHook>(() => ({\n loaders: [],\n}));\n"],"mappings":";;;;;;;;AAsFA,SAAgB,eAAuB;CAErC,MAAM,gBAAgB,aAA+B;CAErD,SAAS,YAAY,KAAoB,KAAwB;AAC/D,SAAO,cAAc,OAAO,KAAK,YAAY;GAC3C,MAAM,0BAAU,IAAI,KAAa;GACjC,MAAMA,MAAwB,EAAE;AAEhC,QAAK,MAAM,cAAc,IAAI,KAAK,gBAAgB,EAAE;IAClD,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;IAEX,IAAI,SAAS;AACb,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,OAAO,MAAM,QAAQ,IAAI,OAAO,GAAG,CAAE;AACzC,SAAI,OAAO,GAAI,SAAQ,IAAI,OAAO,GAAG;AAErC,SAAI,KAAK;MACP,IAAI,OAAO,MAAM,GAAG,WAAW,KAAK,GAAG;MACvC,MAAM,OAAO;MACb,QAAQ,MAAM,OAAO,aAAa,KAAK,KAAK,IAAI;MACjD,CAAC;;;AAGN,UAAO;IACP;;AAGJ,QAAO;EACL,MAAM;EACN,MAAM,EACJ,OAAO,QAAQ;GACb,MAAMC,MAAyB;IAC7B,GAAG;IACH,wBAAwB;KACtB,MAAM,EAAE,YAAY,WAAW,KAAK,KAAK,YAAY;AACrD,YAAO;MACL;MACA;MACA,4BAA4B,KAAK,QAAQ,KAAK,KAAK,uBAAuB,CAAC;MAC3E,OAAO,QAAQ,IAAI,aAAa;MACjC;;IAEJ;AACD,QAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,EAAE;IACnD,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;AAEX,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,CAAC,OAAO,cAAe;AAE3B,cAAS,OAAO,cAAc,KAAK,KAAK,OAAO;;;AAInD,UAAO;KAEV;EACD,KAAK,EACH,MAAM,MAAM,OAAO;GACjB,MAAM,EAAE,UAAU,MAAM,OAAO;AAE/B,QAAK,MAAM,UAAU,MAAM,YAAY,MAAM,MAAM,CACjD,OAAM,OAAO,MAAM,OAAO,OAAO,CAAC,MAAM;KAG7C;EACD,MAAM,EACJ,MAAM,aAAa;GACjB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,UAAO,OAAO,MAAM,YAAY,MAAM,OAAO,CAAC;KAEjD;EACD,MAAM,EACJ,MAAM,eAAe;GACnB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,WAAQ,MAAM,YAAY,MAAM,OAAO,EAAE,KAAK,WAAW;AACvD,WAAO,OAAO,gBAAgB,OAAO,MAAM,OAAO,MAAM,OAAO,OAAO;KACtE;KAEL;EACF;;AAOH,MAAa,aAAa,4BAAwC,EAChE,SAAS,EAAE,EACZ,EAAE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { r as validate } from "./validation-BvVvvLII.js";
|
|
2
|
+
import { t as DataCollection } from "./data-9h98oZwj.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/collections/data/loader.ts
|
|
6
|
+
const querySchema = z.object({
|
|
7
|
+
collection: z.string().optional(),
|
|
8
|
+
workspace: z.string().optional()
|
|
9
|
+
}).loose();
|
|
10
|
+
/**
|
|
11
|
+
* load data files, fallback to bundler's built-in plugins when ?collection is unspecified.
|
|
12
|
+
*/
|
|
13
|
+
function createDataLoader({ getCore }, parse, moduleType = "js") {
|
|
14
|
+
function getCollectionProcessor({ filePath, query }) {
|
|
15
|
+
const parsed = querySchema.safeParse(query);
|
|
16
|
+
if (!parsed.success || !parsed.data.collection) return null;
|
|
17
|
+
const { collection: collectionName, workspace } = parsed.data;
|
|
18
|
+
return async (source) => {
|
|
19
|
+
let core = await getCore();
|
|
20
|
+
if (workspace) core = core.getWorkspaces().get(workspace) ?? core;
|
|
21
|
+
let collection = core.getCollection(collectionName);
|
|
22
|
+
let data = parse(filePath, source);
|
|
23
|
+
if (!collection || !(collection instanceof DataCollection)) return data;
|
|
24
|
+
const context = {
|
|
25
|
+
path: filePath,
|
|
26
|
+
source
|
|
27
|
+
};
|
|
28
|
+
if (collection.schema) data = await validate(collection.schema, data, context, `invalid data in ${filePath}`);
|
|
29
|
+
return collection.onLoad.run(data, context);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
async load(input) {
|
|
34
|
+
const processor = getCollectionProcessor(input);
|
|
35
|
+
if (processor === null) return null;
|
|
36
|
+
const data = await processor(await input.getSource());
|
|
37
|
+
if (moduleType === "json") return {
|
|
38
|
+
code: JSON.stringify(data),
|
|
39
|
+
moduleType
|
|
40
|
+
};
|
|
41
|
+
else return { code: `export default ${JSON.stringify(data)}` };
|
|
42
|
+
},
|
|
43
|
+
bun: { load(source, input) {
|
|
44
|
+
const processor = getCollectionProcessor(input);
|
|
45
|
+
if (processor === null) return {
|
|
46
|
+
loader: "object",
|
|
47
|
+
exports: parse(input.filePath, source)
|
|
48
|
+
};
|
|
49
|
+
return processor(source).then((data) => ({
|
|
50
|
+
loader: "object",
|
|
51
|
+
exports: { default: data }
|
|
52
|
+
}));
|
|
53
|
+
} }
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { createDataLoader as t };
|
|
59
|
+
//# sourceMappingURL=loader-BzQpSBvP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-BzQpSBvP.js","names":["data: unknown","context: DataTransformationContext"],"sources":["../src/collections/data/loader.ts"],"sourcesContent":["import type { Loader, LoaderInput } from \"@/plugins/loader\";\nimport { z } from \"zod\";\nimport { validate } from \"@/utils/validation\";\nimport { DataCollection, type DataTransformationContext } from \"@/collections/data\";\nimport type { DynamicCore } from \"@/dynamic\";\n\nconst querySchema = z\n .object({\n collection: z.string().optional(),\n workspace: z.string().optional(),\n })\n .loose();\n\n/**\n * load data files, fallback to bundler's built-in plugins when ?collection is unspecified.\n */\nexport function createDataLoader(\n { getCore }: DynamicCore,\n parse: (filePath: string, source: string) => Record<string, unknown>,\n moduleType: \"json\" | \"js\" = \"js\",\n): Loader {\n function getCollectionProcessor({ filePath, query }: LoaderInput) {\n const parsed = querySchema.safeParse(query);\n if (!parsed.success || !parsed.data.collection) return null;\n const { collection: collectionName, workspace } = parsed.data;\n\n return async (source: string): Promise<unknown> => {\n let core = await getCore();\n if (workspace) {\n core = core.getWorkspaces().get(workspace) ?? core;\n }\n\n let collection = core.getCollection(collectionName);\n let data: unknown = parse(filePath, source);\n if (!collection || !(collection instanceof DataCollection)) return data;\n\n const context: DataTransformationContext = {\n path: filePath,\n source,\n };\n\n if (collection.schema) {\n data = await validate(collection.schema, data, context, `invalid data in ${filePath}`);\n }\n\n return collection.onLoad.run(data, context);\n };\n }\n\n return {\n async load(input) {\n const processor = getCollectionProcessor(input);\n if (processor === null) return null;\n const data = await processor(await input.getSource());\n\n if (moduleType === \"json\") {\n return {\n code: JSON.stringify(data),\n moduleType,\n };\n } else {\n return {\n code: `export default ${JSON.stringify(data)}`,\n };\n }\n },\n bun: {\n load(source, input) {\n const processor = getCollectionProcessor(input);\n if (processor === null)\n return {\n loader: \"object\",\n exports: parse(input.filePath, source),\n };\n\n return processor(source).then((data) => ({\n loader: \"object\",\n exports: { default: data },\n }));\n },\n },\n };\n}\n"],"mappings":";;;;;AAMA,MAAM,cAAc,EACjB,OAAO;CACN,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,WAAW,EAAE,QAAQ,CAAC,UAAU;CACjC,CAAC,CACD,OAAO;;;;AAKV,SAAgB,iBACd,EAAE,WACF,OACA,aAA4B,MACpB;CACR,SAAS,uBAAuB,EAAE,UAAU,SAAsB;EAChE,MAAM,SAAS,YAAY,UAAU,MAAM;AAC3C,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,KAAK,WAAY,QAAO;EACvD,MAAM,EAAE,YAAY,gBAAgB,cAAc,OAAO;AAEzD,SAAO,OAAO,WAAqC;GACjD,IAAI,OAAO,MAAM,SAAS;AAC1B,OAAI,UACF,QAAO,KAAK,eAAe,CAAC,IAAI,UAAU,IAAI;GAGhD,IAAI,aAAa,KAAK,cAAc,eAAe;GACnD,IAAIA,OAAgB,MAAM,UAAU,OAAO;AAC3C,OAAI,CAAC,cAAc,EAAE,sBAAsB,gBAAiB,QAAO;GAEnE,MAAMC,UAAqC;IACzC,MAAM;IACN;IACD;AAED,OAAI,WAAW,OACb,QAAO,MAAM,SAAS,WAAW,QAAQ,MAAM,SAAS,mBAAmB,WAAW;AAGxF,UAAO,WAAW,OAAO,IAAI,MAAM,QAAQ;;;AAI/C,QAAO;EACL,MAAM,KAAK,OAAO;GAChB,MAAM,YAAY,uBAAuB,MAAM;AAC/C,OAAI,cAAc,KAAM,QAAO;GAC/B,MAAM,OAAO,MAAM,UAAU,MAAM,MAAM,WAAW,CAAC;AAErD,OAAI,eAAe,OACjB,QAAO;IACL,MAAM,KAAK,UAAU,KAAK;IAC1B;IACD;OAED,QAAO,EACL,MAAM,kBAAkB,KAAK,UAAU,KAAK,IAC7C;;EAGL,KAAK,EACH,KAAK,QAAQ,OAAO;GAClB,MAAM,YAAY,uBAAuB,MAAM;AAC/C,OAAI,cAAc,KAChB,QAAO;IACL,QAAQ;IACR,SAAS,MAAM,MAAM,UAAU,OAAO;IACvC;AAEH,UAAO,UAAU,OAAO,CAAC,MAAM,UAAU;IACvC,QAAQ;IACR,SAAS,EAAE,SAAS,MAAM;IAC3B,EAAE;KAEN;EACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import
|
|
1
|
+
import { t as MDXCollection } from "./mdx-iZ2uP27Z.js";
|
|
2
|
+
import { t as fumaMatter } from "./fuma-matter-BuBO2w-p.js";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
import { createHash } from "node:crypto";
|
|
6
7
|
|
|
@@ -37,9 +38,9 @@ function createMdxLoader({ getCore }) {
|
|
|
37
38
|
}));
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (collection
|
|
41
|
+
let collection = collectionName ? core.getCollection(collectionName) : void 0;
|
|
42
|
+
if (!(collection instanceof MDXCollection)) collection = void 0;
|
|
43
|
+
if (collection?.frontmatter) matter.data = await collection.frontmatter.run(matter.data, {
|
|
43
44
|
collection,
|
|
44
45
|
filePath,
|
|
45
46
|
source: value
|
|
@@ -49,7 +50,7 @@ function createMdxLoader({ getCore }) {
|
|
|
49
50
|
map: null
|
|
50
51
|
};
|
|
51
52
|
const lineOffset = isDevelopment ? countLines(matter.matter) : 0;
|
|
52
|
-
const { buildMDX } = await import("./build-mdx-
|
|
53
|
+
const { buildMDX } = await import("./build-mdx-LhpFasX-.js");
|
|
53
54
|
const compiled = await buildMDX(core, collection, {
|
|
54
55
|
isDevelopment,
|
|
55
56
|
source: "\n".repeat(lineOffset) + matter.content,
|
|
@@ -77,4 +78,4 @@ function countLines(s) {
|
|
|
77
78
|
|
|
78
79
|
//#endregion
|
|
79
80
|
export { createMdxLoader as t };
|
|
80
|
-
//# sourceMappingURL=loader-
|
|
81
|
+
//# sourceMappingURL=loader-D6StkShK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-D6StkShK.js","names":["after: (() => Promise<void>) | undefined"],"sources":["../src/collections/mdx/loader.ts"],"sourcesContent":["import { fumaMatter } from \"@/collections/mdx/fuma-matter\";\nimport type { SourceMap } from \"rollup\";\nimport { z } from \"zod\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { Loader } from \"@/plugins/loader\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { MDXCollection } from \"../mdx\";\n\nconst querySchema = z\n .object({\n only: z.literal([\"frontmatter\", \"all\"]).default(\"all\"),\n collection: z.string().optional(),\n workspace: z.string().optional(),\n })\n .loose();\n\nconst cacheEntry = z.object({\n code: z.string(),\n map: z.any().optional(),\n hash: z.string().optional(),\n});\n\ntype CacheEntry = z.infer<typeof cacheEntry>;\n\nexport function createMdxLoader({ getCore }: DynamicCore): Loader {\n return {\n async load({ getSource, development: isDevelopment, query, compiler, filePath }) {\n let core = await getCore();\n const value = await getSource();\n const matter = fumaMatter(value);\n const { collection: collectionName, workspace, only } = querySchema.parse(query);\n if (workspace) {\n core = core.getWorkspaces().get(workspace) ?? core;\n }\n\n let after: (() => Promise<void>) | undefined;\n\n const { experimentalBuildCache = false } = core.getConfig();\n if (!isDevelopment && experimentalBuildCache) {\n const cacheDir = experimentalBuildCache;\n const cacheKey = `${collectionName ?? \"global\"}_${generateCacheHash(filePath)}`;\n\n const cached = await fs\n .readFile(path.join(cacheDir, cacheKey))\n .then((content) => cacheEntry.parse(JSON.parse(content.toString())))\n .catch(() => null);\n\n if (cached && cached.hash === generateCacheHash(value)) return cached;\n after = async () => {\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n path.join(cacheDir, cacheKey),\n JSON.stringify({\n ...out,\n hash: generateCacheHash(value),\n } satisfies CacheEntry),\n );\n };\n }\n\n let collection = collectionName ? core.getCollection(collectionName) : undefined;\n if (!(collection instanceof MDXCollection)) collection = undefined;\n\n if (collection?.frontmatter) {\n matter.data = await collection.frontmatter.run(matter.data as Record<string, unknown>, {\n collection,\n filePath,\n source: value,\n });\n }\n\n if (only === \"frontmatter\") {\n return {\n code: `export const frontmatter = ${JSON.stringify(matter.data)}`,\n map: null,\n };\n }\n\n // ensure the line number is correct in dev mode\n const lineOffset = isDevelopment ? countLines(matter.matter) : 0;\n\n const { buildMDX } = await import(\"@/collections/mdx/build-mdx\");\n const compiled = await buildMDX(core, collection, {\n isDevelopment,\n source: \"\\n\".repeat(lineOffset) + matter.content,\n filePath,\n frontmatter: matter.data as Record<string, unknown>,\n _compiler: compiler,\n environment: \"bundler\",\n });\n\n const out = {\n code: String(compiled.value),\n map: compiled.map as SourceMap,\n };\n\n await after?.();\n return out;\n },\n };\n}\n\nfunction generateCacheHash(input: string): string {\n return createHash(\"md5\").update(input).digest(\"hex\");\n}\n\nfunction countLines(s: string) {\n let num = 0;\n\n for (const c of s) {\n if (c === \"\\n\") num++;\n }\n\n return num;\n}\n"],"mappings":";;;;;;;;AAUA,MAAM,cAAc,EACjB,OAAO;CACN,MAAM,EAAE,QAAQ,CAAC,eAAe,MAAM,CAAC,CAAC,QAAQ,MAAM;CACtD,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,WAAW,EAAE,QAAQ,CAAC,UAAU;CACjC,CAAC,CACD,OAAO;AAEV,MAAM,aAAa,EAAE,OAAO;CAC1B,MAAM,EAAE,QAAQ;CAChB,KAAK,EAAE,KAAK,CAAC,UAAU;CACvB,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC5B,CAAC;AAIF,SAAgB,gBAAgB,EAAE,WAAgC;AAChE,QAAO,EACL,MAAM,KAAK,EAAE,WAAW,aAAa,eAAe,OAAO,UAAU,YAAY;EAC/E,IAAI,OAAO,MAAM,SAAS;EAC1B,MAAM,QAAQ,MAAM,WAAW;EAC/B,MAAM,SAAS,WAAW,MAAM;EAChC,MAAM,EAAE,YAAY,gBAAgB,WAAW,SAAS,YAAY,MAAM,MAAM;AAChF,MAAI,UACF,QAAO,KAAK,eAAe,CAAC,IAAI,UAAU,IAAI;EAGhD,IAAIA;EAEJ,MAAM,EAAE,yBAAyB,UAAU,KAAK,WAAW;AAC3D,MAAI,CAAC,iBAAiB,wBAAwB;GAC5C,MAAM,WAAW;GACjB,MAAM,WAAW,GAAG,kBAAkB,SAAS,GAAG,kBAAkB,SAAS;GAE7E,MAAM,SAAS,MAAM,GAClB,SAAS,KAAK,KAAK,UAAU,SAAS,CAAC,CACvC,MAAM,YAAY,WAAW,MAAM,KAAK,MAAM,QAAQ,UAAU,CAAC,CAAC,CAAC,CACnE,YAAY,KAAK;AAEpB,OAAI,UAAU,OAAO,SAAS,kBAAkB,MAAM,CAAE,QAAO;AAC/D,WAAQ,YAAY;AAClB,UAAM,GAAG,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAC7C,UAAM,GAAG,UACP,KAAK,KAAK,UAAU,SAAS,EAC7B,KAAK,UAAU;KACb,GAAG;KACH,MAAM,kBAAkB,MAAM;KAC/B,CAAsB,CACxB;;;EAIL,IAAI,aAAa,iBAAiB,KAAK,cAAc,eAAe,GAAG;AACvE,MAAI,EAAE,sBAAsB,eAAgB,cAAa;AAEzD,MAAI,YAAY,YACd,QAAO,OAAO,MAAM,WAAW,YAAY,IAAI,OAAO,MAAiC;GACrF;GACA;GACA,QAAQ;GACT,CAAC;AAGJ,MAAI,SAAS,cACX,QAAO;GACL,MAAM,8BAA8B,KAAK,UAAU,OAAO,KAAK;GAC/D,KAAK;GACN;EAIH,MAAM,aAAa,gBAAgB,WAAW,OAAO,OAAO,GAAG;EAE/D,MAAM,EAAE,aAAa,MAAM,OAAO;EAClC,MAAM,WAAW,MAAM,SAAS,MAAM,YAAY;GAChD;GACA,QAAQ,KAAK,OAAO,WAAW,GAAG,OAAO;GACzC;GACA,aAAa,OAAO;GACpB,WAAW;GACX,aAAa;GACd,CAAC;EAEF,MAAM,MAAM;GACV,MAAM,OAAO,SAAS,MAAM;GAC5B,KAAK,SAAS;GACf;AAED,QAAM,SAAS;AACf,SAAO;IAEV;;AAGH,SAAS,kBAAkB,OAAuB;AAChD,QAAO,WAAW,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM;;AAGtD,SAAS,WAAW,GAAW;CAC7B,IAAI,MAAM;AAEV,MAAK,MAAM,KAAK,EACd,KAAI,MAAM,KAAM;AAGlB,QAAO"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { t as createDataLoader } from "./loader-BzQpSBvP.js";
|
|
2
|
+
import { load } from "js-yaml";
|
|
3
|
+
|
|
4
|
+
//#region src/collections/yaml/loader.ts
|
|
5
|
+
function createYamlLoader(core) {
|
|
6
|
+
return createDataLoader(core, (filePath, source) => {
|
|
7
|
+
try {
|
|
8
|
+
return load(source);
|
|
9
|
+
} catch (e) {
|
|
10
|
+
throw new Error(`invalid data in ${filePath}`, { cause: e });
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createYamlLoader as t };
|
|
17
|
+
//# sourceMappingURL=loader-DwpOcxgh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-DwpOcxgh.js","names":[],"sources":["../src/collections/yaml/loader.ts"],"sourcesContent":["import type { Loader } from \"@/plugins/loader\";\nimport { load } from \"js-yaml\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { createDataLoader } from \"../data/loader\";\n\nexport function createYamlLoader(core: DynamicCore): Loader {\n return createDataLoader(core, (filePath, source) => {\n try {\n return load(source) as Record<string, unknown>;\n } catch (e) {\n throw new Error(`invalid data in ${filePath}`, { cause: e });\n }\n });\n}\n"],"mappings":";;;;AAKA,SAAgB,iBAAiB,MAA2B;AAC1D,QAAO,iBAAiB,OAAO,UAAU,WAAW;AAClD,MAAI;AACF,UAAO,KAAK,OAAO;WACZ,GAAG;AACV,SAAM,IAAI,MAAM,mBAAmB,YAAY,EAAE,OAAO,GAAG,CAAC;;GAE9D"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { E as Awaitable, m as Collection, r as EmitCodeGeneratorContext, v as AsyncPipe, y as Pipe } from "./core-BO3b8jMg.js";
|
|
2
|
+
import { t as CompilerOptions } from "./index-Da88Sj8w.js";
|
|
3
|
+
import { n as FileSystemCollectionConfig, t as FileSystemCollection } from "./fs-D34Sztbh.js";
|
|
4
|
+
import { ProcessorOptions, createProcessor } from "@mdx-js/mdx";
|
|
5
|
+
import { VFile } from "vfile";
|
|
6
|
+
import { Processor } from "unified";
|
|
7
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
8
|
+
import { Root } from "mdast";
|
|
9
|
+
import { MDXContent } from "mdx/types";
|
|
10
|
+
|
|
11
|
+
//#region src/collections/mdx/remark-postprocess.d.ts
|
|
12
|
+
interface ExtractedReference {
|
|
13
|
+
href: string;
|
|
14
|
+
}
|
|
15
|
+
interface PostprocessOptions {
|
|
16
|
+
_format: "md" | "mdx";
|
|
17
|
+
/**
|
|
18
|
+
* Properties to export from `vfile.data`
|
|
19
|
+
*/
|
|
20
|
+
valueToExport?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* stringify MDAST and export via `_markdown`.
|
|
23
|
+
*/
|
|
24
|
+
includeProcessedMarkdown?: boolean | {
|
|
25
|
+
/**
|
|
26
|
+
* include heading IDs into the processed markdown.
|
|
27
|
+
*/
|
|
28
|
+
headingIds?: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* extract link references, export via `extractedReferences`.
|
|
32
|
+
*/
|
|
33
|
+
extractLinkReferences?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* store MDAST and export via `_mdast`.
|
|
36
|
+
*/
|
|
37
|
+
includeMDAST?: boolean | {
|
|
38
|
+
removePosition?: boolean;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/collections/mdx/remark-preprocess.d.ts
|
|
43
|
+
interface PreprocessOptions {
|
|
44
|
+
preprocessor?: Processor<Root>;
|
|
45
|
+
}
|
|
46
|
+
declare module "vfile" {
|
|
47
|
+
interface DataMap {
|
|
48
|
+
_preprocessed?: boolean;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/collections/mdx/build-mdx.d.ts
|
|
53
|
+
type MDXProcessor = ReturnType<typeof createProcessor>;
|
|
54
|
+
interface FumaContentDataMap {
|
|
55
|
+
/**
|
|
56
|
+
* [Fuma Content] raw frontmatter, you can modify it
|
|
57
|
+
*/
|
|
58
|
+
frontmatter?: Record<string, unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* [Fuma Content] additional ESM exports to write
|
|
61
|
+
*/
|
|
62
|
+
"mdx-export"?: {
|
|
63
|
+
name: string;
|
|
64
|
+
value: unknown;
|
|
65
|
+
}[];
|
|
66
|
+
/**
|
|
67
|
+
* [Fuma Content] The compiler object from loader
|
|
68
|
+
*/
|
|
69
|
+
_compiler?: CompilerOptions;
|
|
70
|
+
/**
|
|
71
|
+
* [Fuma Content] get internal processor, do not use this on user land.
|
|
72
|
+
*/
|
|
73
|
+
_getProcessor?: (format: "md" | "mdx") => MDXProcessor | Promise<MDXProcessor>;
|
|
74
|
+
}
|
|
75
|
+
declare module "vfile" {
|
|
76
|
+
interface DataMap extends FumaContentDataMap {}
|
|
77
|
+
}
|
|
78
|
+
interface CompiledMDX<Frontmatter = Record<string, unknown>> extends Record<string, unknown> {
|
|
79
|
+
frontmatter: Frontmatter;
|
|
80
|
+
default: MDXContent;
|
|
81
|
+
/**
|
|
82
|
+
* Enable from `postprocess` option.
|
|
83
|
+
*/
|
|
84
|
+
_markdown?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Enable from `postprocess` option.
|
|
87
|
+
*/
|
|
88
|
+
_mdast?: string;
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/collections/mdx.d.ts
|
|
92
|
+
interface CompilationContext {
|
|
93
|
+
collection: Collection;
|
|
94
|
+
filePath: string;
|
|
95
|
+
source: string;
|
|
96
|
+
}
|
|
97
|
+
interface MDXCollectionConfig<FrontmatterSchema extends StandardSchemaV1 | undefined> extends Omit<FileSystemCollectionConfig, "supportedFormats"> {
|
|
98
|
+
postprocess?: Partial<PostprocessOptions>;
|
|
99
|
+
frontmatter?: FrontmatterSchema;
|
|
100
|
+
options?: (environment: "bundler" | "runtime") => Awaitable<ProcessorOptions>;
|
|
101
|
+
lazy?: boolean;
|
|
102
|
+
dynamic?: boolean;
|
|
103
|
+
}
|
|
104
|
+
interface InitializerCode {
|
|
105
|
+
fn: string;
|
|
106
|
+
typeParams: [config: string, name: string, attached: string];
|
|
107
|
+
params: string[];
|
|
108
|
+
}
|
|
109
|
+
declare class MDXCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined> extends FileSystemCollection {
|
|
110
|
+
readonly dynamic: boolean;
|
|
111
|
+
readonly lazy: boolean;
|
|
112
|
+
readonly preprocess?: PreprocessOptions;
|
|
113
|
+
readonly postprocess?: Partial<PostprocessOptions>;
|
|
114
|
+
readonly getMDXOptions?: (environment: "bundler" | "runtime") => Awaitable<ProcessorOptions>;
|
|
115
|
+
/**
|
|
116
|
+
* Frontmatter schema
|
|
117
|
+
*/
|
|
118
|
+
frontmatterSchema?: FrontmatterSchema;
|
|
119
|
+
/**
|
|
120
|
+
* Transform & validate frontmatter
|
|
121
|
+
*/
|
|
122
|
+
frontmatter: AsyncPipe<Record<string, unknown> | undefined, CompilationContext>;
|
|
123
|
+
/**
|
|
124
|
+
* Transform `vfile` on compilation stage
|
|
125
|
+
*/
|
|
126
|
+
vfile: AsyncPipe<VFile, CompilationContext>;
|
|
127
|
+
/**
|
|
128
|
+
* Transform the generated initializer code (TypeScript) for collection store
|
|
129
|
+
*/
|
|
130
|
+
storeInitializer: Pipe<InitializerCode, EmitCodeGeneratorContext & {
|
|
131
|
+
environment: "browser" | "server" | "dynamic";
|
|
132
|
+
}>;
|
|
133
|
+
$inferFrontmatter: FrontmatterSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<FrontmatterSchema> : Record<string, unknown>;
|
|
134
|
+
constructor(config: MDXCollectionConfig<FrontmatterSchema>);
|
|
135
|
+
private generateDocCollectionFrontmatterGlob;
|
|
136
|
+
private generateDocCollectionGlob;
|
|
137
|
+
private generateCollectionStoreServer;
|
|
138
|
+
private generateCollectionStoreBrowser;
|
|
139
|
+
private generateCollectionStoreDynamic;
|
|
140
|
+
}
|
|
141
|
+
declare function mdxCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(config: MDXCollectionConfig<FrontmatterSchema>): MDXCollection<FrontmatterSchema>;
|
|
142
|
+
//#endregion
|
|
143
|
+
export { ExtractedReference as a, CompiledMDX as i, MDXCollectionConfig as n, mdxCollection as r, MDXCollection as t };
|
|
144
|
+
//# sourceMappingURL=mdx-Dt9hirUu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-Dt9hirUu.d.ts","names":[],"sources":["../src/collections/mdx/remark-postprocess.ts","../src/collections/mdx/remark-preprocess.ts","../src/collections/mdx/build-mdx.ts","../src/collections/mdx.ts"],"sourcesContent":[],"mappings":"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"}
|