UNPKG

modaq

Version:

Quiz Bowl Reader using TypeScript, React, and MobX

125 lines 5.64 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadPacket = void 0; const he = __importStar(require("he")); const AppState_1 = require("../state/AppState"); require("../state/IPacket"); const PacketState_1 = require("../state/PacketState"); require("../state/UIState"); const minExpectedQuestionLength = 100; function loadPacket(parsedPacket, existingPacketName) { const appState = AppState_1.AppState.instance; const uiState = appState.uiState; if (parsedPacket.tossups == undefined) { uiState.setPacketStatus({ isError: true, status: "Error loading packet: Packet doesn't have a tossups field.", }); return; } const tossups = parsedPacket.tossups.map((tossup) => new PacketState_1.Tossup(he.decode(tossup.question), he.decode(tossup.answer), tossup.metadata ? he.decode(tossup.metadata) : tossup.metadata)); const bonuses = []; if (parsedPacket.bonuses) { for (let i = 0; i < parsedPacket.bonuses.length; i++) { const bonus = parsedPacket.bonuses[i]; if (bonus.answers.length !== bonus.parts.length || bonus.answers.length !== bonus.values.length) { const errorMessage = `Error loading packet: Unequal number of parts, answers, and values for bonus ${i + 1}. Answers #: ${bonus.answers.length}, Parts #: ${bonus.parts.length}, Values #: ${bonus.values.length}`; uiState.setPacketStatus({ isError: true, status: errorMessage, }); return; } const parts = []; for (let i = 0; i < bonus.answers.length; i++) { parts.push({ answer: he.decode(bonus.answers[i]), question: he.decode(bonus.parts[i]), value: bonus.values[i], difficultyModifier: bonus.difficultyModifiers ? bonus.difficultyModifiers[i] : undefined, }); } bonuses.push(new PacketState_1.Bonus(he.decode(bonus.leadin), parts, bonus.metadata ? he.decode(bonus.metadata) : bonus.metadata)); } } const packet = new PacketState_1.PacketState(); packet.setTossups(tossups); packet.setBonuses(bonuses); const packetName = uiState.packetFilename != undefined ? `"${uiState.packetFilename}"` : ""; uiState.setPacketStatus({ isError: false, status: `Packet ${packetName} loaded. ${tossups.length} tossup(s), ${bonuses.length} bonus(es).`, }, findWarnings(packet)); // If we have an existing packet, don't overwrite the name if (existingPacketName) { packet.setName(existingPacketName); } else if (uiState.packetFilename) { packet.setName(uiState.packetFilename); } return packet; } exports.loadPacket = loadPacket; function findWarnings(packet) { var _a, _b; const warnings = []; // Unexpected number of bonus parts const maxPartsCount = new Map(); for (const bonus of packet.bonuses) { const partsCount = bonus.parts.length; maxPartsCount.set(partsCount, 1 + ((_a = maxPartsCount.get(partsCount)) !== null && _a !== void 0 ? _a : 0)); } if (maxPartsCount.size > 1) { let maxCountCount = 0; let maxCountCandidate = 3; for (const candidate of maxPartsCount.keys()) { const candidateCount = (_b = maxPartsCount.get(candidate)) !== null && _b !== void 0 ? _b : 0; if (candidateCount > maxCountCount) { maxCountCount = candidateCount; maxCountCandidate = candidate; } } const badBonusNumbers = []; for (let i = 0; i < packet.bonuses.length; i++) { const bonus = packet.bonuses[i]; if (bonus.parts.length != maxCountCandidate) { badBonusNumbers.push(i + 1); } } if (badBonusNumbers.length > 0) { warnings.push(`Bonuses that aren't ${maxCountCandidate} parts long found at bonus(es) ${badBonusNumbers.join(", ")}.`); } } // Unexpectedly short question const shortQuestionNumbers = []; for (let i = 0; i < packet.tossups.length; i++) { const tossup = packet.tossups[i]; if (tossup.question.length < minExpectedQuestionLength) { shortQuestionNumbers.push(i + 1); } } if (shortQuestionNumbers.length > 0) { warnings.push(`Suspiciously short questions found at tossup(s) ${shortQuestionNumbers.join(", ")}.`); } return warnings; } //# sourceMappingURL=PacketLoaderController.js.map