UNPKG

@trivia-api/models

Version:

Models for The Trivia API.

116 lines (115 loc) 3.41 kB
import { isQuestionCategory } from "./guards/question"; import { isCategory } from "./v2"; /** * Used to map categories to common other formattings and spellings */ export const CategoryMap = new Map(); CategoryMap.set("Arts & Literature", [ "arts", "literature", "arts & literature", "arts_and_literature", "novels", ]); CategoryMap.set("Film & TV", ["movies", "film", "film & tv", "film_and_tv"]); CategoryMap.set("Food & Drink", [ "food & drink", "food_and_drink", "food", "drink", "alcohol", ]); CategoryMap.set("General Knowledge", ["general_knowledge"]); CategoryMap.set("Geography", ["geography"]); CategoryMap.set("History", ["history"]); CategoryMap.set("Music", ["music"]); CategoryMap.set("Science", ["science"]); CategoryMap.set("Society & Culture", [ "society & culture", "society_and_culture", "society", "culture", ]); CategoryMap.set("Sport & Leisure", [ "sport_and_leisure", "sports", "sport", "sport & leisure", "games", ]); /** * Gets a DB Question category from any input string. * @param input * @returns */ export const getCategory = (input) => { var _a; const [matchingLabel] = (_a = Array.from(CategoryMap.entries()).find(([label, values]) => values.includes(decodeURI(input.toLowerCase())))) !== null && _a !== void 0 ? _a : []; return matchingLabel !== null && matchingLabel !== void 0 ? matchingLabel : "General Knowledge"; }; /** * Convert a V1 category to a V2 category * @param category - The V1 category to convert * @returns The V2 category */ export 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; } }; export 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; } }; export const convertUnknownCategoryToV2 = (category) => { if (isCategory(category)) { return category; } if (isQuestionCategory(category)) { return convertV1OrV2CategoryToV2(category); } return convertV1OrV2CategoryToV2(getCategory(category)); };