import { Card, Set } from '../../../interfaces' import glob from 'glob' import fetch from 'node-fetch' import * as legals from '../../../meta/legals' interface fileCacheInterface { [key: string]: any } export const DB_PATH = "../" const fileCache: fileCacheInterface = {} /** * Fetch a JSON file from a remote location * @param url the URL to fetch * @returns the JSON file content */ export async function fetchRemoteFile(url: string): Promise { if (!fileCache[url]) { const resp = await fetch(url, { timeout: 60 * 1000 }) fileCache[url] = resp.json() } return fileCache[url] } const globCache: Record> = {} export async function smartGlob(query: string): Promise> { if (!globCache[query]) { globCache[query] = await new Promise((res) => { glob(query, (_, matches) => res(matches)) }) } return globCache[query] } /** * Check if a card is currently Legal * @param type the type of legality * @param card the card to check * @param localId the card localid * @returns {boolean} if the card is currently in the legal type */ export function cardIsLegal(type: 'standard' | 'expanded', card: Card, localId: string): boolean { const legal = legals[type] if ( legal.includes.series.includes(card.set.serie.id) || legal.includes.sets.includes(card.set.id) || card.regulationMark && legal.includes.regulationMark.includes(card.regulationMark) ) { return !( legal.excludes.sets.includes(card.set.id) || legal.excludes.cards.includes(`${card.set.id}-${localId}`) ) } return false } /** * Check if a set is currently Legal * @param type the type of legality * @param set the set to check * @returns {boolean} if the set is currently in the legal type */ export function setIsLegal(type: 'standard' | 'expanded', set: Set): boolean { const legal = legals[type] if ( legal.includes.series.includes(set.serie.id) || legal.includes.sets.includes(set.id) ) { return !legal.excludes.sets.includes(set.id) } return false }