www-new/scripts/generate-calendar.ts

49 lines
1.5 KiB
TypeScript

import { writeFile } from "fs/promises";
import path from "path";
import { addHours } from "date-fns";
import ical, { ICalCalendarMethod } from "ical-generator";
import { getAllEvents } from "@/lib/events";
export async function generateCalendar() {
const events = await getAllEvents();
const link = (link: string) =>
`https://${path.join(
"csclub.uwaterloo.ca",
process.env.NEXT_PUBLIC_BASE_PATH ?? "",
link
)}`;
const calendar = ical({
name: "University of Waterloo Computer Science Club",
method: ICalCalendarMethod.PUBLISH,
scale: "GREGORIAN",
x: { "X-WR-RELCALID": "3359A191-B19E-4B53-BADC-DFC084FC51C9" },
events: events.reverse().map(({ metadata }) => ({
id: `${new Date(metadata.startDate)
.toISOString()
.replaceAll("-", "")
.replaceAll(":", "")
.replaceAll(".", "")}@csclub.uwaterloo.ca`,
summary: metadata.name,
description: `${metadata.short} --- Learn more at ${link(
metadata.permaLink
)}`,
start: new Date(metadata.startDate),
end: metadata.endDate
? new Date(metadata.endDate)
: addHours(new Date(metadata.startDate), 1),
location: metadata.online
? metadata.location
: `University of Waterloo - ${metadata.location}`,
organizer: "exec@csclub.uwaterloo.ca",
url: link(metadata.permaLink),
})),
});
await writeFile("public/events.ics", calendar.toString());
}
void generateCalendar();