@trivia-api/models
Version:
Models for The Trivia API.
123 lines (122 loc) • 3.98 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertUnknownCategoryToV2 = exports.convertV1OrV2CategoryToV1 = exports.convertV1OrV2CategoryToV2 = exports.getCategory = exports.CategoryMap = void 0;
const question_1 = require("./guards/question");
const v2_1 = require("./v2");
/**
* Used to map categories to common other formattings and spellings
*/
exports.CategoryMap = new Map();
exports.CategoryMap.set("Arts & Literature", [
"arts",
"literature",
"arts & literature",
"arts_and_literature",
"novels",
]);
exports.CategoryMap.set("Film & TV", ["movies", "film", "film & tv", "film_and_tv"]);
exports.CategoryMap.set("Food & Drink", [
"food & drink",
"food_and_drink",
"food",
"drink",
"alcohol",
]);
exports.CategoryMap.set("General Knowledge", ["general_knowledge"]);
exports.CategoryMap.set("Geography", ["geography"]);
exports.CategoryMap.set("History", ["history"]);
exports.CategoryMap.set("Music", ["music"]);
exports.CategoryMap.set("Science", ["science"]);
exports.CategoryMap.set("Society & Culture", [
"society & culture",
"society_and_culture",
"society",
"culture",
]);
exports.CategoryMap.set("Sport & Leisure", [
"sport_and_leisure",
"sports",
"sport",
"sport & leisure",
"games",
]);
/**
* Gets a DB Question category from any input string.
* @param input
* @returns
*/
const getCategory = (input) => {
var _a;
const [matchingLabel] = (_a = Array.from(exports.CategoryMap.entries()).find(([label, values]) => values.includes(decodeURI(input.toLowerCase())))) !== null && _a !== void 0 ? _a : [];
return matchingLabel !== null && matchingLabel !== void 0 ? matchingLabel : "General Knowledge";
};
exports.getCategory = getCategory;
/**
* Convert a V1 category to a V2 category
* @param category - The V1 category to convert
* @returns The V2 category
*/
const convertV1OrV2CategoryToV2 = (category) => {
switch (category) {
case "Arts & Literature":
return "arts_and_literature";
case "Film & TV":
return "film_and_tv";
case "Food & Drink":
return "food_and_drink";
case "General Knowledge":
return "general_knowledge";
case "Geography":
return "geography";
case "History":
return "history";
case "Music":
return "music";
case "Science":
return "science";
case "Society & Culture":
return "society_and_culture";
case "Sport & Leisure":
return "sport_and_leisure";
default:
return category;
}
};
exports.convertV1OrV2CategoryToV2 = convertV1OrV2CategoryToV2;
const convertV1OrV2CategoryToV1 = (category) => {
switch (category) {
case "arts_and_literature":
return "Arts & Literature";
case "film_and_tv":
return "Film & TV";
case "food_and_drink":
return "Food & Drink";
case "general_knowledge":
return "General Knowledge";
case "geography":
return "Geography";
case "history":
return "History";
case "music":
return "Music";
case "science":
return "Science";
case "society_and_culture":
return "Society & Culture";
case "sport_and_leisure":
return "Sport & Leisure";
default:
return category;
}
};
exports.convertV1OrV2CategoryToV1 = convertV1OrV2CategoryToV1;
const convertUnknownCategoryToV2 = (category) => {
if ((0, v2_1.isCategory)(category)) {
return category;
}
if ((0, question_1.isQuestionCategory)(category)) {
return (0, exports.convertV1OrV2CategoryToV2)(category);
}
return (0, exports.convertV1OrV2CategoryToV2)((0, exports.getCategory)(category));
};
exports.convertUnknownCategoryToV2 = convertUnknownCategoryToV2;