aboutsummaryrefslogtreecommitdiff
path: root/utils/Posts.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'utils/Posts.tsx')
-rw-r--r--utils/Posts.tsx57
1 files changed, 57 insertions, 0 deletions
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