UNPKG

catalog.js

Version:

A JavaScript / TypeScript API for the Middlebury course catalog.

58 lines 2.13 kB
import { isCourseID, stripHtml } from "../utils.js"; import Alias from "./Alias.js"; export default class AliasFactory { aliases; constructor(titleString, alternates, courseID) { this.aliases = new Map(); const ids = new Set(); const titleID = this._parseIDFromTitle(titleString); if (titleID && isCourseID(titleID) && titleID !== courseID) { ids.add(titleID); } const alternateIDs = this._parseIDsFromAlternateArray(alternates); alternateIDs.forEach((alternateID) => { if (alternateID && isCourseID(alternateID) && alternateID !== courseID) { ids.add(alternateID); } }); ids.forEach((id) => { this.aliases.set(id, new Alias(id)); }); } getAliases() { return Array.from(this.aliases.values()); } _parseIDFromTitle(titleCourseString) { const titleString = stripHtml(titleCourseString); const reg = /(Please Register|Please register|please register)/; const split = titleString?.split(reg); if (split.length < 3) { return ""; } let courseString = split[2]; //now remove the via or vis string const viaSplits = courseString?.split("via") ?? []; if (viaSplits.length > 1) { courseString = viaSplits[1]; } //this exists as a typo in the winter 2022 catalog entry for Introduction to the Talmud const visSplits = courseString?.split("vis") ?? []; if (visSplits.length > 1) { courseString = visSplits[1]; } return courseString.trim(); } _parseIDFromAlternate(alternate) { if (!alternate) { return ""; } return alternate?._?.split("-")?.[0]?.slice(0, -1) ?? ""; } _parseIDsFromAlternateArray(alternates) { if (!alternates) { return []; } return alternates?.map((alternate) => this._parseIDFromAlternate(alternate)); } } //# sourceMappingURL=AliasFactory.js.map