fuma-content 1.1.5 → 1.2.1
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-Cce8lc9D.js → async-cache-C47yxLCv.js} +3 -4
- package/dist/{async-cache-Cce8lc9D.js.map → async-cache-C47yxLCv.js.map} +1 -1
- package/dist/bin.js +2 -3
- package/dist/bin.js.map +1 -1
- package/dist/build-mdx-C8u32vDa.js +158 -0
- package/dist/build-mdx-C8u32vDa.js.map +1 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.js +2 -3
- package/dist/bun/index.js.map +1 -1
- package/dist/{bun-DsjsbVrx.js → bun-NahDFkhR.js} +3 -4
- package/dist/{bun-DsjsbVrx.js.map → bun-NahDFkhR.js.map} +1 -1
- package/dist/{code-generator-CHcOrCeM.js → code-generator-pLUE7Rk7.js} +2 -3
- package/dist/{code-generator-CHcOrCeM.js.map → code-generator-pLUE7Rk7.js.map} +1 -1
- package/dist/collections/data/runtime.d.ts +2 -3
- package/dist/collections/data/runtime.d.ts.map +1 -1
- package/dist/collections/data/runtime.js +1 -2
- package/dist/collections/data/runtime.js.map +1 -1
- package/dist/collections/data.d.ts +3 -4
- package/dist/collections/data.d.ts.map +1 -1
- package/dist/collections/data.js +5 -6
- package/dist/collections/data.js.map +1 -1
- package/dist/collections/fs.d.ts +2 -45
- package/dist/collections/fs.js +3 -4
- package/dist/collections/fs.js.map +1 -1
- package/dist/collections/index.d.ts +2 -37
- package/dist/collections/index.js +1 -37
- package/dist/collections/json/loader-webpack.d.ts +1 -3
- package/dist/collections/json/loader-webpack.js +4 -5
- package/dist/collections/json/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/loader-webpack.d.ts +1 -3
- package/dist/collections/mdx/loader-webpack.js +4 -5
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +2 -4
- package/dist/collections/mdx/react.d.ts.map +1 -1
- package/dist/collections/mdx/react.js +2 -3
- package/dist/collections/mdx/react.js.map +1 -1
- package/dist/collections/mdx/runtime-browser.d.ts +3 -25
- package/dist/collections/mdx/runtime-browser.js +2 -4
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +4 -5
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +6 -7
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +2 -26
- package/dist/collections/mdx/runtime.js +1 -2
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx/vue.d.ts +27 -0
- package/dist/collections/mdx/vue.d.ts.map +1 -0
- package/dist/collections/mdx/vue.js +34 -0
- package/dist/collections/mdx/vue.js.map +1 -0
- package/dist/collections/mdx.d.ts +2 -59
- package/dist/collections/mdx.js +6 -7
- package/dist/collections/mdx.js.map +1 -1
- package/dist/collections/obsidian.d.ts +1 -3
- package/dist/collections/obsidian.d.ts.map +1 -1
- package/dist/collections/obsidian.js +164 -127
- package/dist/collections/obsidian.js.map +1 -1
- package/dist/collections/runtime/file-store.d.ts +2 -21
- package/dist/collections/runtime/file-store.js +1 -2
- package/dist/collections/runtime/file-store.js.map +1 -1
- package/dist/collections/runtime/store.d.ts +2 -31
- package/dist/collections/runtime/store.js +1 -1
- package/dist/collections/runtime/store.js.map +1 -1
- package/dist/collections/yaml/loader-webpack.d.ts +1 -3
- package/dist/collections/yaml/loader-webpack.js +4 -5
- package/dist/collections/yaml/loader-webpack.js.map +1 -1
- package/dist/{pipe-CvCqOpXX.js → collections-BuskUhft.js} +36 -4
- package/dist/collections-BuskUhft.js.map +1 -0
- package/dist/config/index.d.ts +2 -35
- package/dist/config/index.js +1 -1
- package/dist/{core-FjA_Xoho.d.ts → core-15rgY8JW.d.ts} +69 -4
- package/dist/core-15rgY8JW.d.ts.map +1 -0
- package/dist/{core-BuUsOElL.js → core-BfIQeHzH.js} +18 -15
- package/dist/core-BfIQeHzH.js.map +1 -0
- package/dist/dynamic-CwBRfhBm.d.ts +32 -0
- package/dist/dynamic-CwBRfhBm.d.ts.map +1 -0
- package/dist/dynamic.d.ts +2 -25
- package/dist/dynamic.js +2 -3
- package/dist/dynamic.js.map +1 -1
- package/dist/file-store-270Y4Sx7.d.ts +20 -0
- package/dist/file-store-270Y4Sx7.d.ts.map +1 -0
- package/dist/flatten-m0wfHxLH.js +10 -0
- package/dist/flatten-m0wfHxLH.js.map +1 -0
- package/dist/fs-DDVhjRBi.d.ts +44 -0
- package/dist/fs-DDVhjRBi.d.ts.map +1 -0
- package/dist/{fuma-matter-CCYGfgju.js → fuma-matter-E30PU53R.js} +2 -3
- package/dist/{fuma-matter-CCYGfgju.js.map → fuma-matter-E30PU53R.js.map} +1 -1
- package/dist/git-Ce7r2zfM.d.ts +37 -0
- package/dist/git-Ce7r2zfM.d.ts.map +1 -0
- package/dist/index-B9DAFF8c.d.ts +84 -0
- package/dist/index-B9DAFF8c.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -5
- package/dist/{is-promise-like-pBUIbRFy.js → is-promise-like-C04ERo2r.js} +2 -2
- package/dist/{is-promise-like-pBUIbRFy.js.map → is-promise-like-C04ERo2r.js.map} +1 -1
- package/dist/{load-from-file-B9ho46XM.js → load-from-file-C3CnD8mJ.js} +3 -4
- package/dist/{load-from-file-B9ho46XM.js.map → load-from-file-C3CnD8mJ.js.map} +1 -1
- package/dist/{loader-B3hZ0R4a.js → loader-CyhM9SLt.js} +5 -6
- package/dist/{loader-B3hZ0R4a.js.map → loader-CyhM9SLt.js.map} +1 -1
- package/dist/{loader-D2BD3e0R.js → loader-D_sKOzDc.js} +4 -5
- package/dist/{loader-D2BD3e0R.js.map → loader-D_sKOzDc.js.map} +1 -1
- package/dist/{loader-C5w-u-h2.js → loader-e2SkeDfY.js} +4 -5
- package/dist/{loader-C5w-u-h2.js.map → loader-e2SkeDfY.js.map} +1 -1
- package/dist/{loader-BFfzKD3u.js → loader-ol04zeoP.js} +3 -4
- package/dist/{loader-BFfzKD3u.js.map → loader-ol04zeoP.js.map} +1 -1
- package/dist/mdx-BfaapI6d.d.ts +138 -0
- package/dist/mdx-BfaapI6d.d.ts.map +1 -0
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.js +3 -4
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +0 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -2
- package/dist/node/index.js.map +1 -1
- package/dist/node/loader.d.ts +1 -1
- package/dist/node/loader.js +3 -4
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-Cu5Pqxxo.js → node-Du4i4XDg.js} +2 -3
- package/dist/{node-Cu5Pqxxo.js.map → node-Du4i4XDg.js.map} +1 -1
- package/dist/plugins/git.d.ts +2 -38
- package/dist/plugins/git.js +3 -5
- package/dist/plugins/git.js.map +1 -1
- package/dist/plugins/json-schema.d.ts +1 -2
- package/dist/plugins/json-schema.d.ts.map +1 -1
- package/dist/plugins/json-schema.js +2 -3
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +2 -72
- package/dist/plugins/loader/index.js +6 -7
- package/dist/plugins/loader/index.js.map +1 -1
- package/dist/plugins/loader/webpack.d.ts +2 -21
- package/dist/plugins/loader/webpack.js +3 -4
- package/dist/plugins/loader/webpack.js.map +1 -1
- package/dist/plugins/remark/include.d.ts +23 -0
- package/dist/plugins/remark/include.d.ts.map +1 -0
- package/dist/{build-mdx-C210zpJN.js → plugins/remark/include.js} +5 -166
- package/dist/plugins/remark/include.js.map +1 -0
- package/dist/rolldown-runtime-CiIaOW0V.js +13 -0
- package/dist/runtime-bpro4VYw.d.ts +25 -0
- package/dist/runtime-bpro4VYw.d.ts.map +1 -0
- package/dist/runtime-browser-BT3GpIH7.d.ts +29 -0
- package/dist/runtime-browser-BT3GpIH7.d.ts.map +1 -0
- package/dist/store-Cc6y2CDE.d.ts +31 -0
- package/dist/store-Cc6y2CDE.d.ts.map +1 -0
- package/dist/{validation-C3kXuveD.js → validation-Bf_v2L3p.js} +2 -2
- package/dist/{validation-C3kXuveD.js.map → validation-Bf_v2L3p.js.map} +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.js +3 -4
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-CoJIMNWk.js → vite-DVIOnBqW.js} +2 -3
- package/dist/{vite-CoJIMNWk.js.map → vite-DVIOnBqW.js.map} +1 -1
- package/package.json +42 -61
- package/dist/async-cache-Ca5oMQss.d.ts +0 -11
- package/dist/async-cache-Ca5oMQss.d.ts.map +0 -1
- package/dist/build-mdx-C210zpJN.js.map +0 -1
- package/dist/build-mdx-DhXGp7I9.d.ts +0 -101
- package/dist/build-mdx-DhXGp7I9.d.ts.map +0 -1
- package/dist/collections/fs.d.ts.map +0 -1
- package/dist/collections/index.d.ts.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.d.ts.map +0 -1
- package/dist/collections/runtime/file-store.d.ts.map +0 -1
- package/dist/collections/runtime/store.d.ts.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/core-BuUsOElL.js.map +0 -1
- package/dist/core-FjA_Xoho.d.ts.map +0 -1
- package/dist/dynamic.d.ts.map +0 -1
- package/dist/load-from-file-CIYdu-B5.d.ts +0 -10
- package/dist/load-from-file-CIYdu-B5.d.ts.map +0 -1
- package/dist/pipe-CvCqOpXX.js.map +0 -1
- package/dist/plugins/git.d.ts.map +0 -1
- package/dist/plugins/loader/index.d.ts.map +0 -1
- package/dist/plugins/loader/webpack.d.ts.map +0 -1
- package/dist/rolldown-runtime-CjeV3_4I.js +0 -18
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { E as Awaitable, m as Collection, p as CodeGenerator, t as Core, v as AsyncPipe, y as Pipe } from "./core-15rgY8JW.js";
|
|
2
|
+
import { n as FileSystemCollectionConfig, t as FileSystemCollection } from "./fs-DDVhjRBi.js";
|
|
3
|
+
import { VFile } from "vfile";
|
|
4
|
+
import { ProcessorOptions, createProcessor } from "@mdx-js/mdx";
|
|
5
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
|
+
import { PluggableList, Processor, Transformer } from "unified";
|
|
7
|
+
import { Root } from "mdast";
|
|
8
|
+
import { MDXContent } from "mdx/types";
|
|
9
|
+
|
|
10
|
+
//#region src/collections/mdx/remark-postprocess.d.ts
|
|
11
|
+
interface LinkReference {
|
|
12
|
+
href: string;
|
|
13
|
+
}
|
|
14
|
+
interface PostprocessOptions {
|
|
15
|
+
_format: "md" | "mdx";
|
|
16
|
+
/**
|
|
17
|
+
* Properties to export from `vfile.data`
|
|
18
|
+
*/
|
|
19
|
+
valueToExport?: string[];
|
|
20
|
+
/**
|
|
21
|
+
* stringify MDAST and export via `_markdown`.
|
|
22
|
+
*/
|
|
23
|
+
processedMarkdown?: boolean | {
|
|
24
|
+
as?: string;
|
|
25
|
+
/**
|
|
26
|
+
* include heading IDs into the processed markdown.
|
|
27
|
+
*/
|
|
28
|
+
headingIds?: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* extract link references, export via `_linkReferences`.
|
|
32
|
+
*/
|
|
33
|
+
linkReferences?: boolean | {
|
|
34
|
+
as?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* store MDAST and export via `_mdast`.
|
|
38
|
+
*/
|
|
39
|
+
mdast?: boolean | {
|
|
40
|
+
as?: string;
|
|
41
|
+
removePosition?: boolean;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/collections/mdx/build-mdx.d.ts
|
|
46
|
+
type MDXProcessor = ReturnType<typeof createProcessor>;
|
|
47
|
+
interface MDXCompilerContext {
|
|
48
|
+
addDependency: (file: string) => void;
|
|
49
|
+
collection: MDXCollection | undefined;
|
|
50
|
+
core: Core;
|
|
51
|
+
}
|
|
52
|
+
interface FumaContentProcessorOptions extends Omit<ProcessorOptions, "remarkPlugins"> {
|
|
53
|
+
remarkPlugins?: PluggableList | ((plugins: {
|
|
54
|
+
preprocess: PluggableList;
|
|
55
|
+
postprocess: PluggableList;
|
|
56
|
+
}) => PluggableList) | null | undefined;
|
|
57
|
+
}
|
|
58
|
+
interface FumaContentDataMap {
|
|
59
|
+
/**
|
|
60
|
+
* [Fuma Content] raw frontmatter, you can modify it
|
|
61
|
+
*/
|
|
62
|
+
frontmatter?: Record<string, unknown>;
|
|
63
|
+
/**
|
|
64
|
+
* [Fuma Content] additional ESM exports to write
|
|
65
|
+
*/
|
|
66
|
+
"mdx-export"?: {
|
|
67
|
+
name: string;
|
|
68
|
+
value: unknown;
|
|
69
|
+
}[];
|
|
70
|
+
/**
|
|
71
|
+
* [Fuma Content] The internal compiler info
|
|
72
|
+
*/
|
|
73
|
+
_compiler?: MDXCompilerContext;
|
|
74
|
+
/**
|
|
75
|
+
* [Fuma Content] get internal processor, do not use this on user land.
|
|
76
|
+
*/
|
|
77
|
+
_getProcessor?: (format: "md" | "mdx") => Awaitable<MDXProcessor>;
|
|
78
|
+
}
|
|
79
|
+
declare module "vfile" {
|
|
80
|
+
interface DataMap extends FumaContentDataMap {}
|
|
81
|
+
}
|
|
82
|
+
interface CompiledMDX<Frontmatter = Record<string, unknown>> extends Record<string, unknown> {
|
|
83
|
+
frontmatter: Frontmatter;
|
|
84
|
+
default: MDXContent;
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/collections/mdx.d.ts
|
|
88
|
+
interface CompilationContext {
|
|
89
|
+
collection: Collection;
|
|
90
|
+
filePath: string;
|
|
91
|
+
source: string;
|
|
92
|
+
}
|
|
93
|
+
interface MDXCollectionConfig<FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined> extends Omit<FileSystemCollectionConfig, "supportedFormats"> {
|
|
94
|
+
postprocess?: Partial<PostprocessOptions>;
|
|
95
|
+
frontmatter?: FrontmatterSchema;
|
|
96
|
+
options?: FumaContentProcessorOptions | ((environment: "bundler" | "runtime") => Awaitable<FumaContentProcessorOptions>);
|
|
97
|
+
lazy?: boolean;
|
|
98
|
+
dynamic?: boolean;
|
|
99
|
+
}
|
|
100
|
+
interface InitializerCode {
|
|
101
|
+
fn: string;
|
|
102
|
+
typeParams: [config: string, name: string, attached: string];
|
|
103
|
+
params: string[];
|
|
104
|
+
}
|
|
105
|
+
declare class MDXCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined> extends FileSystemCollection {
|
|
106
|
+
#private;
|
|
107
|
+
readonly dynamic: boolean;
|
|
108
|
+
readonly lazy: boolean;
|
|
109
|
+
readonly postprocess?: Partial<PostprocessOptions>;
|
|
110
|
+
getMDXOptions(environment: "bundler" | "runtime"): Promise<FumaContentProcessorOptions>;
|
|
111
|
+
/**
|
|
112
|
+
* Frontmatter schema
|
|
113
|
+
*/
|
|
114
|
+
frontmatterSchema?: FrontmatterSchema;
|
|
115
|
+
/**
|
|
116
|
+
* Transform & validate frontmatter
|
|
117
|
+
*/
|
|
118
|
+
frontmatter: AsyncPipe<Record<string, unknown> | undefined, CompilationContext>;
|
|
119
|
+
/**
|
|
120
|
+
* Transform `vfile` on compilation stage
|
|
121
|
+
*/
|
|
122
|
+
vfile: AsyncPipe<VFile, CompilationContext>;
|
|
123
|
+
/**
|
|
124
|
+
* Transform the generated initializer code (TypeScript) for collection store
|
|
125
|
+
*/
|
|
126
|
+
storeInitializer: Pipe<InitializerCode, {
|
|
127
|
+
codegen: CodeGenerator;
|
|
128
|
+
environment: "browser" | "server" | "dynamic";
|
|
129
|
+
}>;
|
|
130
|
+
$inferFrontmatter: FrontmatterSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<FrontmatterSchema> : Record<string, unknown>;
|
|
131
|
+
constructor(config: MDXCollectionConfig<FrontmatterSchema>);
|
|
132
|
+
private generateDocCollectionFrontmatterGlob;
|
|
133
|
+
private generateDocCollectionGlob;
|
|
134
|
+
}
|
|
135
|
+
declare function mdxCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(config: MDXCollectionConfig<FrontmatterSchema>): MDXCollection<FrontmatterSchema>;
|
|
136
|
+
//#endregion
|
|
137
|
+
export { LinkReference as a, CompiledMDX as i, MDXCollectionConfig as n, mdxCollection as r, MDXCollection as t };
|
|
138
|
+
//# sourceMappingURL=mdx-BfaapI6d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-BfaapI6d.d.ts","names":[],"sources":["../src/collections/mdx/remark-postprocess.ts","../src/collections/mdx/build-mdx.ts","../src/collections/mdx.ts"],"mappings":";;;;;;;;;;UASiB,aAAA;EACf,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,OAAA;;;;EAKA,aAAA;EAV4B;;;EAe5B,iBAAA;IAGM,EAAA;IAd2B;;;IAkB3B,UAAA;EAAA;EAPN;;;EAaA,cAAA;IAGM,EAAA;EAAA;EASA;;;EAHN,KAAA;IAGM,EAAA;IACA,cAAA;EAAA;AAAA;;;KCvCH,YAAA,GAAe,UAAA,QAAkB,eAAA;AAAA,UAE5B,kBAAA;EACR,aAAA,GAAgB,IAAA;EAChB,UAAA,EAAY,aAAA;EACZ,IAAA,EAAM,IAAA;AAAA;AAAA,UAkBS,2BAAA,SAAoC,IAAA,CAAK,gBAAA;EACxD,aAAA,GACI,aAAA,KACE,OAAA;IAAW,UAAA,EAAY,aAAA;IAAe,WAAA,EAAa,aAAA;EAAA,MAAoB,aAAA;AAAA;AAAA,UAK9D,kBAAA;;AAlCwB;;EAsCvC,WAAA,GAAc,MAAA;EAnCI;;AAAiC;EAwCnD,YAAA;IAAiB,IAAA;IAAc,KAAA;EAAA;EArCf;;;EA0ChB,SAAA,GAAY,kBAAA;EAxCN;;;EA6CN,aAAA,IAAiB,MAAA,mBAAyB,SAAA,CAAU,YAAA;AAAA;AAAA;EAAA,UAK1C,OAAA,SAAgB,kBAAA;AAAA;AAAA,UAGX,WAAA,eAA0B,MAAA,2BAAiC,MAAA;EAI1E,WAAA,EAAa,WAAA;EACb,OAAA,EAAS,UAAA;AAAA;;;UCxDD,kBAAA;EACR,UAAA,EAAY,UAAA;EACZ,QAAA;EACA,MAAA;AAAA;AAAA,UAGe,mBAAA,2BACW,gBAAA,eAA+B,gBAAA,sBACjD,IAAA,CAAK,0BAAA;EACb,WAAA,GAAc,OAAA,CAAQ,kBAAA;EACtB,WAAA,GAAc,iBAAA;EACd,OAAA,GACI,2BAAA,KACE,WAAA,4BAAuC,SAAA,CAAU,2BAAA;EACvD,IAAA;EACA,OAAA;AAAA;AAAA,UASQ,eAAA;EACR,EAAA;EACA,UAAA,GAAa,MAAA,UAAgB,IAAA,UAAc,QAAA;EAC3C,MAAA;AAAA;AAAA,cAOW,aAAA,2BACe,gBAAA,eAA+B,gBAAA,sBACjD,oBAAA;EAAA;WACC,OAAA;EAAA,SACA,IAAA;EAAA,SACA,WAAA,GAAc,OAAA,CAAQ,kBAAA;EAIzB,aAAA,CAAc,WAAA,0BAAqC,OAAA,CAAQ,2BAAA;;;;EAWjE,iBAAA,GAAoB,iBAAA;ED7DL;;;ECiEf,WAAA,EAAW,SAAA,CAAA,MAAA,+BAAA,kBAAA;ED/DH;;;ECmER,KAAA,EAAK,SAAA,CAAA,KAAA,EAAA,kBAAA;EDlEL;;;ECsEA,gBAAA,EAG0B,IAAA,CAHV,eAAA;aAGH,aAAA;;;EAKb,iBAAA,EAAmB,iBAAA,SAA0B,gBAAA,GACzC,gBAAA,CAAiB,WAAA,CAAY,iBAAA,IAC7B,MAAA;cAEQ,MAAA,EAAQ,mBAAA,CAAoB,iBAAA;EAAA,QAiN1B,oCAAA;EAAA,QA2BA,yBAAA;AAAA;AAAA,iBAuBA,aAAA,2BAAwC,gBAAA,yBAAA,CACtD,MAAA,EAAQ,mBAAA,CAAoB,iBAAA,IAAkB,aAAA,CAAA,iBAAA"}
|
package/dist/next/index.d.ts
CHANGED
package/dist/next/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { t as Core } from "../core-
|
|
1
|
+
import { t as Core } from "../core-BfIQeHzH.js";
|
|
2
2
|
import { loaderPlugin } from "../plugins/loader/index.js";
|
|
3
|
-
import { t as loadConfig } from "../load-from-file-
|
|
3
|
+
import { t as loadConfig } from "../load-from-file-C3CnD8mJ.js";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
|
|
6
5
|
//#region src/next/index.ts
|
|
7
6
|
async function createContent(options = {}) {
|
|
8
7
|
const { clean = true } = options;
|
|
@@ -68,7 +67,7 @@ function createNextCore({ configPath, cwd, outDir }) {
|
|
|
68
67
|
plugins: [loaderPlugin()]
|
|
69
68
|
});
|
|
70
69
|
}
|
|
71
|
-
|
|
72
70
|
//#endregion
|
|
73
71
|
export { createContent, createStandaloneCore };
|
|
72
|
+
|
|
74
73
|
//# sourceMappingURL=index.js.map
|
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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;AAC3C,UAAQ,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"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/node/index.ts"],"mappings":";;;iBAGgB,QAAA,CAAS,OAAA,GAAS,aAAA"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as module from "node:module";
|
|
2
|
-
|
|
3
2
|
//#region src/node/index.ts
|
|
4
3
|
function register(options = {}) {
|
|
5
4
|
module.register("./loader.js", import.meta.url, { data: options });
|
|
6
5
|
}
|
|
7
|
-
|
|
8
6
|
//#endregion
|
|
9
7
|
export { register };
|
|
8
|
+
|
|
10
9
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/node/index.ts"],"sourcesContent":["import * as module from \"node:module\";\nimport type { LoaderOptions } from \"./loader\";\n\nexport function register(options: LoaderOptions = {}) {\n module.register(\"./loader.js\", import.meta.url, {\n data: options,\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/node/index.ts"],"sourcesContent":["import * as module from \"node:module\";\nimport type { LoaderOptions } from \"./loader\";\n\nexport function register(options: LoaderOptions = {}) {\n module.register(\"./loader.js\", import.meta.url, {\n data: options,\n });\n}\n"],"mappings":";;AAGA,SAAgB,SAAS,UAAyB,EAAE,EAAE;AACpD,QAAO,SAAS,eAAe,OAAO,KAAK,KAAK,EAC9C,MAAM,SACP,CAAC"}
|
package/dist/node/loader.d.ts
CHANGED
package/dist/node/loader.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { createDynamicCore } from "../dynamic.js";
|
|
2
|
-
import { t as Core } from "../core-
|
|
3
|
-
import { t as createCache } from "../async-cache-
|
|
2
|
+
import { t as Core } from "../core-BfIQeHzH.js";
|
|
3
|
+
import { t as createCache } from "../async-cache-C47yxLCv.js";
|
|
4
4
|
import { loaderPlugin } from "../plugins/loader/index.js";
|
|
5
|
-
|
|
6
5
|
//#region src/node/loader.ts
|
|
7
6
|
let configLoader;
|
|
8
7
|
const initialize = (options) => {
|
|
@@ -32,7 +31,7 @@ const load = async (url, context, nextLoad) => {
|
|
|
32
31
|
}
|
|
33
32
|
return run(0, url, context);
|
|
34
33
|
};
|
|
35
|
-
|
|
36
34
|
//#endregion
|
|
37
35
|
export { initialize, load };
|
|
36
|
+
|
|
38
37
|
//# sourceMappingURL=loader.js.map
|
package/dist/node/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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,KAAA,EAAU;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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
|
|
4
3
|
//#region src/plugins/loader/node.ts
|
|
5
4
|
function toNode(loaders) {
|
|
6
5
|
return async (url, _context, nextLoad) => {
|
|
@@ -27,7 +26,7 @@ function toNode(loaders) {
|
|
|
27
26
|
return nextLoad(url);
|
|
28
27
|
};
|
|
29
28
|
}
|
|
30
|
-
|
|
31
29
|
//#endregion
|
|
32
30
|
export { toNode };
|
|
33
|
-
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=node-Du4i4XDg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-
|
|
1
|
+
{"version":3,"file":"node-Du4i4XDg.js","names":[],"sources":["../src/plugins/loader/node.ts"],"sourcesContent":["import type { LoadFnOutput, LoadHook } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport fs from \"node:fs/promises\";\nimport type { Loader } from \"@/plugins/loader\";\n\nexport function toNode(loaders: { test: RegExp | undefined; loader: Loader }[]): LoadHook {\n return async (url, _context, nextLoad): Promise<LoadFnOutput> => {\n if (!url.startsWith(\"file:///\")) return nextLoad(url);\n\n const config = loaders.find((loader) => !loader.test || loader.test.test(url));\n if (config) {\n const parsedUrl = new URL(url);\n const filePath = fileURLToPath(parsedUrl);\n\n const result = await config.loader.load({\n filePath,\n query: Object.fromEntries(parsedUrl.searchParams.entries()),\n async getSource() {\n return (await fs.readFile(filePath)).toString();\n },\n development: false,\n addDependency() {},\n });\n\n if (result) {\n return {\n source: result.code,\n format: \"module\",\n shortCircuit: true,\n };\n }\n }\n\n return nextLoad(url);\n };\n}\n"],"mappings":";;;AAKA,SAAgB,OAAO,SAAmE;AACxF,QAAO,OAAO,KAAK,UAAU,aAAoC;AAC/D,MAAI,CAAC,IAAI,WAAW,WAAW,CAAE,QAAO,SAAS,IAAI;EAErD,MAAM,SAAS,QAAQ,MAAM,WAAW,CAAC,OAAO,QAAQ,OAAO,KAAK,KAAK,IAAI,CAAC;AAC9E,MAAI,QAAQ;GACV,MAAM,YAAY,IAAI,IAAI,IAAI;GAC9B,MAAM,WAAW,cAAc,UAAU;GAEzC,MAAM,SAAS,MAAM,OAAO,OAAO,KAAK;IACtC;IACA,OAAO,OAAO,YAAY,UAAU,aAAa,SAAS,CAAC;IAC3D,MAAM,YAAY;AAChB,aAAQ,MAAM,GAAG,SAAS,SAAS,EAAE,UAAU;;IAEjD,aAAa;IACb,gBAAgB;IACjB,CAAC;AAEF,OAAI,OACF,QAAO;IACL,QAAQ,OAAO;IACf,QAAQ;IACR,cAAc;IACf;;AAIL,SAAO,SAAS,IAAI"}
|
package/dist/plugins/git.d.ts
CHANGED
|
@@ -1,38 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
//#region src/plugins/git.d.ts
|
|
5
|
-
interface GitFileData {
|
|
6
|
-
/**
|
|
7
|
-
* Last modified date of file, obtained from version control.
|
|
8
|
-
*/
|
|
9
|
-
lastModified: Date | null;
|
|
10
|
-
/**
|
|
11
|
-
* Creation date of file, obtained from version control.
|
|
12
|
-
*/
|
|
13
|
-
creationDate: Date | null;
|
|
14
|
-
}
|
|
15
|
-
interface GitHook {
|
|
16
|
-
/**
|
|
17
|
-
* receive the client.
|
|
18
|
-
*/
|
|
19
|
-
onClient: AsyncHook<{
|
|
20
|
-
client: GitClient;
|
|
21
|
-
}>;
|
|
22
|
-
}
|
|
23
|
-
declare const gitHook: CollectionHook<GitHook, undefined>;
|
|
24
|
-
/**
|
|
25
|
-
* Add version control integration for Git.
|
|
26
|
-
* 1. Injects `creationDate` & `lastModified` properties to page exports.
|
|
27
|
-
*
|
|
28
|
-
* @remarks If you are using Vercel, please set `VERCEL_DEEP_CLONE` environment variable to `true`. This ensures the client can access the full commit history of Git.
|
|
29
|
-
*/
|
|
30
|
-
declare function git(): Plugin;
|
|
31
|
-
interface GitClient {
|
|
32
|
-
getFileData: (options: {
|
|
33
|
-
filePath: string;
|
|
34
|
-
}) => Promise<GitFileData>;
|
|
35
|
-
}
|
|
36
|
-
//#endregion
|
|
37
|
-
export { GitClient, GitFileData, GitHook, git as default, gitHook };
|
|
38
|
-
//# sourceMappingURL=git.d.ts.map
|
|
1
|
+
import { a as gitHook, i as git, n as GitFileData, r as GitHook, t as GitClient } from "../git-Ce7r2zfM.js";
|
|
2
|
+
export { GitClient, GitFileData, GitHook, git as default, gitHook };
|
package/dist/plugins/git.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as createCache } from "../async-cache-Cce8lc9D.js";
|
|
1
|
+
import { a as asyncHook, n as defineCollectionHook } from "../collections-BuskUhft.js";
|
|
2
|
+
import { t as createCache } from "../async-cache-C47yxLCv.js";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import { x } from "tinyexec";
|
|
6
|
-
|
|
7
5
|
//#region src/plugins/git.ts
|
|
8
6
|
const gitHook = defineCollectionHook(() => ({ onClient: asyncHook() }));
|
|
9
7
|
/**
|
|
@@ -55,7 +53,7 @@ function createGitClient(cwd) {
|
|
|
55
53
|
});
|
|
56
54
|
} };
|
|
57
55
|
}
|
|
58
|
-
|
|
59
56
|
//#endregion
|
|
60
57
|
export { git as default, gitHook };
|
|
58
|
+
|
|
61
59
|
//# sourceMappingURL=git.js.map
|
package/dist/plugins/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","names":[],"sources":["../../src/plugins/git.ts"],"sourcesContent":["import path from \"node:path\";\nimport { type Output, x } from \"tinyexec\";\nimport type { Plugin } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { defineCollectionHook } from \"@/collections\";\nimport { asyncHook, AsyncHook } from \"@/utils/hook\";\n\nexport interface GitFileData {\n /**\n * Last modified date of file, obtained from version control.\n */\n lastModified: Date | null;\n /**\n * Creation date of file, obtained from version control.\n */\n creationDate: Date | null;\n}\n\nexport interface GitHook {\n /**\n * receive the client.\n */\n onClient: AsyncHook<{ client: GitClient }>;\n}\n\nexport const gitHook = defineCollectionHook<GitHook>(() => ({\n onClient: asyncHook(),\n}));\n\n/**\n * Add version control integration for Git.\n * 1. Injects `creationDate` & `lastModified` properties to page exports.\n *\n * @remarks If you are using Vercel, please set `VERCEL_DEEP_CLONE` environment variable to `true`. This ensures the client can access the full commit history of Git.\n */\nexport default function git(): Plugin {\n let client: GitClient;\n\n return {\n name: \"git\",\n config() {\n const { cwd } = this.core.getOptions();\n client = createGitClient(cwd);\n },\n async collection(collection) {\n await collection.getPluginHook(gitHook)?.onClient.run({ client });\n },\n };\n}\n\nexport interface GitClient {\n getFileData: (options: { filePath: string }) => Promise<GitFileData>;\n}\n\nfunction createGitClient(cwd: string): GitClient {\n const cache = createCache<GitFileData>();\n\n function mapDate(out: Output): Date | null {\n if (out.exitCode !== 0) return null;\n const date = new Date(out.stdout);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n\n return {\n async getFileData({ filePath }) {\n return cache.cached(filePath, async () => {\n const relativePath = path.relative(cwd, filePath);\n const [mod, create] = await Promise.all([\n x(\"git\", [\"log\", \"-1\", \"--pretty=%ai\", relativePath], {\n nodeOptions: {\n cwd,\n },\n }),\n x(\"git\", [\"log\", \"--diff-filter=A\", \"--follow\", \"--format=%ai\", \"-1\", relativePath], {\n nodeOptions: {\n cwd,\n },\n }),\n ]);\n\n return {\n lastModified: mapDate(mod),\n creationDate: mapDate(create),\n };\n });\n },\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.js","names":[],"sources":["../../src/plugins/git.ts"],"sourcesContent":["import path from \"node:path\";\nimport { type Output, x } from \"tinyexec\";\nimport type { Plugin } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { defineCollectionHook } from \"@/collections\";\nimport { asyncHook, AsyncHook } from \"@/utils/hook\";\n\nexport interface GitFileData {\n /**\n * Last modified date of file, obtained from version control.\n */\n lastModified: Date | null;\n /**\n * Creation date of file, obtained from version control.\n */\n creationDate: Date | null;\n}\n\nexport interface GitHook {\n /**\n * receive the client.\n */\n onClient: AsyncHook<{ client: GitClient }>;\n}\n\nexport const gitHook = defineCollectionHook<GitHook>(() => ({\n onClient: asyncHook(),\n}));\n\n/**\n * Add version control integration for Git.\n * 1. Injects `creationDate` & `lastModified` properties to page exports.\n *\n * @remarks If you are using Vercel, please set `VERCEL_DEEP_CLONE` environment variable to `true`. This ensures the client can access the full commit history of Git.\n */\nexport default function git(): Plugin {\n let client: GitClient;\n\n return {\n name: \"git\",\n config() {\n const { cwd } = this.core.getOptions();\n client = createGitClient(cwd);\n },\n async collection(collection) {\n await collection.getPluginHook(gitHook)?.onClient.run({ client });\n },\n };\n}\n\nexport interface GitClient {\n getFileData: (options: { filePath: string }) => Promise<GitFileData>;\n}\n\nfunction createGitClient(cwd: string): GitClient {\n const cache = createCache<GitFileData>();\n\n function mapDate(out: Output): Date | null {\n if (out.exitCode !== 0) return null;\n const date = new Date(out.stdout);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n\n return {\n async getFileData({ filePath }) {\n return cache.cached(filePath, async () => {\n const relativePath = path.relative(cwd, filePath);\n const [mod, create] = await Promise.all([\n x(\"git\", [\"log\", \"-1\", \"--pretty=%ai\", relativePath], {\n nodeOptions: {\n cwd,\n },\n }),\n x(\"git\", [\"log\", \"--diff-filter=A\", \"--follow\", \"--format=%ai\", \"-1\", relativePath], {\n nodeOptions: {\n cwd,\n },\n }),\n ]);\n\n return {\n lastModified: mapDate(mod),\n creationDate: mapDate(create),\n };\n });\n },\n };\n}\n"],"mappings":";;;;;AAyBA,MAAa,UAAU,4BAAqC,EAC1D,UAAU,WAAW,EACtB,EAAE;;;;;;;AAQH,SAAwB,MAAc;CACpC,IAAI;AAEJ,QAAO;EACL,MAAM;EACN,SAAS;GACP,MAAM,EAAE,QAAQ,KAAK,KAAK,YAAY;AACtC,YAAS,gBAAgB,IAAI;;EAE/B,MAAM,WAAW,YAAY;AAC3B,SAAM,WAAW,cAAc,QAAQ,EAAE,SAAS,IAAI,EAAE,QAAQ,CAAC;;EAEpE;;AAOH,SAAS,gBAAgB,KAAwB;CAC/C,MAAM,QAAQ,aAA0B;CAExC,SAAS,QAAQ,KAA0B;AACzC,MAAI,IAAI,aAAa,EAAG,QAAO;EAC/B,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO;AACjC,SAAO,OAAO,MAAM,KAAK,SAAS,CAAC,GAAG,OAAO;;AAG/C,QAAO,EACL,MAAM,YAAY,EAAE,YAAY;AAC9B,SAAO,MAAM,OAAO,UAAU,YAAY;GACxC,MAAM,eAAe,KAAK,SAAS,KAAK,SAAS;GACjD,MAAM,CAAC,KAAK,UAAU,MAAM,QAAQ,IAAI,CACtC,EAAE,OAAO;IAAC;IAAO;IAAM;IAAgB;IAAa,EAAE,EACpD,aAAa,EACX,KACD,EACF,CAAC,EACF,EAAE,OAAO;IAAC;IAAO;IAAmB;IAAY;IAAgB;IAAM;IAAa,EAAE,EACnF,aAAa,EACX,KACD,EACF,CAAC,CACH,CAAC;AAEF,UAAO;IACL,cAAc,QAAQ,IAAI;IAC1B,cAAc,QAAQ,OAAO;IAC9B;IACD;IAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","names":[],"sources":["../../src/plugins/json-schema.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","names":[],"sources":["../../src/plugins/json-schema.ts"],"mappings":";;;UAMiB,iBAAA;;AAAjB;;;;EAME,MAAA;EAKA;;;EAAA,MAAA,SAAe,SAAA;AAAA;AAAA,UAGA,cAAA;EACf,aAAA;EACA,MAAA,SAAe,SAAA;AAAA;;;;cAMJ,cAAA,EAAc,cAAA,CAAA,cAAA,EAAA,iBAAA"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { defineCollectionHook } from "../collections
|
|
1
|
+
import { n as defineCollectionHook } from "../collections-BuskUhft.js";
|
|
2
2
|
import { FileSystemCollection } from "../collections/fs.js";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
|
|
6
5
|
//#region src/plugins/json-schema.ts
|
|
7
6
|
/**
|
|
8
7
|
* Generate JSON schemas locally for collection schemas.
|
|
@@ -46,7 +45,7 @@ const jsonSchemaHook = defineCollectionHook((collection, { insert = false, creat
|
|
|
46
45
|
});
|
|
47
46
|
return hook;
|
|
48
47
|
});
|
|
49
|
-
|
|
50
48
|
//#endregion
|
|
51
49
|
export { jsonSchemaHook };
|
|
50
|
+
|
|
52
51
|
//# sourceMappingURL=json-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","names":[],"sources":["../../src/plugins/json-schema.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport { FileSystemCollection } from \"@/collections/fs\";\nimport { Awaitable } from \"@/types\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface JSONSchemaOptions {\n /**\n * insert `$schema` field to JSON files on creation.\n *\n * @defaultValue false\n */\n insert?: boolean;\n\n /**\n * create JSON schema\n */\n create?: () => Awaitable<object | undefined>;\n}\n\nexport interface JSONSchemaHook {\n getSchemaPath: () => string;\n create?: () => Awaitable<object | undefined>;\n}\n\n/**\n * Generate JSON schemas locally for collection schemas.\n */\nexport const jsonSchemaHook = defineCollectionHook<JSONSchemaHook, JSONSchemaOptions>(\n (collection, { insert = false, create }) => {\n const hook: JSONSchemaHook = {\n create,\n getSchemaPath() {\n return `json-schema/${collection.name}.json`;\n },\n };\n\n collection.onServer.hook(({ core, server }) => {\n const { outDir } = core.getOptions();\n if (!server.watcher || !insert || !(collection instanceof FileSystemCollection)) return;\n\n server.watcher.on(\"add\", async (file) => {\n if (!collection.hasFile(file) || !file.endsWith(\".json\")) return;\n\n let obj: object;\n try {\n const content = (await fs.readFile(file)).toString();\n obj = content.length > 0 ? JSON.parse(content) : {};\n } catch {\n return;\n }\n\n if (\"$schema\" in obj) return;\n const schemaPath = path.join(outDir, hook.getSchemaPath());\n const updated = {\n $schema: path.relative(path.dirname(file), schemaPath),\n ...obj,\n };\n\n await fs.writeFile(file, JSON.stringify(updated, null, 2));\n });\n });\n collection.onEmit.pipe(async (entries) => {\n const jsonSchema = await hook.create?.();\n if (!jsonSchema) return entries;\n entries.push({\n path: hook.getSchemaPath(),\n content: JSON.stringify(jsonSchema, null, 2),\n });\n return entries;\n });\n return hook;\n },\n);\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"json-schema.js","names":[],"sources":["../../src/plugins/json-schema.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport { FileSystemCollection } from \"@/collections/fs\";\nimport { Awaitable } from \"@/types\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface JSONSchemaOptions {\n /**\n * insert `$schema` field to JSON files on creation.\n *\n * @defaultValue false\n */\n insert?: boolean;\n\n /**\n * create JSON schema\n */\n create?: () => Awaitable<object | undefined>;\n}\n\nexport interface JSONSchemaHook {\n getSchemaPath: () => string;\n create?: () => Awaitable<object | undefined>;\n}\n\n/**\n * Generate JSON schemas locally for collection schemas.\n */\nexport const jsonSchemaHook = defineCollectionHook<JSONSchemaHook, JSONSchemaOptions>(\n (collection, { insert = false, create }) => {\n const hook: JSONSchemaHook = {\n create,\n getSchemaPath() {\n return `json-schema/${collection.name}.json`;\n },\n };\n\n collection.onServer.hook(({ core, server }) => {\n const { outDir } = core.getOptions();\n if (!server.watcher || !insert || !(collection instanceof FileSystemCollection)) return;\n\n server.watcher.on(\"add\", async (file) => {\n if (!collection.hasFile(file) || !file.endsWith(\".json\")) return;\n\n let obj: object;\n try {\n const content = (await fs.readFile(file)).toString();\n obj = content.length > 0 ? JSON.parse(content) : {};\n } catch {\n return;\n }\n\n if (\"$schema\" in obj) return;\n const schemaPath = path.join(outDir, hook.getSchemaPath());\n const updated = {\n $schema: path.relative(path.dirname(file), schemaPath),\n ...obj,\n };\n\n await fs.writeFile(file, JSON.stringify(updated, null, 2));\n });\n });\n collection.onEmit.pipe(async (entries) => {\n const jsonSchema = await hook.create?.();\n if (!jsonSchema) return entries;\n entries.push({\n path: hook.getSchemaPath(),\n content: JSON.stringify(jsonSchema, null, 2),\n });\n return entries;\n });\n return hook;\n },\n);\n"],"mappings":";;;;;;;;AA4BA,MAAa,iBAAiB,sBAC3B,YAAY,EAAE,SAAS,OAAO,aAAa;CAC1C,MAAM,OAAuB;EAC3B;EACA,gBAAgB;AACd,UAAO,eAAe,WAAW,KAAK;;EAEzC;AAED,YAAW,SAAS,MAAM,EAAE,MAAM,aAAa;EAC7C,MAAM,EAAE,WAAW,KAAK,YAAY;AACpC,MAAI,CAAC,OAAO,WAAW,CAAC,UAAU,EAAE,sBAAsB,sBAAuB;AAEjF,SAAO,QAAQ,GAAG,OAAO,OAAO,SAAS;AACvC,OAAI,CAAC,WAAW,QAAQ,KAAK,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAE;GAE1D,IAAI;AACJ,OAAI;IACF,MAAM,WAAW,MAAM,GAAG,SAAS,KAAK,EAAE,UAAU;AACpD,UAAM,QAAQ,SAAS,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE;WAC7C;AACN;;AAGF,OAAI,aAAa,IAAK;GACtB,MAAM,aAAa,KAAK,KAAK,QAAQ,KAAK,eAAe,CAAC;GAC1D,MAAM,UAAU;IACd,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,EAAE,WAAW;IACtD,GAAG;IACJ;AAED,SAAM,GAAG,UAAU,MAAM,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC;IAC1D;GACF;AACF,YAAW,OAAO,KAAK,OAAO,YAAY;EACxC,MAAM,aAAa,MAAM,KAAK,UAAU;AACxC,MAAI,CAAC,WAAY,QAAO;AACxB,UAAQ,KAAK;GACX,MAAM,KAAK,eAAe;GAC1B,SAAS,KAAK,UAAU,YAAY,MAAM,EAAE;GAC7C,CAAC;AACF,SAAO;GACP;AACF,QAAO;EAEV"}
|
|
@@ -1,72 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import "../../load-from-file-CIYdu-B5.js";
|
|
4
|
-
import { WebpackLoaderOptions } from "./webpack.js";
|
|
5
|
-
import { NextConfig } from "next";
|
|
6
|
-
|
|
7
|
-
//#region src/plugins/loader/index.d.ts
|
|
8
|
-
type Awaitable<T> = T | Promise<T>;
|
|
9
|
-
type LoaderEnvironment = "vite" | "bun" | "node";
|
|
10
|
-
interface Loader {
|
|
11
|
-
/**
|
|
12
|
-
* Transform input into JavaScript.
|
|
13
|
-
*
|
|
14
|
-
* Returns:
|
|
15
|
-
* - `LoaderOutput`: JavaScript code & source map.
|
|
16
|
-
* - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.
|
|
17
|
-
*/
|
|
18
|
-
load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;
|
|
19
|
-
bun?: {
|
|
20
|
-
/**
|
|
21
|
-
* 1. Bun doesn't allow `null` in loaders.
|
|
22
|
-
* 2. Bun requires sync result to support dynamic require().
|
|
23
|
-
*/
|
|
24
|
-
load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
interface LoaderInput {
|
|
28
|
-
development: boolean;
|
|
29
|
-
filePath: string;
|
|
30
|
-
query: Record<string, string | string[] | undefined>;
|
|
31
|
-
getSource: () => string | Promise<string>;
|
|
32
|
-
addDependency: (file: string) => void;
|
|
33
|
-
}
|
|
34
|
-
interface LoaderOutput {
|
|
35
|
-
code: string;
|
|
36
|
-
map?: unknown;
|
|
37
|
-
/**
|
|
38
|
-
* only supported on Vite 8 at the moment, specify the output module type.
|
|
39
|
-
*
|
|
40
|
-
* on unsupported environments, it will be ignored.
|
|
41
|
-
*/
|
|
42
|
-
moduleType?: "js" | "json";
|
|
43
|
-
}
|
|
44
|
-
interface NextLoaderContext extends PluginContext {
|
|
45
|
-
getLoaderOptions: () => WebpackLoaderOptions;
|
|
46
|
-
}
|
|
47
|
-
interface LoaderConfig {
|
|
48
|
-
/** unique ID for loader, used to deduplicate loaders */
|
|
49
|
-
id?: string;
|
|
50
|
-
/**
|
|
51
|
-
* Filter file paths, the input can be either a file URL or file path.
|
|
52
|
-
*
|
|
53
|
-
* Must take resource query into consideration.
|
|
54
|
-
*/
|
|
55
|
-
test?: RegExp;
|
|
56
|
-
/**
|
|
57
|
-
* @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.
|
|
58
|
-
*/
|
|
59
|
-
createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;
|
|
60
|
-
configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* a light layer for implementing loaders.
|
|
64
|
-
*/
|
|
65
|
-
declare function loaderPlugin(): Plugin;
|
|
66
|
-
interface LoaderHook {
|
|
67
|
-
loaders: LoaderConfig[];
|
|
68
|
-
}
|
|
69
|
-
declare const loaderHook: CollectionHook<LoaderHook, undefined>;
|
|
70
|
-
//#endregion
|
|
71
|
-
export { Loader, LoaderConfig, LoaderHook, LoaderInput, LoaderOutput, loaderHook, loaderPlugin };
|
|
72
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
import { a as LoaderOutput, i as LoaderInput, n as LoaderConfig, o as loaderHook, r as LoaderHook, s as loaderPlugin, t as Loader } from "../../index-B9DAFF8c.js";
|
|
2
|
+
export { Loader, LoaderConfig, LoaderHook, LoaderInput, LoaderOutput, loaderHook, loaderPlugin };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { defineCollectionHook } from "../../collections
|
|
2
|
-
import { t as createCache } from "../../async-cache-
|
|
1
|
+
import { n as defineCollectionHook } from "../../collections-BuskUhft.js";
|
|
2
|
+
import { t as createCache } from "../../async-cache-C47yxLCv.js";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
|
|
5
4
|
//#region src/plugins/loader/index.ts
|
|
6
5
|
/**
|
|
7
6
|
* a light layer for implementing loaders.
|
|
@@ -56,15 +55,15 @@ function loaderPlugin() {
|
|
|
56
55
|
return config;
|
|
57
56
|
} },
|
|
58
57
|
bun: { async setup(build) {
|
|
59
|
-
const { toBun } = await import("../../bun-
|
|
58
|
+
const { toBun } = await import("../../bun-NahDFkhR.js");
|
|
60
59
|
for (const loader of await initLoaders(this, "bun")) toBun(loader.test, loader.loader)(build);
|
|
61
60
|
} },
|
|
62
61
|
node: { async createLoad() {
|
|
63
|
-
const { toNode } = await import("../../node-
|
|
62
|
+
const { toNode } = await import("../../node-Du4i4XDg.js");
|
|
64
63
|
return toNode(await initLoaders(this, "node"));
|
|
65
64
|
} },
|
|
66
65
|
vite: { async createPlugin() {
|
|
67
|
-
const { toVite } = await import("../../vite-
|
|
66
|
+
const { toVite } = await import("../../vite-DVIOnBqW.js");
|
|
68
67
|
return (await initLoaders(this, "vite")).map((loader) => {
|
|
69
68
|
return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);
|
|
70
69
|
});
|
|
@@ -72,7 +71,7 @@ function loaderPlugin() {
|
|
|
72
71
|
};
|
|
73
72
|
}
|
|
74
73
|
const loaderHook = defineCollectionHook(() => ({ loaders: [] }));
|
|
75
|
-
|
|
76
74
|
//#endregion
|
|
77
75
|
export { loaderHook, loaderPlugin };
|
|
76
|
+
|
|
78
77
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/plugins/loader/index.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport type { Plugin, PluginContext } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { NextConfig } from \"next\";\nimport { WebpackLoaderOptions } from \"./webpack.js\";\nimport path from \"node:path\";\n\ntype Awaitable<T> = T | Promise<T>;\n\ntype LoaderEnvironment = \"vite\" | \"bun\" | \"node\";\n\nexport interface Loader {\n /**\n * Transform input into JavaScript.\n *\n * Returns:\n * - `LoaderOutput`: JavaScript code & source map.\n * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.\n */\n load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;\n\n bun?: {\n /**\n * 1. Bun doesn't allow `null` in loaders.\n * 2. Bun requires sync result to support dynamic require().\n */\n load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;\n };\n}\n\nexport interface LoaderInput {\n development: boolean;\n\n filePath: string;\n query: Record<string, string | string[] | undefined>;\n getSource: () => string | Promise<string>;\n addDependency: (file: string) => void;\n}\n\nexport interface LoaderOutput {\n code: string;\n map?: unknown;\n\n /**\n * only supported on Vite 8 at the moment, specify the output module type.\n *\n * on unsupported environments, it will be ignored.\n */\n moduleType?: \"js\" | \"json\";\n}\n\ninterface NextLoaderContext extends PluginContext {\n getLoaderOptions: () => WebpackLoaderOptions;\n}\n\nexport interface LoaderConfig {\n /** unique ID for loader, used to deduplicate loaders */\n id?: string;\n\n /**\n * Filter file paths, the input can be either a file URL or file path.\n *\n * Must take resource query into consideration.\n */\n test?: RegExp;\n\n /**\n * @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.\n */\n createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;\n configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;\n}\n\ninterface ResolvedLoader {\n id: string;\n test: RegExp | undefined;\n loader: Loader;\n}\n\n/**\n * a light layer for implementing loaders.\n */\nexport function loaderPlugin(): Plugin {\n // env -> loaders\n const cachedLoaders = createCache<ResolvedLoader[]>();\n\n function initLoaders(ctx: PluginContext, env: LoaderEnvironment) {\n const { core } = ctx;\n return cachedLoaders.cached(env, async () => {\n const usedIds = new Set<string>();\n const out: ResolvedLoader[] = [];\n\n for (const collection of core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n let nextId = 0;\n for (const loader of hook.loaders) {\n if (loader.id && usedIds.has(loader.id)) continue;\n if (loader.id) usedIds.add(loader.id);\n\n out.push({\n id: loader.id ?? `${collection.name}:${nextId++}`,\n test: loader.test,\n loader: await loader.createLoader.call(ctx, env),\n });\n }\n }\n return out;\n });\n }\n\n return {\n name: \"fuma-content:loader\",\n next: {\n config(config) {\n const ctx: NextLoaderContext = {\n ...this,\n getLoaderOptions: () => {\n const { configPath, outDir } = this.core.getOptions();\n return {\n configPath,\n outDir,\n absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),\n isDev: process.env.NODE_ENV === \"development\",\n };\n },\n };\n for (const collection of this.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n for (const loader of hook.loaders) {\n if (!loader.configureNext) continue;\n\n config = loader.configureNext.call(ctx, config);\n }\n }\n\n return config;\n },\n },\n bun: {\n async setup(build) {\n const { toBun } = await import(\"./bun\");\n\n for (const loader of await initLoaders(this, \"bun\")) {\n toBun(loader.test, loader.loader)(build);\n }\n },\n },\n node: {\n async createLoad() {\n const { toNode } = await import(\"./node\");\n return toNode(await initLoaders(this, \"node\"));\n },\n },\n vite: {\n async createPlugin() {\n const { toVite } = await import(\"./vite\");\n return (await initLoaders(this, \"vite\")).map((loader) => {\n return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);\n });\n },\n },\n };\n}\n\nexport interface LoaderHook {\n loaders: LoaderConfig[];\n}\n\nexport const loaderHook = defineCollectionHook<LoaderHook>(() => ({\n loaders: [],\n}));\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/plugins/loader/index.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport type { Plugin, PluginContext } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { NextConfig } from \"next\";\nimport { WebpackLoaderOptions } from \"./webpack.js\";\nimport path from \"node:path\";\n\ntype Awaitable<T> = T | Promise<T>;\n\ntype LoaderEnvironment = \"vite\" | \"bun\" | \"node\";\n\nexport interface Loader {\n /**\n * Transform input into JavaScript.\n *\n * Returns:\n * - `LoaderOutput`: JavaScript code & source map.\n * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.\n */\n load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;\n\n bun?: {\n /**\n * 1. Bun doesn't allow `null` in loaders.\n * 2. Bun requires sync result to support dynamic require().\n */\n load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;\n };\n}\n\nexport interface LoaderInput {\n development: boolean;\n\n filePath: string;\n query: Record<string, string | string[] | undefined>;\n getSource: () => string | Promise<string>;\n addDependency: (file: string) => void;\n}\n\nexport interface LoaderOutput {\n code: string;\n map?: unknown;\n\n /**\n * only supported on Vite 8 at the moment, specify the output module type.\n *\n * on unsupported environments, it will be ignored.\n */\n moduleType?: \"js\" | \"json\";\n}\n\ninterface NextLoaderContext extends PluginContext {\n getLoaderOptions: () => WebpackLoaderOptions;\n}\n\nexport interface LoaderConfig {\n /** unique ID for loader, used to deduplicate loaders */\n id?: string;\n\n /**\n * Filter file paths, the input can be either a file URL or file path.\n *\n * Must take resource query into consideration.\n */\n test?: RegExp;\n\n /**\n * @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.\n */\n createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;\n configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;\n}\n\ninterface ResolvedLoader {\n id: string;\n test: RegExp | undefined;\n loader: Loader;\n}\n\n/**\n * a light layer for implementing loaders.\n */\nexport function loaderPlugin(): Plugin {\n // env -> loaders\n const cachedLoaders = createCache<ResolvedLoader[]>();\n\n function initLoaders(ctx: PluginContext, env: LoaderEnvironment) {\n const { core } = ctx;\n return cachedLoaders.cached(env, async () => {\n const usedIds = new Set<string>();\n const out: ResolvedLoader[] = [];\n\n for (const collection of core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n let nextId = 0;\n for (const loader of hook.loaders) {\n if (loader.id && usedIds.has(loader.id)) continue;\n if (loader.id) usedIds.add(loader.id);\n\n out.push({\n id: loader.id ?? `${collection.name}:${nextId++}`,\n test: loader.test,\n loader: await loader.createLoader.call(ctx, env),\n });\n }\n }\n return out;\n });\n }\n\n return {\n name: \"fuma-content:loader\",\n next: {\n config(config) {\n const ctx: NextLoaderContext = {\n ...this,\n getLoaderOptions: () => {\n const { configPath, outDir } = this.core.getOptions();\n return {\n configPath,\n outDir,\n absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),\n isDev: process.env.NODE_ENV === \"development\",\n };\n },\n };\n for (const collection of this.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n for (const loader of hook.loaders) {\n if (!loader.configureNext) continue;\n\n config = loader.configureNext.call(ctx, config);\n }\n }\n\n return config;\n },\n },\n bun: {\n async setup(build) {\n const { toBun } = await import(\"./bun\");\n\n for (const loader of await initLoaders(this, \"bun\")) {\n toBun(loader.test, loader.loader)(build);\n }\n },\n },\n node: {\n async createLoad() {\n const { toNode } = await import(\"./node\");\n return toNode(await initLoaders(this, \"node\"));\n },\n },\n vite: {\n async createPlugin() {\n const { toVite } = await import(\"./vite\");\n return (await initLoaders(this, \"vite\")).map((loader) => {\n return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);\n });\n },\n },\n };\n}\n\nexport interface LoaderHook {\n loaders: LoaderConfig[];\n}\n\nexport const loaderHook = defineCollectionHook<LoaderHook>(() => ({\n loaders: [],\n}));\n"],"mappings":";;;;;;;AAkFA,SAAgB,eAAuB;CAErC,MAAM,gBAAgB,aAA+B;CAErD,SAAS,YAAY,KAAoB,KAAwB;EAC/D,MAAM,EAAE,SAAS;AACjB,SAAO,cAAc,OAAO,KAAK,YAAY;GAC3C,MAAM,0BAAU,IAAI,KAAa;GACjC,MAAM,MAAwB,EAAE;AAEhC,QAAK,MAAM,cAAc,KAAK,gBAAgB,EAAE;IAC9C,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;IAEX,IAAI,SAAS;AACb,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,OAAO,MAAM,QAAQ,IAAI,OAAO,GAAG,CAAE;AACzC,SAAI,OAAO,GAAI,SAAQ,IAAI,OAAO,GAAG;AAErC,SAAI,KAAK;MACP,IAAI,OAAO,MAAM,GAAG,WAAW,KAAK,GAAG;MACvC,MAAM,OAAO;MACb,QAAQ,MAAM,OAAO,aAAa,KAAK,KAAK,IAAI;MACjD,CAAC;;;AAGN,UAAO;IACP;;AAGJ,QAAO;EACL,MAAM;EACN,MAAM,EACJ,OAAO,QAAQ;GACb,MAAM,MAAyB;IAC7B,GAAG;IACH,wBAAwB;KACtB,MAAM,EAAE,YAAY,WAAW,KAAK,KAAK,YAAY;AACrD,YAAO;MACL;MACA;MACA,4BAA4B,KAAK,QAAQ,KAAK,KAAK,uBAAuB,CAAC;MAC3E,OAAO,QAAQ,IAAI,aAAa;MACjC;;IAEJ;AACD,QAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,EAAE;IACnD,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;AAEX,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,CAAC,OAAO,cAAe;AAE3B,cAAS,OAAO,cAAc,KAAK,KAAK,OAAO;;;AAInD,UAAO;KAEV;EACD,KAAK,EACH,MAAM,MAAM,OAAO;GACjB,MAAM,EAAE,UAAU,MAAM,OAAO;AAE/B,QAAK,MAAM,UAAU,MAAM,YAAY,MAAM,MAAM,CACjD,OAAM,OAAO,MAAM,OAAO,OAAO,CAAC,MAAM;KAG7C;EACD,MAAM,EACJ,MAAM,aAAa;GACjB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,UAAO,OAAO,MAAM,YAAY,MAAM,OAAO,CAAC;KAEjD;EACD,MAAM,EACJ,MAAM,eAAe;GACnB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,WAAQ,MAAM,YAAY,MAAM,OAAO,EAAE,KAAK,WAAW;AACvD,WAAO,OAAO,gBAAgB,OAAO,MAAM,OAAO,MAAM,OAAO,OAAO;KACtE;KAEL;EACF;;AAOH,MAAa,aAAa,4BAAwC,EAChE,SAAS,EAAE,EACZ,EAAE"}
|
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
|
|
3
|
-
import { DynamicCore } from "../../dynamic.js";
|
|
4
|
-
import { Loader } from "./index.js";
|
|
5
|
-
import { LoaderContext } from "webpack";
|
|
6
|
-
|
|
7
|
-
//#region src/plugins/loader/webpack.d.ts
|
|
8
|
-
interface WebpackLoaderOptions {
|
|
9
|
-
absoluteCompiledConfigPath: string;
|
|
10
|
-
configPath: string;
|
|
11
|
-
outDir: string;
|
|
12
|
-
isDev: boolean;
|
|
13
|
-
}
|
|
14
|
-
type WebpackLoader = (this: LoaderContext<WebpackLoaderOptions>, source: string) => void;
|
|
15
|
-
/**
|
|
16
|
-
* Note: need to handle the `test` regex in Webpack config instead.
|
|
17
|
-
*/
|
|
18
|
-
declare function createWebpackLoader(loaderFactory: (core: DynamicCore) => Loader): WebpackLoader;
|
|
19
|
-
//#endregion
|
|
20
|
-
export { WebpackLoader, WebpackLoaderOptions, createWebpackLoader };
|
|
21
|
-
//# sourceMappingURL=webpack.d.ts.map
|
|
1
|
+
import { c as WebpackLoader, l as WebpackLoaderOptions, u as createWebpackLoader } from "../../index-B9DAFF8c.js";
|
|
2
|
+
export { WebpackLoader, WebpackLoaderOptions, createWebpackLoader };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { createDynamicCore } from "../../dynamic.js";
|
|
2
|
-
import { t as Core } from "../../core-
|
|
3
|
-
import { t as ValidationError } from "../../validation-
|
|
2
|
+
import { t as Core } from "../../core-BfIQeHzH.js";
|
|
3
|
+
import { t as ValidationError } from "../../validation-Bf_v2L3p.js";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { parse } from "node:querystring";
|
|
6
|
-
|
|
7
6
|
//#region src/plugins/loader/webpack.ts
|
|
8
7
|
const cachedCores = /* @__PURE__ */ new Map();
|
|
9
8
|
function initDynamicCore({ configPath, isDev, outDir }) {
|
|
@@ -56,7 +55,7 @@ function createWebpackLoader(loaderFactory) {
|
|
|
56
55
|
return asyncLoader.call(this, source, this.async());
|
|
57
56
|
};
|
|
58
57
|
}
|
|
59
|
-
|
|
60
58
|
//#endregion
|
|
61
59
|
export { createWebpackLoader };
|
|
60
|
+
|
|
62
61
|
//# sourceMappingURL=webpack.js.map
|