fuma-content 1.1.2 → 1.1.4
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-BVuJiIDT.d.ts +9 -0
- package/dist/async-cache-BVuJiIDT.d.ts.map +1 -0
- package/dist/{async-cache-U87GzQTb.js → async-cache-DRmFaVGm.js} +1 -1
- package/dist/{async-cache-U87GzQTb.js.map → async-cache-DRmFaVGm.js.map} +1 -1
- package/dist/build-mdx-DRqbcE1d.d.ts +79 -0
- package/dist/build-mdx-DRqbcE1d.d.ts.map +1 -0
- package/dist/{build-mdx-CUp6FpfT.js → build-mdx-DgzggXIL.js} +27 -40
- package/dist/build-mdx-DgzggXIL.js.map +1 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +2 -2
- package/dist/{bun-CBROq3I0.js → bun-Be5pgXW_.js} +4 -3
- package/dist/bun-Be5pgXW_.js.map +1 -0
- package/dist/{code-generator-Qhhq7kHh.js → code-generator-CHcOrCeM.js} +5 -7
- package/dist/code-generator-CHcOrCeM.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +3 -6
- package/dist/collections/data/runtime.d.ts.map +1 -1
- package/dist/collections/data/runtime.js.map +1 -1
- package/dist/collections/data.d.ts +4 -4
- package/dist/collections/data.d.ts.map +1 -1
- package/dist/collections/data.js +158 -4
- package/dist/collections/data.js.map +1 -0
- package/dist/collections/fs.d.ts +45 -3
- package/dist/collections/fs.d.ts.map +1 -0
- package/dist/collections/fs.js +65 -2
- package/dist/collections/fs.js.map +1 -0
- package/dist/collections/index.d.ts +37 -2
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +37 -2
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/json/loader-webpack.d.ts +3 -3
- package/dist/collections/json/loader-webpack.d.ts.map +1 -1
- package/dist/collections/json/loader-webpack.js +3 -7
- package/dist/collections/json/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/loader-webpack.d.ts +3 -3
- package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
- package/dist/collections/mdx/loader-webpack.js +3 -8
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +3 -10
- package/dist/collections/mdx/react.d.ts.map +1 -1
- package/dist/collections/mdx/react.js +2 -1
- package/dist/collections/mdx/react.js.map +1 -1
- package/dist/collections/mdx/runtime-browser.d.ts +25 -11
- package/dist/collections/mdx/runtime-browser.d.ts.map +1 -0
- package/dist/collections/mdx/runtime-browser.js +2 -2
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +6 -10
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +15 -13
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +26 -10
- package/dist/collections/mdx/runtime.d.ts.map +1 -0
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx.d.ts +66 -6
- package/dist/collections/mdx.d.ts.map +1 -0
- package/dist/collections/mdx.js +316 -6
- package/dist/collections/mdx.js.map +1 -0
- package/dist/collections/obsidian.d.ts +10 -0
- package/dist/collections/obsidian.d.ts.map +1 -0
- package/dist/collections/obsidian.js +497 -0
- package/dist/collections/obsidian.js.map +1 -0
- package/dist/collections/runtime/file-store.d.ts +21 -4
- package/dist/collections/runtime/file-store.d.ts.map +1 -0
- package/dist/collections/runtime/file-store.js +1 -1
- package/dist/collections/runtime/store.d.ts +31 -3
- package/dist/collections/runtime/store.d.ts.map +1 -0
- package/dist/collections/runtime/store.js +33 -2
- package/dist/collections/runtime/store.js.map +1 -0
- package/dist/collections/yaml/loader-webpack.d.ts +3 -3
- package/dist/collections/yaml/loader-webpack.d.ts.map +1 -1
- package/dist/collections/yaml/loader-webpack.js +3 -7
- package/dist/collections/yaml/loader-webpack.js.map +1 -1
- package/dist/config/index.d.ts +35 -2
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/{core-Uv3jZqL-.js → core-BuUsOElL.js} +9 -9
- package/dist/core-BuUsOElL.js.map +1 -0
- package/dist/{core-CT06v32N.d.ts → core-FjA_Xoho.d.ts} +4 -67
- package/dist/core-FjA_Xoho.d.ts.map +1 -0
- package/dist/dynamic.d.ts +25 -3
- package/dist/dynamic.d.ts.map +1 -0
- package/dist/dynamic.js +28 -2
- package/dist/dynamic.js.map +1 -0
- package/dist/{fuma-matter-BuBO2w-p.js → fuma-matter-B4gT09gM.js} +1 -1
- package/dist/fuma-matter-B4gT09gM.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/is-promise-like-DYHv0Yap.js +8 -0
- package/dist/is-promise-like-DYHv0Yap.js.map +1 -0
- package/dist/{load-from-file-z7EGuf2n.js → load-from-file-BhdBOcQT.js} +4 -2
- package/dist/{load-from-file-z7EGuf2n.js.map → load-from-file-BhdBOcQT.js.map} +1 -1
- package/dist/load-from-file-CIYdu-B5.d.ts +10 -0
- package/dist/load-from-file-CIYdu-B5.d.ts.map +1 -0
- package/dist/loader-BOYLUNfh.js +18 -0
- package/dist/{loader-BK8PnqRg.js.map → loader-BOYLUNfh.js.map} +1 -1
- package/dist/{loader-CnksfM7I.js → loader-BT4fwLTJ.js} +13 -7
- package/dist/loader-BT4fwLTJ.js.map +1 -0
- package/dist/loader-Cb9kSSxT.js +19 -0
- package/dist/{loader-Cnz-VHne.js.map → loader-Cb9kSSxT.js.map} +1 -1
- package/dist/{loader-CuntMmR4.js → loader-UhlX4xbz.js} +3 -3
- package/dist/loader-UhlX4xbz.js.map +1 -0
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +3 -3
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/loader.d.ts +1 -1
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +8 -8
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-2VZOh3P9.js → node-Cu5Pqxxo.js} +2 -2
- package/dist/node-Cu5Pqxxo.js.map +1 -0
- package/dist/{collections-CNWuMDAZ.js → pipe-CvCqOpXX.js} +2 -36
- package/dist/pipe-CvCqOpXX.js.map +1 -0
- package/dist/plugins/git.d.ts +38 -3
- package/dist/plugins/git.d.ts.map +1 -0
- package/dist/plugins/git.js +60 -2
- package/dist/plugins/git.js.map +1 -0
- package/dist/plugins/json-schema.d.ts +2 -1
- package/dist/plugins/json-schema.d.ts.map +1 -1
- package/dist/plugins/json-schema.js +2 -2
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +72 -4
- package/dist/plugins/loader/index.d.ts.map +1 -0
- package/dist/plugins/loader/index.js +77 -2
- package/dist/plugins/loader/index.js.map +1 -0
- package/dist/plugins/loader/webpack.d.ts +21 -4
- package/dist/plugins/loader/webpack.d.ts.map +1 -0
- package/dist/plugins/loader/webpack.js +7 -5
- package/dist/plugins/loader/webpack.js.map +1 -1
- package/dist/rolldown-runtime-CjeV3_4I.js +18 -0
- package/dist/{validation-BvVvvLII.js → validation-C3kXuveD.js} +1 -1
- package/dist/{validation-BvVvvLII.js.map → validation-C3kXuveD.js.map} +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +4 -15
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-C1qXY47G.js → vite-CoJIMNWk.js} +4 -4
- package/dist/vite-CoJIMNWk.js.map +1 -0
- package/package.json +27 -11
- package/dist/build-mdx-CUp6FpfT.js.map +0 -1
- package/dist/build-mdx-D6zM3Sgl.js +0 -4
- package/dist/bun-CBROq3I0.js.map +0 -1
- package/dist/code-generator-Qhhq7kHh.js.map +0 -1
- package/dist/collections-CNWuMDAZ.js.map +0 -1
- package/dist/core-CT06v32N.d.ts.map +0 -1
- package/dist/core-Uv3jZqL-.js.map +0 -1
- package/dist/data-Cxsx5KPD.js +0 -159
- package/dist/data-Cxsx5KPD.js.map +0 -1
- package/dist/dynamic-Ck1wYoaL.d.ts +0 -33
- package/dist/dynamic-Ck1wYoaL.d.ts.map +0 -1
- package/dist/dynamic-CtOB4Rkp.js +0 -29
- package/dist/dynamic-CtOB4Rkp.js.map +0 -1
- package/dist/file-store-Dm1SjuLg.d.ts +0 -20
- package/dist/file-store-Dm1SjuLg.d.ts.map +0 -1
- package/dist/fs-CXzVd2Dp.js +0 -68
- package/dist/fs-CXzVd2Dp.js.map +0 -1
- package/dist/fs-CmwaaFyx.d.ts +0 -45
- package/dist/fs-CmwaaFyx.d.ts.map +0 -1
- package/dist/fuma-matter-BuBO2w-p.js.map +0 -1
- package/dist/git-DnejL9r_.js +0 -60
- package/dist/git-DnejL9r_.js.map +0 -1
- package/dist/git-n-9ddn78.d.ts +0 -37
- package/dist/git-n-9ddn78.d.ts.map +0 -1
- package/dist/index-BheUVWBm.d.ts +0 -87
- package/dist/index-BheUVWBm.d.ts.map +0 -1
- package/dist/load-from-file-D-Xm95Fz.js +0 -3
- package/dist/loader-B4nQrRwA.js +0 -77
- package/dist/loader-B4nQrRwA.js.map +0 -1
- package/dist/loader-B6ordrWK.js +0 -9
- package/dist/loader-BK8PnqRg.js +0 -16
- package/dist/loader-CnksfM7I.js.map +0 -1
- package/dist/loader-Cnz-VHne.js +0 -17
- package/dist/loader-CuntMmR4.js.map +0 -1
- package/dist/loader-Cx1Rg_VM.js +0 -8
- package/dist/loader-Dao_nv3e.js +0 -8
- package/dist/mdx-Cw1nBJ0D.js +0 -306
- package/dist/mdx-Cw1nBJ0D.js.map +0 -1
- package/dist/mdx-PaqRNZMS.d.ts +0 -135
- package/dist/mdx-PaqRNZMS.d.ts.map +0 -1
- package/dist/node-2VZOh3P9.js.map +0 -1
- package/dist/runtime-BUUHSFlR.d.ts +0 -31
- package/dist/runtime-BUUHSFlR.d.ts.map +0 -1
- package/dist/runtime-browser-B70WGxeQ.d.ts +0 -29
- package/dist/runtime-browser-B70WGxeQ.d.ts.map +0 -1
- package/dist/store-CRyvZFKN.js +0 -34
- package/dist/store-CRyvZFKN.js.map +0 -1
- package/dist/store-D_PPrdRE.d.ts +0 -31
- package/dist/store-D_PPrdRE.d.ts.map +0 -1
- package/dist/vite-C1qXY47G.js.map +0 -1
package/dist/collections/data.js
CHANGED
|
@@ -1,5 +1,159 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import "../
|
|
3
|
-
import {
|
|
1
|
+
import { t as asyncPipe } from "../pipe-CvCqOpXX.js";
|
|
2
|
+
import { n as slash } from "../code-generator-CHcOrCeM.js";
|
|
3
|
+
import { loaderHook } from "../plugins/loader/index.js";
|
|
4
|
+
import { FileSystemCollection } from "./fs.js";
|
|
5
|
+
import path from "node:path";
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
//#region src/collections/data.ts
|
|
8
|
+
var DataCollection = class extends FileSystemCollection {
|
|
9
|
+
schema;
|
|
10
|
+
/**
|
|
11
|
+
* Transform data
|
|
12
|
+
*/
|
|
13
|
+
onLoad = asyncPipe();
|
|
14
|
+
$inferInput = void 0;
|
|
15
|
+
$inferOutput = void 0;
|
|
16
|
+
constructor({ dir, files, loaders: _loadersConfig = {}, schema }) {
|
|
17
|
+
const loadersConfig = { ..._loadersConfig.custom };
|
|
18
|
+
if (_loadersConfig.json !== false) loadersConfig.json = jsonLoader();
|
|
19
|
+
if (_loadersConfig.yaml !== false) loadersConfig.yaml = yamlLoader();
|
|
20
|
+
super({
|
|
21
|
+
dir,
|
|
22
|
+
files,
|
|
23
|
+
supportedFormats: Object.keys(loadersConfig)
|
|
24
|
+
});
|
|
25
|
+
this.schema = schema;
|
|
26
|
+
this.onServer.hook(({ core, server }) => {
|
|
27
|
+
if (!server.watcher) return;
|
|
28
|
+
server.watcher.on("all", async (event, file) => {
|
|
29
|
+
if (event === "change" || !this.hasFile(file)) return;
|
|
30
|
+
await core.emit({
|
|
31
|
+
filterCollection: (collection) => collection === this,
|
|
32
|
+
filterWorkspace: () => false,
|
|
33
|
+
write: true
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
this.onEmit.pipe(this.#onEmitHandler.bind(this));
|
|
38
|
+
this.pluginHook(loaderHook).loaders.push(...Object.values(loadersConfig));
|
|
39
|
+
}
|
|
40
|
+
#onEmitHandler = async (entries, { core, createCodeGenerator }) => {
|
|
41
|
+
entries.push(await createCodeGenerator(`${this.name}.ts`, async ({ codegen }) => {
|
|
42
|
+
codegen.addNamedImport(["dataStore"], "fuma-content/collections/data/runtime");
|
|
43
|
+
codegen.addNamespaceImport("Config", codegen.formatImportPath(core.getOptions().configPath), true);
|
|
44
|
+
const base = slash(core._toRuntimePath(this.dir));
|
|
45
|
+
let records = "{";
|
|
46
|
+
const query = codegen.formatQuery({
|
|
47
|
+
collection: this.name,
|
|
48
|
+
workspace: core.getWorkspace()?.name
|
|
49
|
+
});
|
|
50
|
+
for (const file of await this.getFiles()) {
|
|
51
|
+
const fullPath = path.join(this.dir, file);
|
|
52
|
+
const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;
|
|
53
|
+
const name = codegen.generateImportName();
|
|
54
|
+
codegen.addNamedImport([`default as ${name}`], specifier);
|
|
55
|
+
records += `"${slash(file)}": ${name},`;
|
|
56
|
+
}
|
|
57
|
+
records += "}";
|
|
58
|
+
codegen.push(`export const ${this.name} = dataStore<typeof Config, "${this.name}">("${this.name}", "${base}", ${records});`);
|
|
59
|
+
}));
|
|
60
|
+
return entries;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
function dataCollection(config) {
|
|
64
|
+
return new DataCollection(config);
|
|
65
|
+
}
|
|
66
|
+
function yamlLoader() {
|
|
67
|
+
const test = /\.yaml(\?.+?)?$/;
|
|
68
|
+
return {
|
|
69
|
+
id: "yaml",
|
|
70
|
+
test,
|
|
71
|
+
configureNext(nextConfig) {
|
|
72
|
+
const loaderPath = "fuma-content/collections/yaml/loader-webpack";
|
|
73
|
+
const loaderOptions = this.getLoaderOptions();
|
|
74
|
+
return {
|
|
75
|
+
...nextConfig,
|
|
76
|
+
turbopack: {
|
|
77
|
+
...nextConfig.turbopack,
|
|
78
|
+
rules: {
|
|
79
|
+
...nextConfig.turbopack?.rules,
|
|
80
|
+
"*.yaml": {
|
|
81
|
+
loaders: [{
|
|
82
|
+
loader: loaderPath,
|
|
83
|
+
options: loaderOptions
|
|
84
|
+
}],
|
|
85
|
+
as: "*.js"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
webpack(config, options) {
|
|
90
|
+
config.module ||= {};
|
|
91
|
+
config.module.rules ||= [];
|
|
92
|
+
config.module.rules.push({
|
|
93
|
+
test,
|
|
94
|
+
enforce: "pre",
|
|
95
|
+
use: [{
|
|
96
|
+
loader: loaderPath,
|
|
97
|
+
options: loaderOptions
|
|
98
|
+
}]
|
|
99
|
+
});
|
|
100
|
+
return nextConfig.webpack?.(config, options) ?? config;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
async createLoader() {
|
|
105
|
+
const { createYamlLoader } = await import("../loader-Cb9kSSxT.js").then((n) => n.n);
|
|
106
|
+
const core = this.core;
|
|
107
|
+
return createYamlLoader({ getCore: () => core });
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function jsonLoader() {
|
|
112
|
+
const test = /\.json(\?.+?)?$/;
|
|
113
|
+
return {
|
|
114
|
+
id: "json",
|
|
115
|
+
test,
|
|
116
|
+
configureNext(nextConfig) {
|
|
117
|
+
const loaderPath = "fuma-content/collections/json/loader-webpack";
|
|
118
|
+
const loaderOptions = this.getLoaderOptions();
|
|
119
|
+
return {
|
|
120
|
+
...nextConfig,
|
|
121
|
+
turbopack: {
|
|
122
|
+
...nextConfig.turbopack,
|
|
123
|
+
rules: {
|
|
124
|
+
...nextConfig.turbopack?.rules,
|
|
125
|
+
"*.json": {
|
|
126
|
+
loaders: [{
|
|
127
|
+
loader: loaderPath,
|
|
128
|
+
options: loaderOptions
|
|
129
|
+
}],
|
|
130
|
+
as: "*.json"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
webpack(config, options) {
|
|
135
|
+
config.module ||= {};
|
|
136
|
+
config.module.rules ||= [];
|
|
137
|
+
config.module.rules.push({
|
|
138
|
+
test,
|
|
139
|
+
enforce: "pre",
|
|
140
|
+
use: [{
|
|
141
|
+
loader: loaderPath,
|
|
142
|
+
options: loaderOptions
|
|
143
|
+
}]
|
|
144
|
+
});
|
|
145
|
+
return nextConfig.webpack?.(config, options) ?? config;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
async createLoader(environment) {
|
|
150
|
+
const { createJsonLoader } = await import("../loader-BOYLUNfh.js").then((n) => n.n);
|
|
151
|
+
const core = this.core;
|
|
152
|
+
return createJsonLoader({ getCore: () => core }, environment === "vite" ? "json" : "js");
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
//#endregion
|
|
158
|
+
export { DataCollection, dataCollection, jsonLoader, yamlLoader };
|
|
159
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","names":["#onEmitHandler"],"sources":["../../src/collections/data.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { Configuration } from \"webpack\";\nimport { LoaderConfig, loaderHook } from \"@/plugins/loader\";\nimport type { TurbopackLoaderOptions } from \"next/dist/server/config-shared\";\nimport { asyncPipe } from \"@/utils/pipe\";\nimport { slash } from \"@/utils/code-generator\";\nimport { FileSystemCollection, FileSystemCollectionConfig } from \"./fs\";\nimport path from \"node:path\";\n\nexport interface DataTransformationContext {\n path: string;\n source: string;\n}\n\ninterface LoadersConfig {\n json?: boolean;\n yaml?: boolean;\n custom?: Record<string, LoaderConfig>;\n}\n\nexport interface DataCollectionConfig<Schema extends StandardSchemaV1 | undefined> extends Omit<\n FileSystemCollectionConfig,\n \"supportedFormats\"\n> {\n schema?: Schema;\n /**\n * Configurations for loaders to parse data files.\n *\n * By default, JSON and YAML are enabled.\n * */\n loaders?: LoadersConfig;\n}\n\nexport class DataCollection<\n Schema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined,\n> extends FileSystemCollection {\n schema?: Schema;\n /**\n * Transform data\n */\n readonly onLoad = asyncPipe<unknown, DataTransformationContext>();\n $inferInput: Schema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<Schema> : unknown =\n undefined as never;\n $inferOutput: Schema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<Schema> : unknown =\n undefined as never;\n\n constructor({ dir, files, loaders: _loadersConfig = {}, schema }: DataCollectionConfig<Schema>) {\n const loadersConfig: Record<string, LoaderConfig> = {\n ..._loadersConfig.custom,\n };\n if (_loadersConfig.json !== false) loadersConfig.json = jsonLoader();\n if (_loadersConfig.yaml !== false) loadersConfig.yaml = yamlLoader();\n\n super({ dir, files, supportedFormats: Object.keys(loadersConfig) });\n this.schema = schema;\n this.onServer.hook(({ core, server }) => {\n if (!server.watcher) return;\n\n server.watcher.on(\"all\", async (event, file) => {\n if (event === \"change\" || !this.hasFile(file)) return;\n\n await core.emit({\n filterCollection: (collection) => collection === this,\n filterWorkspace: () => false,\n write: true,\n });\n });\n });\n this.onEmit.pipe(this.#onEmitHandler.bind(this));\n this.pluginHook(loaderHook).loaders.push(...Object.values(loadersConfig));\n }\n\n #onEmitHandler: (typeof this)[\"onEmit\"][\"$inferHandler\"] = async (\n entries,\n { core, createCodeGenerator },\n ) => {\n entries.push(\n await createCodeGenerator(`${this.name}.ts`, async ({ codegen }) => {\n codegen.addNamedImport([\"dataStore\"], \"fuma-content/collections/data/runtime\");\n codegen.addNamespaceImport(\n \"Config\",\n codegen.formatImportPath(core.getOptions().configPath),\n true,\n );\n const base = slash(core._toRuntimePath(this.dir));\n let records = \"{\";\n const query = codegen.formatQuery({\n collection: this.name,\n workspace: core.getWorkspace()?.name,\n });\n\n for (const file of await this.getFiles()) {\n const fullPath = path.join(this.dir, file);\n const specifier = `${codegen.formatImportPath(fullPath)}?${query}`;\n const name = codegen.generateImportName();\n codegen.addNamedImport([`default as ${name}`], specifier);\n records += `\"${slash(file)}\": ${name},`;\n }\n records += \"}\";\n codegen.push(\n `export const ${this.name} = dataStore<typeof Config, \"${this.name}\">(\"${this.name}\", \"${base}\", ${records});`,\n );\n }),\n );\n return entries;\n };\n}\n\nexport function dataCollection<Schema extends StandardSchemaV1 | undefined = undefined>(\n config: DataCollectionConfig<Schema>,\n) {\n return new DataCollection(config);\n}\n\nexport function yamlLoader(): LoaderConfig {\n const test = /\\.yaml(\\?.+?)?$/;\n\n return {\n id: \"yaml\",\n test,\n configureNext(nextConfig) {\n const loaderPath = \"fuma-content/collections/yaml/loader-webpack\";\n const loaderOptions = this.getLoaderOptions();\n\n return {\n ...nextConfig,\n turbopack: {\n ...nextConfig.turbopack,\n rules: {\n ...nextConfig.turbopack?.rules,\n \"*.yaml\": {\n loaders: [\n {\n loader: loaderPath,\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: \"*.js\",\n },\n },\n },\n webpack(config: Configuration, options) {\n config.module ||= {};\n config.module.rules ||= [];\n config.module.rules.push({\n test,\n enforce: \"pre\",\n use: [\n {\n loader: loaderPath,\n options: loaderOptions,\n },\n ],\n });\n\n return nextConfig.webpack?.(config, options) ?? config;\n },\n };\n },\n async createLoader() {\n const { createYamlLoader } = await import(\"./yaml/loader\");\n const core = this.core;\n return createYamlLoader({\n getCore: () => core,\n });\n },\n };\n}\n\nexport function jsonLoader(): LoaderConfig {\n const test = /\\.json(\\?.+?)?$/;\n\n return {\n id: \"json\",\n test,\n configureNext(nextConfig) {\n const loaderPath = \"fuma-content/collections/json/loader-webpack\";\n const loaderOptions = this.getLoaderOptions();\n\n return {\n ...nextConfig,\n turbopack: {\n ...nextConfig.turbopack,\n rules: {\n ...nextConfig.turbopack?.rules,\n \"*.json\": {\n loaders: [\n {\n loader: loaderPath,\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: \"*.json\",\n },\n },\n },\n webpack(config: Configuration, options) {\n config.module ||= {};\n config.module.rules ||= [];\n config.module.rules.push({\n test,\n enforce: \"pre\",\n use: [\n {\n loader: loaderPath,\n options: loaderOptions,\n },\n ],\n });\n\n return nextConfig.webpack?.(config, options) ?? config;\n },\n };\n },\n async createLoader(environment) {\n const { createJsonLoader } = await import(\"./json/loader\");\n const core = this.core;\n return createJsonLoader(\n {\n getCore: () => core,\n },\n environment === \"vite\" ? \"json\" : \"js\",\n );\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/collections/fs.d.ts
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
-
import "../core-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import "../core-FjA_Xoho.js";
|
|
2
|
+
import { Collection } from "./index.js";
|
|
3
|
+
|
|
4
|
+
//#region src/collections/fs.d.ts
|
|
5
|
+
declare class FileSystemCollection extends Collection {
|
|
6
|
+
private matcher;
|
|
7
|
+
/**
|
|
8
|
+
* content directory (absolute)
|
|
9
|
+
*/
|
|
10
|
+
dir: string;
|
|
11
|
+
private readonly filesCache;
|
|
12
|
+
/** the glob patterns to match files in collection, this doesn't take `supportedFormats` into account. */
|
|
13
|
+
private readonly patterns;
|
|
14
|
+
readonly supportedFileFormats: string[] | undefined;
|
|
15
|
+
constructor(config: FileSystemCollectionConfig);
|
|
16
|
+
isFileSupported(filePath: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* get all included files, relative to `dir`.
|
|
19
|
+
*
|
|
20
|
+
* the result is cached.
|
|
21
|
+
*/
|
|
22
|
+
getFiles(): Promise<string[]>;
|
|
23
|
+
hasFile(filePath: string): boolean;
|
|
24
|
+
invalidateCache(): void;
|
|
25
|
+
}
|
|
26
|
+
interface FileSystemCollectionConfig {
|
|
27
|
+
/**
|
|
28
|
+
* Directory to scan
|
|
29
|
+
*/
|
|
30
|
+
dir: string;
|
|
31
|
+
/**
|
|
32
|
+
* what files to include/exclude (glob patterns)
|
|
33
|
+
*
|
|
34
|
+
* Include all files if not specified
|
|
35
|
+
*/
|
|
36
|
+
files?: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Restrict to a list of file extensions to include, e.g. `['js', 'ts']`.
|
|
39
|
+
*/
|
|
40
|
+
supportedFormats?: string[];
|
|
41
|
+
}
|
|
42
|
+
declare function fileSystemCollection(config: FileSystemCollectionConfig): FileSystemCollection;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { FileSystemCollection, FileSystemCollectionConfig, fileSystemCollection };
|
|
45
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","names":[],"sources":["../../src/collections/fs.ts"],"mappings":";;;;cAKa,oBAAA,SAA6B,UAAA;EAAA,QAChC,OAAA;;AADV;;EAKE,GAAA;EAAA,iBACiB,UAAA;EAkCH;EAAA,iBAhCG,QAAA;EAAA,SACR,oBAAA;cAEG,MAAA,EAAQ,0BAAA;EAmBpB,eAAA,CAAgB,QAAA;EA7BR;;;;;EAuCF,QAAA,CAAA,GAAQ,OAAA;EASd,OAAA,CAAQ,QAAA;EASR,eAAA,CAAA;AAAA;AAAA,UAKe,0BAAA;EAvBT;;;EA2BN,GAAA;EATA;;;AAKF;;EAWE,KAAA;EAXyC;;;EAgBzC,gBAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,MAAA,EAAQ,0BAAA,GAA0B,oBAAA"}
|
package/dist/collections/fs.js
CHANGED
|
@@ -1,3 +1,66 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Collection } from "./index.js";
|
|
2
|
+
import { t as createCache } from "../async-cache-DRmFaVGm.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import picomatch from "picomatch";
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
//#region src/collections/fs.ts
|
|
7
|
+
var FileSystemCollection = class extends Collection {
|
|
8
|
+
matcher;
|
|
9
|
+
/**
|
|
10
|
+
* content directory (absolute)
|
|
11
|
+
*/
|
|
12
|
+
dir;
|
|
13
|
+
filesCache = createCache();
|
|
14
|
+
/** the glob patterns to match files in collection, this doesn't take `supportedFormats` into account. */
|
|
15
|
+
patterns;
|
|
16
|
+
supportedFileFormats;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
super();
|
|
19
|
+
const { files, supportedFormats } = config;
|
|
20
|
+
this.dir = config.dir;
|
|
21
|
+
this.patterns = files ?? [supportedFormats ? `**/*.{${supportedFormats.join(",")}}` : `**/*`];
|
|
22
|
+
this.supportedFileFormats = supportedFormats;
|
|
23
|
+
this.onInit.hook(({ core }) => {
|
|
24
|
+
this.dir = path.resolve(core.getOptions().cwd, this.dir);
|
|
25
|
+
});
|
|
26
|
+
this.onServer.hook(({ server }) => {
|
|
27
|
+
if (!server.watcher) return;
|
|
28
|
+
server.watcher.add(this.dir);
|
|
29
|
+
server.watcher.on("all", (event, file) => {
|
|
30
|
+
if (event === "change" || !this.hasFile(file)) return;
|
|
31
|
+
this.filesCache.invalidate("");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
isFileSupported(filePath) {
|
|
36
|
+
if (!this.supportedFileFormats) return true;
|
|
37
|
+
return this.supportedFileFormats.some((format) => filePath.endsWith(`.${format}`));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* get all included files, relative to `dir`.
|
|
41
|
+
*
|
|
42
|
+
* the result is cached.
|
|
43
|
+
*/
|
|
44
|
+
async getFiles() {
|
|
45
|
+
return this.filesCache.cached("", async () => {
|
|
46
|
+
const { glob } = await import("tinyglobby");
|
|
47
|
+
return (await glob(this.patterns, { cwd: this.dir })).filter((v) => this.isFileSupported(v));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
hasFile(filePath) {
|
|
51
|
+
if (!this.isFileSupported(filePath)) return false;
|
|
52
|
+
const relativePath = path.relative(this.dir, filePath);
|
|
53
|
+
if (relativePath.startsWith(`..${path.sep}`)) return false;
|
|
54
|
+
return (this.matcher ??= picomatch(this.patterns))(relativePath);
|
|
55
|
+
}
|
|
56
|
+
invalidateCache() {
|
|
57
|
+
this.filesCache.invalidate("");
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
function fileSystemCollection(config) {
|
|
61
|
+
return new FileSystemCollection(config);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { FileSystemCollection, fileSystemCollection };
|
|
66
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","names":[],"sources":["../../src/collections/fs.ts"],"sourcesContent":["import picomatch from \"picomatch\";\nimport path from \"node:path\";\nimport { Collection } from \".\";\nimport { createCache } from \"@/utils/async-cache\";\n\nexport class FileSystemCollection extends Collection {\n private matcher: picomatch.Matcher | undefined;\n /**\n * content directory (absolute)\n */\n dir: string;\n private readonly filesCache = createCache<string[]>();\n /** the glob patterns to match files in collection, this doesn't take `supportedFormats` into account. */\n private readonly patterns: string[];\n readonly supportedFileFormats: string[] | undefined;\n\n constructor(config: FileSystemCollectionConfig) {\n super();\n const { files, supportedFormats } = config;\n this.dir = config.dir;\n this.patterns = files ?? [supportedFormats ? `**/*.{${supportedFormats.join(\",\")}}` : `**/*`];\n this.supportedFileFormats = supportedFormats;\n this.onInit.hook(({ core }) => {\n this.dir = path.resolve(core.getOptions().cwd, this.dir);\n });\n this.onServer.hook(({ server }) => {\n if (!server.watcher) return;\n server.watcher.add(this.dir);\n server.watcher.on(\"all\", (event, file) => {\n if (event === \"change\" || !this.hasFile(file)) return;\n this.filesCache.invalidate(\"\");\n });\n });\n }\n\n isFileSupported(filePath: string) {\n if (!this.supportedFileFormats) return true;\n return this.supportedFileFormats.some((format) => filePath.endsWith(`.${format}`));\n }\n\n /**\n * get all included files, relative to `dir`.\n *\n * the result is cached.\n */\n async getFiles() {\n return this.filesCache.cached(\"\", async () => {\n const { glob } = await import(\"tinyglobby\");\n\n const out = await glob(this.patterns, { cwd: this.dir });\n return out.filter((v) => this.isFileSupported(v));\n });\n }\n\n hasFile(filePath: string) {\n if (!this.isFileSupported(filePath)) return false;\n\n const relativePath = path.relative(this.dir, filePath);\n if (relativePath.startsWith(`..${path.sep}`)) return false;\n\n return (this.matcher ??= picomatch(this.patterns))(relativePath);\n }\n\n invalidateCache() {\n this.filesCache.invalidate(\"\");\n }\n}\n\nexport interface FileSystemCollectionConfig {\n /**\n * Directory to scan\n */\n dir: string;\n\n /**\n * what files to include/exclude (glob patterns)\n *\n * Include all files if not specified\n */\n files?: string[];\n\n /**\n * Restrict to a list of file extensions to include, e.g. `['js', 'ts']`.\n */\n supportedFormats?: string[];\n}\n\nexport function fileSystemCollection(config: FileSystemCollectionConfig) {\n return new FileSystemCollection(config);\n}\n"],"mappings":";;;;;;AAKA,IAAa,uBAAb,cAA0C,WAAW;CACnD,AAAQ;;;;CAIR;CACA,AAAiB,aAAa,aAAuB;;CAErD,AAAiB;CACjB,AAAS;CAET,YAAY,QAAoC;AAC9C,SAAO;EACP,MAAM,EAAE,OAAO,qBAAqB;AACpC,OAAK,MAAM,OAAO;AAClB,OAAK,WAAW,SAAS,CAAC,mBAAmB,SAAS,iBAAiB,KAAK,IAAI,CAAC,KAAK,OAAO;AAC7F,OAAK,uBAAuB;AAC5B,OAAK,OAAO,MAAM,EAAE,WAAW;AAC7B,QAAK,MAAM,KAAK,QAAQ,KAAK,YAAY,CAAC,KAAK,KAAK,IAAI;IACxD;AACF,OAAK,SAAS,MAAM,EAAE,aAAa;AACjC,OAAI,CAAC,OAAO,QAAS;AACrB,UAAO,QAAQ,IAAI,KAAK,IAAI;AAC5B,UAAO,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACxC,QAAI,UAAU,YAAY,CAAC,KAAK,QAAQ,KAAK,CAAE;AAC/C,SAAK,WAAW,WAAW,GAAG;KAC9B;IACF;;CAGJ,gBAAgB,UAAkB;AAChC,MAAI,CAAC,KAAK,qBAAsB,QAAO;AACvC,SAAO,KAAK,qBAAqB,MAAM,WAAW,SAAS,SAAS,IAAI,SAAS,CAAC;;;;;;;CAQpF,MAAM,WAAW;AACf,SAAO,KAAK,WAAW,OAAO,IAAI,YAAY;GAC5C,MAAM,EAAE,SAAS,MAAM,OAAO;AAG9B,WADY,MAAM,KAAK,KAAK,UAAU,EAAE,KAAK,KAAK,KAAK,CAAC,EAC7C,QAAQ,MAAM,KAAK,gBAAgB,EAAE,CAAC;IACjD;;CAGJ,QAAQ,UAAkB;AACxB,MAAI,CAAC,KAAK,gBAAgB,SAAS,CAAE,QAAO;EAE5C,MAAM,eAAe,KAAK,SAAS,KAAK,KAAK,SAAS;AACtD,MAAI,aAAa,WAAW,KAAK,KAAK,MAAM,CAAE,QAAO;AAErD,UAAQ,KAAK,YAAY,UAAU,KAAK,SAAS,EAAE,aAAa;;CAGlE,kBAAkB;AAChB,OAAK,WAAW,WAAW,GAAG;;;AAuBlC,SAAgB,qBAAqB,QAAoC;AACvE,QAAO,IAAI,qBAAqB,OAAO"}
|
|
@@ -1,2 +1,37 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { f as ServerContext, i as EmitEntry, l as PluginOption, m as AsyncPipe, r as EmitContext, t as Core, u as ResolvedConfig, v as AsyncHook, y as Hook } from "../core-FjA_Xoho.js";
|
|
2
|
+
|
|
3
|
+
//#region src/collections/index.d.ts
|
|
4
|
+
interface CollectionHookContext {
|
|
5
|
+
core: Core;
|
|
6
|
+
collection: Collection;
|
|
7
|
+
}
|
|
8
|
+
declare class Collection {
|
|
9
|
+
private readonly pluginHooks;
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* on config loaded/updated
|
|
13
|
+
*/
|
|
14
|
+
readonly onConfig: Hook<CollectionHookContext & {
|
|
15
|
+
config: ResolvedConfig;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Configure watch/dev server
|
|
19
|
+
*/
|
|
20
|
+
readonly onServer: Hook<CollectionHookContext & {
|
|
21
|
+
server: ServerContext;
|
|
22
|
+
}>;
|
|
23
|
+
readonly onInit: AsyncHook<CollectionHookContext>;
|
|
24
|
+
readonly onEmit: AsyncPipe<EmitEntry[], EmitContext>;
|
|
25
|
+
readonly plugins: PluginOption[];
|
|
26
|
+
pluginHook<T, Options>(hook: CollectionHook<T, Options>, options: Options): T;
|
|
27
|
+
pluginHook<T>(hook: CollectionHook<T>): T;
|
|
28
|
+
getPluginHook<T>(hook: CollectionHook<T>): T | undefined;
|
|
29
|
+
}
|
|
30
|
+
interface CollectionHook<T = unknown, Options = undefined> {
|
|
31
|
+
id: symbol;
|
|
32
|
+
create: (collection: Collection, options: Options) => T;
|
|
33
|
+
}
|
|
34
|
+
declare function defineCollectionHook<T, Options = undefined>(init: (collection: Collection, options: Options) => T): CollectionHook<T, Options>;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { Collection, CollectionHook, CollectionHookContext, defineCollectionHook };
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/collections/index.ts"],"mappings":";;;UAIiB,qBAAA;EACf,IAAA,EAAM,IAAA;EACN,UAAA,EAAY,UAAA;AAAA;AAAA,cAGD,UAAA;EAAA,iBACM,WAAA;EACjB,IAAA;EANM;;;EAAA,SAWG,QAAA,EAAgE,IAAA,CAAxD,qBAAA;YAA0C,cAAA;EAAA;EAPtC;;;EAAA,SAWZ,QAAA,EAA+D,IAAA,CAAvD,qBAAA;YAA0C,aAAA;EAAA;EAAA,SAClD,MAAA,EAAM,SAAA,CAAA,qBAAA;EAAA,SACN,MAAA,EAAM,SAAA,CAAA,SAAA,IAAA,WAAA;EAAA,SACN,OAAA,EAAS,YAAA;EAElB,UAAA,YAAA,CAAuB,IAAA,EAAM,cAAA,CAAe,CAAA,EAAG,OAAA,GAAU,OAAA,EAAS,OAAA,GAAU,CAAA;EAC5E,UAAA,GAAA,CAAc,IAAA,EAAM,cAAA,CAAe,CAAA,IAAK,CAAA;EAWxC,aAAA,GAAA,CAAiB,IAAA,EAAM,cAAA,CAAe,CAAA,IAAK,CAAA;AAAA;AAAA,UAK5B,cAAA;EACf,EAAA;EACA,MAAA,GAAS,UAAA,EAAY,UAAA,EAAY,OAAA,EAAS,OAAA,KAAY,CAAA;AAAA;AAAA,iBAGxC,oBAAA,wBAAA,CACd,IAAA,GAAO,UAAA,EAAY,UAAA,EAAY,OAAA,EAAS,OAAA,KAAY,CAAA,GACnD,cAAA,CAAe,CAAA,EAAG,OAAA"}
|
|
@@ -1,3 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as hook, r as asyncHook, t as asyncPipe } from "../pipe-CvCqOpXX.js";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
//#region src/collections/index.ts
|
|
4
|
+
var Collection = class {
|
|
5
|
+
pluginHooks = /* @__PURE__ */ new Map();
|
|
6
|
+
name = null;
|
|
7
|
+
/**
|
|
8
|
+
* on config loaded/updated
|
|
9
|
+
*/
|
|
10
|
+
onConfig = hook();
|
|
11
|
+
/**
|
|
12
|
+
* Configure watch/dev server
|
|
13
|
+
*/
|
|
14
|
+
onServer = hook();
|
|
15
|
+
onInit = asyncHook();
|
|
16
|
+
onEmit = asyncPipe();
|
|
17
|
+
plugins = [];
|
|
18
|
+
pluginHook(hook, options) {
|
|
19
|
+
let created = this.pluginHooks.get(hook.id);
|
|
20
|
+
if (created) return created;
|
|
21
|
+
created = hook.create(this, options);
|
|
22
|
+
this.pluginHooks.set(hook.id, created);
|
|
23
|
+
return created;
|
|
24
|
+
}
|
|
25
|
+
getPluginHook(hook) {
|
|
26
|
+
return this.pluginHooks.get(hook.id);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
function defineCollectionHook(init) {
|
|
30
|
+
return {
|
|
31
|
+
id: Symbol(),
|
|
32
|
+
create: init
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { Collection, defineCollectionHook };
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/collections/index.ts"],"sourcesContent":["import { Core, EmitContext, EmitEntry, PluginOption, ResolvedConfig, ServerContext } from \"@/core\";\nimport { asyncHook, hook } from \"@/utils/hook\";\nimport { asyncPipe } from \"@/utils/pipe\";\n\nexport interface CollectionHookContext {\n core: Core;\n collection: Collection;\n}\n\nexport class Collection {\n private readonly pluginHooks = new Map<symbol, unknown>();\n name = null as unknown as string;\n\n /**\n * on config loaded/updated\n */\n readonly onConfig = hook<CollectionHookContext & { config: ResolvedConfig }>();\n /**\n * Configure watch/dev server\n */\n readonly onServer = hook<CollectionHookContext & { server: ServerContext }>();\n readonly onInit = asyncHook<CollectionHookContext>();\n readonly onEmit = asyncPipe<EmitEntry[], EmitContext>();\n readonly plugins: PluginOption[] = [];\n\n pluginHook<T, Options>(hook: CollectionHook<T, Options>, options: Options): T;\n pluginHook<T>(hook: CollectionHook<T>): T;\n\n pluginHook<T, O>(hook: CollectionHook<T, O>, options?: O): T {\n let created = this.pluginHooks.get(hook.id) as T | undefined;\n if (created) return created;\n\n created = hook.create(this, options as O);\n this.pluginHooks.set(hook.id, created);\n return created;\n }\n\n getPluginHook<T>(hook: CollectionHook<T>): T | undefined {\n return this.pluginHooks.get(hook.id) as T | undefined;\n }\n}\n\nexport interface CollectionHook<T = unknown, Options = undefined> {\n id: symbol;\n create: (collection: Collection, options: Options) => T;\n}\n\nexport function defineCollectionHook<T, Options = undefined>(\n init: (collection: Collection, options: Options) => T,\n): CollectionHook<T, Options> {\n return {\n id: Symbol(),\n create: init,\n };\n}\n"],"mappings":";;;AASA,IAAa,aAAb,MAAwB;CACtB,AAAiB,8BAAc,IAAI,KAAsB;CACzD,OAAO;;;;CAKP,AAAS,WAAW,MAA0D;;;;CAI9E,AAAS,WAAW,MAAyD;CAC7E,AAAS,SAAS,WAAkC;CACpD,AAAS,SAAS,WAAqC;CACvD,AAAS,UAA0B,EAAE;CAKrC,WAAiB,MAA4B,SAAgB;EAC3D,IAAI,UAAU,KAAK,YAAY,IAAI,KAAK,GAAG;AAC3C,MAAI,QAAS,QAAO;AAEpB,YAAU,KAAK,OAAO,MAAM,QAAa;AACzC,OAAK,YAAY,IAAI,KAAK,IAAI,QAAQ;AACtC,SAAO;;CAGT,cAAiB,MAAwC;AACvD,SAAO,KAAK,YAAY,IAAI,KAAK,GAAG;;;AASxC,SAAgB,qBACd,MAC4B;AAC5B,QAAO;EACL,IAAI,QAAQ;EACZ,QAAQ;EACT"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "../../core-
|
|
2
|
-
import "../../
|
|
3
|
-
import {
|
|
1
|
+
import "../../core-FjA_Xoho.js";
|
|
2
|
+
import "../../load-from-file-CIYdu-B5.js";
|
|
3
|
+
import { WebpackLoader } from "../../plugins/loader/webpack.js";
|
|
4
4
|
|
|
5
5
|
//#region src/collections/json/loader-webpack.d.ts
|
|
6
6
|
declare const _default: WebpackLoader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-webpack.d.ts","names":[],"sources":["../../../src/collections/json/loader-webpack.ts"],"
|
|
1
|
+
{"version":3,"file":"loader-webpack.d.ts","names":[],"sources":["../../../src/collections/json/loader-webpack.ts"],"mappings":""}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import "../../validation-BvVvvLII.js";
|
|
3
|
-
import "../../loader-B4nQrRwA.js";
|
|
4
|
-
import "../../fs-CXzVd2Dp.js";
|
|
5
|
-
import "../../data-Cxsx5KPD.js";
|
|
1
|
+
import "../../validation-C3kXuveD.js";
|
|
6
2
|
import { createWebpackLoader } from "../../plugins/loader/webpack.js";
|
|
7
|
-
import "../../loader-
|
|
8
|
-
import { t as createJsonLoader } from "../../loader-
|
|
3
|
+
import "../../loader-UhlX4xbz.js";
|
|
4
|
+
import { t as createJsonLoader } from "../../loader-BOYLUNfh.js";
|
|
9
5
|
|
|
10
6
|
//#region src/collections/json/loader-webpack.ts
|
|
11
7
|
var loader_webpack_default = createWebpackLoader((core) => createJsonLoader(core, "json"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-webpack.js","names":[],"sources":["../../../src/collections/json/loader-webpack.ts"],"sourcesContent":["import { createWebpackLoader } from \"@/plugins/loader/webpack\";\nimport { createJsonLoader } from \"./loader\";\n\nexport default createWebpackLoader((core) => createJsonLoader(core, \"json\"));\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader-webpack.js","names":[],"sources":["../../../src/collections/json/loader-webpack.ts"],"sourcesContent":["import { createWebpackLoader } from \"@/plugins/loader/webpack\";\nimport { createJsonLoader } from \"./loader\";\n\nexport default createWebpackLoader((core) => createJsonLoader(core, \"json\"));\n"],"mappings":";;;;;;AAGA,6BAAe,qBAAqB,SAAS,iBAAiB,MAAM,OAAO,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "../../core-
|
|
2
|
-
import "../../
|
|
3
|
-
import {
|
|
1
|
+
import "../../core-FjA_Xoho.js";
|
|
2
|
+
import "../../load-from-file-CIYdu-B5.js";
|
|
3
|
+
import { WebpackLoader } from "../../plugins/loader/webpack.js";
|
|
4
4
|
|
|
5
5
|
//#region src/collections/mdx/loader-webpack.d.ts
|
|
6
6
|
declare const _default: WebpackLoader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-webpack.d.ts","names":[],"sources":["../../../src/collections/mdx/loader-webpack.ts"],"
|
|
1
|
+
{"version":3,"file":"loader-webpack.d.ts","names":[],"sources":["../../../src/collections/mdx/loader-webpack.ts"],"mappings":""}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import "../../
|
|
2
|
-
import "../../
|
|
3
|
-
import "../../loader-B4nQrRwA.js";
|
|
4
|
-
import "../../fs-CXzVd2Dp.js";
|
|
5
|
-
import "../../git-DnejL9r_.js";
|
|
6
|
-
import "../../mdx-Cw1nBJ0D.js";
|
|
1
|
+
import "../../validation-C3kXuveD.js";
|
|
2
|
+
import "../../fuma-matter-B4gT09gM.js";
|
|
7
3
|
import { createWebpackLoader } from "../../plugins/loader/webpack.js";
|
|
8
|
-
import "../../
|
|
9
|
-
import { t as createMdxLoader } from "../../loader-CnksfM7I.js";
|
|
4
|
+
import { t as createMdxLoader } from "../../loader-BT4fwLTJ.js";
|
|
10
5
|
|
|
11
6
|
//#region src/collections/mdx/loader-webpack.ts
|
|
12
7
|
var loader_webpack_default = createWebpackLoader(createMdxLoader);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-webpack.js","names":[],"sources":["../../../src/collections/mdx/loader-webpack.ts"],"sourcesContent":["import { createMdxLoader } from \"@/collections/mdx/loader\";\nimport { createWebpackLoader } from \"@/plugins/loader/webpack\";\n\nexport default createWebpackLoader(createMdxLoader);\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader-webpack.js","names":[],"sources":["../../../src/collections/mdx/loader-webpack.ts"],"sourcesContent":["import { createMdxLoader } from \"@/collections/mdx/loader\";\nimport { createWebpackLoader } from \"@/plugins/loader/webpack\";\n\nexport default createWebpackLoader(createMdxLoader);\n"],"mappings":";;;;;;AAGA,6BAAe,oBAAoB,gBAAgB"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import "../../core-
|
|
2
|
-
import "../../
|
|
3
|
-
import "
|
|
4
|
-
import "../../fs-CmwaaFyx.js";
|
|
5
|
-
import "../../store-D_PPrdRE.js";
|
|
6
|
-
import "../../file-store-Dm1SjuLg.js";
|
|
7
|
-
import { i as CompiledMDX } from "../../mdx-PaqRNZMS.js";
|
|
8
|
-
import { t as MDXStoreBrowserData } from "../../runtime-browser-B70WGxeQ.js";
|
|
9
|
-
import "../../git-n-9ddn78.js";
|
|
10
|
-
import "../../runtime-BUUHSFlR.js";
|
|
1
|
+
import "../../core-FjA_Xoho.js";
|
|
2
|
+
import { t as CompiledMDX } from "../../build-mdx-DRqbcE1d.js";
|
|
3
|
+
import { MDXStoreBrowserData } from "./runtime-browser.js";
|
|
11
4
|
import { ReactNode } from "react";
|
|
12
5
|
|
|
13
6
|
//#region src/collections/mdx/react.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","names":[],"sources":["../../../src/collections/mdx/react.ts"],"
|
|
1
|
+
{"version":3,"file":"react.d.ts","names":[],"sources":["../../../src/collections/mdx/react.ts"],"mappings":";;;;;;;;;AAkBA;;iBAAgB,WAAA,uBAAA,CACd,KAAA,EAAO,mBAAA,CAAoB,WAAA,EAAa,QAAA,eACxC,QAAA,GAAW,IAAA,EAAM,WAAA,CAAY,WAAA,IAAe,QAAA,KAAa,SAAA,GACxD,SAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as isPromiseLike } from "../../is-promise-like-DYHv0Yap.js";
|
|
1
2
|
import { createElement, lazy } from "react";
|
|
2
3
|
|
|
3
4
|
//#region src/collections/mdx/react.ts
|
|
@@ -20,7 +21,7 @@ function useRenderer(entry, renderFn) {
|
|
|
20
21
|
forceOnDemand: false,
|
|
21
22
|
renderJSX() {
|
|
22
23
|
const v = entry.preload();
|
|
23
|
-
if (!(
|
|
24
|
+
if (!isPromiseLike(v) && !this.forceOnDemand) return renderFn(v);
|
|
24
25
|
this.forceOnDemand = true;
|
|
25
26
|
return createElement(OnDemand);
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","names":[],"sources":["../../../src/collections/mdx/react.ts"],"sourcesContent":["import { ReactNode, lazy, createElement } from \"react\";\nimport { CompiledMDX } from \"./build-mdx\";\nimport { MDXStoreBrowserData } from \"./runtime-browser\";\n\nconst renderMap = new Map<\n string,\n {\n renderJSX: () => ReactNode;\n forceOnDemand: boolean;\n }\n>();\n\n/**\n * Renders content (loaded lazily).\n *\n * It is recommended to use with `<Suspense />`.\n */\nexport function useRenderer<Frontmatter, Attached>(\n entry: MDXStoreBrowserData<Frontmatter, Attached> | undefined,\n renderFn: (data: CompiledMDX<Frontmatter> & Attached) => ReactNode,\n): ReactNode {\n if (!entry) return null;\n const renderKey = `${entry._store.storeId}:${entry.id}`;\n let renderInfo = renderMap.get(renderKey);\n\n if (!renderInfo) {\n const OnDemand = lazy(async () => {\n const loaded = await entry.preload();\n return { default: () => renderFn(loaded) };\n });\n\n renderInfo = {\n forceOnDemand: false,\n renderJSX() {\n const v = entry.preload();\n if (!(
|
|
1
|
+
{"version":3,"file":"react.js","names":[],"sources":["../../../src/collections/mdx/react.ts"],"sourcesContent":["import { ReactNode, lazy, createElement } from \"react\";\nimport { CompiledMDX } from \"./build-mdx\";\nimport { MDXStoreBrowserData } from \"./runtime-browser\";\nimport { isPromiseLike } from \"@/utils/is-promise-like\";\n\nconst renderMap = new Map<\n string,\n {\n renderJSX: () => ReactNode;\n forceOnDemand: boolean;\n }\n>();\n\n/**\n * Renders content (loaded lazily).\n *\n * It is recommended to use with `<Suspense />`.\n */\nexport function useRenderer<Frontmatter, Attached>(\n entry: MDXStoreBrowserData<Frontmatter, Attached> | undefined,\n renderFn: (data: CompiledMDX<Frontmatter> & Attached) => ReactNode,\n): ReactNode {\n if (!entry) return null;\n const renderKey = `${entry._store.storeId}:${entry.id}`;\n let renderInfo = renderMap.get(renderKey);\n\n if (!renderInfo) {\n const OnDemand = lazy(async () => {\n const loaded = await entry.preload();\n return { default: () => renderFn(loaded) };\n });\n\n renderInfo = {\n forceOnDemand: false,\n renderJSX() {\n const v = entry.preload();\n if (!isPromiseLike(v) && !this.forceOnDemand) {\n return renderFn(v);\n }\n\n // ensure it won't unmount React lazy during re-renders\n this.forceOnDemand = true;\n return createElement(OnDemand);\n },\n };\n renderMap.set(renderKey, renderInfo);\n }\n\n return renderInfo.renderJSX();\n}\n"],"mappings":";;;;AAKA,MAAM,4BAAY,IAAI,KAMnB;;;;;;AAOH,SAAgB,YACd,OACA,UACW;AACX,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,YAAY,GAAG,MAAM,OAAO,QAAQ,GAAG,MAAM;CACnD,IAAI,aAAa,UAAU,IAAI,UAAU;AAEzC,KAAI,CAAC,YAAY;EACf,MAAM,WAAW,KAAK,YAAY;GAChC,MAAM,SAAS,MAAM,MAAM,SAAS;AACpC,UAAO,EAAE,eAAe,SAAS,OAAO,EAAE;IAC1C;AAEF,eAAa;GACX,eAAe;GACf,YAAY;IACV,MAAM,IAAI,MAAM,SAAS;AACzB,QAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,cAC7B,QAAO,SAAS,EAAE;AAIpB,SAAK,gBAAgB;AACrB,WAAO,cAAc,SAAS;;GAEjC;AACD,YAAU,IAAI,WAAW,WAAW;;AAGtC,QAAO,WAAW,WAAW"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
|
-
import "../../core-
|
|
2
|
-
import "
|
|
3
|
-
import "../../
|
|
4
|
-
import "
|
|
5
|
-
import "../../
|
|
6
|
-
import "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { C as GetCollectionConfig, S as Awaitable } from "../../core-FjA_Xoho.js";
|
|
2
|
+
import { MapCollectionStore } from "../runtime/store.js";
|
|
3
|
+
import { t as CompiledMDX } from "../../build-mdx-DRqbcE1d.js";
|
|
4
|
+
import { MDXCollection } from "../mdx.js";
|
|
5
|
+
import { t as AsyncCache } from "../../async-cache-BVuJiIDT.js";
|
|
6
|
+
import { WithGit } from "./runtime.js";
|
|
7
|
+
|
|
8
|
+
//#region src/collections/mdx/runtime-browser.d.ts
|
|
9
|
+
interface MDXStoreBrowserData<Frontmatter, Attached = unknown> {
|
|
10
|
+
id: string;
|
|
11
|
+
preload: () => Awaitable<CompiledMDX<Frontmatter> & Attached>;
|
|
12
|
+
_store: StoreContext;
|
|
13
|
+
}
|
|
14
|
+
interface StoreContext {
|
|
15
|
+
storeId: string;
|
|
16
|
+
}
|
|
17
|
+
interface StoreData {
|
|
18
|
+
preloaded: AsyncCache<CompiledMDX>;
|
|
19
|
+
}
|
|
20
|
+
type GetFrontmatter<Config, Name extends string> = GetCollectionConfig<Config, Name> extends MDXCollection ? GetCollectionConfig<Config, Name>["$inferFrontmatter"] : never;
|
|
21
|
+
declare const _internal_data: Map<string, StoreData>;
|
|
22
|
+
declare function mdxStoreBrowser<Config, Name extends string, Attached>(name: Name, _input: Record<string, () => Promise<unknown>>): MapCollectionStore<string, MDXStoreBrowserData<GetFrontmatter<Config, Name>, Attached>>;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { MDXStoreBrowserData, type WithGit, _internal_data, mdxStoreBrowser };
|
|
25
|
+
//# sourceMappingURL=runtime-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-browser.d.ts","names":[],"sources":["../../../src/collections/mdx/runtime-browser.ts"],"mappings":";;;;;;;;UAQiB,mBAAA;EACf,EAAA;EACA,OAAA,QAAe,SAAA,CAAU,WAAA,CAAY,WAAA,IAAe,QAAA;EACpD,MAAA,EAAQ,YAAA;AAAA;AAAA,UAGA,YAAA;EACR,OAAA;AAAA;AAAA,UAGQ,SAAA;EACR,SAAA,EAAW,UAAA,CAAW,WAAA;AAAA;AAAA,KAGnB,cAAA,gCACH,mBAAA,CAAoB,MAAA,EAAQ,IAAA,UAAc,aAAA,GACtC,mBAAA,CAAoB,MAAA,EAAQ,IAAA;AAAA,cAGrB,cAAA,EAAc,GAAA,SAAA,SAAA;AAAA,iBAEX,eAAA,uCAAA,CACd,IAAA,EAAM,IAAA,EACN,MAAA,EAAQ,MAAA,eAAqB,OAAA,aAC5B,kBAAA,SAA2B,mBAAA,CAAoB,cAAA,CAAe,MAAA,EAAQ,IAAA,GAAO,QAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { t as createCache } from "../../async-cache-
|
|
4
|
-
import {
|
|
3
|
+
import { t as createCache } from "../../async-cache-DRmFaVGm.js";
|
|
4
|
+
import { MapCollectionStore } from "../runtime/store.js";
|
|
5
5
|
|
|
6
6
|
//#region src/collections/mdx/runtime-browser.ts
|
|
7
7
|
const _internal_data = /* @__PURE__ */ new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-browser.js","names":[
|
|
1
|
+
{"version":3,"file":"runtime-browser.js","names":[],"sources":["../../../src/collections/mdx/runtime-browser.ts"],"sourcesContent":["\"use client\";\n\nimport type { Awaitable, GetCollectionConfig } from \"@/types\";\nimport { MapCollectionStore } from \"@/collections/runtime/store\";\nimport { type AsyncCache, createCache } from \"@/utils/async-cache\";\nimport type { CompiledMDX } from \"@/collections/mdx/build-mdx\";\nimport type { MDXCollection } from \"../mdx\";\n\nexport interface MDXStoreBrowserData<Frontmatter, Attached = unknown> {\n id: string;\n preload: () => Awaitable<CompiledMDX<Frontmatter> & Attached>;\n _store: StoreContext;\n}\n\ninterface StoreContext {\n storeId: string;\n}\n\ninterface StoreData {\n preloaded: AsyncCache<CompiledMDX>;\n}\n\ntype GetFrontmatter<Config, Name extends string> =\n GetCollectionConfig<Config, Name> extends MDXCollection\n ? GetCollectionConfig<Config, Name>[\"$inferFrontmatter\"]\n : never;\n\nexport const _internal_data = new Map<string, StoreData>();\n\nexport function mdxStoreBrowser<Config, Name extends string, Attached>(\n name: Name,\n _input: Record<string, () => Promise<unknown>>,\n): MapCollectionStore<string, MDXStoreBrowserData<GetFrontmatter<Config, Name>, Attached>> {\n const input = _input as Record<\n string,\n () => Promise<CompiledMDX<GetFrontmatter<Config, Name>> & Attached>\n >;\n const merged = new Map<string, MDXStoreBrowserData<GetFrontmatter<Config, Name>, Attached>>();\n function getStoreData(): StoreData {\n let store = _internal_data.get(name);\n if (store) return store;\n\n store = {\n preloaded: createCache(),\n };\n _internal_data.set(name, store);\n return store;\n }\n\n const context: StoreContext = {\n storeId: name,\n };\n\n for (const [key, value] of Object.entries(input)) {\n merged.set(key, {\n id: key,\n preload() {\n return getStoreData()\n .preloaded.$value<CompiledMDX<GetFrontmatter<Config, Name>> & Attached>()\n .cached(key, value);\n },\n _store: context,\n });\n }\n\n return new MapCollectionStore(merged);\n}\n\nexport type { WithGit } from \"./runtime\";\n"],"mappings":";;;;;;AA2BA,MAAa,iCAAiB,IAAI,KAAwB;AAE1D,SAAgB,gBACd,MACA,QACyF;CACzF,MAAM,QAAQ;CAId,MAAM,yBAAS,IAAI,KAA0E;CAC7F,SAAS,eAA0B;EACjC,IAAI,QAAQ,eAAe,IAAI,KAAK;AACpC,MAAI,MAAO,QAAO;AAElB,UAAQ,EACN,WAAW,aAAa,EACzB;AACD,iBAAe,IAAI,MAAM,MAAM;AAC/B,SAAO;;CAGT,MAAM,UAAwB,EAC5B,SAAS,MACV;AAED,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,QAAO,IAAI,KAAK;EACd,IAAI;EACJ,UAAU;AACR,UAAO,cAAc,CAClB,UAAU,QAA8D,CACxE,OAAO,KAAK,MAAM;;EAEvB,QAAQ;EACT,CAAC;AAGJ,QAAO,IAAI,mBAAmB,OAAO"}
|