refactor(*): migrate to yaml

This commit is contained in:
Fuma Nama
2026-07-13 17:10:02 +08:00
parent 06dd35b3a8
commit 8a280f5d3b
69 changed files with 1104 additions and 1176 deletions
+9 -10
View File
@@ -13,10 +13,10 @@
"start": "next start"
},
"dependencies": {
"@ai-sdk/openai-compatible": "^3.0.5",
"@ai-sdk/react": "^4.0.18",
"@ai-sdk/openai-compatible": "^3.0.7",
"@ai-sdk/react": "^4.0.23",
"@base-ui/react": "^1.6.0",
"@floating-ui/react-dom": "^2.1.8",
"@floating-ui/react-dom": "^2.1.9",
"@fumadocs/asyncapi": "workspace:*",
"@fumadocs/satteri": "workspace:*",
"@fumadocs/story": "workspace:*",
@@ -28,7 +28,7 @@
"@orama/orama": "^3.1.18",
"@paper-design/shaders-react": "^0.0.77",
"@shikijs/transformers": "^4.3.1",
"ai": "^7.0.17",
"ai": "^7.0.22",
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"d3-force": "^3.0.0",
@@ -47,7 +47,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"hast-util-to-jsx-runtime": "^2.3.6",
"katex": "0.17.0",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"mermaid": "^11.16.0",
"motion": "^12.42.2",
"next": "16.2.10",
@@ -63,7 +63,7 @@
"remark-rehype": "^11.1.2",
"satteri": "^0.9.5",
"shiki": "^4.3.1",
"takumi-js": "^2.0.1",
"takumi-js": "^2.1.0",
"twoslash": "^0.3.9",
"unist-util-visit": "^5.1.0",
"zod": "^4.4.3"
@@ -75,19 +75,18 @@
"@tailwindcss/postcss": "^4.3.2",
"@types/d3-force": "^3.0.10",
"@types/estree": "^1.0.9",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/mdx": "^2.0.14",
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@types/three": "^0.185.0",
"@types/three": "^0.185.1",
"algoliasearch": "5.55.2",
"browserslist-config-baseline": "^0.5.0",
"gray-matter": "^4.0.3",
"mcp-handler": "^1.1.0",
"next-validate-link": "^1.6.6",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"shadcn": "4.13.0",
"tailwindcss": "^4.3.2",
"tailwindcss-animate": "^1.0.7",
+2 -2
View File
@@ -15,13 +15,13 @@
"@astrojs/mdx": "^7.0.2",
"@astrojs/react": "^6.0.1",
"@orama/orama": "^3.1.18",
"astro": "^7.0.6",
"astro": "^7.0.7",
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"sharp": "^0.35.3",
"takumi-js": "^2.0.1"
"takumi-js": "^2.1.0"
},
"devDependencies": {
"@tailwindcss/vite": "^4.3.2",
+1 -1
View File
@@ -23,7 +23,7 @@
"@types/mdx": "^2.0.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"rimraf": "^6.1.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
+2 -2
View File
@@ -13,7 +13,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"next": "16.2.10",
"react": "^19.2.7",
"react-dom": "^19.2.7"
@@ -24,7 +24,7 @@
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+1 -1
View File
@@ -22,7 +22,7 @@
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+2 -2
View File
@@ -13,7 +13,7 @@
"cnfast": "^0.0.8",
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"next": "16.2.10",
"react": "^19.2.7",
"react-dom": "^19.2.7"
@@ -24,7 +24,7 @@
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+1 -1
View File
@@ -21,7 +21,7 @@
"@types/mdx": "^2.0.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+2 -2
View File
@@ -13,7 +13,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"next": "16.2.10",
"react": "^19.2.7",
"react-day-picker": "^10.0.1",
@@ -25,7 +25,7 @@
"@types/mdx": "^2.0.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+2 -2
View File
@@ -14,7 +14,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"next": "16.2.10",
"react": "^19.2.7",
"react-dom": "^19.2.7"
@@ -25,7 +25,7 @@
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"serve": "^14.2.6",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
+2 -2
View File
@@ -13,7 +13,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"next": "16.2.10",
"react": "^19.2.7",
"react-dom": "^19.2.7"
@@ -24,7 +24,7 @@
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+1 -1
View File
@@ -22,7 +22,7 @@
"@types/mdx": "^2.0.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+1 -1
View File
@@ -23,7 +23,7 @@
"@types/mdx": "^2.0.14",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"rimraf": "^6.1.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
+1 -1
View File
@@ -25,7 +25,7 @@
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"postcss": "^8.5.16",
"postcss": "^8.5.17",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3"
}
+1 -1
View File
@@ -35,6 +35,6 @@
"react-router-devtools": "^6.2.1",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+1 -1
View File
@@ -29,6 +29,6 @@
"react-router-devtools": "^6.2.1",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+1 -1
View File
@@ -30,6 +30,6 @@
"react-router-devtools": "^6.2.1",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+2 -2
View File
@@ -16,7 +16,7 @@
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"isbot": "^5.2.0",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-router": "^8.2.0"
@@ -32,6 +32,6 @@
"serve": "^14.2.6",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+3 -3
View File
@@ -16,11 +16,11 @@
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"isbot": "^5.2.0",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-router": "^8.2.0",
"takumi-js": "^2.0.1"
"takumi-js": "^2.1.0"
},
"devDependencies": {
"@react-router/dev": "^8.2.0",
@@ -32,6 +32,6 @@
"react-router-devtools": "^6.2.1",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+2 -2
View File
@@ -18,7 +18,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-static": "^1.23.0",
"lucide-static": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -31,6 +31,6 @@
"@vitejs/plugin-react": "^6.0.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
@@ -18,7 +18,7 @@
"cnfast": "^0.0.8",
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -32,6 +32,6 @@
"nitro": "3.0.260610-beta",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+3 -3
View File
@@ -17,7 +17,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -29,9 +29,9 @@
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.3",
"nitro": "3.0.260610-beta",
"srvx": "^0.11.21",
"srvx": "^0.11.22",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+2 -2
View File
@@ -19,7 +19,7 @@
"fumadocs-mdx": "workspace:*",
"fumadocs-openapi": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"shiki": "^4.3.1"
@@ -34,6 +34,6 @@
"nitro": "3.0.260610-beta",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+3 -3
View File
@@ -20,7 +20,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -33,9 +33,9 @@
"@vitejs/plugin-react": "^6.0.3",
"nitro": "3.0.260610-beta",
"serve": "^14.2.6",
"srvx": "^0.11.21",
"srvx": "^0.11.22",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+2 -2
View File
@@ -17,7 +17,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -30,6 +30,6 @@
"@vitejs/plugin-react": "^6.0.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+2 -2
View File
@@ -18,7 +18,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
@@ -32,6 +32,6 @@
"nitro": "3.0.260610-beta",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+1 -1
View File
@@ -28,6 +28,6 @@
"@types/react-dom": "^19.2.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+3 -3
View File
@@ -14,11 +14,11 @@
"fumadocs-core": "workspace:*",
"fumadocs-mdx": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-server-dom-webpack": "^19.2.7",
"takumi-js": "^2.0.1",
"takumi-js": "^2.1.0",
"waku": "1.0.0-beta.6"
},
"devDependencies": {
@@ -29,6 +29,6 @@
"@types/react-dom": "^19.2.3",
"tailwindcss": "^4.3.2",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+1 -1
View File
@@ -20,7 +20,7 @@
"oxfmt": "^0.58.0",
"oxlint": "^1.73.0",
"rimraf": "^6.1.3",
"tegami": "^1.2.4",
"tegami": "^1.2.5",
"tinyexec": "^1.2.4",
"turbo": "2.10.4",
"typescript": "^6.0.3",
+2 -2
View File
@@ -62,7 +62,7 @@
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"github-slugger": "^2.0.0",
"lucide-react": "^1.23.0"
"lucide-react": "^1.24.0"
},
"devDependencies": {
"@fastify/deepmerge": "^3.2.1",
@@ -73,7 +73,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"json-schema-typed": "^8.0.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/react": "*",
+4 -4
View File
@@ -44,11 +44,11 @@
"cnfast": "^0.0.8",
"github-slugger": "^2.0.0",
"hast-util-to-jsx-runtime": "^2.3.6",
"js-yaml": "^5.2.1",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"remark": "^15.0.1",
"remark-rehype": "^11.1.2",
"shiki": "^4.3.1"
"shiki": "^4.3.1",
"yaml": "^2.9.0"
},
"devDependencies": {
"@tailwindcss/oxide": "^4.3.2",
@@ -59,7 +59,7 @@
"json-schema-typed": "^8.0.2",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/react": "*",
+5 -3
View File
@@ -1,5 +1,5 @@
import type { AsyncAPIObject, TagObject } from '@/types';
import { dump } from 'js-yaml';
import { stringify } from 'yaml';
import {
type GeneratedPageProps,
getPageProps,
@@ -10,7 +10,6 @@ import {
import type { InternalAsyncAPIMeta } from '@/server';
import { toStaticData } from '@/utils/pages/to-static-data';
import { doubleQuote } from '@/utils/string-utils';
import { removeUndefined } from '../remove-undefined';
export interface PagesToTextOptions {
imports?: {
@@ -80,7 +79,10 @@ export function generateDocument(
): string {
const { addGeneratedComment = true, imports } = options;
const out: string[] = [];
const banner = dump(removeUndefined(frontmatter as object)).trimEnd();
const banner = stringify(frontmatter, {
compat: 'yaml-1.1',
singleQuote: true,
}).trimEnd();
if (banner.length > 0) out.push(`---\n${banner}\n---`);
if (addGeneratedComment) {
@@ -1,25 +0,0 @@
import { isPlainObject } from './is-plain-object';
export function removeUndefined<T extends object>(value: T, deep = false): T {
const obj = value as Record<string, unknown>;
for (const key in obj) {
if (obj[key] === undefined) delete obj[key];
if (!deep) continue;
const entry = obj[key];
if (isPlainObject(entry)) {
removeUndefined(entry, deep);
continue;
}
if (Array.isArray(entry)) {
for (const item of entry) {
if (isPlainObject(item)) removeUndefined(item, deep);
}
}
}
return value;
}
+4 -4
View File
@@ -130,7 +130,7 @@
"@fumadocs/tailwind": "workspace:*",
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"motion": "^12.42.2",
"next-themes": "^0.4.6",
"react-remove-scroll": "^2.7.2",
@@ -143,8 +143,8 @@
"@fumadocs/cli": "workspace:*",
"@tailwindcss/cli": "^4.3.2",
"@tailwindcss/oxide": "^4.3.2",
"@tsdown/css": "^0.22.4",
"@types/hast": "^3.0.4",
"@tsdown/css": "^0.22.5",
"@types/hast": "^3.0.5",
"@types/mdx": "^2.0.14",
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
@@ -154,7 +154,7 @@
"react-medium-image-zoom": "^5.4.8",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"unified": "^11.0.5"
},
"peerDependencies": {
+1 -1
View File
@@ -37,7 +37,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"react": "^19.2.7",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+1 -1
View File
@@ -43,6 +43,6 @@
"devDependencies": {
"@types/node": "26.1.1",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
}
}
+1 -1
View File
@@ -47,7 +47,7 @@
"@types/node": "26.1.1",
"fumadocs-core": "workspace:*",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@content-collections/core": "0.x.x",
+1 -1
View File
@@ -38,7 +38,7 @@
"fumadocs-core": "workspace:*",
"react-dom": "^19.2.7",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"fuma-content": "^1.2.3",
+6 -6
View File
@@ -112,7 +112,6 @@
"github-slugger": "^2.0.0",
"hast-util-to-estree": "^3.1.3",
"hast-util-to-jsx-runtime": "^2.3.6",
"js-yaml": "^5.2.1",
"mdast-util-mdx": "^3.0.0",
"mdast-util-to-markdown": "^2.1.2",
"remark": "^15.0.1",
@@ -123,10 +122,11 @@
"tinyglobby": "^0.2.17",
"unified": "^11.0.5",
"unist-util-visit": "^5.1.0",
"vfile": "^6.0.3"
"vfile": "^6.0.3",
"yaml": "^2.9.0"
},
"devDependencies": {
"@formatjs/intl-localematcher": "^0.8.10",
"@formatjs/intl-localematcher": "^0.8.12",
"@mdx-js/mdx": "^3.1.1",
"@mixedbread/sdk": "0.77.0",
"@orama/core": "^1.2.19",
@@ -134,7 +134,7 @@
"@shikijs/transformers": "^4.3.1",
"@tanstack/react-router": "1.170.17",
"@types/estree-jsx": "^1.0.5",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/negotiator": "^0.6.4",
"@types/node": "26.1.1",
@@ -143,7 +143,7 @@
"algoliasearch": "5.55.2",
"flexsearch": "^0.8.212",
"image-size": "^2.0.2",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"negotiator": "^1.0.0",
"next": "16.2.10",
"npm-to-yarn": "^3.0.1",
@@ -153,7 +153,7 @@
"remark-mdx": "^3.1.1",
"remove-markdown": "^0.6.4",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"waku": "1.0.0-beta.6",
"zod": "4.4.3"
+2 -2
View File
@@ -1,7 +1,7 @@
/**
* Inspired by https://github.com/jonschlinkert/gray-matter
*/
import { load } from 'js-yaml';
import { parse } from 'yaml';
interface Output {
/**
@@ -28,7 +28,7 @@ export function frontmatter(input: string): Output {
output.matter = match[0];
output.content = input.slice(match[0].length);
const loaded = load(match[1]);
const loaded = parse(match[1]);
output.data = loaded ?? {};
return output;
+1 -1
View File
@@ -11,6 +11,6 @@
"fumadocs-ui": "workspace:*",
"oxlint": "^1.73.0",
"react": "^19.2.7",
"takumi-js": "^2.0.1"
"takumi-js": "^2.1.0"
}
}
+1 -1
View File
@@ -55,7 +55,7 @@
"@types/node": "26.1.1",
"tinyglobby": "^0.2.17",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"engines": {
+2 -2
View File
@@ -51,14 +51,14 @@
"devDependencies": {
"@mdx-js/mdx": "^3.1.1",
"@types/estree": "^1.0.9",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/node": "26.1.1",
"fumadocs-core": "workspace:*",
"mdast-util-mdx": "^3.0.0",
"remark": "^15.0.1",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+1 -1
View File
@@ -49,7 +49,7 @@
"fumadocs-core": "workspace:*",
"rimraf": "^6.0.0",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"vfile": "^6.0.3"
},
+1 -1
View File
@@ -37,7 +37,7 @@
"fumadocs-openapi": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+3 -3
View File
@@ -56,7 +56,7 @@
"devDependencies": {
"@types/estree": "^1.0.9",
"@types/estree-jsx": "^1.0.5",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdx": "^2.0.14",
"@types/node": "26.1.1",
"@types/picomatch": "^4.0.3",
@@ -68,9 +68,9 @@
"react": "^19.2.7",
"react-dom": "^19.2.7",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"unified": "^11.0.5",
"vite": "^8.1.3"
"vite": "^8.1.4"
},
"peerDependencies": {
"@types/estree": "*",
+3 -3
View File
@@ -38,9 +38,9 @@
},
"dependencies": {
"@mdx-js/mdx": "^3.1.1",
"js-yaml": "^5.2.1",
"unified": "^11.0.5",
"vfile": "^6.0.3"
"vfile": "^6.0.3",
"yaml": "^2.9.0"
},
"devDependencies": {
"@types/mdx": "^2.0.14",
@@ -50,7 +50,7 @@
"react": "^19.2.7",
"tinyglobby": "^0.2.17",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/mdx": "*",
+3 -3
View File
@@ -60,7 +60,6 @@
"esbuild": "^0.28.1",
"estree-util-value-to-estree": "^3.5.0",
"github-slugger": "^2.0.0",
"js-yaml": "^5.2.1",
"mdast-util-mdx": "^3.0.0",
"picocolors": "^1.1.1",
"picomatch": "^4.0.5",
@@ -70,6 +69,7 @@
"unist-util-remove-position": "^5.0.0",
"unist-util-visit": "^5.1.0",
"vfile": "^6.0.3",
"yaml": "^2.9.0",
"zod": "^4.4.3"
},
"devDependencies": {
@@ -91,8 +91,8 @@
"rolldown": "^1.1.5",
"satteri": "^0.9.5",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"vite": "^8.1.3",
"tsdown": "0.22.5",
"vite": "^8.1.4",
"webpack": "^5.108.4"
},
"peerDependencies": {
+2 -2
View File
@@ -1,6 +1,6 @@
import type { Loader, LoaderInput } from '@/loaders/adapter';
import type { ConfigLoader } from '@/loaders/config';
import { load } from 'js-yaml';
import { parse as parseYaml } from 'yaml';
import { z } from 'zod';
import type { MetaCollectionItem } from '@/config/build';
@@ -24,7 +24,7 @@ export function createMetaLoader(
function parse(filePath: string, source: string) {
try {
if (filePath.endsWith('.json')) return JSON.parse(source);
if (filePath.endsWith('.yaml')) return load(source);
if (filePath.endsWith('.yaml')) return parseYaml(source);
} catch (e) {
throw new Error(`invalid data in ${filePath}`, { cause: e });
}
+2 -2
View File
@@ -44,7 +44,6 @@
"dependencies": {
"cnfast": "^0.0.8",
"github-slugger": "^2.0.0",
"js-yaml": "^5.2.1",
"remark-math": "^6.0.0",
"remark-mdx": "^3.1.1",
"remark-parse": "^11.0.0",
@@ -53,6 +52,7 @@
"unified": "^11.0.5",
"unist-util-visit": "^5.1.0",
"vfile": "^6.0.3",
"yaml": "^2.9.0",
"zod": "^4.4.3"
},
"devDependencies": {
@@ -64,7 +64,7 @@
"fumadocs-core": "workspace:*",
"mdast-util-mdx": "^3.0.0",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+5 -2
View File
@@ -3,7 +3,7 @@ import { type PluggableList, unified } from 'unified';
import remarkStringify from 'remark-stringify';
import remarkMdx from 'remark-mdx';
import { VFile } from 'vfile';
import { dump } from 'js-yaml';
import { stringify } from 'yaml';
import {
buildStorage,
type ParsedContentFile,
@@ -110,7 +110,10 @@ export async function convertVaultFiles(
output.push({
type: 'content',
path: file.outPath,
content: `---\n${dump(frontmatter).trim()}\n---\n${string}`,
content: `---\n${stringify(frontmatter, {
compat: 'yaml-1.1',
singleQuote: true,
}).trim()}\n---\n${string}`,
});
}
+4 -4
View File
@@ -57,11 +57,11 @@
"cnfast": "^0.0.8",
"github-slugger": "^2.0.0",
"hast-util-to-jsx-runtime": "^2.3.6",
"js-yaml": "^5.2.1",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"remark": "^15.0.1",
"remark-rehype": "^11.1.2",
"shiki": "^4.3.1"
"shiki": "^4.3.1",
"yaml": "^2.9.0"
},
"devDependencies": {
"@scalar/api-client-react": "^2.0.32",
@@ -74,7 +74,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"json-schema-typed": "^8.0.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"xml-js": "^1.6.11"
},
"peerDependencies": {
+5 -3
View File
@@ -1,5 +1,5 @@
import type { Document, TagObject } from '@/types';
import { dump } from 'js-yaml';
import { stringify } from 'yaml';
import {
type GeneratedPageProps,
getPageProps,
@@ -12,7 +12,6 @@ import {
import type { InternalOpenAPIMeta } from '@/server';
import { toStaticData } from '@/utils/pages/to-static-data';
import { doubleQuote } from '@/requests/string-utils';
import { removeUndefined } from '../remove-undefined';
export interface PagesToTextOptions {
/**
@@ -111,7 +110,10 @@ export function generateDocument(
): string {
const { addGeneratedComment = true, imports } = options;
const out: string[] = [];
const banner = dump(removeUndefined(frontmatter as object)).trimEnd();
const banner = stringify(frontmatter, {
compat: 'yaml-1.1',
singleQuote: true,
}).trimEnd();
if (banner.length > 0) out.push(`---\n${banner}\n---`);
if (addGeneratedComment) {
@@ -1,36 +0,0 @@
export function removeUndefined<T extends object>(value: T, deep = false): T {
const obj = value as Record<string, unknown>;
for (const key in obj) {
if (obj[key] === undefined) delete obj[key];
if (!deep) continue;
const entry = obj[key];
if (isPlainObject(entry)) {
removeUndefined(entry, deep);
continue;
}
if (Array.isArray(entry)) {
for (const item of entry) {
if (isPlainObject(item)) removeUndefined(item, deep);
}
}
}
return value;
}
function isPlainObject(value: unknown): value is Record<string, unknown> {
if (typeof value !== 'object' || value === null) {
return false;
}
const prototype = Object.getPrototypeOf(value);
return (
prototype === null ||
prototype === Object.prototype ||
Object.getPrototypeOf(prototype) === null
);
}
+4 -7
View File
@@ -1,9 +1,8 @@
```mdx title="museum.mdx"
---
title: Redocly Museum API
description: >-
An imaginary, but delightful Museum API for interacting with museum services
and information. Built with love by Redocly.
description: An imaginary, but delightful Museum API for interacting with museum
services and information. Built with love by Redocly.
full: true
_openapi:
preload:
@@ -62,14 +61,12 @@ _openapi:
heading: get-special-event
- content: Update the details of a special event
heading: update-special-event
- content: >-
Delete a special event from the collection. Allows museum to cancel
- content: Delete a special event from the collection. Allows museum to cancel
planned events.
heading: delete-special-event
- content: Purchase museum tickets for general entry or special events.
heading: buy-museum-tickets
- content: >-
Return an image of your ticket with scannable QR code. Used for event
- content: Return an image of your ticket with scannable QR code. Used for event
entry.
heading: get-ticket-qr-code
---
+2 -4
View File
@@ -43,8 +43,7 @@ _openapi:
heading: get-special-event
- content: Update the details of a special event
heading: update-special-event
- content: >-
Delete a special event from the collection. Allows museum to cancel
- content: Delete a special event from the collection. Allows museum to cancel
planned events.
heading: delete-special-event
---
@@ -124,8 +123,7 @@ _openapi:
contents:
- content: Purchase museum tickets for general entry or special events.
heading: buy-museum-tickets
- content: >-
Return an image of your ticket with scannable QR code. Used for event
- content: Return an image of your ticket with scannable QR code. Used for event
entry.
heading: get-ticket-qr-code
---
+9 -9
View File
@@ -38,12 +38,12 @@
"zod": "^4.4.3"
},
"devDependencies": {
"@ai-sdk/react": "^4.0.18",
"@ai-sdk/react": "^4.0.23",
"@fumadocs/vite": "workspace:*",
"@hono/node-server": "^2.0.8",
"@openrouter/ai-sdk-provider": "^3.0.0",
"@tailwindcss/vite": "^4.3.2",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/mdx": "^2.0.14",
"@types/node": "^26.1.1",
@@ -52,7 +52,7 @@
"@types/react-dom": "^19.2.3",
"@types/unist": "^3.0.3",
"@types/ws": "^8.18.1",
"ai": "^7.0.17",
"ai": "^7.0.22",
"beautiful-mermaid": "^1.1.3",
"chokidar": "^5.0.0",
"class-variance-authority": "^0.7.1",
@@ -61,10 +61,10 @@
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"hast-util-to-jsx-runtime": "^2.3.6",
"hono": "^4.12.28",
"ignore": "^7.0.5",
"hono": "^4.12.29",
"ignore": "^7.0.6",
"katex": "0.17.0",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-server-dom-webpack": "^19.2.7",
@@ -74,14 +74,14 @@
"remark-math": "^6.0.0",
"remark-rehype": "^11.1.2",
"tailwindcss": "^4.3.2",
"takumi-js": "^2.0.1",
"takumi-js": "^2.1.0",
"tinyglobby": "^0.2.17",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"unified": "^11.0.5",
"unist-util-visit": "^5.1.0",
"vfile": "^6.0.3",
"vite": "^8.1.3",
"vite": "^8.1.4",
"vitefu": "^1.1.3",
"waku": "1.0.0-beta.6",
"ws": "^8.21.0"
+3 -3
View File
@@ -44,8 +44,8 @@
"@base-ui/react": "^1.6.0",
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"js-yaml": "^5.2.1",
"lucide-react": "^1.23.0"
"lucide-react": "^1.24.0",
"yaml": "^2.9.0"
},
"devDependencies": {
"@types/node": "^26.1.1",
@@ -53,7 +53,7 @@
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/react": "*",
+2 -2
View File
@@ -1,6 +1,6 @@
import type { OutputFile } from './convert';
import * as fs from 'node:fs/promises';
import { dump } from 'js-yaml';
import { stringify } from 'yaml';
import * as path from 'node:path';
interface WriteOptions {
@@ -28,5 +28,5 @@ export async function write(output: OutputFile[], options: WriteOptions = {}) {
}
export function frontmatter(obj: unknown) {
return `---\n${dump(obj).trim()}\n---`;
return `---\n${stringify(obj, { compat: 'yaml-1.1', singleQuote: true }).trim()}\n---`;
}
+4 -4
View File
@@ -147,7 +147,7 @@
"@radix-ui/react-tabs": "^1.1.17",
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"motion": "^12.42.2",
"next-themes": "^0.4.6",
"react-remove-scroll": "^2.7.2",
@@ -160,8 +160,8 @@
"@fumadocs/cli": "workspace:*",
"@tailwindcss/cli": "^4.3.2",
"@tailwindcss/oxide": "^4.3.2",
"@tsdown/css": "^0.22.4",
"@types/hast": "^3.0.4",
"@tsdown/css": "^0.22.5",
"@types/hast": "^3.0.5",
"@types/mdx": "^2.0.14",
"@types/node": "^26.1.1",
"@types/react": "^19.2.17",
@@ -171,7 +171,7 @@
"react-medium-image-zoom": "^5.4.8",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"unified": "^11.0.5"
},
"peerDependencies": {
+1 -1
View File
@@ -44,7 +44,7 @@
"react": "^19.2.7",
"sanity": "^6.4.0",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+2 -2
View File
@@ -65,13 +65,13 @@
"devDependencies": {
"@types/estree": "^1.0.9",
"@types/estree-jsx": "^1.0.5",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/node": "26.1.1",
"mdast-util-mdx": "^3.0.0",
"shiki": "^4.3.1",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"vitest": "^4.1.10"
},
+1 -1
View File
@@ -43,7 +43,7 @@
"shadcn": "^4.13.0",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/react": "*",
+1 -1
View File
@@ -29,7 +29,7 @@
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"@types/react": "*",
+4 -4
View File
@@ -39,7 +39,7 @@
"@fumari/stf": "workspace:*",
"class-variance-authority": "^0.7.1",
"cnfast": "^0.0.8",
"lucide-react": "^1.23.0",
"lucide-react": "^1.24.0",
"ts-morph": "^28.0.0"
},
"devDependencies": {
@@ -47,7 +47,7 @@
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
"@types/ungap__structured-clone": "^1.2.0",
"@ungap/structured-clone": "^1.3.2",
"@ungap/structured-clone": "^1.3.3",
"fumadocs-core": "workspace:*",
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"next": "^16.2.10",
@@ -56,8 +56,8 @@
"react-error-boundary": "^6.1.2",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"vite": "^8.1.3",
"tsdown": "0.22.5",
"vite": "^8.1.4",
"webpack": "^5.108.4"
},
"peerDependencies": {
+1 -1
View File
@@ -35,7 +35,7 @@
"postcss-selector-parser": "^7.1.4",
"tailwindcss": "^4.3.2",
"tsconfig": "workspace:*",
"tsdown": "0.22.4"
"tsdown": "0.22.5"
},
"peerDependencies": {
"tailwindcss": "^4.0.0"
+2 -2
View File
@@ -52,7 +52,7 @@
"twoslash": "^0.3.9"
},
"devDependencies": {
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
@@ -60,7 +60,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"shiki": "4.3.1",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3"
},
"peerDependencies": {
+2 -2
View File
@@ -50,7 +50,7 @@
"devDependencies": {
"@mdx-js/mdx": "^3.1.1",
"@types/estree": "^1.0.9",
"@types/hast": "^3.0.4",
"@types/hast": "^3.0.5",
"@types/mdast": "^4.0.4",
"@types/node": "26.1.1",
"@types/react": "^19.2.17",
@@ -59,7 +59,7 @@
"fumadocs-ui": "workspace:@fumadocs/base-ui@*",
"mdast-util-mdx": "^3.0.0",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"vfile": "^6.0.3"
},
+2 -2
View File
@@ -30,8 +30,8 @@
"devDependencies": {
"@types/node": "^26.1.1",
"tsconfig": "workspace:*",
"tsdown": "0.22.4",
"tsdown": "0.22.5",
"typescript": "^6.0.3",
"vite": "^8.1.3"
"vite": "^8.1.4"
}
}
+948 -960
View File
File diff suppressed because it is too large Load Diff