Add helper functions for news

This commit is contained in:
Aditya Thakral 2021-08-09 21:44:26 -04:00
parent d1e0736b2e
commit a2a8900b74
2 changed files with 67 additions and 0 deletions

64
lib/news.ts Normal file
View File

@ -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,
};
}

3
types.d.ts vendored
View File

@ -1,3 +1,6 @@
/* eslint-disable import/order */
/* eslint-disable import/no-duplicates */
declare module "*.event.mdx" {
import { ComponentType } from "react";