diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/Posts.tsx | 57 |
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 |