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 EVENTS_PATH = path.join("content", "events"); const TERMS = ["winter", "spring", "fall"]; export async function getEventYears(): Promise { return (await fs.readdir(EVENTS_PATH, { withFileTypes: true })) .filter((dirent) => dirent.isDirectory()) .map((dirent) => dirent.name) .sort(); } export async function getEventTermsByYear(year: string): Promise { return ( await fs.readdir(path.join(EVENTS_PATH, year), { withFileTypes: true }) ) .filter((dirent) => dirent.isDirectory() && TERMS.includes(dirent.name)) .map((dirent) => dirent.name) .sort((a, b) => TERMS.indexOf(a) - TERMS.indexOf(b)); } interface Metadata { name: string; short: string; date: string; online: boolean; location: string; } export interface Event { content: MDXRemoteSerializeResult>; metadata: Metadata; } export async function getEventBySlug( year: string, term: string, slug: string ): Promise { const raw = await fs.readFile( path.join(EVENTS_PATH, year, term, `${slug}.md`), "utf-8" ); const { content, data: metadata } = matter(raw); return { content: await serialize(content), metadata: metadata as Metadata, }; } export async function getEventsByTerm( year: string, term: string ): Promise { return (await fs.readdir(path.join(EVENTS_PATH, year, term))) .filter((name) => name.endsWith(".md")) .map((name) => name.slice(0, -".md".length)); }