@giancosta86/omnicourse-core
Version:
Core model for OmniCourse
72 lines • 2.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.NamedRawTaxonomy = void 0;
const stream_1 = require("@rimbu/stream");
const time_utils_1 = require("@giancosta86/time-utils");
const taxonomy_1 = require("../../taxonomy");
var NamedRawTaxonomy;
(function (NamedRawTaxonomy) {
function reify({ locale, name, rawTaxonomy }) {
const rootSubjects = RawSubjects.reify(locale, rawTaxonomy);
return taxonomy_1.Taxonomy.create(locale, name, rootSubjects);
}
NamedRawTaxonomy.reify = reify;
})(NamedRawTaxonomy || (exports.NamedRawTaxonomy = NamedRawTaxonomy = {}));
var RawSubjects;
(function (RawSubjects) {
function reify(locale, rawSubjects) {
return stream_1.Stream.from(Object.entries(rawSubjects)).flatMap(([subjectName, rawSubjectItems]) => {
const subject = RawSubject.reify(locale, subjectName, rawSubjectItems);
return subject ? [subject] : [];
});
}
RawSubjects.reify = reify;
})(RawSubjects || (RawSubjects = {}));
var RawSubject;
(function (RawSubject) {
function reify(locale, subjectName, rawSubjectItems) {
const subjectItems = rawSubjectItems[Symbol.iterator]
? RawWorks.reify(rawSubjectItems)
: RawSubjects.reify(locale, rawSubjectItems);
if (subjectItems[Symbol.iterator]().next().done) {
return null;
}
return taxonomy_1.Subject.create(locale, subjectName, subjectItems);
}
RawSubject.reify = reify;
})(RawSubject || (RawSubject = {}));
var RawWorks;
(function (RawWorks) {
function reify(rawWorks) {
return stream_1.Stream.from(rawWorks).map(RawWork.reify);
}
RawWorks.reify = reify;
})(RawWorks || (RawWorks = {}));
var RawWork;
(function (RawWork) {
function reify(rawWork) {
if (rawWork.title == null) {
throw new Error(`Missing work title: ${JSON.stringify(rawWork)}`);
}
const title = String(rawWork.title);
if (rawWork.minutes == null) {
throw new Error(`Missing 'minutes' field in work '${title}'`);
}
const minutes = Math.round(Number(rawWork.minutes));
if (isNaN(minutes)) {
throw new Error(`'minutes' field in work '${title}' is not a number`);
}
return new taxonomy_1.Work(title, minutes, {
kind: rawWork.kind ? String(rawWork.kind) : undefined,
completionDate: rawWork.completionDate
? new time_utils_1.IsoDate(String(rawWork.completionDate))
: undefined,
url: rawWork.url ? String(rawWork.url) : undefined,
certificateUrl: rawWork.certificateUrl
? String(rawWork.certificateUrl)
: undefined
});
}
RawWork.reify = reify;
})(RawWork || (RawWork = {}));
//# sourceMappingURL=reify.js.map
;