mirror of
https://github.com/tcsenpai/obsidiangarden_netlify.git
synced 2025-06-06 04:35:20 +00:00
88 lines
2.0 KiB
JavaScript
88 lines
2.0 KiB
JavaScript
const fsFileTree = require("fs-file-tree");
|
|
const matter = require("gray-matter");
|
|
const fs = require("fs");
|
|
|
|
module.exports = async () => {
|
|
const tree = await fsFileTree("src/site/notes");
|
|
populateWithPermalink(tree);
|
|
|
|
return sortTree(tree);
|
|
};
|
|
|
|
const sortTree = (unsorted) => {
|
|
//Sort by folder before file, then by name
|
|
const orderedTree = Object.keys(unsorted)
|
|
.sort((a, b) => {
|
|
if (a.indexOf(".md") > -1 && b.indexOf(".md") === -1) {
|
|
return 1;
|
|
}
|
|
|
|
if (a.indexOf(".md") === -1 && b.indexOf(".md") > -1) {
|
|
return -1;
|
|
}
|
|
|
|
if (a.toLowerCase() > b.toLowerCase()) {
|
|
return 1;
|
|
}
|
|
|
|
return -1;
|
|
})
|
|
.reduce((obj, key) => {
|
|
obj[key] = unsorted[key];
|
|
|
|
return obj;
|
|
}, {});
|
|
|
|
for (const key of Object.keys(orderedTree)) {
|
|
if (!orderedTree[key].path) {
|
|
orderedTree[key] = sortTree(orderedTree[key]);
|
|
}
|
|
}
|
|
|
|
return orderedTree;
|
|
};
|
|
|
|
function getPermalinkMeta(path, key) {
|
|
let permalink = "/";
|
|
let name = key.replace(".md", "");
|
|
let noteIcon = process.env.NOTE_ICON_DEFAULT;
|
|
try {
|
|
const file = fs.readFileSync(`${path}`, "utf8");
|
|
const frontMatter = matter(file);
|
|
if (frontMatter.data.permalink) {
|
|
permalink = frontMatter.data.permalink;
|
|
}
|
|
if (frontMatter.data.title) {
|
|
name = frontMatter.data.title;
|
|
}
|
|
if (frontMatter.data.noteIcon) {
|
|
noteIcon = frontMatter.data.noteIcon;
|
|
}
|
|
} catch {
|
|
//ignore
|
|
}
|
|
|
|
return { permalink, name, noteIcon };
|
|
}
|
|
|
|
function populateWithPermalink(tree) {
|
|
Object.keys(tree).forEach((key) => {
|
|
if (tree[key].path) {
|
|
const isNote = tree[key].path.endsWith(".md");
|
|
tree[key].isNote = isNote;
|
|
if (isNote) {
|
|
let { permalink, name, noteIcon } = getPermalinkMeta(
|
|
tree[key].path,
|
|
key
|
|
);
|
|
tree[key].permalink = permalink;
|
|
tree[key].name = name;
|
|
tree[key].noteIcon = noteIcon;
|
|
}
|
|
} else {
|
|
tree[key].isFolder = true;
|
|
populateWithPermalink(tree[key]);
|
|
}
|
|
});
|
|
}
|