west-sound-hall/src/lib/articles.ts

34 lines
767 B
TypeScript

import glob from 'fast-glob';
interface BlogPost {
title: string;
description: string;
author: string;
date: string;
}
export interface BlogPostWithSlug extends BlogPost {
slug: string;
}
async function importBlogPost(filename: string): Promise<BlogPostWithSlug> {
let { article } = (await import(`../app/news/${filename}`)) as {
default: React.ComponentType;
article: BlogPost;
};
return {
slug: filename.replace(/(\/page)?\.mdx$/, ''),
...article,
};
}
export async function getAllBlogPosts() {
let articleFilenames = await glob('*/page.mdx', {
cwd: './src/app/news',
});
const posts = await Promise.all(articleFilenames.map(importBlogPost));
return posts.sort((a, z) => +new Date(z.date) - +new Date(a.date));
}