Change lib functions to support new format

This commit is contained in:
Aditya Thakral 2021-10-09 20:58:16 -04:00
parent 70336f13c6
commit 69197ba450
2 changed files with 41 additions and 5 deletions

View File

@ -1,6 +1,8 @@
import fs from "fs/promises";
import path from "path";
import { parse } from "date-fns";
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
import matter from "gray-matter";
import { MDXRemoteSerializeResult } from "next-mdx-remote";
import { serialize } from "next-mdx-remote/serialize";
@ -26,6 +28,16 @@ export async function getEventTermsByYear(year: string): Promise<string[]> {
.sort((a, b) => TERMS.indexOf(a) - TERMS.indexOf(b));
}
interface RawMetadata {
name: string;
poster?: string;
short: string;
date: string;
online?: boolean;
location: string;
registerLink?: string;
}
interface Metadata {
name: string;
poster?: string;
@ -42,21 +54,28 @@ export interface Event {
metadata: Metadata;
}
export const DATE_FORMAT = "MMMM dd yyyy HH:mm";
export async function getEventBySlug(
year: string,
term: string,
slug: string
): Promise<Event> {
const raw = await fs.readFile(
const file = await fs.readFile(
path.join(EVENTS_PATH, year, term, `${slug}.md`),
"utf-8"
);
const { content, data: metadata } = matter(raw);
const { content, data } = matter(file);
const raw = data as RawMetadata;
return {
content: await serialize(content),
metadata: {
...metadata,
...raw,
online: raw.online ?? false,
date: getLocalDateFromEST(
parse(raw.date, DATE_FORMAT, new Date())
).toString(),
// permaLink is based on the directory structure in /pages
permaLink: `/events/${year}/${term}/${slug}`,
} as Metadata,
@ -270,3 +289,12 @@ function getFutureTerm(
term: TERMS[index + 1],
};
}
// The date that's returned should be in local time
export function getLocalDateFromEST(date: Date) {
return utcToZonedTime(
// The parsed date is in EST
zonedTimeToUtc(date, "America/Toronto"),
Intl.DateTimeFormat().resolvedOptions().timeZone
);
}

View File

@ -1,11 +1,14 @@
import fs from "fs/promises";
import path from "path";
import { parse } from "date-fns";
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");
import { DATE_FORMAT, getLocalDateFromEST } from "./events";
export const NEWS_PATH = path.join("content", "news");
const TERMS = ["winter", "spring", "fall"];
export interface Metadata {
@ -62,7 +65,12 @@ export async function getNewsBySlug(
return {
content: await serialize(content),
metadata: metadata as Metadata,
metadata: {
...metadata,
date: getLocalDateFromEST(
parse(metadata.date, DATE_FORMAT, new Date())
).toString(),
} as Metadata,
};
}