import fs from 'fs'; import path from 'path'; import matter from 'gray-matter'; import readingTime from 'reading-time'; const postsDirectory = path.join(process.cwd(), 'posts'); export interface PostData { id: string; date: string; title: string; description: string; content: string; readingTime: string; } export interface PostMeta { id: string; date: string; title: string; description: string; readingTime: string; } export function getSortedPostsData(): PostMeta[] { try { const fileNames = fs.readdirSync(postsDirectory); const allPostsData = fileNames .filter(fileName => fileName.endsWith('.mdx')) .map(fileName => { const id = fileName.replace(/\.mdx$/, ''); const fullPath = path.join(postsDirectory, fileName); const fileContents = fs.readFileSync(fullPath, 'utf8'); const matterResult = matter(fileContents); const stats = readingTime(matterResult.content); return { id, date: matterResult.data.date as string, title: matterResult.data.title as string, description: matterResult.data.description as string, readingTime: stats.text, }; }); return allPostsData.sort((a, b) => (a.date < b.date ? 1 : -1)); } catch (error) { console.log("No 'posts' directory found, returning empty array."); return []; } } export function getAllPostIds() { try { const fileNames = fs.readdirSync(postsDirectory); return fileNames.map(fileName => ({ params: { slug: fileName.replace(/\.mdx$/, ''), }, })); } catch (error) { return []; } } export async function getPostData(id: string): Promise { const fullPath = path.join(postsDirectory, `${id}.mdx`); const fileContents = fs.readFileSync(fullPath, 'utf8'); const matterResult = matter(fileContents); const stats = readingTime(matterResult.content); return { id, content: matterResult.content, date: matterResult.data.date, title: matterResult.data.title, description: matterResult.data.description, readingTime: stats.text, }; }