70 lines
2 KiB
TypeScript
70 lines
2 KiB
TypeScript
import { default as pathlib } from "path";
|
|
import fg from "fast-glob";
|
|
import fs from "fs";
|
|
import matter from "gray-matter";
|
|
|
|
const wikiDir = pathlib.join(process.cwd(), "InvestWiki/wiki");
|
|
|
|
const getAllFiles = (path: string) => {
|
|
const files = fg.sync("**/*.md", {
|
|
cwd: path,
|
|
onlyFiles: true,
|
|
absolute: false,
|
|
});
|
|
return files;
|
|
};
|
|
|
|
function getAllWikiPaths() {
|
|
const files = getAllFiles(wikiDir);
|
|
// manipulate array entries, remove the .md extension and move it to the front of the string
|
|
const paths = files.map((file: string) => {
|
|
const path = file.replace(".md", "");
|
|
// move the last part of the path to the front
|
|
const pathParts = path.split("/");
|
|
const lastPart = pathParts.pop();
|
|
if (lastPart) {
|
|
pathParts.unshift(lastPart);
|
|
}
|
|
return pathParts.join("/");
|
|
});
|
|
return paths;
|
|
}
|
|
|
|
function getWikiPath(lang: string, path: string) {
|
|
const files = getAllFiles(wikiDir);
|
|
// filter the files to only include the ones in the path
|
|
const pageFiles = files.filter(
|
|
(file) => file.split("/").slice(0, -1).join("/") === path
|
|
);
|
|
|
|
let pagePath = "";
|
|
// do https://github.com/vercel/next.js/blob/canary/examples/blog-starter/lib/api.ts
|
|
if (pageFiles.length !== 0) {
|
|
// check if there is a file with the language code
|
|
const langFile = pageFiles.find((file) => file.includes(`${lang}.md`));
|
|
if (langFile) {
|
|
pagePath = langFile;
|
|
} else {
|
|
// otherwise, use the english file if it exists, otherwise return the first file
|
|
pagePath =
|
|
pageFiles.find((file) => file.includes("en.md")) ?? pageFiles[0];
|
|
}
|
|
}
|
|
return pagePath;
|
|
}
|
|
|
|
function getWikiContent(lang: string, path: string) {
|
|
// get the path to the file
|
|
const relativePath = getWikiPath(lang, path);
|
|
if (!relativePath) {
|
|
return null;
|
|
}
|
|
const filePath = pathlib.join(wikiDir, relativePath);
|
|
// read the file
|
|
const fileContents = fs.readFileSync(filePath, "utf8");
|
|
const { data, content } = matter(fileContents);
|
|
|
|
return { data, content };
|
|
}
|
|
|
|
export { getWikiPath, getAllWikiPaths, getWikiContent };
|