catalog.js
Version:
A JavaScript / TypeScript API for the Middlebury course catalog.
58 lines • 2.13 kB
JavaScript
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