From 51967b62cd274b10326a604d4db670e9e89f8fd5 Mon Sep 17 00:00:00 2001
From: flu0r1ne <flu0r1ne@flu0r1ne.net>
Date: Wed, 21 Jul 2021 02:56:12 -0500
Subject: Automatic generation of list on log page

---
 utils/Posts.tsx | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100644 utils/Posts.tsx

(limited to 'utils/Posts.tsx')

diff --git a/utils/Posts.tsx b/utils/Posts.tsx
new file mode 100644
index 0000000..e82357a
--- /dev/null
+++ b/utils/Posts.tsx
@@ -0,0 +1,57 @@
+import { promises as fs } from 'fs';
+import path from 'path';
+
+interface PostMetadata {
+  name: string;
+}
+  
+interface Post {
+  directory: string;
+  path: string;
+  meta: PostMetadata;
+}
+
+export type {
+  PostMetadata,
+  Post
+};
+
+async function getMetadata(postPath : string) : Promise<PostMetadata> {
+  const metaPath = path.join(postPath, 'meta.json');
+
+  const postMetadata = await fs.readFile(metaPath, 'utf8');
+
+  return JSON.parse(postMetadata) as PostMetadata;
+}
+
+async function getPosts() : Promise<Post[]> {
+  const postsDirectory = path.join(process.cwd(), 'posts');
+  const directories = await fs.readdir(postsDirectory);
+
+  const posts = directories.map(async (directory) => {
+    const postPath = path.join(postsDirectory, directory);
+    
+    const meta = await getMetadata(postPath);
+
+    return {
+      directory,
+      path: postPath,
+      meta 
+    };
+  });
+
+  return await Promise.all(posts);
+}
+
+async function getMarkdown(post : Post) : Promise<string> {
+  const markdownPath = path.join(post.path, 'main.md');
+
+  const markdown = await fs.readFile(markdownPath, 'utf8');
+
+  return markdown;
+}
+
+export {
+  getPosts,
+  getMetadata,
+};
\ No newline at end of file
-- 
cgit v1.2.3

