Change lib functions to support new format
This commit is contained in:
parent
70336f13c6
commit
69197ba450
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
12
lib/news.ts
12
lib/news.ts
|
@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue