UNPKG

@giancosta86/omnicourse-core

Version:
47 lines 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Subject = void 0; const Work_1 = require("./Work"); const SubjectSet_1 = require("./SubjectSet"); const WorkSet_1 = require("./WorkSet"); class Subject { static create(locale, name, items) { const firstItem = items[Symbol.iterator]().next(); if (firstItem.done) { throw new Error(`No items for subject '${name}'`); } const hasSubjects = firstItem.value instanceof Subject; const itemSet = hasSubjects ? SubjectSet_1.SubjectSet.createSorted(locale, items).assumeNonEmpty() : WorkSet_1.WorkSet.createSorted(locale, items).assumeNonEmpty(); return new Subject(name, itemSet); } static equals(left, right) { const basicEquality = left.name === right.name && left.containsSubjects === right.containsSubjects && left.totalMinutes === right.totalMinutes; if (!basicEquality) { return false; } return left.containsSubjects ? left.items .stream() .equals(right.items, Subject.equals) : left.items .stream() .equals(right.items, Work_1.Work.equals); } constructor(name, items) { this.name = name; this.items = items; if (!name) { throw new Error("Empty subject name"); } this.totalMinutes = items .stream() .fold(0, (cumulatedMinutes, item) => cumulatedMinutes + item.totalMinutes); this.containsSubjects = items.getAtIndex(0) instanceof Subject; } } exports.Subject = Subject; //# sourceMappingURL=Subject.js.map