jsdoctoveps
Version:
js -> markdown-> vitepress
93 lines (85 loc) • 3.21 kB
JavaScript
import fsExtra from "fs-extra"
import path from "path"
/**
* 引入脚本获取 base_config.json 配置
* scanDir 要扫描的目录
*/
import { jsonData } from "../.vitepress/obtainJson"
let configData = jsonData();
let scanDir = configData.veps_outputDir ? configData.veps_outputDir : "mkdn";
const rootPath = path.join(__dirname, `../${scanDir}`); // 操作文件根目录
let sideDir = []; // 侧边栏结构容器
let isExist = false; //校验第一层目录下是否存在md文件
let otherId = ""; // 第一层目录下md容器位置
function generateStructure(route) { // 目录第一层级的处理函数
let list = fsExtra.readdirSync(route);
list.forEach((item, index) => {
let isDir = fsExtra.lstatSync(path.join(route, `${item}`)).isDirectory(); // 判断当前文件是否是文件夹
if (isDir) {
let aimRoute = path.join(rootPath, `${item}`)
sideDir.push({
collapsible: true, // 控制侧边栏能否折叠
collapsed: true,
text: `${item}`,
items: subDir(aimRoute, item) // 递归创建内部结构
})
} else {
if (!isExist) {
isExist = true;
otherId = index;
let aimFile = item.split(".");
aimFile.pop();
sideDir.push({
collapsible: true, // 控制侧边栏能否折叠
collapsed: true,
text: "others",
items: [{
text: aimFile.join("."),
link: `/${scanDir}/${aimFile.join(".")}`
}]
})
} else {
let aimFile = item.split(".");
aimFile.pop();
sideDir[otherId].items.push({
text: aimFile.join("."),
link: `/${scanDir}/${aimFile.join(".")}`
})
}
}
})
return sideDir;
}
/** subDir 生成子目录结构
* route 目标文件路径
* parentDir 父级目录路径
*/
function subDir(route, parentDir) { // 子目录结构的处理函数
let result = [];
let list = fsExtra.readdirSync(route);
list.forEach((item) => {
let isDir = fsExtra.lstatSync(path.join(route, `${item}`)).isDirectory();
if (isDir) { // 目录
let filePath = path.join(rootPath, parentDir, item);
let parentPath = `${parentDir}/${item}`
result.push({
collapsible: true, // 控制侧边栏能否折叠
collapsed: true,
text: item,
items: subDir(filePath, parentPath)
})
} else { // 文件
let aimFile = item.split(".");
aimFile.pop();
result.push({
text: aimFile.join("."),
link: `/${scanDir}/${parentDir}/${aimFile.join(".")}`
})
}
})
return result;
}
// 主函数
export function createSideBar() {
return generateStructure(rootPath);
}