fuma-content 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{async-cache-BM9Yf4Nw.js → async-cache-U87GzQTb.js} +1 -1
- package/dist/async-cache-U87GzQTb.js.map +1 -0
- package/dist/{build-mdx-C1PZsGp2.js → build-mdx-BZxE8t2a.js} +16 -11
- package/dist/build-mdx-BZxE8t2a.js.map +1 -0
- package/dist/build-mdx-LhpFasX-.js +4 -0
- package/dist/bun/index.d.ts +7 -4
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +25 -19
- package/dist/bun/index.js.map +1 -1
- package/dist/{bun-QKQnqgIi.js → bun-CBROq3I0.js} +3 -3
- package/dist/bun-CBROq3I0.js.map +1 -0
- package/dist/code-generator-CjC4EEXg.js +102 -0
- package/dist/code-generator-CjC4EEXg.js.map +1 -0
- package/dist/collections/data/runtime.d.ts +15 -0
- package/dist/collections/data/runtime.d.ts.map +1 -0
- package/dist/collections/{meta → data}/runtime.js +4 -4
- package/dist/collections/data/runtime.js.map +1 -0
- package/dist/collections/data.d.ts +47 -0
- package/dist/collections/data.d.ts.map +1 -0
- package/dist/collections/data.js +5 -0
- package/dist/collections/fs.d.ts +3 -0
- package/dist/collections/fs.js +3 -0
- package/dist/collections/index.d.ts +2 -2
- package/dist/collections/index.js +2 -15
- package/dist/collections/json/loader-webpack.d.ts +9 -0
- package/dist/collections/json/loader-webpack.d.ts.map +1 -0
- package/dist/collections/json/loader-webpack.js +15 -0
- package/dist/collections/json/loader-webpack.js.map +1 -0
- package/dist/collections/mdx/loader-webpack.d.ts +5 -5
- package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
- package/dist/collections/mdx/loader-webpack.js +11 -21
- package/dist/collections/mdx/loader-webpack.js.map +1 -1
- package/dist/collections/mdx/react.d.ts +22 -0
- package/dist/collections/mdx/react.d.ts.map +1 -0
- package/dist/collections/mdx/react.js +35 -0
- package/dist/collections/mdx/react.js.map +1 -0
- package/dist/collections/mdx/runtime-browser.d.ts +11 -45
- package/dist/collections/mdx/runtime-browser.js +6 -44
- package/dist/collections/mdx/runtime-browser.js.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.d.ts +16 -28
- package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
- package/dist/collections/mdx/runtime-dynamic.js +19 -23
- package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
- package/dist/collections/mdx/runtime.d.ts +10 -49
- package/dist/collections/mdx/runtime.js +2 -11
- package/dist/collections/mdx/runtime.js.map +1 -1
- package/dist/collections/mdx.d.ts +6 -2
- package/dist/collections/mdx.js +6 -246
- package/dist/collections/runtime/file-store.d.ts +4 -22
- package/dist/collections/runtime/file-store.js +15 -14
- package/dist/collections/runtime/file-store.js.map +1 -1
- package/dist/collections/runtime/store.d.ts +3 -3
- package/dist/collections/runtime/store.js +2 -2
- package/dist/collections/yaml/loader-webpack.d.ts +9 -0
- package/dist/collections/yaml/loader-webpack.d.ts.map +1 -0
- package/dist/collections/yaml/loader-webpack.js +15 -0
- package/dist/collections/yaml/loader-webpack.js.map +1 -0
- package/dist/collections-DNFRdCuB.js +98 -0
- package/dist/collections-DNFRdCuB.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/core-BO3b8jMg.d.ts +313 -0
- package/dist/core-BO3b8jMg.d.ts.map +1 -0
- package/dist/core-D5QHSKk6.js +223 -0
- package/dist/core-D5QHSKk6.js.map +1 -0
- package/dist/data-9h98oZwj.js +158 -0
- package/dist/data-9h98oZwj.js.map +1 -0
- package/dist/dynamic-CTYYdl7_.d.ts +33 -0
- package/dist/dynamic-CTYYdl7_.d.ts.map +1 -0
- package/dist/{dynamic-B40uAtdo.js → dynamic-DhKTOrIl.js} +8 -7
- package/dist/dynamic-DhKTOrIl.js.map +1 -0
- package/dist/dynamic.d.ts +3 -0
- package/dist/dynamic.js +3 -0
- package/dist/file-store-laO4IjvB.d.ts +21 -0
- package/dist/file-store-laO4IjvB.d.ts.map +1 -0
- package/dist/fs-D34Sztbh.d.ts +44 -0
- package/dist/fs-D34Sztbh.d.ts.map +1 -0
- package/dist/fs-WWbLA7Gx.js +66 -0
- package/dist/fs-WWbLA7Gx.js.map +1 -0
- package/dist/{fuma-matter-O4fA6nSx.js → fuma-matter-BuBO2w-p.js} +2 -2
- package/dist/fuma-matter-BuBO2w-p.js.map +1 -0
- package/dist/git-2CjUW3M5.d.ts +37 -0
- package/dist/git-2CjUW3M5.d.ts.map +1 -0
- package/dist/git-CQWA37-X.js +60 -0
- package/dist/git-CQWA37-X.js.map +1 -0
- package/dist/index-Da88Sj8w.d.ts +87 -0
- package/dist/index-Da88Sj8w.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/load-from-file-BZxc_BhC.js +3 -0
- package/dist/{load-from-file-1f4WaHsf.js → load-from-file-irx0JI6j.js} +5 -8
- package/dist/load-from-file-irx0JI6j.js.map +1 -0
- package/dist/loader-AIEwGc2f.js +9 -0
- package/dist/loader-BhXHF8vy.js +16 -0
- package/dist/loader-BhXHF8vy.js.map +1 -0
- package/dist/loader-BuR4gkKg.js +77 -0
- package/dist/loader-BuR4gkKg.js.map +1 -0
- package/dist/loader-BzQpSBvP.js +59 -0
- package/dist/loader-BzQpSBvP.js.map +1 -0
- package/dist/{loader-CXnMFuyE.js → loader-D6StkShK.js} +8 -7
- package/dist/loader-D6StkShK.js.map +1 -0
- package/dist/loader-DCK4RwOh.js +8 -0
- package/dist/loader-DwpOcxgh.js +17 -0
- package/dist/loader-DwpOcxgh.js.map +1 -0
- package/dist/loader-zsTVgQjO.js +8 -0
- package/dist/mdx-Dt9hirUu.d.ts +144 -0
- package/dist/mdx-Dt9hirUu.d.ts.map +1 -0
- package/dist/mdx-iZ2uP27Z.js +303 -0
- package/dist/mdx-iZ2uP27Z.js.map +1 -0
- package/dist/next/index.d.ts +6 -10
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +23 -31
- package/dist/next/index.js.map +1 -1
- package/dist/node/index.d.ts +8 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +10 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/loader.d.ts +5 -2
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +17 -14
- package/dist/node/loader.js.map +1 -1
- package/dist/{node-CGIIJIcs.js → node-2VZOh3P9.js} +7 -5
- package/dist/node-2VZOh3P9.js.map +1 -0
- package/dist/plugins/git.d.ts +3 -2
- package/dist/plugins/git.js +2 -61
- package/dist/plugins/json-schema.d.ts +26 -2
- package/dist/plugins/json-schema.d.ts.map +1 -0
- package/dist/plugins/json-schema.js +42 -51
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/loader/index.d.ts +4 -0
- package/dist/plugins/loader/index.js +3 -0
- package/dist/plugins/loader/webpack.d.ts +4 -0
- package/dist/plugins/loader/webpack.js +60 -0
- package/dist/plugins/loader/webpack.js.map +1 -0
- package/dist/runtime-HN-HSB0Z.d.ts +31 -0
- package/dist/runtime-HN-HSB0Z.d.ts.map +1 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts +29 -0
- package/dist/runtime-browser-BQEk7qjc.d.ts.map +1 -0
- package/dist/store-DiuGdV5M.d.ts +31 -0
- package/dist/store-DiuGdV5M.d.ts.map +1 -0
- package/dist/{store-0LQ2PlH6.js → store-IvpEBdxi.js} +4 -4
- package/dist/store-IvpEBdxi.js.map +1 -0
- package/dist/{validation-BOJKRAp5.js → validation-BvVvvLII.js} +11 -2
- package/dist/validation-BvVvvLII.js.map +1 -0
- package/dist/vite/index.d.ts +5 -15
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +24 -21
- package/dist/vite/index.js.map +1 -1
- package/dist/{vite-X-2Al8fq.js → vite-C1qXY47G.js} +4 -3
- package/dist/vite-C1qXY47G.js.map +1 -0
- package/package.json +51 -46
- package/dist/async-cache-BM9Yf4Nw.js.map +0 -1
- package/dist/build-D8A5ByFk.js +0 -42
- package/dist/build-D8A5ByFk.js.map +0 -1
- package/dist/build-mdx-C1PZsGp2.js.map +0 -1
- package/dist/build-mdx-DFndaVbS.js +0 -4
- package/dist/bun-QKQnqgIi.js.map +0 -1
- package/dist/code-generator-gPtrfZ6Q.js +0 -133
- package/dist/code-generator-gPtrfZ6Q.js.map +0 -1
- package/dist/collections/handlers/fs.d.ts +0 -2
- package/dist/collections/handlers/fs.js +0 -28
- package/dist/collections/handlers/fs.js.map +0 -1
- package/dist/collections/index.js.map +0 -1
- package/dist/collections/mdx/runtime-browser.d.ts.map +0 -1
- package/dist/collections/mdx/runtime.d.ts.map +0 -1
- package/dist/collections/mdx.js.map +0 -1
- package/dist/collections/meta/loader-webpack.d.ts +0 -9
- package/dist/collections/meta/loader-webpack.d.ts.map +0 -1
- package/dist/collections/meta/loader-webpack.js +0 -28
- package/dist/collections/meta/loader-webpack.js.map +0 -1
- package/dist/collections/meta/runtime.d.ts +0 -11
- package/dist/collections/meta/runtime.d.ts.map +0 -1
- package/dist/collections/meta/runtime.js.map +0 -1
- package/dist/collections/meta.d.ts +0 -2
- package/dist/collections/meta.js +0 -134
- package/dist/collections/meta.js.map +0 -1
- package/dist/collections/runtime/file-store.d.ts.map +0 -1
- package/dist/core-Bkh-SI_3.d.ts +0 -561
- package/dist/core-Bkh-SI_3.d.ts.map +0 -1
- package/dist/core-ZuoVBkeg.js +0 -170
- package/dist/core-ZuoVBkeg.js.map +0 -1
- package/dist/dynamic-B40uAtdo.js.map +0 -1
- package/dist/fuma-matter-O4fA6nSx.js.map +0 -1
- package/dist/load-from-file-1f4WaHsf.js.map +0 -1
- package/dist/load-from-file-BTNnBu6f.js +0 -3
- package/dist/loader-80abXEHx.js +0 -4
- package/dist/loader-BFhPyg3z.js +0 -4
- package/dist/loader-CXnMFuyE.js.map +0 -1
- package/dist/loader-gk94iHf5.js +0 -66
- package/dist/loader-gk94iHf5.js.map +0 -1
- package/dist/next/index.cjs +0 -502
- package/dist/node-CGIIJIcs.js.map +0 -1
- package/dist/pipe-5cnvE6KY.js +0 -31
- package/dist/pipe-5cnvE6KY.js.map +0 -1
- package/dist/plugins/git.js.map +0 -1
- package/dist/plugins/with-loader/index.d.ts +0 -2
- package/dist/plugins/with-loader/index.js +0 -28
- package/dist/plugins/with-loader/index.js.map +0 -1
- package/dist/plugins/with-loader/webpack.d.ts +0 -19
- package/dist/plugins/with-loader/webpack.d.ts.map +0 -1
- package/dist/plugins/with-loader/webpack.js +0 -43
- package/dist/plugins/with-loader/webpack.js.map +0 -1
- package/dist/store-0LQ2PlH6.js.map +0 -1
- package/dist/store-DEjYYF6a.d.ts +0 -31
- package/dist/store-DEjYYF6a.d.ts.map +0 -1
- package/dist/validation-BOJKRAp5.js.map +0 -1
- package/dist/vite-X-2Al8fq.js.map +0 -1
package/dist/plugins/git.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import "../core-BO3b8jMg.js";
|
|
2
|
+
import { a as gitHook, i as git, n as GitFileData, r as GitHook, t as GitClient } from "../git-2CjUW3M5.js";
|
|
3
|
+
export { GitClient, GitFileData, GitHook, git as default, gitHook };
|
package/dist/plugins/git.js
CHANGED
|
@@ -1,62 +1,3 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { x } from "tinyexec";
|
|
1
|
+
import { n as gitHook, t as git } from "../git-CQWA37-X.js";
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Add version control integration for Git.
|
|
8
|
-
* 1. Injects `creationDate` & `lastModified` properties to page exports.
|
|
9
|
-
*
|
|
10
|
-
* @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.
|
|
11
|
-
*/
|
|
12
|
-
function git(options = {}) {
|
|
13
|
-
const { filter = () => true } = options;
|
|
14
|
-
let client;
|
|
15
|
-
return {
|
|
16
|
-
name: "git",
|
|
17
|
-
config() {
|
|
18
|
-
const { workspace } = this.core.getOptions();
|
|
19
|
-
client = createGitClient(workspace ? path.resolve(workspace.dir) : process.cwd());
|
|
20
|
-
},
|
|
21
|
-
collection(collection) {
|
|
22
|
-
if (!filter(collection.name)) return;
|
|
23
|
-
const handler = collection.handlers["version-control"];
|
|
24
|
-
if (!handler) return;
|
|
25
|
-
return handler.client({ client });
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function createGitClient(cwd) {
|
|
30
|
-
const cache = createCache();
|
|
31
|
-
function mapDate(out) {
|
|
32
|
-
if (out.exitCode !== 0) return null;
|
|
33
|
-
const date = new Date(out.stdout);
|
|
34
|
-
return Number.isNaN(date.getTime()) ? null : date;
|
|
35
|
-
}
|
|
36
|
-
return { async getFileData({ filePath }) {
|
|
37
|
-
return cache.cached(filePath, async () => {
|
|
38
|
-
const relativePath = path.relative(cwd, filePath);
|
|
39
|
-
const [mod, create] = await Promise.all([x("git", [
|
|
40
|
-
"log",
|
|
41
|
-
"-1",
|
|
42
|
-
"--pretty=%ai",
|
|
43
|
-
relativePath
|
|
44
|
-
], { nodeOptions: { cwd } }), x("git", [
|
|
45
|
-
"log",
|
|
46
|
-
"--diff-filter=A",
|
|
47
|
-
"--follow",
|
|
48
|
-
"--format=%ai",
|
|
49
|
-
"-1",
|
|
50
|
-
relativePath
|
|
51
|
-
], { nodeOptions: { cwd } })]);
|
|
52
|
-
return {
|
|
53
|
-
lastModified: mapDate(mod),
|
|
54
|
-
creationDate: mapDate(create)
|
|
55
|
-
};
|
|
56
|
-
});
|
|
57
|
-
} };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
//#endregion
|
|
61
|
-
export { git as default };
|
|
62
|
-
//# sourceMappingURL=git.js.map
|
|
3
|
+
export { git as default, gitHook };
|
|
@@ -1,2 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { E as Awaitable, h as CollectionHook } from "../core-BO3b8jMg.js";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/json-schema.d.ts
|
|
4
|
+
interface JSONSchemaOptions {
|
|
5
|
+
/**
|
|
6
|
+
* insert `$schema` field to JSON files on creation.
|
|
7
|
+
*
|
|
8
|
+
* @defaultValue false
|
|
9
|
+
*/
|
|
10
|
+
insert?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* create JSON schema
|
|
13
|
+
*/
|
|
14
|
+
create?: () => Awaitable<object | undefined>;
|
|
15
|
+
}
|
|
16
|
+
interface JSONSchemaHook {
|
|
17
|
+
getSchemaPath: () => string;
|
|
18
|
+
create?: () => Awaitable<object | undefined>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate JSON schemas locally for collection schemas.
|
|
22
|
+
*/
|
|
23
|
+
declare const jsonSchemaHook: CollectionHook<JSONSchemaHook, JSONSchemaOptions>;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { JSONSchemaHook, JSONSchemaOptions, jsonSchemaHook };
|
|
26
|
+
//# sourceMappingURL=json-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","names":[],"sources":["../../src/plugins/json-schema.ts"],"sourcesContent":[],"mappings":";;;UAMiB,iBAAA;;AAAjB;AAcA;AAQA;;EAA2B,MAAA,CAAA,EAAA,OAAA;EAAA;;;iBAXV;;UAGA,cAAA;;iBAEA;;;;;cAMJ,gBAAc,eAAA,gBAAA"}
|
|
@@ -1,61 +1,52 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { n as defineCollectionHook } from "../collections-DNFRdCuB.js";
|
|
2
|
+
import { t as FileSystemCollection } from "../fs-WWbLA7Gx.js";
|
|
2
3
|
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
3
5
|
|
|
4
6
|
//#region src/plugins/json-schema.ts
|
|
5
7
|
/**
|
|
6
|
-
* Generate JSON schemas locally for collection schemas
|
|
7
|
-
*
|
|
8
|
-
* note: **it only works with Zod**
|
|
8
|
+
* Generate JSON schemas locally for collection schemas.
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
name: "json-schema",
|
|
16
|
-
configureServer(server) {
|
|
17
|
-
const { outDir } = this.core.getOptions();
|
|
18
|
-
if (!server.watcher || !insert) return;
|
|
19
|
-
server.watcher.on("add", async (file) => {
|
|
20
|
-
const match = this.core.getCollections().find((collection) => {
|
|
21
|
-
const handler = collection.handlers.fs;
|
|
22
|
-
if (!handler) return false;
|
|
23
|
-
return handler.hasFile(file);
|
|
24
|
-
});
|
|
25
|
-
if (!match) return;
|
|
26
|
-
let obj;
|
|
27
|
-
try {
|
|
28
|
-
const content = (await fs.readFile(file)).toString();
|
|
29
|
-
obj = content.length > 0 ? JSON.parse(content) : {};
|
|
30
|
-
} catch {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if ("$schema" in obj) return;
|
|
34
|
-
const schemaPath = path.join(outDir, getSchemaPath(parent ? `${parent.name}.meta` : match.name));
|
|
35
|
-
const updated = {
|
|
36
|
-
$schema: path.relative(path.dirname(file), schemaPath),
|
|
37
|
-
...obj
|
|
38
|
-
};
|
|
39
|
-
await fs.writeFile(file, JSON.stringify(updated, null, 2));
|
|
40
|
-
});
|
|
41
|
-
},
|
|
42
|
-
async emit() {
|
|
43
|
-
const files = [];
|
|
44
|
-
for (const collection of this.core.getCollections()) {
|
|
45
|
-
const handler = collection.handlers["json-schema"];
|
|
46
|
-
if (!handler) continue;
|
|
47
|
-
const jsonSchema$1 = await handler.create();
|
|
48
|
-
if (!jsonSchema$1) continue;
|
|
49
|
-
files.push({
|
|
50
|
-
path: getSchemaPath(collection.name),
|
|
51
|
-
content: JSON.stringify(jsonSchema$1, null, 2)
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
return files;
|
|
10
|
+
const jsonSchemaHook = defineCollectionHook((collection, { insert = false, create }) => {
|
|
11
|
+
const hook = {
|
|
12
|
+
create,
|
|
13
|
+
getSchemaPath() {
|
|
14
|
+
return `json-schema/${collection.name}.json`;
|
|
55
15
|
}
|
|
56
16
|
};
|
|
57
|
-
}
|
|
17
|
+
collection.onServer.hook(({ core, server }) => {
|
|
18
|
+
const { outDir } = core.getOptions();
|
|
19
|
+
if (!server.watcher || !insert || !(collection instanceof FileSystemCollection)) return;
|
|
20
|
+
server.watcher.on("add", async (file) => {
|
|
21
|
+
if (!collection.hasFile(file) || !file.endsWith(".json")) return;
|
|
22
|
+
let obj;
|
|
23
|
+
try {
|
|
24
|
+
const content = (await fs.readFile(file)).toString();
|
|
25
|
+
obj = content.length > 0 ? JSON.parse(content) : {};
|
|
26
|
+
} catch {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if ("$schema" in obj) return;
|
|
30
|
+
const schemaPath = path.join(outDir, hook.getSchemaPath());
|
|
31
|
+
const updated = {
|
|
32
|
+
$schema: path.relative(path.dirname(file), schemaPath),
|
|
33
|
+
...obj
|
|
34
|
+
};
|
|
35
|
+
await fs.writeFile(file, JSON.stringify(updated, null, 2));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
collection.onEmit.pipe(async (entries) => {
|
|
39
|
+
const jsonSchema = await hook.create?.();
|
|
40
|
+
if (!jsonSchema) return entries;
|
|
41
|
+
entries.push({
|
|
42
|
+
path: hook.getSchemaPath(),
|
|
43
|
+
content: JSON.stringify(jsonSchema, null, 2)
|
|
44
|
+
});
|
|
45
|
+
return entries;
|
|
46
|
+
});
|
|
47
|
+
return hook;
|
|
48
|
+
});
|
|
58
49
|
|
|
59
50
|
//#endregion
|
|
60
|
-
export {
|
|
51
|
+
export { jsonSchemaHook };
|
|
61
52
|
//# sourceMappingURL=json-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","names":["
|
|
1
|
+
{"version":3,"file":"json-schema.js","names":["hook: JSONSchemaHook","obj: object"],"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,MAAMA,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,IAAIC;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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "../../core-BO3b8jMg.js";
|
|
2
|
+
import "../../dynamic-CTYYdl7_.js";
|
|
3
|
+
import { a as LoaderInput, c as loaderPlugin, i as LoaderHook, n as Loader, o as LoaderOutput, r as LoaderConfig, s as loaderHook, t as CompilerOptions } from "../../index-Da88Sj8w.js";
|
|
4
|
+
export { CompilerOptions, Loader, LoaderConfig, LoaderHook, LoaderInput, LoaderOutput, loaderHook, loaderPlugin };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { t as createDynamicCore } from "../../dynamic-DhKTOrIl.js";
|
|
2
|
+
import { t as Core } from "../../core-D5QHSKk6.js";
|
|
3
|
+
import { t as ValidationError } from "../../validation-BvVvvLII.js";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { parse } from "node:querystring";
|
|
6
|
+
|
|
7
|
+
//#region src/plugins/loader/webpack.ts
|
|
8
|
+
const cachedCores = /* @__PURE__ */ new Map();
|
|
9
|
+
function initDynamicCore({ configPath, isDev, outDir }) {
|
|
10
|
+
const key = `${configPath}:${isDev}:${outDir}`;
|
|
11
|
+
let res = cachedCores.get(key);
|
|
12
|
+
if (res) return res;
|
|
13
|
+
res = createDynamicCore({
|
|
14
|
+
core: new Core({
|
|
15
|
+
configPath,
|
|
16
|
+
outDir
|
|
17
|
+
}),
|
|
18
|
+
compileMode: "skip",
|
|
19
|
+
mode: isDev ? "dev" : "production"
|
|
20
|
+
});
|
|
21
|
+
cachedCores.set(key, res);
|
|
22
|
+
return res;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Note: need to handle the `test` regex in Webpack config instead.
|
|
26
|
+
*/
|
|
27
|
+
function createWebpackLoader(loaderFactory) {
|
|
28
|
+
let loader;
|
|
29
|
+
async function asyncLoader(source, callback) {
|
|
30
|
+
const options = this.getOptions();
|
|
31
|
+
this.cacheable(true);
|
|
32
|
+
this.addDependency(options.absoluteCompiledConfigPath);
|
|
33
|
+
if (!loader) loader = loaderFactory(initDynamicCore(options));
|
|
34
|
+
try {
|
|
35
|
+
const result = await loader.load({
|
|
36
|
+
filePath: this.resourcePath,
|
|
37
|
+
query: parse(this.resourceQuery.slice(1)),
|
|
38
|
+
getSource() {
|
|
39
|
+
return source;
|
|
40
|
+
},
|
|
41
|
+
development: this.mode === "development",
|
|
42
|
+
compiler: this
|
|
43
|
+
});
|
|
44
|
+
if (result === null) callback(void 0, source);
|
|
45
|
+
else callback(void 0, result.code, result.map);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
if (error instanceof ValidationError) return callback(new Error(await error.toStringFormatted()));
|
|
48
|
+
if (!(error instanceof Error)) throw error;
|
|
49
|
+
error.message = `${path.relative(this.context, this.resourcePath)}:${error.name}: ${error.message}`;
|
|
50
|
+
callback(error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return function loader$1(source) {
|
|
54
|
+
return asyncLoader.call(this, source, this.async());
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { createWebpackLoader };
|
|
60
|
+
//# sourceMappingURL=webpack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack.js","names":["loader: Loader | undefined","loader"],"sources":["../../../src/plugins/loader/webpack.ts"],"sourcesContent":["import { parse } from \"node:querystring\";\nimport { ValidationError } from \"@/utils/validation\";\nimport path from \"node:path\";\nimport { Core } from \"@/core\";\nimport { createDynamicCore, type DynamicCore } from \"@/dynamic\";\nimport type { LoaderContext } from \"webpack\";\nimport type { Loader } from \"@/plugins/loader\";\n\nexport interface WebpackLoaderOptions {\n absoluteCompiledConfigPath: string;\n configPath: string;\n outDir: string;\n isDev: boolean;\n}\n\nexport type WebpackLoader = (this: LoaderContext<WebpackLoaderOptions>, source: string) => void;\n\nconst cachedCores = new Map<string, DynamicCore>();\n\nfunction initDynamicCore({ configPath, isDev, outDir }: WebpackLoaderOptions) {\n const key = `${configPath}:${isDev}:${outDir}`;\n let res = cachedCores.get(key);\n if (res) return res;\n\n res = createDynamicCore({\n core: new Core({ configPath, outDir }),\n compileMode: \"skip\",\n mode: isDev ? \"dev\" : \"production\",\n });\n cachedCores.set(key, res);\n return res;\n}\n\n/**\n * Note: need to handle the `test` regex in Webpack config instead.\n */\nexport function createWebpackLoader(loaderFactory: (core: DynamicCore) => Loader): WebpackLoader {\n let loader: Loader | undefined;\n\n async function asyncLoader(\n this: LoaderContext<WebpackLoaderOptions>,\n source: string,\n callback: LoaderContext<WebpackLoaderOptions>[\"callback\"],\n ) {\n const options = this.getOptions();\n this.cacheable(true);\n this.addDependency(options.absoluteCompiledConfigPath);\n\n if (!loader) {\n const core = initDynamicCore(options);\n loader = loaderFactory(core);\n }\n\n try {\n const result = await loader.load({\n filePath: this.resourcePath,\n query: parse(this.resourceQuery.slice(1)),\n getSource() {\n return source;\n },\n development: this.mode === \"development\",\n compiler: this,\n });\n\n if (result === null) {\n callback(undefined, source);\n } else {\n callback(undefined, result.code, result.map as string);\n }\n } catch (error) {\n if (error instanceof ValidationError) {\n return callback(new Error(await error.toStringFormatted()));\n }\n\n if (!(error instanceof Error)) throw error;\n\n const fpath = path.relative(this.context, this.resourcePath);\n error.message = `${fpath}:${error.name}: ${error.message}`;\n callback(error);\n }\n }\n\n return function loader(source) {\n return asyncLoader.call(this, source, this.async());\n };\n}\n"],"mappings":";;;;;;;AAiBA,MAAM,8BAAc,IAAI,KAA0B;AAElD,SAAS,gBAAgB,EAAE,YAAY,OAAO,UAAgC;CAC5E,MAAM,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG;CACtC,IAAI,MAAM,YAAY,IAAI,IAAI;AAC9B,KAAI,IAAK,QAAO;AAEhB,OAAM,kBAAkB;EACtB,MAAM,IAAI,KAAK;GAAE;GAAY;GAAQ,CAAC;EACtC,aAAa;EACb,MAAM,QAAQ,QAAQ;EACvB,CAAC;AACF,aAAY,IAAI,KAAK,IAAI;AACzB,QAAO;;;;;AAMT,SAAgB,oBAAoB,eAA6D;CAC/F,IAAIA;CAEJ,eAAe,YAEb,QACA,UACA;EACA,MAAM,UAAU,KAAK,YAAY;AACjC,OAAK,UAAU,KAAK;AACpB,OAAK,cAAc,QAAQ,2BAA2B;AAEtD,MAAI,CAAC,OAEH,UAAS,cADI,gBAAgB,QAAQ,CACT;AAG9B,MAAI;GACF,MAAM,SAAS,MAAM,OAAO,KAAK;IAC/B,UAAU,KAAK;IACf,OAAO,MAAM,KAAK,cAAc,MAAM,EAAE,CAAC;IACzC,YAAY;AACV,YAAO;;IAET,aAAa,KAAK,SAAS;IAC3B,UAAU;IACX,CAAC;AAEF,OAAI,WAAW,KACb,UAAS,QAAW,OAAO;OAE3B,UAAS,QAAW,OAAO,MAAM,OAAO,IAAc;WAEjD,OAAO;AACd,OAAI,iBAAiB,gBACnB,QAAO,SAAS,IAAI,MAAM,MAAM,MAAM,mBAAmB,CAAC,CAAC;AAG7D,OAAI,EAAE,iBAAiB,OAAQ,OAAM;AAGrC,SAAM,UAAU,GADF,KAAK,SAAS,KAAK,SAAS,KAAK,aAAa,CACnC,GAAG,MAAM,KAAK,IAAI,MAAM;AACjD,YAAS,MAAM;;;AAInB,QAAO,SAASC,SAAO,QAAQ;AAC7B,SAAO,YAAY,KAAK,MAAM,QAAQ,KAAK,OAAO,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { D as GetCollectionConfig } from "./core-BO3b8jMg.js";
|
|
2
|
+
import { t as FileCollectionStore } from "./file-store-laO4IjvB.js";
|
|
3
|
+
import { a as ExtractedReference, i as CompiledMDX, t as MDXCollection } from "./mdx-Dt9hirUu.js";
|
|
4
|
+
import { n as GitFileData } from "./git-2CjUW3M5.js";
|
|
5
|
+
|
|
6
|
+
//#region src/collections/mdx/runtime.d.ts
|
|
7
|
+
interface MDXStoreData<Frontmatter, Attached = unknown> {
|
|
8
|
+
id: string;
|
|
9
|
+
compiled: CompiledMDX<Frontmatter> & Attached;
|
|
10
|
+
}
|
|
11
|
+
type GetFrontmatter<Config, Name extends string> = GetCollectionConfig<Config, Name> extends MDXCollection ? GetCollectionConfig<Config, Name>["$inferFrontmatter"] : never;
|
|
12
|
+
declare function mdxStore<Config, Name extends string, Attached>(_name: Name, base: string, _input: Record<string, unknown>): FileCollectionStore<MDXStoreData<GetFrontmatter<Config, Name>, Attached>>;
|
|
13
|
+
interface MDXStoreLazyData<Frontmatter, Attached> {
|
|
14
|
+
id: string;
|
|
15
|
+
frontmatter: Frontmatter;
|
|
16
|
+
load: () => Promise<CompiledMDX<Frontmatter> & Attached>;
|
|
17
|
+
}
|
|
18
|
+
declare function mdxStoreLazy<Config, Name extends string, Attached>(_name: Name, base: string, _input: {
|
|
19
|
+
head: Record<string, unknown>;
|
|
20
|
+
body: Record<string, () => Promise<unknown>>;
|
|
21
|
+
}): FileCollectionStore<MDXStoreLazyData<GetFrontmatter<Config, Name>, Attached>>;
|
|
22
|
+
interface WithExtractedReferences {
|
|
23
|
+
/**
|
|
24
|
+
* extracted references (e.g. hrefs, paths), useful for analyzing relationships between pages.
|
|
25
|
+
*/
|
|
26
|
+
extractedReferences: ExtractedReference[];
|
|
27
|
+
}
|
|
28
|
+
type WithGit = GitFileData;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { mdxStore as a, WithGit as i, MDXStoreLazyData as n, mdxStoreLazy as o, WithExtractedReferences as r, MDXStoreData as t };
|
|
31
|
+
//# sourceMappingURL=runtime-HN-HSB0Z.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-HN-HSB0Z.d.ts","names":[],"sources":["../src/collections/mdx/runtime.ts"],"sourcesContent":[],"mappings":";;;;;;AAOiB,UAAA,YAAY,CAAA,WAAA,EAAA,WAAA,OAAA,CAAA,CAAA;EAEL,EAAA,EAAA,MAAA;EAAZ,QAAA,EAAA,WAAA,CAAY,WAAZ,CAAA,GAA2B,QAA3B;;KAGP,cAH0C,CAAA,MAAA,EAAA,aAAA,MAAA,CAAA,GAI7C,mBAJ6C,CAIzB,MAJyB,EAIjB,IAJiB,CAAA,SAIH,aAJG,GAKzC,mBALyC,CAKrB,MALqB,EAKb,IALa,CAAA,CAAA,mBAAA,CAAA,GAAA,KAAA;AAG1C,iBAKW,QALG,CAAA,MAAA,EAAA,aAAA,MAAA,EAAA,QAAA,CAAA,CAAA,KAAA,EAMV,IANU,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAQT,MARS,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAShB,mBATgB,CASI,YATJ,CASiB,cATjB,CASgC,MAThC,EASwC,IATxC,CAAA,EAS+C,QAT/C,CAAA,CAAA;AACG,UAsBL,gBAtBK,CAAA,WAAA,EAAA,QAAA,CAAA,CAAA;EAAQ,EAAA,EAAA,MAAA;EAA5B,WAAA,EAwBa,WAxBb;EAA0C,IAAA,EAAA,GAAA,GAyB9B,OAzB8B,CAyBtB,WAzBsB,CAyBV,WAzBU,CAAA,GAyBK,QAzBL,CAAA;;AACV,iBA2BlB,YA3BkB,CAAA,MAAA,EAAA,aAAA,MAAA,EAAA,QAAA,CAAA,CAAA,KAAA,EA4BzB,IA5ByB,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA;EAA5B,IAAA,EA+BI,MA/BJ,CAAA,MAAA,EAAA,OAAA,CAAA;EAAmB,IAAA,EAgCf,MAhCe,CAAA,MAAA,EAAA,GAAA,GAgCM,OAhCN,CAAA,OAAA,CAAA,CAAA;AAGzB,CAAA,CAAA,EA+BG,mBA/BqB,CA+BD,gBA/BC,CA+BgB,cA/BhB,CA+B+B,MA/B/B,EA+BuC,IA/BvC,CAAA,EA+B8C,QA/B9C,CAAA,CAAA;AACf,UAgDQ,uBAAA,CAhDR;EAEC;;;EAC0B,mBAAA,EAiDb,kBAjDa,EAAA;;AAAb,KAoDX,OAAA,GAAU,WApDC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { D as GetCollectionConfig, E as Awaitable } from "./core-BO3b8jMg.js";
|
|
2
|
+
import { n as MapCollectionStore } from "./store-DiuGdV5M.js";
|
|
3
|
+
import { i as CompiledMDX, t as MDXCollection } from "./mdx-Dt9hirUu.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/async-cache.d.ts
|
|
6
|
+
interface AsyncCache<V> {
|
|
7
|
+
cached: (key: string, fn: () => V | Promise<V>) => V | Promise<V>;
|
|
8
|
+
$value: <T>() => AsyncCache<T>;
|
|
9
|
+
invalidate: (key: string) => void;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/collections/mdx/runtime-browser.d.ts
|
|
13
|
+
interface MDXStoreBrowserData<Frontmatter, Attached = unknown> {
|
|
14
|
+
id: string;
|
|
15
|
+
preload: () => Awaitable<CompiledMDX<Frontmatter> & Attached>;
|
|
16
|
+
_store: StoreContext;
|
|
17
|
+
}
|
|
18
|
+
interface StoreContext {
|
|
19
|
+
storeId: string;
|
|
20
|
+
}
|
|
21
|
+
interface StoreData {
|
|
22
|
+
preloaded: AsyncCache<CompiledMDX>;
|
|
23
|
+
}
|
|
24
|
+
type GetFrontmatter<Config, Name extends string> = GetCollectionConfig<Config, Name> extends MDXCollection ? GetCollectionConfig<Config, Name>["$inferFrontmatter"] : never;
|
|
25
|
+
declare const _internal_data: Map<string, StoreData>;
|
|
26
|
+
declare function mdxStoreBrowser<Config, Name extends string, Attached>(name: Name, _input: Record<string, () => Promise<unknown>>): MapCollectionStore<string, MDXStoreBrowserData<GetFrontmatter<Config, Name>, Attached>>;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { _internal_data as n, mdxStoreBrowser as r, MDXStoreBrowserData as t };
|
|
29
|
+
//# sourceMappingURL=runtime-browser-BQEk7qjc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-browser-BQEk7qjc.d.ts","names":[],"sources":["../src/utils/async-cache.ts","../src/collections/mdx/runtime-browser.ts"],"sourcesContent":[],"mappings":";;;;;UAAiB;kCACiB,IAAI,QAAQ,OAAO,IAAI,QAAQ;mBAC9C,WAAW;;;;;AAFb,UCQA,mBDRU,CAAA,WAAA,EAAA,WAAA,OAAA,CAAA,CAAA;EACO,EAAA,EAAA,MAAA;EAAY,OAAA,EAAA,GAAA,GCS7B,SDT6B,CCSnB,WDTmB,CCSP,WDTO,CAAA,GCSQ,QDTR,CAAA;EAAR,MAAA,ECU5B,YDV4B;;UCa5B,YAAA,CDbuD;EAAR,OAAA,EAAA,MAAA;;UCiB/C,SAAA,CDhBS;EAAU,SAAA,ECiBhB,UDjBgB,CCiBL,WDjBK,CAAA;;KCoBxB,8CACH,oBAAoB,QAAQ,cAAc,gBACtC,oBAAoB,QAAQ;cAGrB,gBAAc,YAAA;AAnBV,iBAqBD,eArBoB,CAAA,MAAA,EAAA,aAAA,MAAA,EAAA,QAAA,CAAA,CAAA,IAAA,EAsB5B,IAtB4B,EAAA,MAAA,EAuB1B,MAvB0B,CAAA,MAAA,EAAA,GAAA,GAuBL,OAvBK,CAAA,OAAA,CAAA,CAAA,CAAA,EAwBjC,kBAxBiC,CAAA,MAAA,EAwBN,mBAxBM,CAwBc,cAxBd,CAwB6B,MAxB7B,EAwBqC,IAxBrC,CAAA,EAwB4C,QAxB5C,CAAA,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { E as Awaitable } from "./core-BO3b8jMg.js";
|
|
2
|
+
|
|
3
|
+
//#region src/collections/runtime/store.d.ts
|
|
4
|
+
interface CollectionStore<Id, Data> {
|
|
5
|
+
/**
|
|
6
|
+
* type-only operation to cast data type, doesn't do any runtime transformation.
|
|
7
|
+
*/
|
|
8
|
+
castData: <T>(_cast: (input: Data) => T) => CollectionStore<Id, T>;
|
|
9
|
+
get: (id: Id) => Awaitable<Data | undefined>;
|
|
10
|
+
list: () => Awaitable<Data[]>;
|
|
11
|
+
/**
|
|
12
|
+
* For typescript to infer data types, don't access the value of this property.
|
|
13
|
+
*/
|
|
14
|
+
$inferData: Data;
|
|
15
|
+
}
|
|
16
|
+
declare class MapCollectionStore<Id, Data> implements CollectionStore<Id, Data> {
|
|
17
|
+
private readonly dataMap;
|
|
18
|
+
private readonly dataList;
|
|
19
|
+
constructor(input: Map<Id, Data>);
|
|
20
|
+
get(id: Id): Data | undefined;
|
|
21
|
+
list(): Data[];
|
|
22
|
+
castData<T>(_cast: (input: Data) => T): MapCollectionStore<Id, T>;
|
|
23
|
+
/**
|
|
24
|
+
* in-place transformation on all data
|
|
25
|
+
*/
|
|
26
|
+
transform<T>(fn: (input: Data) => T): MapCollectionStore<Id, T>;
|
|
27
|
+
get $inferData(): Data;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { MapCollectionStore as n, CollectionStore as t };
|
|
31
|
+
//# sourceMappingURL=store-DiuGdV5M.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-DiuGdV5M.d.ts","names":[],"sources":["../src/collections/runtime/store.ts"],"sourcesContent":[],"mappings":";;;UAEiB;;AAAjB;;EAIwC,QAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,CAAA,KAAA,EAAT,IAAS,EAAA,GAAA,CAAA,EAAA,GAAM,eAAN,CAAsB,EAAtB,EAA0B,CAA1B,CAAA;EAAsB,GAAA,EAAA,CAAA,EAAA,EAElD,EAFkD,EAAA,GAE3C,SAF2C,CAEjC,IAFiC,GAAA,SAAA,CAAA;EAAI,IAAA,EAAA,GAAA,GAGpD,SAHoD,CAG1C,IAH0C,EAAA,CAAA;EAApB;;;EAE3B,UAAA,EAML,IANK;;AACL,cAQD,kBARC,CAAA,EAAA,EAAA,IAAA,CAAA,YAQuC,eARvC,CAQuD,EARvD,EAQ2D,IAR3D,CAAA,CAAA;EAKA,iBAAA,OAAA;EAAI,iBAAA,QAAA;EAGL,WAAA,CAAA,KAAA,EAIQ,GAJU,CAIN,EAJM,EAIF,IAJE,CAAA;EAAsC,GAAA,CAAA,EAAA,EAS3D,EAT2D,CAAA,EAStD,IATsD,GAAA,SAAA;EAAI,IAAA,CAAA,CAAA,EAa/D,IAb+D,EAAA;EAIhD,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,CAAA,KAAA,EAaI,IAbJ,EAAA,GAaa,CAbb,CAAA,EAaiB,kBAbjB,CAaoC,EAbpC,EAawC,CAbxC,CAAA;EAAI;;;EAKd,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,KAAA,EAeY,IAfZ,EAAA,GAeqB,CAfrB,CAAA,EAeyB,kBAfzB,CAe4C,EAf5C,EAegD,CAfhD,CAAA;EAIL,IAAA,UAAA,CAAA,CAAA,EAyBU,IAzBV"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/collections/runtime/store.ts
|
|
2
|
-
var
|
|
2
|
+
var MapCollectionStore = class {
|
|
3
3
|
dataMap;
|
|
4
4
|
dataList;
|
|
5
5
|
constructor(input) {
|
|
@@ -12,7 +12,7 @@ var SimpleCollectionStore = class {
|
|
|
12
12
|
list() {
|
|
13
13
|
return this.dataList;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
castData(_cast) {
|
|
16
16
|
return this;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
@@ -33,5 +33,5 @@ var SimpleCollectionStore = class {
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
//#endregion
|
|
36
|
-
export {
|
|
37
|
-
//# sourceMappingURL=store-
|
|
36
|
+
export { MapCollectionStore as t };
|
|
37
|
+
//# sourceMappingURL=store-IvpEBdxi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-IvpEBdxi.js","names":[],"sources":["../src/collections/runtime/store.ts"],"sourcesContent":["import type { Awaitable } from \"@/types\";\n\nexport interface CollectionStore<Id, Data> {\n /**\n * type-only operation to cast data type, doesn't do any runtime transformation.\n */\n castData: <T>(_cast: (input: Data) => T) => CollectionStore<Id, T>;\n\n get: (id: Id) => Awaitable<Data | undefined>;\n list: () => Awaitable<Data[]>;\n\n /**\n * For typescript to infer data types, don't access the value of this property.\n */\n $inferData: Data;\n}\n\nexport class MapCollectionStore<Id, Data> implements CollectionStore<Id, Data> {\n private readonly dataMap: Map<Id, Data>;\n private readonly dataList: Data[];\n\n constructor(input: Map<Id, Data>) {\n this.dataMap = input;\n this.dataList = Array.from(input.values());\n }\n\n get(id: Id): Data | undefined {\n return this.dataMap.get(id);\n }\n\n list(): Data[] {\n return this.dataList;\n }\n\n castData<T>(_cast: (input: Data) => T): MapCollectionStore<Id, T> {\n return this as unknown as MapCollectionStore<Id, T>;\n }\n\n /**\n * in-place transformation on all data\n */\n transform<T>(fn: (input: Data) => T): MapCollectionStore<Id, T> {\n this.dataList.length = 0;\n const dataMap = this.dataMap as unknown as Map<Id, T>;\n const dataList = this.dataList as unknown as T[];\n\n for (const [k, v] of this.dataMap) {\n const updated = fn(v);\n dataMap.set(k, updated);\n dataList.push(updated);\n }\n\n return this as unknown as MapCollectionStore<Id, T>;\n }\n\n get $inferData(): Data {\n return undefined as Data;\n }\n}\n"],"mappings":";AAiBA,IAAa,qBAAb,MAA+E;CAC7E,AAAiB;CACjB,AAAiB;CAEjB,YAAY,OAAsB;AAChC,OAAK,UAAU;AACf,OAAK,WAAW,MAAM,KAAK,MAAM,QAAQ,CAAC;;CAG5C,IAAI,IAA0B;AAC5B,SAAO,KAAK,QAAQ,IAAI,GAAG;;CAG7B,OAAe;AACb,SAAO,KAAK;;CAGd,SAAY,OAAsD;AAChE,SAAO;;;;;CAMT,UAAa,IAAmD;AAC9D,OAAK,SAAS,SAAS;EACvB,MAAM,UAAU,KAAK;EACrB,MAAM,WAAW,KAAK;AAEtB,OAAK,MAAM,CAAC,GAAG,MAAM,KAAK,SAAS;GACjC,MAAM,UAAU,GAAG,EAAE;AACrB,WAAQ,IAAI,GAAG,QAAQ;AACvB,YAAS,KAAK,QAAQ;;AAGxB,SAAO;;CAGT,IAAI,aAAmB"}
|
|
@@ -22,7 +22,16 @@ async function validate(schema, data, context, errorMessage) {
|
|
|
22
22
|
}
|
|
23
23
|
return data;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* get JSON Schema from a Standard Schema
|
|
27
|
+
*/
|
|
28
|
+
function getJSONSchema(schema) {
|
|
29
|
+
return schema["~standard"]?.jsonSchema.input({
|
|
30
|
+
target: "draft-2020-12",
|
|
31
|
+
libraryOptions: { unrepresentable: "any" }
|
|
32
|
+
});
|
|
33
|
+
}
|
|
25
34
|
|
|
26
35
|
//#endregion
|
|
27
|
-
export {
|
|
28
|
-
//# sourceMappingURL=validation-
|
|
36
|
+
export { getJSONSchema as n, validate as r, ValidationError as t };
|
|
37
|
+
//# sourceMappingURL=validation-BvVvvLII.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-BvVvvLII.js","names":[],"sources":["../src/utils/validation.ts"],"sourcesContent":["import type { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\nexport class ValidationError extends Error {\n title: string;\n issues: readonly StandardSchemaV1.Issue[];\n\n constructor(message: string, issues: readonly StandardSchemaV1.Issue[]) {\n super(`${message}:\\n${issues.map((issue) => ` ${issue.path}: ${issue.message}`).join(\"\\n\")}`);\n\n this.title = message;\n this.issues = issues;\n }\n\n async toStringFormatted() {\n // Handle ESM/CJS interop: picocolors is a CJS module that exports via\n // module.exports = createColors(). When dynamically imported in ESM context\n // (e.g., Next.js 16 Turbopack), the exports are wrapped under .default\n const picocolorsModule = await import(\"picocolors\");\n const picocolors = picocolorsModule.default ?? picocolorsModule;\n\n return [\n picocolors.bold(`[Fuma Content] ${this.title}:`),\n ...this.issues.map((issue) =>\n picocolors.redBright(\n `- ${picocolors.bold(issue.path?.join(\".\") ?? \"*\")}: ${issue.message}`,\n ),\n ),\n ].join(\"\\n\");\n }\n}\n\nexport async function validate<Schema extends StandardSchemaV1, Context>(\n schema: StandardSchemaV1 | ((context: Context) => StandardSchemaV1),\n data: unknown,\n context: Context,\n errorMessage: string,\n): Promise<StandardSchemaV1.InferOutput<Schema>> {\n if (typeof schema === \"function\" && !(\"~standard\" in schema)) {\n schema = schema(context);\n }\n\n if (\"~standard\" in schema) {\n const result = await (schema as StandardSchemaV1)[\"~standard\"].validate(data);\n\n if (result.issues) {\n throw new ValidationError(errorMessage, result.issues);\n }\n\n return result.value;\n }\n\n return data;\n}\n\n/**\n * get JSON Schema from a Standard Schema\n */\nexport function getJSONSchema(schema: StandardSchemaV1) {\n return (schema as unknown as Partial<StandardJSONSchemaV1>)[\"~standard\"]?.jsonSchema.input({\n target: \"draft-2020-12\",\n libraryOptions: {\n // for Zod\n unrepresentable: \"any\",\n },\n });\n}\n"],"mappings":";AAEA,IAAa,kBAAb,cAAqC,MAAM;CACzC;CACA;CAEA,YAAY,SAAiB,QAA2C;AACtE,QAAM,GAAG,QAAQ,KAAK,OAAO,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,MAAM,UAAU,CAAC,KAAK,KAAK,GAAG;AAE9F,OAAK,QAAQ;AACb,OAAK,SAAS;;CAGhB,MAAM,oBAAoB;EAIxB,MAAM,mBAAmB,MAAM,OAAO;EACtC,MAAM,aAAa,iBAAiB,WAAW;AAE/C,SAAO,CACL,WAAW,KAAK,kBAAkB,KAAK,MAAM,GAAG,EAChD,GAAG,KAAK,OAAO,KAAK,UAClB,WAAW,UACT,KAAK,WAAW,KAAK,MAAM,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,UAC9D,CACF,CACF,CAAC,KAAK,KAAK;;;AAIhB,eAAsB,SACpB,QACA,MACA,SACA,cAC+C;AAC/C,KAAI,OAAO,WAAW,cAAc,EAAE,eAAe,QACnD,UAAS,OAAO,QAAQ;AAG1B,KAAI,eAAe,QAAQ;EACzB,MAAM,SAAS,MAAO,OAA4B,aAAa,SAAS,KAAK;AAE7E,MAAI,OAAO,OACT,OAAM,IAAI,gBAAgB,cAAc,OAAO,OAAO;AAGxD,SAAO,OAAO;;AAGhB,QAAO;;;;;AAMT,SAAgB,cAAc,QAA0B;AACtD,QAAQ,OAAoD,cAAc,WAAW,MAAM;EACzF,QAAQ;EACR,gBAAgB,EAEd,iBAAiB,OAClB;EACF,CAAC"}
|
package/dist/vite/index.d.ts
CHANGED
|
@@ -1,26 +1,16 @@
|
|
|
1
|
-
import { t as Core } from "../core-
|
|
1
|
+
import { n as CoreOptions, t as Core } from "../core-BO3b8jMg.js";
|
|
2
2
|
import { PluginOption } from "vite";
|
|
3
3
|
|
|
4
4
|
//#region src/vite/index.d.ts
|
|
5
|
-
interface PluginOptions {
|
|
5
|
+
interface PluginOptions extends Pick<CoreOptions, "configPath" | "cwd" | "outDir"> {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
configPath?: string;
|
|
10
|
-
/**
|
|
11
|
-
* Update Vite config to fix module resolution of Fumadocs
|
|
7
|
+
* clean output directory on start
|
|
12
8
|
*
|
|
13
9
|
* @defaultValue true
|
|
14
10
|
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Output directory of generated files
|
|
18
|
-
*
|
|
19
|
-
* @defaultValue '.content'
|
|
20
|
-
*/
|
|
21
|
-
outDir?: string;
|
|
11
|
+
clean?: boolean;
|
|
22
12
|
}
|
|
23
|
-
declare function content(config: Record<string, unknown>,
|
|
13
|
+
declare function content(config: Record<string, unknown>, pluginOpitons?: PluginOptions): Promise<PluginOption[]>;
|
|
24
14
|
declare function createStandaloneCore(pluginOptions?: PluginOptions): Promise<Core>;
|
|
25
15
|
//#endregion
|
|
26
16
|
export { PluginOptions, createStandaloneCore, content as default };
|
package/dist/vite/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/vite/index.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,aAAA;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/vite/index.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,aAAA,SAAsB,KAAK;;AAA5C;AAOC;;;EAKU,KAAA,CAAA,EAAA,OAAA;;AAAD,iBAHoB,OAAA,CAGpB,MAAA,EAFA,MAEA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,aAAA,CAAA,EADO,aACP,CAAA,EAAP,OAAO,CAAC,YAAD,EAAA,CAAA;AA8CY,iBAAA,oBAAA,CAAoB,aAAA,CAAA,EAAgB,aAAhB,CAAA,EAAkC,OAAlC,CAAkC,IAAlC,CAAA"}
|
package/dist/vite/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import {
|
|
3
|
-
import { t as buildConfig } from "../build-D8A5ByFk.js";
|
|
1
|
+
import { t as Core } from "../core-D5QHSKk6.js";
|
|
2
|
+
import { n as loaderPlugin } from "../loader-BuR4gkKg.js";
|
|
4
3
|
|
|
5
4
|
//#region src/vite/index.ts
|
|
6
|
-
async function content(config,
|
|
7
|
-
const
|
|
8
|
-
|
|
5
|
+
async function content(config, pluginOpitons = {}) {
|
|
6
|
+
const { clean = true } = pluginOpitons;
|
|
7
|
+
const core = createViteCore(pluginOpitons);
|
|
8
|
+
await core.init({ config });
|
|
9
9
|
const ctx = core.getPluginContext();
|
|
10
10
|
return [...core.getPlugins(true).map((plugin) => plugin.vite?.createPlugin?.call(ctx)), {
|
|
11
11
|
name: "fuma-content",
|
|
12
12
|
async buildStart() {
|
|
13
|
+
if (clean) await core.clearOutputDirectory();
|
|
13
14
|
await core.emit({ write: true });
|
|
14
15
|
},
|
|
15
16
|
async configureServer(server) {
|
|
@@ -17,29 +18,31 @@ async function content(config, pluginOptions = {}) {
|
|
|
17
18
|
}
|
|
18
19
|
}];
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
const { loadConfig } = await import("../load-from-file-BTNnBu6f.js");
|
|
22
|
-
const core = createViteCore(applyDefaults(pluginOptions));
|
|
23
|
-
await core.init({ config: loadConfig(core, true) });
|
|
24
|
-
return core;
|
|
25
|
-
}
|
|
26
|
-
function createViteCore({ configPath, outDir }) {
|
|
21
|
+
function createViteCore({ configPath, outDir, cwd }) {
|
|
27
22
|
return new Core({
|
|
23
|
+
cwd,
|
|
28
24
|
configPath,
|
|
29
25
|
outDir,
|
|
30
|
-
|
|
31
|
-
target: "vite",
|
|
32
|
-
jsExtension: false
|
|
33
|
-
}
|
|
26
|
+
plugins: [vitePlugin(), loaderPlugin()]
|
|
34
27
|
});
|
|
35
28
|
}
|
|
36
|
-
function
|
|
29
|
+
function vitePlugin() {
|
|
37
30
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
name: "vite",
|
|
32
|
+
config(config) {
|
|
33
|
+
config.emit ??= {
|
|
34
|
+
target: "vite",
|
|
35
|
+
jsExtension: false
|
|
36
|
+
};
|
|
37
|
+
}
|
|
41
38
|
};
|
|
42
39
|
}
|
|
40
|
+
async function createStandaloneCore(pluginOptions = {}) {
|
|
41
|
+
const { loadConfig } = await import("../load-from-file-BZxc_BhC.js");
|
|
42
|
+
const core = createViteCore(pluginOptions);
|
|
43
|
+
await core.init({ config: loadConfig(core, true) });
|
|
44
|
+
return core;
|
|
45
|
+
}
|
|
43
46
|
|
|
44
47
|
//#endregion
|
|
45
48
|
export { createStandaloneCore, content as default };
|
package/dist/vite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/vite/index.ts"],"sourcesContent":["import type { PluginOption } from \"vite\";\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/vite/index.ts"],"sourcesContent":["import type { PluginOption } from \"vite\";\nimport type { FSWatcher } from \"chokidar\";\nimport { Core, CoreOptions, type Plugin } from \"@/core\";\nimport { loaderPlugin } from \"@/plugins/loader\";\n\nexport interface PluginOptions extends Pick<CoreOptions, \"configPath\" | \"cwd\" | \"outDir\"> {\n /**\n * clean output directory on start\n *\n * @defaultValue true\n */\n clean?: boolean;\n}\n\nexport default async function content(\n config: Record<string, unknown>,\n pluginOpitons: PluginOptions = {},\n): Promise<PluginOption[]> {\n const { clean = true } = pluginOpitons;\n const core = createViteCore(pluginOpitons);\n await core.init({\n config,\n });\n\n const ctx = core.getPluginContext();\n return [\n ...core.getPlugins(true).map((plugin) => plugin.vite?.createPlugin?.call(ctx)),\n {\n name: \"fuma-content\",\n async buildStart() {\n if (clean) await core.clearOutputDirectory();\n await core.emit({ write: true });\n },\n async configureServer(server) {\n await core.initServer({\n watcher: server.watcher as unknown as FSWatcher,\n });\n },\n },\n ];\n}\n\nfunction createViteCore({ configPath, outDir, cwd }: PluginOptions) {\n return new Core({\n cwd,\n configPath,\n outDir,\n plugins: [vitePlugin(), loaderPlugin()],\n });\n}\n\nfunction vitePlugin(): Plugin {\n return {\n name: \"vite\",\n config(config) {\n config.emit ??= {\n target: \"vite\",\n jsExtension: false,\n };\n },\n };\n}\n\nexport async function createStandaloneCore(pluginOptions: PluginOptions = {}) {\n const { loadConfig } = await import(\"@/config/load-from-file\");\n const core = createViteCore(pluginOptions);\n await core.init({\n config: loadConfig(core, true),\n });\n return core;\n}\n"],"mappings":";;;;AAcA,eAA8B,QAC5B,QACA,gBAA+B,EAAE,EACR;CACzB,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,OAAO,eAAe,cAAc;AAC1C,OAAM,KAAK,KAAK,EACd,QACD,CAAC;CAEF,MAAM,MAAM,KAAK,kBAAkB;AACnC,QAAO,CACL,GAAG,KAAK,WAAW,KAAK,CAAC,KAAK,WAAW,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,EAC9E;EACE,MAAM;EACN,MAAM,aAAa;AACjB,OAAI,MAAO,OAAM,KAAK,sBAAsB;AAC5C,SAAM,KAAK,KAAK,EAAE,OAAO,MAAM,CAAC;;EAElC,MAAM,gBAAgB,QAAQ;AAC5B,SAAM,KAAK,WAAW,EACpB,SAAS,OAAO,SACjB,CAAC;;EAEL,CACF;;AAGH,SAAS,eAAe,EAAE,YAAY,QAAQ,OAAsB;AAClE,QAAO,IAAI,KAAK;EACd;EACA;EACA;EACA,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC;EACxC,CAAC;;AAGJ,SAAS,aAAqB;AAC5B,QAAO;EACL,MAAM;EACN,OAAO,QAAQ;AACb,UAAO,SAAS;IACd,QAAQ;IACR,aAAa;IACd;;EAEJ;;AAGH,eAAsB,qBAAqB,gBAA+B,EAAE,EAAE;CAC5E,MAAM,EAAE,eAAe,MAAM,OAAO;CACpC,MAAM,OAAO,eAAe,cAAc;AAC1C,OAAM,KAAK,KAAK,EACd,QAAQ,WAAW,MAAM,KAAK,EAC/B,CAAC;AACF,QAAO"}
|