New document (#5299)

* add new doc (#5175)

Co-authored-by: dreamer6680 <146868355@qq.com>

* Test docs (#5235)

* fix: change the page of doc

* chore: add new dependencies, update global styles/layout, optimize docs, add Feishu & GitHub icons, update API examples

* fix: docs/index 404 not found

* Update environment variable names, optimize styles, add new API routes, fix component styles, adjust documentation, and update GitHub and Feishu icons

* update readme

* feat: add a linkfastgpt compontent

* feat: update new doc

* fix:remove unuse page and redirect homepage to docs (#5288)

* fix:remove some unuse doc

* fix: redirect homepage to doc

* git ignore

* fix:navbar to index (#5295)

* sidbar

* fix: navtab unlight (#5298)

* doc

---------

Co-authored-by: dreamer6680 <1468683855@qq.com>
Co-authored-by: dreamer6680 <146868355@qq.com>
This commit is contained in:
Archer
2025-07-23 21:35:03 +08:00
committed by GitHub
parent ce9ec1bf57
commit fe7abf22a9
895 changed files with 36297 additions and 56 deletions

92
document/meta-order.js Normal file
View File

@@ -0,0 +1,92 @@
import fs from 'fs-extra';
import path from 'path';
// 从 mdx 文件中读取 weight
async function getWeightFromFile(filePath) {
const content = await fs.readFile(filePath, 'utf-8');
const weightMatch = content.match(/weight:\s*(\d+)/);
return weightMatch ? parseInt(weightMatch[1], 10) : 0;
}
// 从 meta.json 中读取最小 weight用于子目录
async function getWeightFromMeta(dir) {
const metaPath = path.join(dir, 'meta.json');
if (!(await fs.pathExists(metaPath))) return Infinity;
try {
const meta = await fs.readJson(metaPath);
const pages = meta.pages || [];
let minWeight = Infinity;
for (const pageName of pages) {
const mdxPath = path.join(dir, `${pageName}.mdx`);
if (await fs.pathExists(mdxPath)) {
const w = await getWeightFromFile(mdxPath);
if (w < minWeight) minWeight = w;
}
}
return minWeight === Infinity ? 0 : minWeight;
} catch {
return 0;
}
}
// 主函数,返回当前目录的最小 weight
async function generateMetaRecursive(dir) {
const entries = await fs.readdir(dir, { withFileTypes: true });
const items = [];
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
const subWeight = await generateMetaRecursive(fullPath);
items.push({ name: entry.name, weight: subWeight });
} else if (
entry.isFile() &&
entry.name.endsWith('.mdx') &&
!entry.name.endsWith('.en.mdx')
) {
const nameWithoutExt = entry.name.replace(/\.mdx$/, '');
const weight = await getWeightFromFile(fullPath);
items.push({ name: nameWithoutExt, weight });
}
}
// 排序 pages
items.sort((a, b) => a.weight - b.weight);
const pages = items.map((item) => item.name);
// 读取或创建 meta.json
const metaPath = path.join(dir, 'meta.json');
let meta = {
title: 'FastGPT',
description: 'FastGPT Docs',
};
if (await fs.pathExists(metaPath)) {
try {
meta = await fs.readJson(metaPath);
} catch {
console.warn(`⚠️ Failed to parse existing meta.json at ${metaPath}, using defaults.`);
}
}
meta.pages = pages;
// 写入 meta.json格式化为一行的 pages
const jsonString = JSON.stringify(meta, null, 2);
const oneLinePages = `"pages": ${JSON.stringify(pages)}`;
const finalJson = jsonString.replace(/"pages": \[[\s\S]*?\]/, oneLinePages);
await fs.writeFile(metaPath, finalJson, 'utf-8');
console.log(`✅ Updated meta.json in ${dir}`);
return items.length > 0 ? items[0].weight : 0;
}
// 启动
const targetDir = './content/docs/introduction/development/upgrading';
generateMetaRecursive(targetDir)
.then(() => console.log('🎉 All meta.json files generated/updated!'))
.catch((err) => console.error(err));