fuma-content 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{async-cache-BM9Yf4Nw.js → async-cache-U87GzQTb.js} +1 -1
- package/dist/async-cache-U87GzQTb.js.map +1 -0
- package/dist/{build-mdx-C1PZsGp2.js → build-mdx-BZxE8t2a.js} +16 -11
- package/dist/build-mdx-BZxE8t2a.js.map +1 -0
- package/dist/build-mdx-LhpFasX-.js +4 -0
- package/dist/bun/index.d.ts +7 -4
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +25 -19
- package/dist/bun/index.js.map +1 -1
- package/dist/{bun-QKQnqgIi.js → bun-CBROq3I0.js} +3 -3
- package/dist/bun-CBROq3I0.js.map +1 -0
- package/dist/code-generator-CjC4EEXg.js +102 -0
- package/dist/code-generator-CjC4EEXg.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +15 -0
- package/dist/collections/data/runtime.d.ts.map +1 -0
- package/dist/collections/{meta → data}/runtime.js +4 -4
- package/dist/collections/data/runtime.js.map +1 -0
- package/dist/collections/data.d.ts +47 -0
- package/dist/collections/data.d.ts.map +1 -0
- package/dist/collections/data.js +5 -0
- package/dist/collections/fs.d.ts +3 -0
- package/dist/collections/fs.js +3 -0
- package/dist/collections/index.d.ts +2 -2
- package/dist/collections/index.js +2 -15
- package/dist/collections/json/loader-webpack.d.ts +9 -0
- package/dist/collections/json/loader-webpack.d.ts.map +1 -0
- package/dist/collections/json/loader-webpack.js +15 -0
- package/dist/collections/json/loader-webpack.js.map +1 -0
- package/dist/collections/mdx/loader-webpack.d.ts +5 -5
- package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
- package/dist/collections/mdx/loader-webpack.js +11 -21
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +22 -0
- package/dist/collections/mdx/react.d.ts.map +1 -0
- package/dist/collections/mdx/react.js +35 -0
- package/dist/collections/mdx/react.js.map +1 -0
- package/dist/collections/mdx/runtime-browser.d.ts +11 -45
- package/dist/collections/mdx/runtime-browser.js +6 -44
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +16 -28
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +19 -23
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +10 -49
- package/dist/collections/mdx/runtime.js +2 -11
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx.d.ts +6 -2
- package/dist/collections/mdx.js +6 -246
- package/dist/collections/runtime/file-store.d.ts +4 -22
- package/dist/collections/runtime/file-store.js +15 -14
- package/dist/collections/runtime/file-store.js.map +1 -1
- package/dist/collections/runtime/store.d.ts +3 -3
- package/dist/collections/runtime/store.js +2 -2
- package/dist/collections/yaml/loader-webpack.d.ts +9 -0
- package/dist/collections/yaml/loader-webpack.d.ts.map +1 -0
- package/dist/collections/yaml/loader-webpack.js +15 -0
- package/dist/collections/yaml/loader-webpack.js.map +1 -0
- package/dist/collections-DNFRdCuB.js +98 -0
- package/dist/collections-DNFRdCuB.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/core-BO3b8jMg.d.ts +313 -0
- package/dist/core-BO3b8jMg.d.ts.map +1 -0
- package/dist/core-D5QHSKk6.js +223 -0
- package/dist/core-D5QHSKk6.js.map +1 -0
- package/dist/data-9h98oZwj.js +158 -0
- package/dist/data-9h98oZwj.js.map +1 -0
- package/dist/dynamic-CTYYdl7_.d.ts +33 -0
- package/dist/dynamic-CTYYdl7_.d.ts.map +1 -0
- package/dist/{dynamic-B40uAtdo.js → dynamic-DhKTOrIl.js} +8 -7
- package/dist/dynamic-DhKTOrIl.js.map +1 -0
- package/dist/dynamic.d.ts +3 -0
- package/dist/dynamic.js +3 -0
- package/dist/file-store-laO4IjvB.d.ts +21 -0
- package/dist/file-store-laO4IjvB.d.ts.map +1 -0
- package/dist/fs-D34Sztbh.d.ts +44 -0
- package/dist/fs-D34Sztbh.d.ts.map +1 -0
- package/dist/fs-WWbLA7Gx.js +66 -0
- package/dist/fs-WWbLA7Gx.js.map +1 -0
- package/dist/{fuma-matter-O4fA6nSx.js → fuma-matter-BuBO2w-p.js} +2 -2
- package/dist/fuma-matter-BuBO2w-p.js.map +1 -0
- package/dist/git-2CjUW3M5.d.ts +37 -0
- package/dist/git-2CjUW3M5.d.ts.map +1 -0
- package/dist/git-CQWA37-X.js +60 -0
- package/dist/git-CQWA37-X.js.map +1 -0
- package/dist/index-Da88Sj8w.d.ts +87 -0
- package/dist/index-Da88Sj8w.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/load-from-file-BZxc_BhC.js +3 -0
- package/dist/{load-from-file-1f4WaHsf.js → load-from-file-irx0JI6j.js} +5 -8
- package/dist/load-from-file-irx0JI6j.js.map +1 -0
- package/dist/loader-AIEwGc2f.js +9 -0
- package/dist/loader-BhXHF8vy.js +16 -0
- package/dist/loader-BhXHF8vy.js.map +1 -0
- package/dist/loader-BuR4gkKg.js +77 -0
- package/dist/loader-BuR4gkKg.js.map +1 -0
- package/dist/loader-BzQpSBvP.js +59 -0
- package/dist/loader-BzQpSBvP.js.map +1 -0
- package/dist/{loader-CXnMFuyE.js → loader-D6StkShK.js} +8 -7
- package/dist/loader-D6StkShK.js.map +1 -0
- package/dist/loader-DCK4RwOh.js +8 -0
- package/dist/loader-DwpOcxgh.js +17 -0
- package/dist/loader-DwpOcxgh.js.map +1 -0
- package/dist/loader-zsTVgQjO.js +8 -0
- package/dist/mdx-Dt9hirUu.d.ts +144 -0
- package/dist/mdx-Dt9hirUu.d.ts.map +1 -0
- package/dist/mdx-iZ2uP27Z.js +303 -0
- package/dist/mdx-iZ2uP27Z.js.map +1 -0
- package/dist/next/index.d.ts +6 -10
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +23 -31
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +8 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +10 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/loader.d.ts +5 -2
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +17 -14
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-CGIIJIcs.js → node-2VZOh3P9.js} +7 -5
- package/dist/node-2VZOh3P9.js.map +1 -0
- package/dist/plugins/git.d.ts +3 -2
- package/dist/plugins/git.js +2 -61
- package/dist/plugins/json-schema.d.ts +26 -2
- package/dist/plugins/json-schema.d.ts.map +1 -0
- package/dist/plugins/json-schema.js +42 -51
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +4 -0
- package/dist/plugins/loader/index.js +3 -0
- package/dist/plugins/loader/webpack.d.ts +4 -0
- package/dist/plugins/loader/webpack.js +60 -0
- package/dist/plugins/loader/webpack.js.map +1 -0
- package/dist/runtime-HN-HSB0Z.d.ts +31 -0
- package/dist/runtime-HN-HSB0Z.d.ts.map +1 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts +29 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts.map +1 -0
- package/dist/store-DiuGdV5M.d.ts +31 -0
- package/dist/store-DiuGdV5M.d.ts.map +1 -0
- package/dist/{store-0LQ2PlH6.js → store-IvpEBdxi.js} +4 -4
- package/dist/store-IvpEBdxi.js.map +1 -0
- package/dist/{validation-BOJKRAp5.js → validation-BvVvvLII.js} +11 -2
- package/dist/validation-BvVvvLII.js.map +1 -0
- package/dist/vite/index.d.ts +5 -15
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +24 -21
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-X-2Al8fq.js → vite-C1qXY47G.js} +4 -3
- package/dist/vite-C1qXY47G.js.map +1 -0
- package/package.json +51 -46
- package/dist/async-cache-BM9Yf4Nw.js.map +0 -1
- package/dist/build-D8A5ByFk.js +0 -42
- package/dist/build-D8A5ByFk.js.map +0 -1
- package/dist/build-mdx-C1PZsGp2.js.map +0 -1
- package/dist/build-mdx-DFndaVbS.js +0 -4
- package/dist/bun-QKQnqgIi.js.map +0 -1
- package/dist/code-generator-gPtrfZ6Q.js +0 -133
- package/dist/code-generator-gPtrfZ6Q.js.map +0 -1
- package/dist/collections/handlers/fs.d.ts +0 -2
- package/dist/collections/handlers/fs.js +0 -28
- package/dist/collections/handlers/fs.js.map +0 -1
- package/dist/collections/index.js.map +0 -1
- package/dist/collections/mdx/runtime-browser.d.ts.map +0 -1
- package/dist/collections/mdx/runtime.d.ts.map +0 -1
- package/dist/collections/mdx.js.map +0 -1
- package/dist/collections/meta/loader-webpack.d.ts +0 -9
- package/dist/collections/meta/loader-webpack.d.ts.map +0 -1
- package/dist/collections/meta/loader-webpack.js +0 -28
- package/dist/collections/meta/loader-webpack.js.map +0 -1
- package/dist/collections/meta/runtime.d.ts +0 -11
- package/dist/collections/meta/runtime.d.ts.map +0 -1
- package/dist/collections/meta/runtime.js.map +0 -1
- package/dist/collections/meta.d.ts +0 -2
- package/dist/collections/meta.js +0 -134
- package/dist/collections/meta.js.map +0 -1
- package/dist/collections/runtime/file-store.d.ts.map +0 -1
- package/dist/core-Bkh-SI_3.d.ts +0 -561
- package/dist/core-Bkh-SI_3.d.ts.map +0 -1
- package/dist/core-ZuoVBkeg.js +0 -170
- package/dist/core-ZuoVBkeg.js.map +0 -1
- package/dist/dynamic-B40uAtdo.js.map +0 -1
- package/dist/fuma-matter-O4fA6nSx.js.map +0 -1
- package/dist/load-from-file-1f4WaHsf.js.map +0 -1
- package/dist/load-from-file-BTNnBu6f.js +0 -3
- package/dist/loader-80abXEHx.js +0 -4
- package/dist/loader-BFhPyg3z.js +0 -4
- package/dist/loader-CXnMFuyE.js.map +0 -1
- package/dist/loader-gk94iHf5.js +0 -66
- package/dist/loader-gk94iHf5.js.map +0 -1
- package/dist/next/index.cjs +0 -502
- package/dist/node-CGIIJIcs.js.map +0 -1
- package/dist/pipe-5cnvE6KY.js +0 -31
- package/dist/pipe-5cnvE6KY.js.map +0 -1
- package/dist/plugins/git.js.map +0 -1
- package/dist/plugins/with-loader/index.d.ts +0 -2
- package/dist/plugins/with-loader/index.js +0 -28
- package/dist/plugins/with-loader/index.js.map +0 -1
- package/dist/plugins/with-loader/webpack.d.ts +0 -19
- package/dist/plugins/with-loader/webpack.d.ts.map +0 -1
- package/dist/plugins/with-loader/webpack.js +0 -43
- package/dist/plugins/with-loader/webpack.js.map +0 -1
- package/dist/store-0LQ2PlH6.js.map +0 -1
- package/dist/store-DEjYYF6a.d.ts +0 -31
- package/dist/store-DEjYYF6a.d.ts.map +0 -1
- package/dist/validation-BOJKRAp5.js.map +0 -1
- package/dist/vite-X-2Al8fq.js.map +0 -1
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { LoadHook } from "node:module";
|
|
2
|
+
import { FSWatcher } from "chokidar";
|
|
3
|
+
import * as Vite from "vite";
|
|
4
|
+
import { NextConfig } from "next";
|
|
5
|
+
|
|
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?: {
|
|
21
|
+
target?: "default" | "vite";
|
|
22
|
+
/**
|
|
23
|
+
* add .js extenstion to imports
|
|
24
|
+
*/
|
|
25
|
+
jsExtension?: boolean;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
interface WorkspaceConfig {
|
|
29
|
+
dir: string;
|
|
30
|
+
config: GlobalConfig | {
|
|
31
|
+
default: GlobalConfig;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
declare function defineConfig<Collections$1 extends Record<string, Collection> = Record<string, Collection>>(config?: GlobalConfig<Collections$1>): GlobalConfig<Collections$1>;
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/types.d.ts
|
|
37
|
+
type GetCollectionConfig<Config, Name extends string> = Config extends Record<Name, Collection> ? Config[Name] : Config extends {
|
|
38
|
+
default: GlobalConfig<infer Collections>;
|
|
39
|
+
} ? Collections[Name] : never;
|
|
40
|
+
type Awaitable<T> = T | PromiseLike<T>;
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/utils/hook.d.ts
|
|
43
|
+
interface Hook<Context = undefined> {
|
|
44
|
+
/**
|
|
45
|
+
* add a hook
|
|
46
|
+
*
|
|
47
|
+
* @returns the same pipe instance
|
|
48
|
+
*/
|
|
49
|
+
hook: (fn: (context: Context) => void) => Hook<Context>;
|
|
50
|
+
run: (context: Context) => void;
|
|
51
|
+
}
|
|
52
|
+
interface AsyncHook<Context = undefined> {
|
|
53
|
+
/**
|
|
54
|
+
* add a hook
|
|
55
|
+
*
|
|
56
|
+
* @returns the same pipe instance
|
|
57
|
+
*/
|
|
58
|
+
hook: (fn: (context: Context) => Awaitable<void>) => AsyncHook<Context>;
|
|
59
|
+
run: (context: Context) => Awaitable<void>;
|
|
60
|
+
}
|
|
61
|
+
declare function hook<Context>(steps?: ((ctx: Context) => void)[]): Hook<Context>;
|
|
62
|
+
declare function asyncHook<Context>(steps?: ((ctx: Context) => Awaitable<void>)[]): AsyncHook<Context>;
|
|
63
|
+
//#endregion
|
|
64
|
+
//#region src/utils/pipe.d.ts
|
|
65
|
+
interface Pipe<Data, Context = undefined> {
|
|
66
|
+
/**
|
|
67
|
+
* add a transformation step
|
|
68
|
+
*
|
|
69
|
+
* @returns the same pipe instance
|
|
70
|
+
*/
|
|
71
|
+
pipe: (fn: (data: Data, context: Context) => Data) => Pipe<Data, Context>;
|
|
72
|
+
run: (data: Data, context: Context) => Data;
|
|
73
|
+
clone: () => Pipe<Data, Context>;
|
|
74
|
+
}
|
|
75
|
+
interface AsyncPipe<Data, Context = undefined> {
|
|
76
|
+
/**
|
|
77
|
+
* add a transformation step
|
|
78
|
+
*
|
|
79
|
+
* @returns the same pipe instance
|
|
80
|
+
*/
|
|
81
|
+
pipe: (fn: (data: Data, context: Context) => Awaitable<Data>) => AsyncPipe<Data, Context>;
|
|
82
|
+
run: (data: Data, context: Context) => Awaitable<Data>;
|
|
83
|
+
clone: () => AsyncPipe<Data, Context>;
|
|
84
|
+
}
|
|
85
|
+
declare function pipe<Data, Context>(steps?: ((data: Data, context: Context) => Data)[]): Pipe<Data, Context>;
|
|
86
|
+
declare function asyncPipe<Data, Context>(steps?: ((data: Data, context: Context) => Awaitable<Data>)[]): AsyncPipe<Data, Context>;
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/collections/index.d.ts
|
|
89
|
+
interface CollectionHookContext {
|
|
90
|
+
core: Core;
|
|
91
|
+
collection: Collection;
|
|
92
|
+
}
|
|
93
|
+
declare class Collection {
|
|
94
|
+
private readonly pluginHooks;
|
|
95
|
+
name: string;
|
|
96
|
+
/**
|
|
97
|
+
* on config loaded/updated
|
|
98
|
+
*/
|
|
99
|
+
readonly onConfig: Hook<CollectionHookContext & {
|
|
100
|
+
config: ResolvedConfig;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Configure watch/dev server
|
|
104
|
+
*/
|
|
105
|
+
readonly onServer: Hook<CollectionHookContext & {
|
|
106
|
+
server: ServerContext;
|
|
107
|
+
}>;
|
|
108
|
+
readonly onInit: AsyncHook<CollectionHookContext>;
|
|
109
|
+
readonly onEmit: AsyncPipe<EmitEntry[], EmitContext>;
|
|
110
|
+
readonly plugins: PluginOption$1[];
|
|
111
|
+
transform(transformer: (collection: this) => void): this;
|
|
112
|
+
pluginHook<T, Options>(hook: CollectionHook<T, Options>, options: Options): T;
|
|
113
|
+
pluginHook<T>(hook: CollectionHook<T>): T;
|
|
114
|
+
getPluginHook<T>(hook: CollectionHook<T>): T | undefined;
|
|
115
|
+
}
|
|
116
|
+
interface CollectionHook<T = unknown, Options = undefined> {
|
|
117
|
+
id: symbol;
|
|
118
|
+
create: (collection: Collection, options: Options) => T;
|
|
119
|
+
}
|
|
120
|
+
declare function defineCollectionHook<T, Options = undefined>(init: (collection: Collection, options: Options) => T): CollectionHook<T, Options>;
|
|
121
|
+
//#endregion
|
|
122
|
+
//#region src/utils/code-generator.d.ts
|
|
123
|
+
interface CodeGeneratorOptions {
|
|
124
|
+
target: "default" | "vite";
|
|
125
|
+
outDir: string;
|
|
126
|
+
/**
|
|
127
|
+
* add .js extenstion to imports
|
|
128
|
+
*/
|
|
129
|
+
jsExtension: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Code generator (one instance per file)
|
|
133
|
+
*/
|
|
134
|
+
declare class CodeGenerator {
|
|
135
|
+
private readonly lines;
|
|
136
|
+
private readonly importInfos;
|
|
137
|
+
private eagerImportId;
|
|
138
|
+
readonly options: CodeGeneratorOptions;
|
|
139
|
+
constructor({
|
|
140
|
+
target,
|
|
141
|
+
jsExtension,
|
|
142
|
+
outDir
|
|
143
|
+
}: Partial<CodeGeneratorOptions>);
|
|
144
|
+
addNamespaceImport(namespace: string, specifier: string, typeOnly?: boolean): void;
|
|
145
|
+
addNamedImport(names: string[], specifier: string, typeOnly?: boolean): void;
|
|
146
|
+
push(...insert: string[]): void;
|
|
147
|
+
pushAsync(insert: Promise<string | undefined>[]): Promise<void>;
|
|
148
|
+
/** generate a random import name that is unique in file. */
|
|
149
|
+
generateImportName(): string;
|
|
150
|
+
formatDynamicImport(specifier: string, mod?: string): string;
|
|
151
|
+
formatQuery(query: Record<string, string | undefined>): string;
|
|
152
|
+
formatImportPath(file: string): string;
|
|
153
|
+
toString(): string;
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
//#region src/core.d.ts
|
|
157
|
+
interface ResolvedConfig extends Omit<GlobalConfig, "collections"> {
|
|
158
|
+
collections: Map<string, Collection>;
|
|
159
|
+
}
|
|
160
|
+
interface EmitEntry {
|
|
161
|
+
/**
|
|
162
|
+
* path relative to output directory
|
|
163
|
+
*/
|
|
164
|
+
path: string;
|
|
165
|
+
content: string;
|
|
166
|
+
}
|
|
167
|
+
interface PluginContext {
|
|
168
|
+
core: Core;
|
|
169
|
+
}
|
|
170
|
+
interface EmitContext extends PluginContext {
|
|
171
|
+
createCodeGenerator: (path: string, content: (ctx: EmitCodeGeneratorContext) => Promise<void>) => Promise<EmitEntry>;
|
|
172
|
+
}
|
|
173
|
+
interface EmitCodeGeneratorContext {
|
|
174
|
+
core: Core;
|
|
175
|
+
workspace?: string;
|
|
176
|
+
codegen: CodeGenerator;
|
|
177
|
+
}
|
|
178
|
+
interface Plugin {
|
|
179
|
+
/**
|
|
180
|
+
* unique name for plugin
|
|
181
|
+
*
|
|
182
|
+
* @example `my-package:my-plugin`
|
|
183
|
+
*/
|
|
184
|
+
name: string;
|
|
185
|
+
/** when `true`, only keep the last plugin with same `name`. */
|
|
186
|
+
dedupe?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* on config loaded/updated
|
|
189
|
+
*/
|
|
190
|
+
config?: (this: PluginContext, config: ResolvedConfig) => Awaitable<void | ResolvedConfig>;
|
|
191
|
+
/**
|
|
192
|
+
* called after collection initialization
|
|
193
|
+
*/
|
|
194
|
+
collection?: (this: PluginContext, collection: Collection) => Awaitable<void>;
|
|
195
|
+
/**
|
|
196
|
+
* Configure watch/dev server
|
|
197
|
+
*/
|
|
198
|
+
configureServer?: (this: PluginContext, server: ServerContext) => void;
|
|
199
|
+
vite?: {
|
|
200
|
+
createPlugin?: (this: PluginContext) => Vite.PluginOption;
|
|
201
|
+
};
|
|
202
|
+
bun?: {
|
|
203
|
+
setup?: (this: PluginContext, build: Bun.PluginBuilder) => Awaitable<void>;
|
|
204
|
+
};
|
|
205
|
+
next?: {
|
|
206
|
+
config?: (this: PluginContext, config: NextConfig) => NextConfig;
|
|
207
|
+
};
|
|
208
|
+
node?: {
|
|
209
|
+
createLoad?: (this: PluginContext) => Awaitable<LoadHook>;
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
type PluginOption$1 = Awaitable<Plugin | PluginOption$1[] | false | undefined>;
|
|
213
|
+
interface ServerContext {
|
|
214
|
+
/**
|
|
215
|
+
* the file watcher, by default all content files are watched, along with other files.
|
|
216
|
+
*
|
|
217
|
+
* make sure to filter when listening to events
|
|
218
|
+
*/
|
|
219
|
+
watcher?: FSWatcher;
|
|
220
|
+
}
|
|
221
|
+
type CoreOptions = Partial<ResolvedCoreOptions>;
|
|
222
|
+
/**
|
|
223
|
+
* the resolved options, all paths are absolute
|
|
224
|
+
*/
|
|
225
|
+
interface ResolvedCoreOptions {
|
|
226
|
+
cwd: string;
|
|
227
|
+
/**
|
|
228
|
+
* Path to source configuration file
|
|
229
|
+
*
|
|
230
|
+
* @defaultValue content.config.ts
|
|
231
|
+
*/
|
|
232
|
+
configPath: string;
|
|
233
|
+
/**
|
|
234
|
+
* Directory for output files
|
|
235
|
+
*
|
|
236
|
+
* @defaultValue '.content'
|
|
237
|
+
*/
|
|
238
|
+
outDir: string;
|
|
239
|
+
/**
|
|
240
|
+
* the workspace info if this instance is created as a workspace
|
|
241
|
+
*/
|
|
242
|
+
workspace?: {
|
|
243
|
+
parent: Core;
|
|
244
|
+
name: string;
|
|
245
|
+
dir: string;
|
|
246
|
+
};
|
|
247
|
+
plugins?: PluginOption$1;
|
|
248
|
+
}
|
|
249
|
+
interface EmitOptions {
|
|
250
|
+
/**
|
|
251
|
+
* filter the collections to run emit
|
|
252
|
+
*/
|
|
253
|
+
filterCollection?: (collection: Collection) => boolean;
|
|
254
|
+
/**
|
|
255
|
+
* filter the workspaces to run emit
|
|
256
|
+
*/
|
|
257
|
+
filterWorkspace?: (workspace: string) => boolean;
|
|
258
|
+
/**
|
|
259
|
+
* write files
|
|
260
|
+
*/
|
|
261
|
+
write?: boolean;
|
|
262
|
+
}
|
|
263
|
+
interface EmitOutput {
|
|
264
|
+
entries: EmitEntry[];
|
|
265
|
+
workspaces: Record<string, EmitEntry[]>;
|
|
266
|
+
}
|
|
267
|
+
declare class Core {
|
|
268
|
+
private readonly workspaces;
|
|
269
|
+
private readonly options;
|
|
270
|
+
private plugins;
|
|
271
|
+
private config;
|
|
272
|
+
static defaultOptions: {
|
|
273
|
+
configPath: string;
|
|
274
|
+
outDir: string;
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* Convenient cache store, reset when config changes.
|
|
278
|
+
*
|
|
279
|
+
* You can group namespaces in cache key with ":", like `my-plugin:data`
|
|
280
|
+
*/
|
|
281
|
+
readonly cache: Map<string, unknown>;
|
|
282
|
+
constructor(options?: CoreOptions);
|
|
283
|
+
init({
|
|
284
|
+
config: newConfig
|
|
285
|
+
}: {
|
|
286
|
+
/**
|
|
287
|
+
* either the default export or all exports of config file.
|
|
288
|
+
*/
|
|
289
|
+
config: Awaitable<Record<string, unknown>>;
|
|
290
|
+
}): Promise<void>;
|
|
291
|
+
getWorkspaces(): Map<string, Core>;
|
|
292
|
+
getOptions(): ResolvedCoreOptions;
|
|
293
|
+
getConfig(): ResolvedConfig;
|
|
294
|
+
/**
|
|
295
|
+
* The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)
|
|
296
|
+
*/
|
|
297
|
+
getCompiledConfigPath(): string;
|
|
298
|
+
getPlugins(workspace?: boolean): Plugin[];
|
|
299
|
+
getCollections(workspace?: boolean): Collection[];
|
|
300
|
+
getCollection(name: string): Collection | undefined;
|
|
301
|
+
getPluginContext(): PluginContext;
|
|
302
|
+
initServer(server: ServerContext): Promise<void>;
|
|
303
|
+
clearOutputDirectory(): Promise<void>;
|
|
304
|
+
emit(emitOptions?: EmitOptions): Promise<EmitOutput>;
|
|
305
|
+
/**
|
|
306
|
+
* convert absolute path into a runtime path (relative to **runtime** cwd)
|
|
307
|
+
*/
|
|
308
|
+
_toRuntimePath(absolutePath: string): string;
|
|
309
|
+
private initConfig;
|
|
310
|
+
}
|
|
311
|
+
//#endregion
|
|
312
|
+
export { defineConfig as A, Hook as C, GetCollectionConfig as D, Awaitable as E, GlobalConfig as O, AsyncHook as S, hook as T, defineCollectionHook as _, EmitEntry as a, asyncPipe as b, Plugin as c, ResolvedConfig as d, ResolvedCoreOptions as f, CollectionHookContext as g, CollectionHook as h, EmitContext as i, WorkspaceConfig as k, PluginContext as l, Collection as m, CoreOptions as n, EmitOptions as o, ServerContext as p, EmitCodeGeneratorContext as r, EmitOutput as s, Core as t, PluginOption$1 as u, AsyncPipe as v, asyncHook as w, pipe as x, Pipe as y };
|
|
313
|
+
//# sourceMappingURL=core-BO3b8jMg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-BO3b8jMg.d.ts","names":[],"sources":["../src/config/index.ts","../src/types.ts","../src/utils/hook.ts","../src/utils/pipe.ts","../src/collections/index.ts","../src/utils/code-generator.ts","../src/core.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { t as Collection } from "./collections-DNFRdCuB.js";
|
|
2
|
+
import { t as CodeGenerator } from "./code-generator-CjC4EEXg.js";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
//#region src/core.ts
|
|
7
|
+
async function getPlugins(pluginOptions, dedupe = true) {
|
|
8
|
+
const plugins = [];
|
|
9
|
+
for (const option of await Promise.all(pluginOptions)) {
|
|
10
|
+
if (!option) continue;
|
|
11
|
+
if (Array.isArray(option)) plugins.push(...await getPlugins(option, false));
|
|
12
|
+
else plugins.push(option);
|
|
13
|
+
}
|
|
14
|
+
if (!dedupe) return plugins;
|
|
15
|
+
const excludedName = /* @__PURE__ */ new Set();
|
|
16
|
+
const deduped = [];
|
|
17
|
+
for (let i = plugins.length - 1; i >= 0; i--) {
|
|
18
|
+
const plugin = plugins[i];
|
|
19
|
+
if (excludedName.has(plugin.name)) continue;
|
|
20
|
+
deduped.unshift(plugin);
|
|
21
|
+
if (plugin.dedupe) excludedName.add(plugin.name);
|
|
22
|
+
}
|
|
23
|
+
return deduped;
|
|
24
|
+
}
|
|
25
|
+
var Core = class Core {
|
|
26
|
+
workspaces = /* @__PURE__ */ new Map();
|
|
27
|
+
options;
|
|
28
|
+
plugins = [];
|
|
29
|
+
config;
|
|
30
|
+
static defaultOptions = {
|
|
31
|
+
configPath: "content.config.ts",
|
|
32
|
+
outDir: ".content"
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Convenient cache store, reset when config changes.
|
|
36
|
+
*
|
|
37
|
+
* You can group namespaces in cache key with ":", like `my-plugin:data`
|
|
38
|
+
*/
|
|
39
|
+
cache = /* @__PURE__ */ new Map();
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
const cwd = options.cwd ? path.resolve(options.cwd) : process.cwd();
|
|
42
|
+
this.options = {
|
|
43
|
+
...options,
|
|
44
|
+
cwd,
|
|
45
|
+
outDir: path.resolve(cwd, options.outDir ?? Core.defaultOptions.outDir),
|
|
46
|
+
configPath: path.resolve(cwd, options.configPath ?? Core.defaultOptions.configPath)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async init({ config: newConfig }) {
|
|
50
|
+
this.config = await this.initConfig(await newConfig);
|
|
51
|
+
this.cache.clear();
|
|
52
|
+
this.workspaces.clear();
|
|
53
|
+
this.plugins = await getPlugins([
|
|
54
|
+
this.options.plugins,
|
|
55
|
+
this.config.plugins,
|
|
56
|
+
...this.config.collections.values().map((collection) => collection.plugins)
|
|
57
|
+
]);
|
|
58
|
+
const ctx = this.getPluginContext();
|
|
59
|
+
for (const plugin of this.plugins) {
|
|
60
|
+
const out = await plugin.config?.call(ctx, this.config);
|
|
61
|
+
if (out) this.config = out;
|
|
62
|
+
}
|
|
63
|
+
await Promise.all(this.config.collections.values().map(async (collection) => {
|
|
64
|
+
collection.onConfig.run({
|
|
65
|
+
collection,
|
|
66
|
+
core: this,
|
|
67
|
+
config: this.config
|
|
68
|
+
});
|
|
69
|
+
for (const plugin of this.plugins) await plugin.collection?.call(ctx, collection);
|
|
70
|
+
}));
|
|
71
|
+
if (!this.options.workspace && this.config.workspaces) await Promise.all(Object.entries(this.config.workspaces).map(async ([name, workspace]) => {
|
|
72
|
+
const child = new Core({
|
|
73
|
+
...this.options,
|
|
74
|
+
cwd: path.resolve(this.options.cwd, workspace.dir),
|
|
75
|
+
workspace: {
|
|
76
|
+
name,
|
|
77
|
+
parent: this,
|
|
78
|
+
dir: workspace.dir
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
await child.init({ config: workspace.config });
|
|
82
|
+
this.workspaces.set(name, child);
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
getWorkspaces() {
|
|
86
|
+
return this.workspaces;
|
|
87
|
+
}
|
|
88
|
+
getOptions() {
|
|
89
|
+
return this.options;
|
|
90
|
+
}
|
|
91
|
+
getConfig() {
|
|
92
|
+
return this.config;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The file path of compiled config file, the file may not exist (e.g. on Vite, or still compiling)
|
|
96
|
+
*/
|
|
97
|
+
getCompiledConfigPath() {
|
|
98
|
+
return path.join(this.options.outDir, "content.config.mjs");
|
|
99
|
+
}
|
|
100
|
+
getPlugins(workspace = false) {
|
|
101
|
+
if (workspace) {
|
|
102
|
+
const plugins = [...this.plugins];
|
|
103
|
+
for (const workspace$1 of this.workspaces.values()) plugins.push(...workspace$1.plugins);
|
|
104
|
+
return plugins;
|
|
105
|
+
}
|
|
106
|
+
return this.plugins;
|
|
107
|
+
}
|
|
108
|
+
getCollections(workspace = false) {
|
|
109
|
+
const list = Array.from(this.config.collections.values());
|
|
110
|
+
if (workspace) for (const workspace$1 of this.workspaces.values()) list.push(...workspace$1.getCollections());
|
|
111
|
+
return list;
|
|
112
|
+
}
|
|
113
|
+
getCollection(name) {
|
|
114
|
+
return this.config.collections.get(name);
|
|
115
|
+
}
|
|
116
|
+
getPluginContext() {
|
|
117
|
+
return { core: this };
|
|
118
|
+
}
|
|
119
|
+
async initServer(server) {
|
|
120
|
+
const ctx = this.getPluginContext();
|
|
121
|
+
server.watcher?.add(this.options.configPath);
|
|
122
|
+
for (const plugin of this.plugins) plugin.configureServer?.call(ctx, server);
|
|
123
|
+
for (const collection of this.getCollections()) collection.onServer.run({
|
|
124
|
+
collection,
|
|
125
|
+
core: this,
|
|
126
|
+
server
|
|
127
|
+
});
|
|
128
|
+
for (const workspace of this.workspaces.values()) await workspace.initServer(server);
|
|
129
|
+
}
|
|
130
|
+
async clearOutputDirectory() {
|
|
131
|
+
await fs.rm(this.options.outDir, {
|
|
132
|
+
recursive: true,
|
|
133
|
+
force: true
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async emit(emitOptions = {}) {
|
|
137
|
+
const { workspace, outDir } = this.options;
|
|
138
|
+
const { target, jsExtension } = this.config.emit ?? {};
|
|
139
|
+
const { filterCollection, filterWorkspace, write = false } = emitOptions;
|
|
140
|
+
const start = performance.now();
|
|
141
|
+
const ctx = {
|
|
142
|
+
...this.getPluginContext(),
|
|
143
|
+
createCodeGenerator: async (path$1, content) => {
|
|
144
|
+
const codegen = new CodeGenerator({
|
|
145
|
+
target,
|
|
146
|
+
outDir,
|
|
147
|
+
jsExtension
|
|
148
|
+
});
|
|
149
|
+
await content({
|
|
150
|
+
core: this,
|
|
151
|
+
codegen,
|
|
152
|
+
workspace: workspace?.name
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
path: path$1,
|
|
156
|
+
content: codegen.toString()
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const added = /* @__PURE__ */ new Set();
|
|
161
|
+
const out = {
|
|
162
|
+
entries: [],
|
|
163
|
+
workspaces: {}
|
|
164
|
+
};
|
|
165
|
+
const generated = [];
|
|
166
|
+
for (const collection of this.getCollections()) {
|
|
167
|
+
if (filterCollection && !filterCollection(collection)) continue;
|
|
168
|
+
generated.push(collection.onEmit.run([], ctx));
|
|
169
|
+
}
|
|
170
|
+
for (const entries of await Promise.all(generated)) for (const item of entries) {
|
|
171
|
+
if (added.has(item.path)) continue;
|
|
172
|
+
out.entries.push(item);
|
|
173
|
+
added.add(item.path);
|
|
174
|
+
}
|
|
175
|
+
if (write) {
|
|
176
|
+
await Promise.all(out.entries.map(async (entry) => {
|
|
177
|
+
const file = path.join(outDir, entry.path);
|
|
178
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
179
|
+
await fs.writeFile(file, entry.content);
|
|
180
|
+
}));
|
|
181
|
+
console.log(workspace ? `[fuma-content: ${workspace.name}] generated files in ${performance.now() - start}ms` : `[fuma-content] generated files in ${performance.now() - start}ms`);
|
|
182
|
+
}
|
|
183
|
+
for (const [name, workspace$1] of this.workspaces.entries()) {
|
|
184
|
+
if (filterWorkspace && !filterWorkspace(name)) continue;
|
|
185
|
+
out.workspaces[name] = (await workspace$1.emit(emitOptions)).entries;
|
|
186
|
+
}
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* convert absolute path into a runtime path (relative to **runtime** cwd)
|
|
191
|
+
*/
|
|
192
|
+
_toRuntimePath(absolutePath) {
|
|
193
|
+
return path.relative(process.cwd(), absolutePath);
|
|
194
|
+
}
|
|
195
|
+
async initConfig(config) {
|
|
196
|
+
const collections = /* @__PURE__ */ new Map();
|
|
197
|
+
let globalConfig;
|
|
198
|
+
if ("default" in config) {
|
|
199
|
+
globalConfig = config.default;
|
|
200
|
+
for (const [k, v] of Object.entries(config)) if (v instanceof Collection) {
|
|
201
|
+
globalConfig.collections ??= {};
|
|
202
|
+
globalConfig.collections[k] = v;
|
|
203
|
+
}
|
|
204
|
+
} else globalConfig = config;
|
|
205
|
+
globalConfig.collections ??= {};
|
|
206
|
+
await Promise.all(Object.entries(globalConfig.collections).map(async ([name, collection]) => {
|
|
207
|
+
collection.name = name;
|
|
208
|
+
collections.set(name, collection);
|
|
209
|
+
await collection.onInit.run({
|
|
210
|
+
collection,
|
|
211
|
+
core: this
|
|
212
|
+
});
|
|
213
|
+
}));
|
|
214
|
+
return {
|
|
215
|
+
...globalConfig,
|
|
216
|
+
collections
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
//#endregion
|
|
222
|
+
export { Core as t };
|
|
223
|
+
//# sourceMappingURL=core-D5QHSKk6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-D5QHSKk6.js","names":["plugins: Plugin[]","deduped: Plugin[]","workspace","ctx: EmitContext","out: EmitOutput","generated: Awaitable<EmitEntry[]>[]","globalConfig: GlobalConfig"],"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: EmitCodeGeneratorContext) => Promise<void>,\n ) => Promise<EmitEntry>;\n}\n\nexport interface EmitCodeGeneratorContext {\n core: Core;\n workspace?: string;\n codegen: CodeGenerator;\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 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 { workspace, outDir } = this.options;\n const { target, jsExtension } = this.config.emit ?? {};\n const { filterCollection, filterWorkspace, write = false } = emitOptions;\n const start = performance.now();\n const ctx: EmitContext = {\n ...this.getPluginContext(),\n createCodeGenerator: async (path, content) => {\n const codegen = new CodeGenerator({\n target,\n outDir,\n jsExtension,\n });\n await content({\n core: this,\n codegen,\n workspace: workspace?.name,\n });\n return {\n path,\n content: codegen.toString(),\n };\n },\n };\n\n const added = new Set<string>();\n const out: EmitOutput = {\n entries: [],\n workspaces: {},\n };\n\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 if (added.has(item.path)) continue;\n out.entries.push(item);\n added.add(item.path);\n }\n }\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":";;;;;;AAkJA,eAAe,WAAW,eAA+B,SAAS,MAAyB;CACzF,MAAMA,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,MAAMC,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,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,MAAMC,eAAa,KAAK,WAAW,QAAQ,CAC9C,SAAQ,KAAK,GAAGA,YAAU,QAAQ;AAEpC,UAAO;;AAGT,SAAO,KAAK;;CAEd,eAAe,YAAY,OAAqB;EAC9C,MAAM,OAAO,MAAM,KAAK,KAAK,OAAO,YAAY,QAAQ,CAAC;AACzD,MAAI,UACF,MAAK,MAAMA,eAAa,KAAK,WAAW,QAAQ,CAC9C,MAAK,KAAK,GAAGA,YAAU,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,EAAE,WAAW,WAAW,KAAK;EACnC,MAAM,EAAE,QAAQ,gBAAgB,KAAK,OAAO,QAAQ,EAAE;EACtD,MAAM,EAAE,kBAAkB,iBAAiB,QAAQ,UAAU;EAC7D,MAAM,QAAQ,YAAY,KAAK;EAC/B,MAAMC,MAAmB;GACvB,GAAG,KAAK,kBAAkB;GAC1B,qBAAqB,OAAO,QAAM,YAAY;IAC5C,MAAM,UAAU,IAAI,cAAc;KAChC;KACA;KACA;KACD,CAAC;AACF,UAAM,QAAQ;KACZ,MAAM;KACN;KACA,WAAW,WAAW;KACvB,CAAC;AACF,WAAO;KACL;KACA,SAAS,QAAQ,UAAU;KAC5B;;GAEJ;EAED,MAAM,wBAAQ,IAAI,KAAa;EAC/B,MAAMC,MAAkB;GACtB,SAAS,EAAE;GACX,YAAY,EAAE;GACf;EAED,MAAMC,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,SAAS;AAC1B,OAAI,MAAM,IAAI,KAAK,KAAK,CAAE;AAC1B,OAAI,QAAQ,KAAK,KAAK;AACtB,SAAM,IAAI,KAAK,KAAK;;AAIxB,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,MAAMH,gBAAc,KAAK,WAAW,SAAS,EAAE;AACzD,OAAI,mBAAmB,CAAC,gBAAgB,KAAK,CAAE;AAC/C,OAAI,WAAW,SAAS,MAAMA,YAAU,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,IAAII;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"}
|