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

37 lines
785 B
TypeScript
Raw Normal View History

2023-11-15 19:42:05 -08:00
import glob from 'fast-glob'
interface Article {
title: string
description: string
author: string
date: string
}
export interface ArticleWithSlug extends Article {
slug: string
}
async function importArticle(
articleFilename: string,
): Promise<ArticleWithSlug> {
let { article } = (await import(`../app/articles/${articleFilename}`)) as {
default: React.ComponentType
article: Article
}
return {
slug: articleFilename.replace(/(\/page)?\.mdx$/, ''),
...article,
}
}
export async function getAllArticles() {
let articleFilenames = await glob('*/page.mdx', {
cwd: './src/app/articles',
})
let articles = await Promise.all(articleFilenames.map(importArticle))
return articles.sort((a, z) => +new Date(z.date) - +new Date(a.date))
}