46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import fs from "fs";
|
|
import path from "path";
|
|
import { DefaultTheme } from "vitepress";
|
|
|
|
export const genSidebar = (
|
|
lang: string,
|
|
dirPath: string,
|
|
options: {
|
|
title: string;
|
|
collapsible?: boolean;
|
|
ignore?: string[];
|
|
},
|
|
): DefaultTheme.SidebarItem => {
|
|
const sidebarPath = path.resolve(process.cwd(), lang, dirPath);
|
|
const ignore = options.ignore || ["index.md"];
|
|
|
|
const files = fs
|
|
.readdirSync(sidebarPath)
|
|
.filter((file) => file.endsWith(".md") && !ignore.includes(file));
|
|
|
|
const items = files.map((file) => {
|
|
const content = fs.readFileSync(path.resolve(sidebarPath, file), "utf-8");
|
|
const match = content.match(/^#\s+(.*)/);
|
|
const title = match ? match[1] : file.replace(".md", "");
|
|
|
|
let prefix = "/";
|
|
if (lang != "en") {
|
|
prefix += lang;
|
|
prefix += "/";
|
|
}
|
|
|
|
return {
|
|
text: title,
|
|
/// Make sure link for en is actually root, beacuse Github Pages
|
|
/// doesn't support redirect url.
|
|
link: `${prefix}${dirPath}/${file.replace(".md", "")}`,
|
|
};
|
|
});
|
|
|
|
return {
|
|
text: options.title,
|
|
collapsed: options.collapsible || false,
|
|
items,
|
|
};
|
|
};
|