fuma-content 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/async-cache-CBEZB25o.d.ts +9 -0
- package/dist/async-cache-CBEZB25o.d.ts.map +1 -0
- package/dist/{async-cache-U87GzQTb.js → async-cache-DRmFaVGm.js} +1 -1
- package/dist/{async-cache-U87GzQTb.js.map → async-cache-DRmFaVGm.js.map} +1 -1
- package/dist/build-mdx-DkAvzRNg.d.ts +73 -0
- package/dist/build-mdx-DkAvzRNg.d.ts.map +1 -0
- package/dist/{build-mdx-CUp6FpfT.js → build-mdx-oug7zk0w.js} +23 -36
- package/dist/build-mdx-oug7zk0w.js.map +1 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +2 -2
- package/dist/{bun-CBROq3I0.js → bun-cxKGeSx6.js} +1 -1
- package/dist/bun-cxKGeSx6.js.map +1 -0
- package/dist/{code-generator-Qhhq7kHh.js → code-generator-C_Gu9y3h.js} +4 -4
- package/dist/code-generator-C_Gu9y3h.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +3 -6
- package/dist/collections/data/runtime.d.ts.map +1 -1
- package/dist/collections/data/runtime.js.map +1 -1
- package/dist/collections/data.d.ts +4 -4
- package/dist/collections/data.d.ts.map +1 -1
- package/dist/collections/data.js +158 -4
- package/dist/collections/data.js.map +1 -0
- package/dist/collections/fs.d.ts +45 -3
- package/dist/collections/fs.d.ts.map +1 -0
- package/dist/collections/fs.js +65 -2
- package/dist/collections/fs.js.map +1 -0
- package/dist/collections/index.d.ts +37 -2
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +37 -2
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/json/loader-webpack.d.ts +3 -3
- package/dist/collections/json/loader-webpack.d.ts.map +1 -1
- package/dist/collections/json/loader-webpack.js +3 -7
- package/dist/collections/json/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/loader-webpack.d.ts +3 -3
- package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
- package/dist/collections/mdx/loader-webpack.js +3 -8
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +4 -10
- package/dist/collections/mdx/react.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-browser.d.ts +26 -11
- package/dist/collections/mdx/runtime-browser.d.ts.map +1 -0
- package/dist/collections/mdx/runtime-browser.js +2 -2
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +7 -10
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +9 -12
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +27 -10
- package/dist/collections/mdx/runtime.d.ts.map +1 -0
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx.d.ts +67 -6
- package/dist/collections/mdx.d.ts.map +1 -0
- package/dist/collections/mdx.js +318 -6
- package/dist/collections/mdx.js.map +1 -0
- package/dist/collections/runtime/file-store.d.ts +21 -4
- package/dist/collections/runtime/file-store.d.ts.map +1 -0
- package/dist/collections/runtime/file-store.js +1 -1
- package/dist/collections/runtime/store.d.ts +31 -3
- package/dist/collections/runtime/store.d.ts.map +1 -0
- package/dist/collections/runtime/store.js +33 -2
- package/dist/collections/runtime/store.js.map +1 -0
- package/dist/collections/yaml/loader-webpack.d.ts +3 -3
- package/dist/collections/yaml/loader-webpack.d.ts.map +1 -1
- package/dist/collections/yaml/loader-webpack.js +3 -7
- package/dist/collections/yaml/loader-webpack.js.map +1 -1
- package/dist/config/index.d.ts +36 -2
- package/dist/config/index.d.ts.map +1 -0
- package/dist/{core-CT06v32N.d.ts → core-CG2zTL4c.d.ts} +4 -66
- package/dist/core-CG2zTL4c.d.ts.map +1 -0
- package/dist/{core-Uv3jZqL-.js → core-DmbQk8Z2.js} +9 -9
- package/dist/core-DmbQk8Z2.js.map +1 -0
- package/dist/dynamic.d.ts +25 -3
- package/dist/dynamic.d.ts.map +1 -0
- package/dist/dynamic.js +28 -2
- package/dist/dynamic.js.map +1 -0
- package/dist/{fuma-matter-BuBO2w-p.js → fuma-matter-Pwr2S9Ab.js} +1 -1
- package/dist/fuma-matter-Pwr2S9Ab.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/{load-from-file-z7EGuf2n.js → load-from-file-BeLFB77e.js} +4 -2
- package/dist/{load-from-file-z7EGuf2n.js.map → load-from-file-BeLFB77e.js.map} +1 -1
- package/dist/load-from-file-CpA8UQXX.d.ts +10 -0
- package/dist/load-from-file-CpA8UQXX.d.ts.map +1 -0
- package/dist/loader-DKTW82eK.js +19 -0
- package/dist/{loader-Cnz-VHne.js.map → loader-DKTW82eK.js.map} +1 -1
- package/dist/{loader-CnksfM7I.js → loader-DOjRBsog.js} +7 -5
- package/dist/loader-DOjRBsog.js.map +1 -0
- package/dist/loader-DTODFdmk.js +18 -0
- package/dist/{loader-BK8PnqRg.js.map → loader-DTODFdmk.js.map} +1 -1
- package/dist/{loader-CuntMmR4.js → loader-gwXIGo5Q.js} +3 -3
- package/dist/loader-gwXIGo5Q.js.map +1 -0
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +3 -3
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/loader.d.ts +1 -1
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +8 -8
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-2VZOh3P9.js → node-l03HaPSS.js} +1 -1
- package/dist/{node-2VZOh3P9.js.map → node-l03HaPSS.js.map} +1 -1
- package/dist/{collections-CNWuMDAZ.js → pipe-CvCqOpXX.js} +2 -36
- package/dist/pipe-CvCqOpXX.js.map +1 -0
- package/dist/plugins/git.d.ts +38 -3
- package/dist/plugins/git.d.ts.map +1 -0
- package/dist/plugins/git.js +60 -2
- package/dist/plugins/git.js.map +1 -0
- package/dist/plugins/json-schema.d.ts +2 -1
- package/dist/plugins/json-schema.d.ts.map +1 -1
- package/dist/plugins/json-schema.js +2 -2
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +75 -4
- package/dist/plugins/loader/index.d.ts.map +1 -0
- package/dist/plugins/loader/index.js +76 -2
- package/dist/plugins/loader/index.js.map +1 -0
- package/dist/plugins/loader/webpack.d.ts +21 -4
- package/dist/plugins/loader/webpack.d.ts.map +1 -0
- package/dist/plugins/loader/webpack.js +4 -4
- package/dist/plugins/loader/webpack.js.map +1 -1
- package/dist/rolldown-runtime-CjeV3_4I.js +18 -0
- package/dist/{validation-BvVvvLII.js → validation-C3kXuveD.js} +1 -1
- package/dist/{validation-BvVvvLII.js.map → validation-C3kXuveD.js.map} +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +3 -3
- package/dist/{vite-C1qXY47G.js → vite-mAc2TZyp.js} +3 -3
- package/dist/vite-mAc2TZyp.js.map +1 -0
- package/package.json +19 -10
- package/dist/build-mdx-CUp6FpfT.js.map +0 -1
- package/dist/build-mdx-D6zM3Sgl.js +0 -4
- package/dist/bun-CBROq3I0.js.map +0 -1
- package/dist/code-generator-Qhhq7kHh.js.map +0 -1
- package/dist/collections-CNWuMDAZ.js.map +0 -1
- package/dist/core-CT06v32N.d.ts.map +0 -1
- package/dist/core-Uv3jZqL-.js.map +0 -1
- package/dist/data-Cxsx5KPD.js +0 -159
- package/dist/data-Cxsx5KPD.js.map +0 -1
- package/dist/dynamic-Ck1wYoaL.d.ts +0 -33
- package/dist/dynamic-Ck1wYoaL.d.ts.map +0 -1
- package/dist/dynamic-CtOB4Rkp.js +0 -29
- package/dist/dynamic-CtOB4Rkp.js.map +0 -1
- package/dist/file-store-Dm1SjuLg.d.ts +0 -20
- package/dist/file-store-Dm1SjuLg.d.ts.map +0 -1
- package/dist/fs-CXzVd2Dp.js +0 -68
- package/dist/fs-CXzVd2Dp.js.map +0 -1
- package/dist/fs-CmwaaFyx.d.ts +0 -45
- package/dist/fs-CmwaaFyx.d.ts.map +0 -1
- package/dist/fuma-matter-BuBO2w-p.js.map +0 -1
- package/dist/git-DnejL9r_.js +0 -60
- package/dist/git-DnejL9r_.js.map +0 -1
- package/dist/git-n-9ddn78.d.ts +0 -37
- package/dist/git-n-9ddn78.d.ts.map +0 -1
- package/dist/index-BheUVWBm.d.ts +0 -87
- package/dist/index-BheUVWBm.d.ts.map +0 -1
- package/dist/load-from-file-D-Xm95Fz.js +0 -3
- package/dist/loader-B4nQrRwA.js +0 -77
- package/dist/loader-B4nQrRwA.js.map +0 -1
- package/dist/loader-B6ordrWK.js +0 -9
- package/dist/loader-BK8PnqRg.js +0 -16
- package/dist/loader-CnksfM7I.js.map +0 -1
- package/dist/loader-Cnz-VHne.js +0 -17
- package/dist/loader-CuntMmR4.js.map +0 -1
- package/dist/loader-Cx1Rg_VM.js +0 -8
- package/dist/loader-Dao_nv3e.js +0 -8
- package/dist/mdx-Cw1nBJ0D.js +0 -306
- package/dist/mdx-Cw1nBJ0D.js.map +0 -1
- package/dist/mdx-PaqRNZMS.d.ts +0 -135
- package/dist/mdx-PaqRNZMS.d.ts.map +0 -1
- package/dist/runtime-BUUHSFlR.d.ts +0 -31
- package/dist/runtime-BUUHSFlR.d.ts.map +0 -1
- package/dist/runtime-browser-B70WGxeQ.d.ts +0 -29
- package/dist/runtime-browser-B70WGxeQ.d.ts.map +0 -1
- package/dist/store-CRyvZFKN.js +0 -34
- package/dist/store-CRyvZFKN.js.map +0 -1
- package/dist/store-D_PPrdRE.d.ts +0 -31
- package/dist/store-D_PPrdRE.d.ts.map +0 -1
- package/dist/vite-C1qXY47G.js.map +0 -1
|
@@ -1,39 +1,10 @@
|
|
|
1
|
+
import { EmitConfig, GlobalConfig } from "./config/index.js";
|
|
2
|
+
import { Collection } from "./collections/index.js";
|
|
1
3
|
import { LoadHook } from "node:module";
|
|
2
4
|
import { FSWatcher } from "chokidar";
|
|
3
5
|
import * as Vite from "vite";
|
|
4
6
|
import { NextConfig } from "next";
|
|
5
7
|
|
|
6
|
-
//#region src/config/index.d.ts
|
|
7
|
-
interface GlobalConfig<Collections$1 extends Record<string, Collection> = Record<string, Collection>> {
|
|
8
|
-
plugins?: PluginOption$1[];
|
|
9
|
-
collections?: Collections$1;
|
|
10
|
-
workspaces?: Record<string, WorkspaceConfig>;
|
|
11
|
-
/**
|
|
12
|
-
* specify a directory to access & store cache (disabled during development mode).
|
|
13
|
-
*
|
|
14
|
-
* The cache will never be updated, delete the cache folder to clean.
|
|
15
|
-
*/
|
|
16
|
-
experimentalBuildCache?: string;
|
|
17
|
-
/**
|
|
18
|
-
* configure code generation
|
|
19
|
-
*/
|
|
20
|
-
emit?: EmitConfig;
|
|
21
|
-
}
|
|
22
|
-
interface EmitConfig {
|
|
23
|
-
target?: "default" | "vite";
|
|
24
|
-
/**
|
|
25
|
-
* add .js extenstion to imports
|
|
26
|
-
*/
|
|
27
|
-
jsExtension?: boolean;
|
|
28
|
-
}
|
|
29
|
-
interface WorkspaceConfig {
|
|
30
|
-
dir: string;
|
|
31
|
-
config: GlobalConfig | {
|
|
32
|
-
default: GlobalConfig;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
declare function defineConfig<Collections$1 extends Record<string, Collection> = Record<string, Collection>>(config?: GlobalConfig<Collections$1>): GlobalConfig<Collections$1>;
|
|
36
|
-
//#endregion
|
|
37
8
|
//#region src/types.d.ts
|
|
38
9
|
type GetCollectionConfig<Config, Name extends string> = Config extends Record<Name, Collection> ? Config[Name] : Config extends {
|
|
39
10
|
default: GlobalConfig<infer Collections>;
|
|
@@ -88,39 +59,6 @@ interface AsyncPipe<Data, Context = undefined> {
|
|
|
88
59
|
declare function pipe<Data, Context>(steps?: ((data: Data, context: Context) => Data)[]): Pipe<Data, Context>;
|
|
89
60
|
declare function asyncPipe<Data, Context>(steps?: ((data: Data, context: Context) => Awaitable<Data>)[]): AsyncPipe<Data, Context>;
|
|
90
61
|
//#endregion
|
|
91
|
-
//#region src/collections/index.d.ts
|
|
92
|
-
interface CollectionHookContext {
|
|
93
|
-
core: Core;
|
|
94
|
-
collection: Collection;
|
|
95
|
-
}
|
|
96
|
-
declare class Collection {
|
|
97
|
-
private readonly pluginHooks;
|
|
98
|
-
name: string;
|
|
99
|
-
/**
|
|
100
|
-
* on config loaded/updated
|
|
101
|
-
*/
|
|
102
|
-
readonly onConfig: Hook<CollectionHookContext & {
|
|
103
|
-
config: ResolvedConfig;
|
|
104
|
-
}>;
|
|
105
|
-
/**
|
|
106
|
-
* Configure watch/dev server
|
|
107
|
-
*/
|
|
108
|
-
readonly onServer: Hook<CollectionHookContext & {
|
|
109
|
-
server: ServerContext;
|
|
110
|
-
}>;
|
|
111
|
-
readonly onInit: AsyncHook<CollectionHookContext>;
|
|
112
|
-
readonly onEmit: AsyncPipe<EmitEntry[], EmitContext>;
|
|
113
|
-
readonly plugins: PluginOption$1[];
|
|
114
|
-
pluginHook<T, Options>(hook: CollectionHook<T, Options>, options: Options): T;
|
|
115
|
-
pluginHook<T>(hook: CollectionHook<T>): T;
|
|
116
|
-
getPluginHook<T>(hook: CollectionHook<T>): T | undefined;
|
|
117
|
-
}
|
|
118
|
-
interface CollectionHook<T = unknown, Options = undefined> {
|
|
119
|
-
id: symbol;
|
|
120
|
-
create: (collection: Collection, options: Options) => T;
|
|
121
|
-
}
|
|
122
|
-
declare function defineCollectionHook<T, Options = undefined>(init: (collection: Collection, options: Options) => T): CollectionHook<T, Options>;
|
|
123
|
-
//#endregion
|
|
124
62
|
//#region src/utils/code-generator.d.ts
|
|
125
63
|
interface CodeGeneratorOptions extends EmitConfig {
|
|
126
64
|
outDir: string;
|
|
@@ -308,5 +246,5 @@ declare class Core {
|
|
|
308
246
|
private initConfig;
|
|
309
247
|
}
|
|
310
248
|
//#endregion
|
|
311
|
-
export {
|
|
312
|
-
//# sourceMappingURL=core-
|
|
249
|
+
export { GetCollectionConfig as C, Awaitable as S, pipe as _, EmitOptions as a, asyncHook as b, PluginContext as c, ResolvedCoreOptions as d, ServerContext as f, asyncPipe as g, Pipe as h, EmitEntry as i, PluginOption$1 as l, AsyncPipe as m, CoreOptions as n, EmitOutput as o, CodeGenerator as p, EmitContext as r, Plugin as s, Core as t, ResolvedConfig as u, AsyncHook as v, hook as x, Hook as y };
|
|
250
|
+
//# sourceMappingURL=core-CG2zTL4c.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-CG2zTL4c.d.ts","names":[],"sources":["../src/types.ts","../src/utils/hook.ts","../src/utils/pipe.ts","../src/utils/code-generator.ts","../src/core.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as CodeGenerator } from "./code-generator-
|
|
1
|
+
import { Collection } from "./collections/index.js";
|
|
2
|
+
import { t as CodeGenerator } from "./code-generator-C_Gu9y3h.js";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
@@ -103,14 +103,14 @@ var Core = class Core {
|
|
|
103
103
|
getPlugins(workspace = false) {
|
|
104
104
|
if (workspace) {
|
|
105
105
|
const plugins = [...this.plugins];
|
|
106
|
-
for (const workspace
|
|
106
|
+
for (const workspace of this.workspaces.values()) plugins.push(...workspace.plugins);
|
|
107
107
|
return plugins;
|
|
108
108
|
}
|
|
109
109
|
return this.plugins;
|
|
110
110
|
}
|
|
111
111
|
getCollections(workspace = false) {
|
|
112
112
|
const list = Array.from(this.config.collections.values());
|
|
113
|
-
if (workspace) for (const workspace
|
|
113
|
+
if (workspace) for (const workspace of this.workspaces.values()) list.push(...workspace.getCollections());
|
|
114
114
|
return list;
|
|
115
115
|
}
|
|
116
116
|
getCollection(name) {
|
|
@@ -143,14 +143,14 @@ var Core = class Core {
|
|
|
143
143
|
const start = performance.now();
|
|
144
144
|
const ctx = {
|
|
145
145
|
core: this,
|
|
146
|
-
async createCodeGenerator(path
|
|
146
|
+
async createCodeGenerator(path, content) {
|
|
147
147
|
const codegen = new CodeGenerator({
|
|
148
148
|
...emitConfig,
|
|
149
149
|
outDir
|
|
150
150
|
});
|
|
151
151
|
await content({ codegen });
|
|
152
152
|
return {
|
|
153
|
-
path
|
|
153
|
+
path,
|
|
154
154
|
content: codegen.toString()
|
|
155
155
|
};
|
|
156
156
|
}
|
|
@@ -175,9 +175,9 @@ var Core = class Core {
|
|
|
175
175
|
}));
|
|
176
176
|
console.log(workspace ? `[fuma-content: ${workspace.name}] generated files in ${performance.now() - start}ms` : `[fuma-content] generated files in ${performance.now() - start}ms`);
|
|
177
177
|
}
|
|
178
|
-
for (const [name, workspace
|
|
178
|
+
for (const [name, workspace] of this.workspaces.entries()) {
|
|
179
179
|
if (filterWorkspace && !filterWorkspace(name)) continue;
|
|
180
|
-
out.workspaces[name] = (await workspace
|
|
180
|
+
out.workspaces[name] = (await workspace.emit(emitOptions)).entries;
|
|
181
181
|
}
|
|
182
182
|
return out;
|
|
183
183
|
}
|
|
@@ -215,4 +215,4 @@ var Core = class Core {
|
|
|
215
215
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { Core as t };
|
|
218
|
-
//# sourceMappingURL=core-
|
|
218
|
+
//# sourceMappingURL=core-DmbQk8Z2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-DmbQk8Z2.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport type { FSWatcher } from \"chokidar\";\nimport { Collection } from \"@/collections\";\nimport type * as Vite from \"vite\";\nimport type { NextConfig } from \"next\";\nimport type { LoadHook } from \"node:module\";\nimport { CodeGenerator } from \"@/utils/code-generator\";\nimport type { Awaitable } from \"@/types\";\nimport type { GlobalConfig } from \"./config\";\n\nexport interface ResolvedConfig extends Omit<GlobalConfig, \"collections\"> {\n collections: Map<string, Collection>;\n}\n\nexport interface EmitEntry {\n /**\n * path relative to output directory\n */\n path: string;\n content: string;\n}\n\nexport interface PluginContext {\n core: Core;\n}\n\nexport interface EmitContext extends PluginContext {\n createCodeGenerator: (\n path: string,\n content: (ctx: { codegen: CodeGenerator }) => Awaitable<void>,\n ) => Promise<EmitEntry>;\n}\n\nexport interface Plugin {\n /**\n * unique name for plugin\n *\n * @example `my-package:my-plugin`\n */\n name: string;\n\n /** when `true`, only keep the last plugin with same `name`. */\n dedupe?: boolean;\n\n /**\n * on config loaded/updated\n */\n config?: (this: PluginContext, config: ResolvedConfig) => Awaitable<void | ResolvedConfig>;\n\n /**\n * called after collection initialization\n */\n collection?: (this: PluginContext, collection: Collection) => Awaitable<void>;\n\n /**\n * Configure watch/dev server\n */\n configureServer?: (this: PluginContext, server: ServerContext) => void;\n\n vite?: {\n createPlugin?: (this: PluginContext) => Vite.PluginOption;\n };\n\n bun?: {\n setup?: (this: PluginContext, build: Bun.PluginBuilder) => Awaitable<void>;\n };\n\n next?: {\n config?: (this: PluginContext, config: NextConfig) => NextConfig;\n };\n\n node?: {\n createLoad?: (this: PluginContext) => Awaitable<LoadHook>;\n };\n}\n\nexport type PluginOption = Awaitable<Plugin | PluginOption[] | false | undefined>;\n\nexport interface ServerContext {\n /**\n * the file watcher, by default all content files are watched, along with other files.\n *\n * make sure to filter when listening to events\n */\n watcher?: FSWatcher;\n}\n\nexport type CoreOptions = Partial<ResolvedCoreOptions>;\n\n/**\n * the resolved options, all paths are absolute\n */\nexport interface ResolvedCoreOptions {\n cwd: string;\n /**\n * Path to source configuration file\n *\n * @defaultValue content.config.ts\n */\n configPath: string;\n /**\n * Directory for output files\n *\n * @defaultValue '.content'\n */\n outDir: string;\n /**\n * the workspace info if this instance is created as a workspace\n */\n workspace?: {\n parent: Core;\n name: string;\n dir: string;\n };\n plugins?: PluginOption;\n}\n\nexport interface EmitOptions {\n /**\n * filter the collections to run emit\n */\n filterCollection?: (collection: Collection) => boolean;\n\n /**\n * filter the workspaces to run emit\n */\n filterWorkspace?: (workspace: string) => boolean;\n\n /**\n * write files\n */\n write?: boolean;\n}\n\nexport interface EmitOutput {\n entries: EmitEntry[];\n workspaces: Record<string, EmitEntry[]>;\n}\n\nasync function getPlugins(pluginOptions: PluginOption[], dedupe = true): Promise<Plugin[]> {\n const plugins: Plugin[] = [];\n for (const option of await Promise.all(pluginOptions)) {\n if (!option) continue;\n if (Array.isArray(option)) plugins.push(...(await getPlugins(option, false)));\n else plugins.push(option);\n }\n\n if (!dedupe) return plugins;\n\n const excludedName = new Set<string>();\n const deduped: Plugin[] = [];\n for (let i = plugins.length - 1; i >= 0; i--) {\n const plugin = plugins[i];\n if (excludedName.has(plugin.name)) continue;\n deduped.unshift(plugin);\n if (plugin.dedupe) excludedName.add(plugin.name);\n }\n return deduped;\n}\n\nexport class Core {\n private readonly workspaces = new Map<string, Core>();\n private readonly options: ResolvedCoreOptions;\n private plugins: Plugin[] = [];\n private config!: ResolvedConfig;\n static defaultOptions = {\n configPath: \"content.config.ts\",\n outDir: \".content\",\n };\n\n /**\n * Convenient cache store, reset when config changes.\n *\n * You can group namespaces in cache key with \":\", like `my-plugin:data`\n */\n readonly cache = new Map<string, unknown>();\n\n constructor(options: CoreOptions = {}) {\n const cwd = options.cwd ? path.resolve(options.cwd) : process.cwd();\n this.options = {\n ...options,\n cwd,\n outDir: path.resolve(cwd, options.outDir ?? Core.defaultOptions.outDir),\n configPath: path.resolve(cwd, options.configPath ?? Core.defaultOptions.configPath),\n };\n }\n\n async init({\n config: newConfig,\n }: {\n /**\n * either the default export or all exports of config file.\n */\n config: Awaitable<Record<string, unknown>>;\n }) {\n this.config = await this.initConfig(await newConfig);\n this.cache.clear();\n this.workspaces.clear();\n this.plugins = await getPlugins([\n this.options.plugins,\n this.config.plugins,\n ...this.config.collections.values().map((collection) => collection.plugins),\n ]);\n\n const ctx = this.getPluginContext();\n for (const plugin of this.plugins) {\n const out = await plugin.config?.call(ctx, this.config);\n if (out) this.config = out;\n }\n\n await Promise.all(\n this.config.collections.values().map(async (collection) => {\n collection.onConfig.run({ collection, core: this, config: this.config });\n\n for (const plugin of this.plugins) {\n await plugin.collection?.call(ctx, collection);\n }\n }),\n );\n\n // only support workspaces with max depth 1\n if (!this.options.workspace && this.config.workspaces) {\n await Promise.all(\n Object.entries(this.config.workspaces).map(async ([name, workspace]) => {\n const child = new Core({\n ...this.options,\n cwd: path.resolve(this.options.cwd, workspace.dir),\n workspace: {\n name,\n parent: this,\n dir: workspace.dir,\n },\n });\n\n await child.init({ config: workspace.config as Record<string, unknown> });\n this.workspaces.set(name, child);\n }),\n );\n }\n }\n\n getWorkspace() {\n return this.options.workspace;\n }\n getWorkspaces() {\n return this.workspaces;\n }\n getOptions() {\n return this.options;\n }\n getConfig(): ResolvedConfig {\n return this.config;\n }\n /**\n * The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)\n */\n getCompiledConfigPath(): string {\n return path.join(this.options.outDir, \"content.config.mjs\");\n }\n getPlugins(workspace = false) {\n if (workspace) {\n const plugins = [...this.plugins];\n for (const workspace of this.workspaces.values()) {\n plugins.push(...workspace.plugins);\n }\n return plugins;\n }\n\n return this.plugins;\n }\n getCollections(workspace = false): Collection[] {\n const list = Array.from(this.config.collections.values());\n if (workspace) {\n for (const workspace of this.workspaces.values()) {\n list.push(...workspace.getCollections());\n }\n }\n return list;\n }\n getCollection(name: string): Collection | undefined {\n return this.config.collections.get(name);\n }\n getPluginContext(): PluginContext {\n return {\n core: this,\n };\n }\n async initServer(server: ServerContext) {\n const ctx = this.getPluginContext();\n\n server.watcher?.add(this.options.configPath);\n for (const plugin of this.plugins) {\n plugin.configureServer?.call(ctx, server);\n }\n for (const collection of this.getCollections()) {\n collection.onServer.run({ collection, core: this, server });\n }\n for (const workspace of this.workspaces.values()) {\n await workspace.initServer(server);\n }\n }\n\n async clearOutputDirectory() {\n await fs.rm(this.options.outDir, { recursive: true, force: true });\n }\n\n async emit(emitOptions: EmitOptions = {}): Promise<EmitOutput> {\n const emitConfig = this.config.emit;\n const { workspace, outDir } = this.options;\n const { filterCollection, filterWorkspace, write = false } = emitOptions;\n const start = performance.now();\n const ctx: EmitContext = {\n core: this,\n async createCodeGenerator(path, content) {\n const codegen = new CodeGenerator({\n ...emitConfig,\n outDir,\n });\n await content({\n codegen,\n });\n return {\n path,\n content: codegen.toString(),\n };\n },\n };\n\n const out: EmitOutput = {\n entries: [],\n workspaces: {},\n };\n\n const entryMap = new Map<string, EmitEntry>();\n const generated: Awaitable<EmitEntry[]>[] = [];\n for (const collection of this.getCollections()) {\n if (filterCollection && !filterCollection(collection)) continue;\n generated.push(collection.onEmit.run([], ctx));\n }\n for (const entries of await Promise.all(generated)) {\n for (const item of entries) {\n entryMap.set(item.path, item);\n }\n }\n out.entries = Array.from(entryMap.values());\n\n if (write) {\n await Promise.all(\n out.entries.map(async (entry) => {\n const file = path.join(outDir, entry.path);\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, entry.content);\n }),\n );\n\n console.log(\n workspace\n ? `[fuma-content: ${workspace.name}] generated files in ${performance.now() - start}ms`\n : `[fuma-content] generated files in ${performance.now() - start}ms`,\n );\n }\n\n for (const [name, workspace] of this.workspaces.entries()) {\n if (filterWorkspace && !filterWorkspace(name)) continue;\n out.workspaces[name] = (await workspace.emit(emitOptions)).entries;\n }\n\n return out;\n }\n\n /**\n * convert absolute path into a runtime path (relative to **runtime** cwd)\n */\n _toRuntimePath(absolutePath: string) {\n return path.relative(process.cwd(), absolutePath);\n }\n\n private async initConfig(config: Record<string, unknown>): Promise<ResolvedConfig> {\n const collections = new Map<string, Collection>();\n let globalConfig: GlobalConfig;\n\n if (\"default\" in config) {\n globalConfig = config.default as GlobalConfig;\n for (const [k, v] of Object.entries(config)) {\n if (v instanceof Collection) {\n globalConfig.collections ??= {};\n globalConfig.collections[k] = v;\n }\n }\n } else {\n globalConfig = config as GlobalConfig;\n }\n\n globalConfig.collections ??= {};\n await Promise.all(\n Object.entries(globalConfig.collections).map(async ([name, collection]) => {\n collection.name = name;\n collections.set(name, collection);\n await collection.onInit.run({ collection, core: this });\n }),\n );\n return {\n ...globalConfig,\n collections,\n };\n }\n}\n"],"mappings":";;;;;;AA4IA,eAAe,WAAW,eAA+B,SAAS,MAAyB;CACzF,MAAM,UAAoB,EAAE;AAC5B,MAAK,MAAM,UAAU,MAAM,QAAQ,IAAI,cAAc,EAAE;AACrD,MAAI,CAAC,OAAQ;AACb,MAAI,MAAM,QAAQ,OAAO,CAAE,SAAQ,KAAK,GAAI,MAAM,WAAW,QAAQ,MAAM,CAAE;MACxE,SAAQ,KAAK,OAAO;;AAG3B,KAAI,CAAC,OAAQ,QAAO;CAEpB,MAAM,+BAAe,IAAI,KAAa;CACtC,MAAM,UAAoB,EAAE;AAC5B,MAAK,IAAI,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;EAC5C,MAAM,SAAS,QAAQ;AACvB,MAAI,aAAa,IAAI,OAAO,KAAK,CAAE;AACnC,UAAQ,QAAQ,OAAO;AACvB,MAAI,OAAO,OAAQ,cAAa,IAAI,OAAO,KAAK;;AAElD,QAAO;;AAGT,IAAa,OAAb,MAAa,KAAK;CAChB,AAAiB,6BAAa,IAAI,KAAmB;CACrD,AAAiB;CACjB,AAAQ,UAAoB,EAAE;CAC9B,AAAQ;CACR,OAAO,iBAAiB;EACtB,YAAY;EACZ,QAAQ;EACT;;;;;;CAOD,AAAS,wBAAQ,IAAI,KAAsB;CAE3C,YAAY,UAAuB,EAAE,EAAE;EACrC,MAAM,MAAM,QAAQ,MAAM,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,KAAK;AACnE,OAAK,UAAU;GACb,GAAG;GACH;GACA,QAAQ,KAAK,QAAQ,KAAK,QAAQ,UAAU,KAAK,eAAe,OAAO;GACvE,YAAY,KAAK,QAAQ,KAAK,QAAQ,cAAc,KAAK,eAAe,WAAW;GACpF;;CAGH,MAAM,KAAK,EACT,QAAQ,aAMP;AACD,OAAK,SAAS,MAAM,KAAK,WAAW,MAAM,UAAU;AACpD,OAAK,MAAM,OAAO;AAClB,OAAK,WAAW,OAAO;AACvB,OAAK,UAAU,MAAM,WAAW;GAC9B,KAAK,QAAQ;GACb,KAAK,OAAO;GACZ,GAAG,KAAK,OAAO,YAAY,QAAQ,CAAC,KAAK,eAAe,WAAW,QAAQ;GAC5E,CAAC;EAEF,MAAM,MAAM,KAAK,kBAAkB;AACnC,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,MAAM,MAAM,OAAO,QAAQ,KAAK,KAAK,KAAK,OAAO;AACvD,OAAI,IAAK,MAAK,SAAS;;AAGzB,QAAM,QAAQ,IACZ,KAAK,OAAO,YAAY,QAAQ,CAAC,IAAI,OAAO,eAAe;AACzD,cAAW,SAAS,IAAI;IAAE;IAAY,MAAM;IAAM,QAAQ,KAAK;IAAQ,CAAC;AAExE,QAAK,MAAM,UAAU,KAAK,QACxB,OAAM,OAAO,YAAY,KAAK,KAAK,WAAW;IAEhD,CACH;AAGD,MAAI,CAAC,KAAK,QAAQ,aAAa,KAAK,OAAO,WACzC,OAAM,QAAQ,IACZ,OAAO,QAAQ,KAAK,OAAO,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,eAAe;GACtE,MAAM,QAAQ,IAAI,KAAK;IACrB,GAAG,KAAK;IACR,KAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,IAAI;IAClD,WAAW;KACT;KACA,QAAQ;KACR,KAAK,UAAU;KAChB;IACF,CAAC;AAEF,SAAM,MAAM,KAAK,EAAE,QAAQ,UAAU,QAAmC,CAAC;AACzE,QAAK,WAAW,IAAI,MAAM,MAAM;IAChC,CACH;;CAIL,eAAe;AACb,SAAO,KAAK,QAAQ;;CAEtB,gBAAgB;AACd,SAAO,KAAK;;CAEd,aAAa;AACX,SAAO,KAAK;;CAEd,YAA4B;AAC1B,SAAO,KAAK;;;;;CAKd,wBAAgC;AAC9B,SAAO,KAAK,KAAK,KAAK,QAAQ,QAAQ,qBAAqB;;CAE7D,WAAW,YAAY,OAAO;AAC5B,MAAI,WAAW;GACb,MAAM,UAAU,CAAC,GAAG,KAAK,QAAQ;AACjC,QAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,SAAQ,KAAK,GAAG,UAAU,QAAQ;AAEpC,UAAO;;AAGT,SAAO,KAAK;;CAEd,eAAe,YAAY,OAAqB;EAC9C,MAAM,OAAO,MAAM,KAAK,KAAK,OAAO,YAAY,QAAQ,CAAC;AACzD,MAAI,UACF,MAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,MAAK,KAAK,GAAG,UAAU,gBAAgB,CAAC;AAG5C,SAAO;;CAET,cAAc,MAAsC;AAClD,SAAO,KAAK,OAAO,YAAY,IAAI,KAAK;;CAE1C,mBAAkC;AAChC,SAAO,EACL,MAAM,MACP;;CAEH,MAAM,WAAW,QAAuB;EACtC,MAAM,MAAM,KAAK,kBAAkB;AAEnC,SAAO,SAAS,IAAI,KAAK,QAAQ,WAAW;AAC5C,OAAK,MAAM,UAAU,KAAK,QACxB,QAAO,iBAAiB,KAAK,KAAK,OAAO;AAE3C,OAAK,MAAM,cAAc,KAAK,gBAAgB,CAC5C,YAAW,SAAS,IAAI;GAAE;GAAY,MAAM;GAAM;GAAQ,CAAC;AAE7D,OAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,OAAM,UAAU,WAAW,OAAO;;CAItC,MAAM,uBAAuB;AAC3B,QAAM,GAAG,GAAG,KAAK,QAAQ,QAAQ;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;;CAGpE,MAAM,KAAK,cAA2B,EAAE,EAAuB;EAC7D,MAAM,aAAa,KAAK,OAAO;EAC/B,MAAM,EAAE,WAAW,WAAW,KAAK;EACnC,MAAM,EAAE,kBAAkB,iBAAiB,QAAQ,UAAU;EAC7D,MAAM,QAAQ,YAAY,KAAK;EAC/B,MAAM,MAAmB;GACvB,MAAM;GACN,MAAM,oBAAoB,MAAM,SAAS;IACvC,MAAM,UAAU,IAAI,cAAc;KAChC,GAAG;KACH;KACD,CAAC;AACF,UAAM,QAAQ,EACZ,SACD,CAAC;AACF,WAAO;KACL;KACA,SAAS,QAAQ,UAAU;KAC5B;;GAEJ;EAED,MAAM,MAAkB;GACtB,SAAS,EAAE;GACX,YAAY,EAAE;GACf;EAED,MAAM,2BAAW,IAAI,KAAwB;EAC7C,MAAM,YAAsC,EAAE;AAC9C,OAAK,MAAM,cAAc,KAAK,gBAAgB,EAAE;AAC9C,OAAI,oBAAoB,CAAC,iBAAiB,WAAW,CAAE;AACvD,aAAU,KAAK,WAAW,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC;;AAEhD,OAAK,MAAM,WAAW,MAAM,QAAQ,IAAI,UAAU,CAChD,MAAK,MAAM,QAAQ,QACjB,UAAS,IAAI,KAAK,MAAM,KAAK;AAGjC,MAAI,UAAU,MAAM,KAAK,SAAS,QAAQ,CAAC;AAE3C,MAAI,OAAO;AACT,SAAM,QAAQ,IACZ,IAAI,QAAQ,IAAI,OAAO,UAAU;IAC/B,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM,KAAK;AAC1C,UAAM,GAAG,MAAM,KAAK,QAAQ,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;AACvD,UAAM,GAAG,UAAU,MAAM,MAAM,QAAQ;KACvC,CACH;AAED,WAAQ,IACN,YACI,kBAAkB,UAAU,KAAK,uBAAuB,YAAY,KAAK,GAAG,MAAM,MAClF,qCAAqC,YAAY,KAAK,GAAG,MAAM,IACpE;;AAGH,OAAK,MAAM,CAAC,MAAM,cAAc,KAAK,WAAW,SAAS,EAAE;AACzD,OAAI,mBAAmB,CAAC,gBAAgB,KAAK,CAAE;AAC/C,OAAI,WAAW,SAAS,MAAM,UAAU,KAAK,YAAY,EAAE;;AAG7D,SAAO;;;;;CAMT,eAAe,cAAsB;AACnC,SAAO,KAAK,SAAS,QAAQ,KAAK,EAAE,aAAa;;CAGnD,MAAc,WAAW,QAA0D;EACjF,MAAM,8BAAc,IAAI,KAAyB;EACjD,IAAI;AAEJ,MAAI,aAAa,QAAQ;AACvB,kBAAe,OAAO;AACtB,QAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,CACzC,KAAI,aAAa,YAAY;AAC3B,iBAAa,gBAAgB,EAAE;AAC/B,iBAAa,YAAY,KAAK;;QAIlC,gBAAe;AAGjB,eAAa,gBAAgB,EAAE;AAC/B,QAAM,QAAQ,IACZ,OAAO,QAAQ,aAAa,YAAY,CAAC,IAAI,OAAO,CAAC,MAAM,gBAAgB;AACzE,cAAW,OAAO;AAClB,eAAY,IAAI,MAAM,WAAW;AACjC,SAAM,WAAW,OAAO,IAAI;IAAE;IAAY,MAAM;IAAM,CAAC;IACvD,CACH;AACD,SAAO;GACL,GAAG;GACH;GACD"}
|
package/dist/dynamic.d.ts
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
-
import "./core-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { t as Core } from "./core-CG2zTL4c.js";
|
|
2
|
+
import { t as CompileMode } from "./load-from-file-CpA8UQXX.js";
|
|
3
|
+
|
|
4
|
+
//#region src/dynamic.d.ts
|
|
5
|
+
interface DynamicCore {
|
|
6
|
+
getCore(): Core | Promise<Core>;
|
|
7
|
+
}
|
|
8
|
+
declare function createDynamicCore({
|
|
9
|
+
core,
|
|
10
|
+
compileMode,
|
|
11
|
+
mode
|
|
12
|
+
}: {
|
|
13
|
+
/**
|
|
14
|
+
* core (not initialized)
|
|
15
|
+
*/
|
|
16
|
+
core: Core;
|
|
17
|
+
compileMode?: CompileMode;
|
|
18
|
+
/**
|
|
19
|
+
* In dev mode, the config file is dynamically re-loaded when it's updated.
|
|
20
|
+
*/
|
|
21
|
+
mode: "dev" | "production";
|
|
22
|
+
}): DynamicCore;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { DynamicCore, createDynamicCore };
|
|
25
|
+
//# sourceMappingURL=dynamic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic.d.ts","names":[],"sources":["../src/dynamic.ts"],"mappings":";;;;UAIiB,WAAA;EACf,OAAA,IAAW,IAAA,GAAO,OAAA,CAAQ,IAAA;AAAA;AAAA,iBAGZ,iBAAA,CAAA;EACd,IAAA;EACA,WAAA;EACA;AAAA;;;;EAKA,IAAA,EAAM,IAAA;EACN,WAAA,GAAc,WAAA;EAZW;;;EAgBzB,IAAA;AAAA,IACE,WAAA"}
|
package/dist/dynamic.js
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
//#region src/dynamic.ts
|
|
4
|
+
function createDynamicCore({ core, compileMode = true, mode }) {
|
|
5
|
+
let prev;
|
|
6
|
+
async function getConfigHash() {
|
|
7
|
+
if (mode === "production") return "static";
|
|
8
|
+
return (await fs.stat(core.getOptions().configPath).catch(() => {
|
|
9
|
+
throw new Error("Cannot find config file");
|
|
10
|
+
})).mtime.getTime().toString();
|
|
11
|
+
}
|
|
12
|
+
async function init() {
|
|
13
|
+
const { loadConfig } = await import("./load-from-file-BeLFB77e.js").then((n) => n.n);
|
|
14
|
+
await core.init({ config: loadConfig(core, compileMode) });
|
|
15
|
+
}
|
|
16
|
+
return { async getCore() {
|
|
17
|
+
const hash = await getConfigHash();
|
|
18
|
+
if (!prev || hash !== prev.hash) prev = {
|
|
19
|
+
hash,
|
|
20
|
+
init: init()
|
|
21
|
+
};
|
|
22
|
+
await prev.init;
|
|
23
|
+
return core;
|
|
24
|
+
} };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { createDynamicCore };
|
|
29
|
+
//# sourceMappingURL=dynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic.js","names":[],"sources":["../src/dynamic.ts"],"sourcesContent":["import type { Core } from \"@/core\";\nimport fs from \"node:fs/promises\";\nimport type { CompileMode } from \"./config/load-from-file\";\n\nexport interface DynamicCore {\n getCore(): Core | Promise<Core>;\n}\n\nexport function createDynamicCore({\n core,\n compileMode = true,\n mode,\n}: {\n /**\n * core (not initialized)\n */\n core: Core;\n compileMode?: CompileMode;\n /**\n * In dev mode, the config file is dynamically re-loaded when it's updated.\n */\n mode: \"dev\" | \"production\";\n}): DynamicCore {\n let prev:\n | {\n hash: string;\n init: Promise<void>;\n }\n | undefined;\n\n async function getConfigHash(): Promise<string> {\n if (mode === \"production\") return \"static\";\n\n const stats = await fs.stat(core.getOptions().configPath).catch(() => {\n throw new Error(\"Cannot find config file\");\n });\n\n return stats.mtime.getTime().toString();\n }\n\n async function init() {\n const { loadConfig } = await import(\"./config/load-from-file\");\n await core.init({\n config: loadConfig(core, compileMode),\n });\n }\n\n return {\n async getCore() {\n const hash = await getConfigHash();\n if (!prev || hash !== prev.hash) {\n prev = {\n hash,\n init: init(),\n };\n }\n\n await prev.init;\n return core;\n },\n };\n}\n"],"mappings":";;;AAQA,SAAgB,kBAAkB,EAChC,MACA,cAAc,MACd,QAWc;CACd,IAAI;CAOJ,eAAe,gBAAiC;AAC9C,MAAI,SAAS,aAAc,QAAO;AAMlC,UAJc,MAAM,GAAG,KAAK,KAAK,YAAY,CAAC,WAAW,CAAC,YAAY;AACpE,SAAM,IAAI,MAAM,0BAA0B;IAC1C,EAEW,MAAM,SAAS,CAAC,UAAU;;CAGzC,eAAe,OAAO;EACpB,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,QAAM,KAAK,KAAK,EACd,QAAQ,WAAW,MAAM,YAAY,EACtC,CAAC;;AAGJ,QAAO,EACL,MAAM,UAAU;EACd,MAAM,OAAO,MAAM,eAAe;AAClC,MAAI,CAAC,QAAQ,SAAS,KAAK,KACzB,QAAO;GACL;GACA,MAAM,MAAM;GACb;AAGH,QAAM,KAAK;AACX,SAAO;IAEV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuma-matter-Pwr2S9Ab.js","names":[],"sources":["../src/collections/mdx/fuma-matter.ts"],"sourcesContent":["/**\n * Inspired by https://github.com/jonschlinkert/gray-matter\n */\nimport { load } from \"js-yaml\";\n\ninterface Output {\n /**\n * The matter section, including the delimiter.\n */\n matter: string;\n content: string;\n data: unknown;\n}\n\nconst regex = /^---\\r?\\n(.+?)\\r?\\n---\\r?\\n/s;\n\n/**\n * parse frontmatter, it supports only yaml format\n */\nexport function fumaMatter(input: string): Output {\n const output: Output = { matter: \"\", data: {}, content: input };\n const match = regex.exec(input);\n if (!match) {\n return output;\n }\n\n // get the raw front-matter block\n output.matter = match[0];\n output.content = input.slice(match[0].length);\n\n const loaded = load(match[1]);\n output.data = loaded ?? {};\n\n return output;\n}\n"],"mappings":";;;;;;AAcA,MAAM,QAAQ;;;;AAKd,SAAgB,WAAW,OAAuB;CAChD,MAAM,SAAiB;EAAE,QAAQ;EAAI,MAAM,EAAE;EAAE,SAAS;EAAO;CAC/D,MAAM,QAAQ,MAAM,KAAK,MAAM;AAC/B,KAAI,CAAC,MACH,QAAO;AAIT,QAAO,SAAS,MAAM;AACtB,QAAO,UAAU,MAAM,MAAM,MAAM,GAAG,OAAO;AAG7C,QAAO,OADQ,KAAK,MAAM,GAAG,IACL,EAAE;AAE1B,QAAO"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as
|
|
1
|
+
import { C as GetCollectionConfig, _ as pipe, a as EmitOptions, b as asyncHook, c as PluginContext, d as ResolvedCoreOptions, f as ServerContext, g as asyncPipe, h as Pipe, i as EmitEntry, l as PluginOption, m as AsyncPipe, n as CoreOptions, o as EmitOutput, r as EmitContext, s as Plugin, t as Core, u as ResolvedConfig, v as AsyncHook, x as hook, y as Hook } from "./core-CG2zTL4c.js";
|
|
2
2
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/validation.d.ts
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/validation.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/validation.ts"],"mappings":";;;;cAEa,eAAA,SAAwB,KAAA;EACnC,KAAA;EACA,MAAA,WAAiB,gBAAA,CAAiB,KAAA;cAEtB,OAAA,UAAiB,MAAA,WAAiB,gBAAA,CAAiB,KAAA;EAOzD,iBAAA,CAAA,GAAiB,OAAA;AAAA;AAAA,iBAkBH,QAAA,gBAAwB,gBAAA,UAAA,CAC5C,MAAA,EAAQ,gBAAA,KAAqB,OAAA,EAAS,OAAA,KAAY,gBAAA,GAClD,IAAA,WACA,OAAA,EAAS,OAAA,EACT,YAAA,WACC,OAAA,CAAQ,gBAAA,CAAiB,WAAA,CAAY,MAAA;;;;iBAqBxB,aAAA,CAAc,MAAA,EAAQ,gBAAA,GAAgB,MAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Core } from "./core-
|
|
3
|
-
import { n as getJSONSchema, r as validate, t as ValidationError } from "./validation-
|
|
1
|
+
import { i as hook, n as pipe, r as asyncHook, t as asyncPipe } from "./pipe-CvCqOpXX.js";
|
|
2
|
+
import { t as Core } from "./core-DmbQk8Z2.js";
|
|
3
|
+
import { n as getJSONSchema, r as validate, t as ValidationError } from "./validation-C3kXuveD.js";
|
|
4
4
|
|
|
5
5
|
export { Core, ValidationError, asyncHook, asyncPipe, getJSONSchema, hook, pipe, validate };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
|
|
1
2
|
import { pathToFileURL } from "node:url";
|
|
2
3
|
|
|
3
4
|
//#region src/config/load-from-file.ts
|
|
5
|
+
var load_from_file_exports = /* @__PURE__ */ __exportAll({ loadConfig: () => loadConfig });
|
|
4
6
|
async function compileConfig(core) {
|
|
5
7
|
const { build } = await import("esbuild");
|
|
6
8
|
const { configPath, outDir } = core.getOptions();
|
|
@@ -31,5 +33,5 @@ async function loadConfig(core, compileMode) {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
//#endregion
|
|
34
|
-
export { loadConfig as t };
|
|
35
|
-
//# sourceMappingURL=load-from-file-
|
|
36
|
+
export { load_from_file_exports as n, loadConfig as t };
|
|
37
|
+
//# sourceMappingURL=load-from-file-BeLFB77e.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-from-file-
|
|
1
|
+
{"version":3,"file":"load-from-file-BeLFB77e.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: \"node22\",\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,10 @@
|
|
|
1
|
+
//#region src/config/load-from-file.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* - `true`: compile the config before loading.
|
|
4
|
+
* - `false`: import the config directly (without compiling it).
|
|
5
|
+
* - `skip`: assume the config is already compiled.
|
|
6
|
+
*/
|
|
7
|
+
type CompileMode = boolean | "skip";
|
|
8
|
+
//#endregion
|
|
9
|
+
export { CompileMode as t };
|
|
10
|
+
//# sourceMappingURL=load-from-file-CpA8UQXX.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-from-file-CpA8UQXX.d.ts","names":[],"sources":["../src/config/load-from-file.ts"],"mappings":";AAQA;;;;;AAAA,KAAY,WAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
|
|
2
|
+
import { t as createDataLoader } from "./loader-gwXIGo5Q.js";
|
|
3
|
+
import { load } from "js-yaml";
|
|
4
|
+
|
|
5
|
+
//#region src/collections/yaml/loader.ts
|
|
6
|
+
var loader_exports = /* @__PURE__ */ __exportAll({ createYamlLoader: () => createYamlLoader });
|
|
7
|
+
function createYamlLoader(core) {
|
|
8
|
+
return createDataLoader(core, (filePath, source) => {
|
|
9
|
+
try {
|
|
10
|
+
return load(source);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
throw new Error(`invalid data in ${filePath}`, { cause: e });
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { loader_exports as n, createYamlLoader as t };
|
|
19
|
+
//# sourceMappingURL=loader-DKTW82eK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-
|
|
1
|
+
{"version":3,"file":"loader-DKTW82eK.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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import {
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
|
|
2
|
+
import { MDXCollection } from "./collections/mdx.js";
|
|
3
|
+
import { t as fumaMatter } from "./fuma-matter-Pwr2S9Ab.js";
|
|
3
4
|
import fs from "node:fs/promises";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import { z } from "zod";
|
|
6
7
|
import { createHash } from "node:crypto";
|
|
7
8
|
|
|
8
9
|
//#region src/collections/mdx/loader.ts
|
|
10
|
+
var loader_exports = /* @__PURE__ */ __exportAll({ createMdxLoader: () => createMdxLoader });
|
|
9
11
|
const querySchema = z.object({
|
|
10
12
|
only: z.literal(["frontmatter", "all"]).default("all"),
|
|
11
13
|
collection: z.string().optional(),
|
|
@@ -50,7 +52,7 @@ function createMdxLoader({ getCore }) {
|
|
|
50
52
|
map: null
|
|
51
53
|
};
|
|
52
54
|
const lineOffset = isDevelopment ? countLines(matter.matter) : 0;
|
|
53
|
-
const { buildMDX } = await import("./build-mdx-
|
|
55
|
+
const { buildMDX } = await import("./build-mdx-oug7zk0w.js").then((n) => n.n);
|
|
54
56
|
const compiled = await buildMDX(core, collection, {
|
|
55
57
|
isDevelopment,
|
|
56
58
|
source: "\n".repeat(lineOffset) + matter.content,
|
|
@@ -77,5 +79,5 @@ function countLines(s) {
|
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
//#endregion
|
|
80
|
-
export { createMdxLoader as t };
|
|
81
|
-
//# sourceMappingURL=loader-
|
|
82
|
+
export { loader_exports as n, createMdxLoader as t };
|
|
83
|
+
//# sourceMappingURL=loader-DOjRBsog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-DOjRBsog.js","names":[],"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,IAAI;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,18 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
|
|
2
|
+
import { t as createDataLoader } from "./loader-gwXIGo5Q.js";
|
|
3
|
+
|
|
4
|
+
//#region src/collections/json/loader.ts
|
|
5
|
+
var loader_exports = /* @__PURE__ */ __exportAll({ createJsonLoader: () => createJsonLoader });
|
|
6
|
+
function createJsonLoader(core, resolveJson = "js") {
|
|
7
|
+
return createDataLoader(core, (filePath, source) => {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(source);
|
|
10
|
+
} catch (e) {
|
|
11
|
+
throw new Error(`invalid data in ${filePath}`, { cause: e });
|
|
12
|
+
}
|
|
13
|
+
}, resolveJson);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { loader_exports as n, createJsonLoader as t };
|
|
18
|
+
//# sourceMappingURL=loader-DTODFdmk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-
|
|
1
|
+
{"version":3,"file":"loader-DTODFdmk.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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as validate } from "./validation-
|
|
2
|
-
import {
|
|
1
|
+
import { r as validate } from "./validation-C3kXuveD.js";
|
|
2
|
+
import { DataCollection } from "./collections/data.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/collections/data/loader.ts
|
|
@@ -56,4 +56,4 @@ function createDataLoader({ getCore }, parse, moduleType = "js") {
|
|
|
56
56
|
|
|
57
57
|
//#endregion
|
|
58
58
|
export { createDataLoader as t };
|
|
59
|
-
//# sourceMappingURL=loader-
|
|
59
|
+
//# sourceMappingURL=loader-gwXIGo5Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-gwXIGo5Q.js","names":[],"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,IAAI,OAAgB,MAAM,UAAU,OAAO;AAC3C,OAAI,CAAC,cAAc,EAAE,sBAAsB,gBAAiB,QAAO;GAEnE,MAAM,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"}
|
package/dist/next/index.d.ts
CHANGED
package/dist/next/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/next/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/next/index.ts"],"mappings":";;;;UAOiB,WAAA,SAAoB,IAAA,CAAK,WAAA;;AAA1C;;;;EAME,KAAA;AAAA;AAAA,iBAGoB,aAAA,CAAc,OAAA,GAAS,WAAA,GAAgB,OAAA,EAAA,UAAA,GAiBvC,UAAA,KAAkB,UAAA;AAAA,iBA4DlB,oBAAA,CAAqB,OAAA,EAAS,WAAA,GAAW,OAAA,CAAA,IAAA"}
|
package/dist/next/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Core } from "../core-
|
|
2
|
-
import {
|
|
3
|
-
import { t as loadConfig } from "../load-from-file-
|
|
1
|
+
import { t as Core } from "../core-DmbQk8Z2.js";
|
|
2
|
+
import { loaderPlugin } from "../plugins/loader/index.js";
|
|
3
|
+
import { t as loadConfig } from "../load-from-file-BeLFB77e.js";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/next/index.ts
|
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"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,IAAI;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"}
|
package/dist/node/index.d.ts
CHANGED
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/node/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/node/index.ts"],"mappings":";;;;iBAGgB,QAAA,CAAS,OAAA,GAAS,aAAA"}
|
package/dist/node/loader.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"mappings":";;;;KAQY,aAAA,GAAgB,IAAA,CAAK,WAAA;AAAA,cAEpB,UAAA,EAAY,cAAA,CAAe,aAAA;AAAA,cAU3B,IAAA,EAAM,QAAA"}
|
package/dist/node/loader.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Core } from "../core-
|
|
3
|
-
import { t as createCache } from "../async-cache-
|
|
4
|
-
import {
|
|
1
|
+
import { createDynamicCore } from "../dynamic.js";
|
|
2
|
+
import { t as Core } from "../core-DmbQk8Z2.js";
|
|
3
|
+
import { t as createCache } from "../async-cache-DRmFaVGm.js";
|
|
4
|
+
import { loaderPlugin } from "../plugins/loader/index.js";
|
|
5
5
|
|
|
6
6
|
//#region src/node/loader.ts
|
|
7
7
|
let configLoader;
|
|
@@ -23,10 +23,10 @@ const load = async (url, context, nextLoad) => {
|
|
|
23
23
|
return plugin.node?.createLoad?.call(ctx);
|
|
24
24
|
}))).filter((v) => v !== void 0);
|
|
25
25
|
});
|
|
26
|
-
function run(i, url
|
|
27
|
-
if (i >= hooks.length) return nextLoad(url
|
|
28
|
-
return hooks[i](url
|
|
29
|
-
...context
|
|
26
|
+
function run(i, url, context) {
|
|
27
|
+
if (i >= hooks.length) return nextLoad(url, context);
|
|
28
|
+
return hooks[i](url, context, (url, ctx) => run(i + 1, url, {
|
|
29
|
+
...context,
|
|
30
30
|
...ctx
|
|
31
31
|
}));
|
|
32
32
|
}
|
package/dist/node/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","names":[
|
|
1
|
+
{"version":3,"file":"loader.js","names":[],"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,IAAI;AAIJ,MAAa,cAA6C,YAAY;AACpE,gBAAe,kBAAkB;EAC/B,MAAM,IAAI,KAAK;GACb,GAAG;GACH,SAAS,CAAC,cAAc,CAAC;GAC1B,CAAC;EACF,MAAM;EACP,CAAC;;AAGJ,MAAa,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,KACA,SACsC;AACtC,MAAI,KAAK,MAAM,OACb,QAAO,SAAS,KAAK,QAAQ;AAG/B,SAAO,MAAM,GAAG,KAAK,UAAU,KAAK,QAAQ,IAAI,IAAI,GAAG,KAAK;GAAE,GAAG;GAAS,GAAG;GAAK,CAAC,CAAC;;AAGtF,QAAO,IAAI,GAAG,KAAK,QAAQ"}
|