Add helper functions for news
This commit is contained in:
parent
d1e0736b2e
commit
a2a8900b74
|
@ -0,0 +1,64 @@
|
|||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
|
||||
import matter from "gray-matter";
|
||||
import { MDXRemoteSerializeResult } from "next-mdx-remote";
|
||||
import { serialize } from "next-mdx-remote/serialize";
|
||||
|
||||
const NEWS_PATH = path.join("content", "news");
|
||||
|
||||
interface Metadata {
|
||||
author: string;
|
||||
date: string;
|
||||
}
|
||||
|
||||
export interface News {
|
||||
content: MDXRemoteSerializeResult<Record<string, unknown>>;
|
||||
metadata: Metadata;
|
||||
}
|
||||
|
||||
export async function getNewsYears(): Promise<string[]> {
|
||||
return (await fs.readdir(NEWS_PATH, { withFileTypes: true }))
|
||||
.filter((dirent) => dirent.isDirectory())
|
||||
.map((dirent) => dirent.name);
|
||||
}
|
||||
|
||||
export async function getNewsTermsByYear(year: string): Promise<string[]> {
|
||||
return (
|
||||
await fs.readdir(path.join(NEWS_PATH, year), {
|
||||
withFileTypes: true,
|
||||
})
|
||||
)
|
||||
.filter((dirent) => dirent.isDirectory())
|
||||
.map((dirent) => dirent.name);
|
||||
}
|
||||
|
||||
export async function getNewsByTerm(
|
||||
year: string,
|
||||
term: string
|
||||
): Promise<string[]> {
|
||||
return (
|
||||
await fs.readdir(path.join(NEWS_PATH, year, term), {
|
||||
withFileTypes: true,
|
||||
})
|
||||
)
|
||||
.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md"))
|
||||
.map((dirent) => dirent.name.slice(0, -".md".length));
|
||||
}
|
||||
|
||||
export async function getNewsBySlug(
|
||||
year: string,
|
||||
term: string,
|
||||
slug: string
|
||||
): Promise<News> {
|
||||
const raw = await fs.readFile(
|
||||
path.join(NEWS_PATH, year, term, `${slug}.md`),
|
||||
"utf-8"
|
||||
);
|
||||
const { content, data: metadata } = matter(raw);
|
||||
|
||||
return {
|
||||
content: await serialize(content),
|
||||
metadata: metadata as Metadata,
|
||||
};
|
||||
}
|
|
@ -1,3 +1,6 @@
|
|||
/* eslint-disable import/order */
|
||||
/* eslint-disable import/no-duplicates */
|
||||
|
||||
declare module "*.event.mdx" {
|
||||
import { ComponentType } from "react";
|
||||
|
||||
|
|
Loading…
Reference in New Issue