65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
|
import path from "node:path";
|
|||
|
import fs from "node:fs";
|
|||
|
|
|||
|
const DIR_PATH = path.resolve("docs");
|
|||
|
const WHITE_LIST = ["index.md", ".vitepress", "node_modules", ".idea", "assets", "public"];
|
|||
|
|
|||
|
const isDirectory = (path) => fs.lstatSync(path).isDirectory();
|
|||
|
const intersections = (arr1, arr2) =>
|
|||
|
Array.from(new Set(arr1.filter((item) => !new Set(arr2).has(item))));
|
|||
|
|
|||
|
// 新增:按文件系统原始顺序排序
|
|||
|
const keepOriginalOrder = (files, dirPath) => {
|
|||
|
return files
|
|||
|
.map(file => ({
|
|||
|
name: file,
|
|||
|
time: fs.statSync(path.join(dirPath, file)).birthtimeMs // 获取创建时间戳
|
|||
|
}))
|
|||
|
.sort((a, b) => a.time - b.time) // 按创建时间排序
|
|||
|
.map(item => item.name);
|
|||
|
};
|
|||
|
|
|||
|
function getList(params, path1, pathname) {
|
|||
|
const res = [];
|
|||
|
|
|||
|
// 修改点1:使用 keepOriginalOrder 保持原始顺序
|
|||
|
const orderedParams = keepOriginalOrder(params, path1);
|
|||
|
|
|||
|
for (let file of orderedParams) { // 修改点2:改用 for...of 遍历
|
|||
|
const dir = path.join(path1, file);
|
|||
|
const isDir = isDirectory(dir);
|
|||
|
|
|||
|
if (isDir) {
|
|||
|
const files = fs.readdirSync(dir);
|
|||
|
res.push({
|
|||
|
text: file,
|
|||
|
collapsible: true,
|
|||
|
items: getList(files, dir, `${pathname}/${file}`),
|
|||
|
});
|
|||
|
} else {
|
|||
|
const suffix = path.extname(file);
|
|||
|
if (suffix !== ".md") continue;
|
|||
|
|
|||
|
const name = path.basename(file, '.md');
|
|||
|
res.push({
|
|||
|
text: name,
|
|||
|
link: `${pathname}/${name}`,
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 修改点3:完全移除 sort() 调用
|
|||
|
return res;
|
|||
|
}
|
|||
|
|
|||
|
export const set_sidebar = (pathname) => {
|
|||
|
try {
|
|||
|
const dirPath = path.join(DIR_PATH, pathname);
|
|||
|
const files = fs.readdirSync(dirPath);
|
|||
|
const items = intersections(files, WHITE_LIST);
|
|||
|
return getList(items, dirPath, pathname);
|
|||
|
} catch (error) {
|
|||
|
console.error(`Error generating sidebar for ${pathname}:`, error);
|
|||
|
return [];
|
|||
|
}
|
|||
|
};
|