import { project } from "./project.js"; import { submission } from "./submission.js"; class loader { #load_from; #database; #content; constructor(database, project) { if (typeof(database) !== "string") { throw "Database URL must be string."; } if (typeof(project) !== "string") { throw "Project file must be string."; } this.#database = database; this.#load_from = database + "/" + project; this.#content = null; } async load() { const fetched = await fetch(this.#load_from); const result = await fetched.json(); this.#content = result; } get loaded() { if (this.#content === null) { throw "Must load database before trying to access it."; } const content = this.#content; const result = new project(content.name); if (typeof(content.description) !== "undefined") { result.description = content.description; } if (typeof(content.submissions) === "undefined") { return result; } const submissions = Array.from(content.submissions); submissions.forEach(submission => { const item = this.#prepare_one(submission); if (item === null) { return; } result.add(item); }); } #prepare_image(url) { return this.#database + "/" + url; } #prepare_one(input) { if (typeof(input.name) === "undefined") { return null; } const submission = new submission(input.name) if (typeof(input.description) !== "undefined") { submission.description = input.description; } if (typeof(input.thumbnail) !== "undefined") { submission.thumbnail = this.#prepare_image(input.thumbnail); } return submission; } } export { loader };