Nearly finished 😄

Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
2021-03-11 21:55:23 +01:00
parent 7809913d18
commit 2d40b72218
69 changed files with 1375 additions and 1490 deletions

View File

@ -1,10 +0,0 @@
import Rarity, { RaritySimple } from "@tcgdex/sdk/interfaces/Rarity";
import { Langs } from "@tcgdex/sdk/interfaces/LangList";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
export function rarityToRaritySimple(rarity: Rarity, lang: Langs): RaritySimple {
return {
id: rarity,
name: TranslationUtil.translate("rarity", rarity, lang)
}
}

View File

@ -1,10 +0,0 @@
import Tag, { TagSimple } from "@tcgdex/sdk/interfaces/Tag";
import { Langs } from "@tcgdex/sdk/interfaces/LangList";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
export function tagToTagSimple(tag: Tag, lang: Langs): TagSimple {
return {
id: tag,
name: TranslationUtil.translate("tag", tag, lang)
}
}

View File

@ -1,22 +0,0 @@
import Ability from "@tcgdex/sdk/interfaces/Ability";
import { Langs } from "@tcgdex/sdk/interfaces/LangList";
import AbilityType from "@tcgdex/sdk/interfaces/AbilityType";
import { AbilitySimple, AbilitySingle } from "@tcgdex/sdk/interfaces/Ability";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
export function abilityToAbilitySimple(ability: Ability, lang: Langs): AbilitySimple {
return {
name: ability.name[lang]
}
}
export function abilityToAbilitySingle(ability: Ability, lang: Langs): AbilitySingle {
return {
name: ability.name[lang],
text: ability.text[lang],
type: {
id: ability.type,
name: TranslationUtil.translate("abilityType", ability.type, lang)
}
}
}

View File

@ -1,14 +0,0 @@
import Attack from "@tcgdex/sdk/interfaces/Attack";
import { Langs } from "@tcgdex/sdk/interfaces/LangList";
import Type from "@tcgdex/sdk/interfaces/Type";
import { AttackSingle } from "@tcgdex/sdk/interfaces/Attack";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
export function attackToAttackSingle(attack: Attack, lang: Langs): AttackSingle {
return {
name: attack.name[lang],
cost: attack.cost && attack.cost.map(el => TranslationUtil.translate("type", el, lang)),
text: attack.text && attack.text[lang],
damage: attack.damage && attack.damage
}
}

View File

@ -1,115 +0,0 @@
import Card, { CardSimple, CardSingle } from "@tcgdex/sdk/interfaces/Card";
import { Langs } from "@tcgdex/sdk/interfaces/LangList";
import { typeToTypeSimple } from "./typeUtil";
import { rarityToRaritySimple } from "./RarityUtil";
import { tagToTagSimple } from "./TagUtil";
import Category from "@tcgdex/sdk/interfaces/Category";
import { attackToAttackSingle } from "./attackUtil";
import { abilityToAbilitySingle } from "./abilityUtil";
import { getExpansion, getExpansionFromSetName } from "./expansionUtil";
import { getSet } from "./setUtil";
import Expansion from "@tcgdex/sdk/interfaces/Expansion";
import { fetchIllustratorsSync } from "./illustratorUtil";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
import { fetchRemoteFile } from "./util";
interface ObjectList<T = any> {
[key: string]: T
}
type RemoteData = ObjectList<ObjectList<ObjectList<boolean>>>
export async function cardToCardSimple(card: Card, lang: Langs): Promise<CardSimple> {
let image: string = undefined
const file: RemoteData = await fetchRemoteFile(`https://assets.tcgdex.net/data-${lang}.json`)
const expansion = await getExpansionFromSetName(card.set.code)
if (file[expansion.code] && file[expansion.code][card.set.code] && file[expansion.code][card.set.code][card.localId]) {
const basePath = `https://assets.tcgdex.net/${lang}/${expansion.code}/${card.set.code}/${card.localId}`
image = `${basePath}/low`
}
return {
id: card.id,
localId: card.localId,
name: card.name[lang],
image
}
}
export async function cardToCardSingle(card: Card, lang: Langs): Promise<CardSingle> {
let images: {
low: string;
high?: string;
} = undefined
const file: RemoteData = await fetchRemoteFile(`https://assets.tcgdex.net/data-${lang}.json`)
const expansion = await getExpansionFromSetName(card.set.code)
if (file[expansion.code] && file[expansion.code][card.set.code] && file[expansion.code][card.set.code][card.localId]) {
const basePath = `https://assets.tcgdex.net/${lang}/${expansion.code}/${card.set.code}/${card.localId}`
images = {
low: `${basePath}/low`,
high: `${basePath}/high`
}
}
return {
id: card.id,
localId: card.localId,
dexId: card.dexId,
name: card.name[lang],
hp: card.hp,
type: card.type && card.type.map((el) => typeToTypeSimple(el, lang)),
image: images,
evolveFrom: card.evolveFrom && card.evolveFrom[lang],
evolveTo: card.evolveTo && card.evolveTo.map((el) => el[lang]),
tags: card.tags?.map((el) => tagToTagSimple(el, lang)),
illustrator: card.illustrator && {
id: fetchIllustratorsSync().indexOf(card.illustrator),
name: card.illustrator,
},
abilities: card.abilities && card.abilities.map((el) => abilityToAbilitySingle(el, lang)),
attacks: card.attacks && card.attacks.map(el => attackToAttackSingle(el, lang)),
effect: card.effect && card.effect[lang],
weaknesses: card.weaknesses && card.weaknesses.map(el => {return {type: typeToTypeSimple(el.type, lang), value: el.value}}),
resistances: card.resistances && card.resistances.map(el => {return {type: typeToTypeSimple(el.type, lang), value: el.value}}),
retreat: card.retreat && card.retreat,
rarity: rarityToRaritySimple(card.rarity, lang),
category: {
id: card.category,
name: TranslationUtil.translate("category", card.category, lang)
},
set: {
name: typeof card.set.name === "object" ? card.set.name[lang] : card.set.name,
code: card.set.code
},
}
}
export async function isCardAvailable(card: Card, lang: Langs): Promise<boolean> {
if (!(lang in card.name)) return false
const set = await getSet(card)
if ("availability" in set && (lang in set.availability)) {
return set.availability[lang]
}
return true
}
export function fetchCard(card: string, set?: string, expansion?: string): Card {
return require(`../db/cards/${expansion && (expansion + "/") || ""}${set && (set + "/") || ""}${card}`).default
}
export async function fetchCardAsync(card: string, set?: string, expansion?: string): Promise<Card> {
return (await import(`../db/cards/${expansion && (expansion + "/") || ""}${set && (set + "/") || ""}${card}`)).default
}

30
endpoints/cards.ts Normal file
View File

@ -0,0 +1,30 @@
import { CardList, Card as CardSingle } from '@tcgdex/sdk/interfaces'
import { Card, Languages } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<CardList, CardSingle, {}, Array<[string, Card]>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Array<[string, Card]>) {
return Promise.all(common.map((c) => cardToCardSimple(c[0], c[1], this.lang)))
}
public async item(common: Array<[string, Card]>) {
const items: Record<string, CardSingle> = {}
for (const card of common) {
items[`${card[1].set.id}-${card[0]}`] = await cardToCardSingle(card[0], card[1], this.lang)
}
return items
}
public async common() {
return getCards()
}
}

View File

@ -1,41 +0,0 @@
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { CardList, CardSimple } from "@tcgdex/sdk/interfaces/Card"
import { cardToCardSimple, isCardAvailable } from "../cardUtil"
import { getBaseFolder, getAllCards2, getAllCards } from "../util"
import Logger from '@dzeio/logger'
const logger = new Logger('cards/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "cards")
export default async () => {
logger.log('Fetching Cards')
const list = await getAllCards()
const items: Array<CardSimple> = []
for (let el of list) {
const card: Card = (await import(el)).default
if (!(await isCardAvailable(card, lang))) continue
items.push(
await cardToCardSimple(card, lang)
)
// if (if (typeof card.set.availability === "undefined"))
}
const cardList: CardList = {
count: items.length,
list: items
}
logger.log('Writing')
await fs.mkdir(`${endpoint}`, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(cardList))
logger.log('Finished')
}

View File

@ -1,33 +0,0 @@
import { getAllCards, getAllCards2, getBaseFolder } from "..//util"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { cardToCardSingle, isCardAvailable } from "../cardUtil"
import Logger from '@dzeio/logger'
const logger = new Logger('cards/item')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "cards")
export default async () => {
logger.log('Fetching Cards')
const list = await getAllCards()
for (let el of list) {
const card: Card = (await import(el)).default
if (!(await isCardAvailable(card, lang))) continue
try {
await fs.mkdir(`${endpoint}/${encodeURI(card.id)}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${encodeURI(card.id)}/index.json`, JSON.stringify(await cardToCardSingle(card, lang)))
} catch {
}
// if (if (typeof card.set.availability === "undefined"))
}
logger.log('Finished')
}

43
endpoints/categories.ts Normal file
View File

@ -0,0 +1,43 @@
import { CardList, Card as CardSingle, StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { Card, Languages } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
const it = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
items[key] = it
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const category = c[1].category
if (!category) return p
if (!p[category]) {
p[category] = []
}
p[category].push(c)
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}

View File

@ -1,35 +0,0 @@
import { getBaseFolder } from "../util"
import Category, { CategorySimple, CategoryList } from '@tcgdex/sdk/interfaces/Category'
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Logger from '@dzeio/logger'
const logger = new Logger('category/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "categories")
export default async () => {
logger.log('Fetching Categories')
const list: Array<CategorySimple> = []
for (const cat of Object.values(Category)) {
if (typeof cat !== "number") continue
list.push({
id: cat,
name: TranslationUtil.translate("category", cat, lang)
})
}
const res: CategoryList = {
count: list.length,
list: list
}
logger.log('Writing')
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
logger.log('Finished')
}

View File

@ -1,59 +0,0 @@
import { getAllCards, getBaseFolder, urlize } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple } from "../cardUtil"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Category, { CategorySingle } from "@tcgdex/sdk/interfaces/Category"
import Logger from '@dzeio/logger'
const logger = new Logger('category/item')
type categoryCards = {
[key in Category]?: Array<Card>
}
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "categories")
export default async () => {
logger.log('Fetching Cards')
const list = await getAllCards()
const arr: categoryCards = {}
for (const i of list) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang))) continue
const c = card.category
if (!(c in arr)) arr[c] = []
arr[c].push(card)
}
for (const cat in arr) {
if (arr.hasOwnProperty(cat)) {
const cards: Array<Card> = arr[cat];
const rCat: Category = parseInt(cat)
logger.log('Processing Category', TranslationUtil.translate("category", rCat, lang))
const toSave: CategorySingle = {
id: rCat,
name: TranslationUtil.translate("category", rCat, lang),
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`
const name = `${endpoint}/${urlize(toSave.name)}`
await promises.mkdir(index, {recursive: true})
await promises.mkdir(name, {recursive: true})
await promises.writeFile(`${index}/index.json`, JSON.stringify(toSave))
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave))
}
}
logger.log('ended ' + endpoint)
}

View File

@ -1,54 +0,0 @@
import Expansion from "@tcgdex/sdk/interfaces/Expansion"
import Set from "@tcgdex/sdk/interfaces/Set"
import * as glob from 'glob'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { ExpansionSingle } from "@tcgdex/sdk/interfaces/Expansion"
import { getAllSets, smartGlob } from "./util"
import { setToSetSimple, fetchSet } from "./setUtil"
import Logger from "@dzeio/logger"
const logger = new Logger('ExpansionUtils')
export function getExpansion(set: Set): Expansion {
if ("expansion" in set) return set.expansion
return require(`../../db/expansions/${set.expansionCode}`)
}
export async function getExpansionFromSetName(setName: string): Promise<Expansion> {
try {
const expansionName = (await smartGlob(`./db/sets/**/${setName}.js`))[0].split('/')[3].replace('.js', '')
return fetchExpansion(expansionName)
} catch (e) {
logger.error(e, setName)
throw new Error(setName)
}
}
export async function getAllExpansions(): Promise<Array<string>> {
return (await smartGlob('./db/expansions/*.js')).map((it) => it.substring(it.lastIndexOf('/') + 1, it.length - 3)) // -15 = start -1 = 0 index -3 = .ts
}
export async function fetchExpansion(name: string): Promise<Expansion> {
return (await import(`../db/expansions/${name}.js`)).default
}
export function expansionToExpansionSimple(expansion: Expansion, lang: Langs) {
return {
code: expansion.code,
name: typeof expansion.name === "string" ? expansion.name : expansion.name[lang]
}
}
export async function expansionToExpansionSingle(expansion: Expansion, lang: Langs): Promise<ExpansionSingle> {
const setsTmp = await Promise.all((await getAllSets(expansion.code))
.map(el => fetchSet(expansion.code, el)))
const sets = setsTmp.sort((a, b) => {
return a.releaseDate > b.releaseDate ? 1 : -1
})
.map(el => setToSetSimple(el, lang))
return {
code: expansion.code,
name: typeof expansion.name === "string" ? expansion.name : expansion.name[lang],
sets
}
}

View File

@ -1,47 +0,0 @@
import { getAllExpansions, expansionToExpansionSimple } from "../expansionUtil"
import Expansion from "@tcgdex/sdk/interfaces/Expansion"
import { getAllSets, getBaseFolder } from "../util"
import { fetchSet } from "../setUtil"
import { promises as fs } from 'fs'
import { ExpansionList } from '@tcgdex/sdk/interfaces/Expansion'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "expansions")
import Logger from '@dzeio/logger'
const logger = new Logger('expansions/index')
export default async () => {
logger.log('Fetching Expansions')
const expansions = await getAllExpansions()
let list: Array<{
release: string,
expansion: Expansion
}> = []
for (const i of expansions) {
const expansion: Expansion = require(`../../db/expansions/${i}`).default
const sets = await getAllSets(expansion.code)
expansion.sets = sets
let oldestRelease = "9999-99-99"
for (const j of sets) {
const set = await fetchSet(expansion.code, j)
oldestRelease = set.releaseDate < oldestRelease ? set.releaseDate : oldestRelease
}
list.push({
release: oldestRelease,
expansion
})
}
list = list.sort((a, b) => a.release > b.release ? 1 : -1)
const finalList = list.map(el => el.expansion)
const res: ExpansionList = {
count: finalList.length,
list: finalList.map(el => expansionToExpansionSimple(el, lang))
}
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
logger.log('Finished')
}

View File

@ -1,26 +0,0 @@
import { getAllExpansions, fetchExpansion, expansionToExpansionSingle } from "../expansionUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { getBaseFolder } from "../util"
import { promises as fs } from 'fs'
import Logger from '@dzeio/logger'
const logger = new Logger('expansions/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "expansions")
export default async () => {
logger.log('Fetching Expansions')
const list = await getAllExpansions()
for (const i of list) {
logger.log('Processing Expansion', i)
const expansion = await fetchExpansion(i)
await fs.mkdir(`${endpoint}/${expansion.code}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${expansion.code}/index.json`, JSON.stringify(await expansionToExpansionSingle(expansion, lang)))
}
logger.log('Finished')
}

44
endpoints/hp.ts Normal file
View File

@ -0,0 +1,44 @@
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { getSet, getSets, isSetAvailable, setToSetSimple, setToSetSingle } from "../utils/setUtil"
import { Card, Languages, Set } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
import { objectLoop } from '@dzeio/object-util'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const hp = c[1].hp
if (!hp) return p
if (!p[hp]) {
p[hp] = []
}
p[hp].push(c)
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}

View File

@ -1,39 +0,0 @@
import { getAllCards, getBaseFolder } from "../util"
import { fetchCard, isCardAvailable } from "../cardUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { HpList } from "@tcgdex/sdk/interfaces/Hp"
import { promises as fs } from 'fs'
import Card from "@tcgdex/sdk/interfaces/Card"
import Logger from '@dzeio/logger'
const logger = new Logger('hp/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "hp")
export default async () => {
logger.log('Fetching Cards')
const cards = await getAllCards()
const hps: Array<number> = []
for (const i of cards) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang)) || !card.hp) continue
if (hps.includes(card.hp)) continue
hps.push(card.hp)
}
const hpList: HpList = {
count: hps.length,
list: hps.sort((a, b) => a > b ? 1 : -1)
}
logger.log('Writing to files')
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(hpList))
logger.log('Finished')
}

View File

@ -1,46 +0,0 @@
import { getAllCards, getBaseFolder } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple } from "../cardUtil"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { HpSingle } from "@tcgdex/sdk/interfaces/Hp"
import { promises as fs } from 'fs'
import Logger from '@dzeio/logger'
const logger = new Logger('hp/item')
interface t {
[key: number]: Array<Card>
}
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "hp")
export default async () => {
logger.log('Fetching Cards')
const files = await getAllCards()
const pools: t = {}
for (const file of files) {
const card: Card = (await import(file)).default
if (!(await isCardAvailable(card, lang)) || !card.hp) continue
if (!(card.hp in pools)) pools[card.hp] = []
pools[card.hp].push(card)
}
for (const hp in pools) {
if (pools.hasOwnProperty(hp)) {
logger.log('Processing HP', hp)
const cards = pools[hp];
const toSave: HpSingle = {
hp: hp as unknown as number,
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${toSave.hp}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${toSave.hp}/index.json`, JSON.stringify(toSave))
}
}
logger.log('Finished')
}

View File

@ -1,29 +0,0 @@
import { promises as fs} from "fs"
import * as fsSync from 'fs'
import { IllustratorSimple } from "@tcgdex/sdk/interfaces/Illustrator"
export const illustratorsFile = "./generated/illustrators.json"
let illustratorsCache: Array<string> = []
export async function fetchIllustrators(): Promise<Array<string>> {
if (illustratorsCache.length === 0) {
illustratorsCache = JSON.parse(await (await fs.readFile(illustratorsFile)).toString())
}
return illustratorsCache
}
export function fetchIllustratorsSync(): Array<string> {
if (illustratorsCache.length === 0) {
illustratorsCache = JSON.parse(fsSync.readFileSync(illustratorsFile).toString())
}
return illustratorsCache
}
export function illustratorToIllustratorSimple(illustrator: string, index: number): IllustratorSimple {
return {
id: index,
name: illustrator
}
}

44
endpoints/illustrators.ts Normal file
View File

@ -0,0 +1,44 @@
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { getSet, getSets, isSetAvailable, setToSetSimple, setToSetSingle } from "../utils/setUtil"
import { Card, Languages, Set } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
import { objectLoop } from '@dzeio/object-util'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const illustrator = c[1].illustrator
if (!illustrator) return p
if (!p[illustrator]) {
p[illustrator] = []
}
p[illustrator].push(c)
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}

View File

@ -1,25 +0,0 @@
import { fetchIllustrators, illustratorToIllustratorSimple } from "../illustratorUtil"
import { IllustratorsList } from "@tcgdex/sdk/interfaces/Illustrator"
import { getBaseFolder } from "../util"
import { promises as fs} from "fs"
import Logger from '@dzeio/logger'
const logger = new Logger('illustrators/index')
const lang = process.env.CARDLANG || "en"
const endpoint = getBaseFolder(lang, "illustrators")
export default async () => {
logger.log('Fetching illustrators')
const db = await fetchIllustrators()
const res: IllustratorsList = {
count: db.length,
list: db.map((ill, index) => illustratorToIllustratorSimple(ill, index))
}
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
logger.log('Finished')
}

View File

@ -1,53 +0,0 @@
import { fetchIllustrators } from "../illustratorUtil"
import { IllustratorSingle } from "@tcgdex/sdk/interfaces/Illustrator"
import { getBaseFolder, getAllCards } from "../util"
import { promises as fs} from "fs"
import Card from "@tcgdex/sdk/interfaces/Card"
import { isCardAvailable, cardToCardSimple } from "../cardUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import Logger from '@dzeio/logger'
const logger = new Logger('illustrators/item')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "illustrators")
interface t {
[key: string]: Array<Card>
}
export default async () => {
logger.log('Fetching Illustrators/Cards')
const db = await fetchIllustrators()
const cards = await getAllCards()
const tmp: t = {}
for (const i of cards) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang)) || !card.illustrator) continue
if (!(card.illustrator in tmp)) tmp[card.illustrator] = []
tmp[card.illustrator].push(card)
}
for (const illustrator in tmp) {
if (tmp.hasOwnProperty(illustrator)) {
logger.log('Processing illustrator', illustrator)
const list = tmp[illustrator];
const toSave: IllustratorSingle = {
id: db.indexOf(illustrator),
name: illustrator,
cards: await Promise.all(list.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${toSave.id}`, {recursive: true})
await fs.writeFile(`${endpoint}/${toSave.id}/index.json`, JSON.stringify(toSave))
}
}
logger.log('Finished')
}

View File

@ -1,27 +0,0 @@
import { getAllCards, getAllCards2 } from "../util"
import Card from "@tcgdex/sdk/interfaces/Card"
import { promises as fs} from "fs"
import { illustratorsFile, fetchIllustrators } from "../illustratorUtil"
const dbFile = illustratorsFile
export default async () => {
const db = await fetchIllustrators()
const list = await getAllCards()
for (let i of list) {
const card: Card = (await import(i)).default
if (!card.illustrator) continue
const illustrator = card.illustrator
if (!db.includes(illustrator)) {
db.push(illustrator)
}
}
await fs.writeFile(dbFile, JSON.stringify(db))
}

44
endpoints/rarities.ts Normal file
View File

@ -0,0 +1,44 @@
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { getSet, getSets, isSetAvailable, setToSetSimple, setToSetSingle } from "../utils/setUtil"
import { Card, Languages, Set } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
import { objectLoop } from '@dzeio/object-util'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const rarity = c[1].rarity // TODO: translate using this.lang
if (!rarity) return p
if (!p[rarity]) {
p[rarity] = []
}
p[rarity].push(c)
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}

View File

@ -1,34 +0,0 @@
import { getBaseFolder } from "../util"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Rarity, { RaritySimple, RarityList } from "@tcgdex/sdk/interfaces/Rarity"
import Logger from '@dzeio/logger'
const logger = new Logger('rarities/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "rarities")
export default async () => {
logger.log('Fetching Rarities')
const list: Array<RaritySimple> = []
for (const cat of Object.values(Rarity)) {
if (typeof cat !== "number") continue
list.push({
id: cat,
name: TranslationUtil.translate("rarity", cat, lang)
})
}
const res: RarityList = {
count: list.length,
list: list
}
logger.log('Writing to file')
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
logger.log('Finished')
}

View File

@ -1,59 +0,0 @@
import { getAllCards, getBaseFolder, urlize } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple, fetchCardAsync } from "../cardUtil"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Rarity, { RaritySingle } from "@tcgdex/sdk/interfaces/Rarity"
import Logger from '@dzeio/logger'
const logger = new Logger('rarities/item')
type rarityCards = {
[key in Rarity]?: Array<Card>
}
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "rarities")
export default async () => {
logger.log('Fetching Cards')
const list = await getAllCards()
const arr: rarityCards = {}
for (const i of list) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang))) continue
const c = card.rarity
if (!(c in arr)) arr[c] = []
arr[c].push(card)
}
for (const cat in arr) {
if (arr.hasOwnProperty(cat)) {
const cards: Array<Card> = arr[cat];
const rCat: Rarity = parseInt(cat)
logger.log('Processing Rarity', TranslationUtil.translate("rarity", rCat, lang))
const toSave: RaritySingle = {
id: rCat,
name: TranslationUtil.translate("rarity", rCat, lang),
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`
const name = `${endpoint}/${urlize(toSave.name)}`
await promises.mkdir(index, {recursive: true})
await promises.mkdir(name, {recursive: true})
await promises.writeFile(`${index}/index.json`, JSON.stringify(toSave))
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave))
}
}
logger.log('ended ' + endpoint)
}

View File

@ -1,38 +0,0 @@
import Card from "@tcgdex/sdk/interfaces/Card"
import { getAllCards, getAllCards2, getBaseFolder } from "../util"
import { promises as fs } from 'fs'
import { isCardAvailable } from "../cardUtil"
import { RetreatList } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import Logger from '@dzeio/logger'
const logger = new Logger('retreat/index')
const lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat")
export default async () => {
logger.log('Fetching Cards')
const files = await getAllCards()
const count: Array<number> = []
for (let file of files) {
const card: Card = (await import(file)).default
if (
!(await isCardAvailable(card, lang)) ||
!card.retreat ||
count.includes(card.retreat)
) continue
count.push(card.retreat)
}
const list: RetreatList = {
count: count.length,
list: count
}
logger.log('Writingto file')
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(list))
logger.log('Finished')
}

View File

@ -1,44 +0,0 @@
import Card from "@tcgdex/sdk/interfaces/Card"
import { getAllCards, getAllCards2, getBaseFolder } from "../util"
import { promises as fs } from 'fs'
import { isCardAvailable, cardToCardSimple } from "../cardUtil"
import { RetreatSingle } from '@tcgdex/sdk/interfaces/Retreat'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import Logger from '@dzeio/logger'
const logger = new Logger('retreat/item')
const lang = (process.env.CARDLANG || "en") as Langs
const endpoint = getBaseFolder(lang, "retreat")
export default async () => {
logger.log('Fetching cards')
const files = await getAllCards()
const count: Array<Array<Card>> = []
for (let file of files) {
const card: Card = (await import(file)).default
if (
!(await isCardAvailable(card, lang)) ||
!card.retreat
) continue
if (!(card.retreat in count)) count[card.retreat] = []
count[card.retreat].push(card)
}
for (const retreat in count) {
if (count.hasOwnProperty(retreat)) {
logger.log('Processing Retreat', retreat)
const cardArr = count[retreat];
const item: RetreatSingle = {
id: retreat as unknown as number,
cards: await Promise.all(cardArr.map(el => cardToCardSimple(el, lang)))
}
await fs.mkdir(`${endpoint}/${item.id}`, {recursive: true})
await fs.writeFile(`${endpoint}/${item.id}/index.json`, JSON.stringify(item))
}
}
logger.log('Finished')
}

42
endpoints/retreats.ts Normal file
View File

@ -0,0 +1,42 @@
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { Card, Languages } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, getCards } from '../utils/cardUtil'
import { basename } from 'path'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const retreat = c[1].retreat
if (!retreat) return p
if (!p[retreat]) {
p[retreat] = []
}
p[retreat].push(c)
return p
}, {} as Record<number, Array<[string, Card]>>)
}
}

32
endpoints/series.ts Normal file
View File

@ -0,0 +1,32 @@
import { Serie as SerieSingle, StringEndpoint, SerieList } from '@tcgdex/sdk/interfaces'
import { Card, Languages, Serie } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
import { getSeries, serieToSerieSimple, serieToSerieSingle } from '../utils/serieUtil'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<SerieList, SerieSingle, {}, Array<Serie>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Array<Serie>) {
return Promise.all(common.map((s) => serieToSerieSimple(s, this.lang)))
}
public async item(common: Array<Serie>) {
const items: Record<string, SerieSingle> = {}
for (let key = 0; key < common.length; key++) {
const val = common[key];
items[key] = await serieToSerieSingle(val, this.lang)
}
return items
}
public async common() {
return getSeries()
}
}

View File

@ -1,92 +0,0 @@
import Set from "@tcgdex/sdk/interfaces/Set"
import Card from "@tcgdex/sdk/interfaces/Card"
import * as glob from 'glob'
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { SetSimple, SetSingle } from "@tcgdex/sdk/interfaces/Set"
import { cardToCardSimple } from "./cardUtil"
import { CardSimple } from "@tcgdex/sdk/interfaces/Card"
import { getAllCards, getAllCards2, smartGlob } from "./util"
interface t<T = Set> {
[key: string]: T
}
const setCache: t = {}
export function isSet(set: Set | {name: string, code: string}): set is Set {
return "releaseDate" in set
}
export async function getSet(card: Card): Promise<Set> {
if (!(card.set.code in setCache)) {
if (isSet(card.set)) setCache[card.set.code] = card.set
let setPath = (await smartGlob(`./db/sets/**/${card.set.code}.js`))[0]
setPath = setPath.replace('./', '../')
setCache[card.set.code] = require(setPath).default
}
return setCache[card.set.code]
}
export async function fetchSet(expansion: string, set: string): Promise<Set> {
return (await import(`../db/sets/${expansion}/${set}.js`)).default
}
export function isSetAvailable(set: Set, lang: Langs) {
if (!set.availability || !(lang in set.availability)) return true
return set.availability
}
export function setToSetSimple(set: Set, lang: Langs): SetSimple {
return {
code: set.code,
logo: set.images && set.images.logo,
symbol: set.images && set.images.symbol,
name: typeof set.name === "string" ? set.name : set.name[lang],
total: set.cardCount.total
}
}
export async function getSetCards(set: Set, lang: Langs): Promise<Array<CardSimple>> {
const cardes = await getAllCards(set.code, set.expansionCode ?? set.expansion.code)
const cards: Array<Card> = []
for (let el of cardes) {
el = el.replace("../../", "../")
const card: Card = (await import(el)).default
cards.push(
card
)
}
return await Promise.all(cards.sort((a, b) => {
if (
!isNaN(parseInt(a.localId + "")) &&
!isNaN(parseInt(b.localId + ""))
) {
return parseInt(a.localId + "") - parseInt(b.localId + "")
}
return a.localId > b.localId ? 1 : -1
}).map(el => cardToCardSimple(el, lang)))
}
export async function setToSetSingle(set: Set, lang: Langs): Promise<SetSingle> {
return {
name: set.name[lang],
code: set.code,
expansionCode: set.expansion && set.expansion.code || set.expansionCode || undefined,
tcgoCode: set.tcgoCode,
cardCount: {
total: set.cardCount.total,
official: set.cardCount.official
},
releaseDate: set.releaseDate,
legal: set.legal && {
standard: set.legal.standard,
expanded: set.legal.expanded
},
images: set.images && {
symbol: set.images.symbol,
logo: set.images.logo
},
list: await getSetCards(set, lang)
}
}

56
endpoints/sets.ts Normal file
View File

@ -0,0 +1,56 @@
import { SetList, Set as SetSingle, Card as CardSingle } from '@tcgdex/sdk/interfaces'
import { getSet, getSets, isSetAvailable, setToSetSimple, setToSetSingle } from "../utils/setUtil"
import { Languages, Set } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<SetList, SetSingle, CardSingle, Array<Set>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Array<Set>) {
const sets = common
.sort((a, b) => a.releaseDate > b.releaseDate ? 1 : -1)
const tmp: SetList = await Promise.all(sets.map((el) => setToSetSimple(el, this.lang)))
return tmp
}
public async item(common: Array<Set>) {
const sets= await Promise.all(common
.map((set) => setToSetSingle(set, this.lang)))
const res: Record<string, SetSingle> = {}
for (const set of sets) {
res[set.name] = set
res[set.id] = set
}
return res
}
public async common() {
return (await getSets())
.filter((set) => isSetAvailable(set, this.lang))
}
public async sub(common: Array<Set>, item: string) {
const set = await getSet(item)
if (!isSetAvailable(set, this.lang)) return undefined
const lit = await getCards(set)
const l: Record<string, CardSingle> = {}
for (let i of lit) {
l[i[0]] = await cardToCardSingle(i[0], i[1], this.lang)
}
return l
}
}

View File

@ -1,46 +0,0 @@
import Set from "@tcgdex/sdk/interfaces/Set"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { SetSimple, SetList } from "@tcgdex/sdk/interfaces/Set"
import { getAllSets, getBaseFolder } from "../util"
import { fetchSet, isSetAvailable, setToSetSimple } from "../setUtil"
import Logger from '@dzeio/logger'
import { getExpansionFromSetName } from "../expansionUtil"
const logger = new Logger('sets/index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")
export default async () => {
logger.log('Fetching sets')
const list = await getAllSets()
let items: Array<Set> = []
for (let el of list) {
const expansion = (await getExpansionFromSetName(el))
const set: Set = await fetchSet(expansion.code, el)
if (!isSetAvailable(set, lang)) continue
items.push(
set
)
}
logger.log('Procesing Sets')
items = items.sort((a, b) => a.releaseDate > b.releaseDate ? 1 : -1)
const tmp: Array<SetSimple> = items.map((el) => setToSetSimple(el, lang))
const cardList: SetList = {
count: tmp.length,
list: tmp
}
await fs.mkdir(`${endpoint}`, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(cardList))
logger.log('Finished')
}

View File

@ -1,32 +0,0 @@
import { getBaseFolder, getAllSets } from "../util"
import Set from "@tcgdex/sdk/interfaces/Set"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { fetchSet, isSetAvailable, setToSetSingle } from "../setUtil"
import { getExpansionFromSetName } from "../expansionUtil"
import Logger from '@dzeio/logger'
const logger = new Logger('sets/item')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")
export default async () => {
logger.log('Fetching Sets')
const list = await getAllSets()
logger.log(list)
for (let el of list) {
logger.log('Processing set', el)
const expansion = (await getExpansionFromSetName(el))
const set: Set = await fetchSet(expansion.code, el)
if (!isSetAvailable(set, lang)) continue
await fs.mkdir(`${endpoint}/${set.code}/`, {recursive: true})
await fs.writeFile(`${endpoint}/${set.code}/index.json`, JSON.stringify(await setToSetSingle(set, lang)))
}
logger.log('Finished')
}

View File

@ -1,44 +0,0 @@
import { getBaseFolder, getAllSets, getAllCards } from "../util"
import Set from "@tcgdex/sdk/interfaces/Set"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import { fetchSet, isSetAvailable } from "../setUtil"
import { getAllCards2 } from "../util"
import Card from "@tcgdex/sdk/interfaces/Card"
import { cardToCardSingle, isCardAvailable } from "../cardUtil"
import { getExpansionFromSetName } from "../expansionUtil"
import Logger from '@dzeio/logger'
const logger = new Logger('sets/subitem')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "sets")
export default async () => {
logger.log('Fetching Sets')
const list = await getAllSets()
for (let el of list) {
const expansion = (await getExpansionFromSetName(el))
const set: Set = await fetchSet(expansion.code, el)
if (!isSetAvailable(set, lang)) continue
const lit = await getAllCards(set.code, set?.expansionCode ?? set.expansion.code)
logger.log('Fetching/Writing Cards for set', el)
for (let i of lit) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang))) continue
const localId = card.localId === '?' ? '%3F' : card.localId
await fs.mkdir(`${endpoint}/${set.code}/${localId}`, {recursive: true})
await fs.writeFile(`${endpoint}/${set.code}/${localId}/index.json`, JSON.stringify(await cardToCardSingle(card, lang)))
}
}
logger.log('Finished')
}

View File

@ -1,33 +0,0 @@
import { getBaseFolder } from "../util"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from 'fs'
import Tag, { TagSimple, TagList } from "@tcgdex/sdk/interfaces/Tag"
import Logger from '@dzeio/logger'
const logger = new Logger('Tags/Index')
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "tags")
export default async () => {
logger.log('Fetching Tags')
const list: Array<TagSimple> = []
for (const cat of Object.values(Tag)) {
if (typeof cat !== "number") continue
list.push({
id: cat,
name: TranslationUtil.translate("tag", cat, lang)
})
}
const res: TagList = {
count: list.length,
list: list
}
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(res))
logger.log('Finished')
}

View File

@ -1,60 +0,0 @@
import { getAllCards, getBaseFolder, urlize } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple, fetchCardAsync } from "../cardUtil"
import Type, { TypeSingle } from "@tcgdex/sdk/interfaces/Type"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Tag, { TagSingle } from "@tcgdex/sdk/interfaces/Tag"
import Logger from '@dzeio/logger'
import { objectKeys, objectSize } from '@dzeio/object-util'
const logger = new Logger('tags/item')
type tagCards = {
[key in Tag]?: Array<Card>
}
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "tags")
export default async () => {
logger.log('Fetching cards')
const list = await getAllCards()
const arr: tagCards = {}
for (const i of list) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang)) || !card.tags) continue
for (const tag of card.tags) {
if (!(tag in arr)) arr[tag] = []
arr[tag].push(card)
}
}
for (const type in arr) {
if (arr.hasOwnProperty(type)) {
const cards: Array<Card> = arr[type];
const rTag: Tag = parseInt(type)
logger.log('Working on tag', TranslationUtil.translate("tag", rTag, lang), `${type}/${objectSize(arr)}`)
const toSave: TagSingle = {
id: rTag,
name: TranslationUtil.translate("tag", rTag, lang),
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`
const name = `${endpoint}/${urlize(toSave.name)}`
await promises.mkdir(index, {recursive: true})
await promises.mkdir(name, {recursive: true})
await promises.writeFile(`${index}/index.json`, JSON.stringify(toSave))
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave))
}
}
logger.log('ended')
}

View File

@ -1,10 +0,0 @@
import Type, { TypeSimple } from "@tcgdex/sdk/interfaces/Type";
import LangList, { Langs } from "@tcgdex/sdk/interfaces/LangList";
import TranslationUtil from "@tcgdex/sdk/TranslationUtil";
export function typeToTypeSimple(type: Type, lang: Langs): TypeSimple {
return {
id: type,
name: TranslationUtil.translate("type", type, lang)
}
}

46
endpoints/types.ts Normal file
View File

@ -0,0 +1,46 @@
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/interfaces'
import { getSet, getSets, isSetAvailable, setToSetSimple, setToSetSingle } from "../utils/setUtil"
import { Card, Languages, Set } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import Logger from '@dzeio/logger'
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
import { basename } from 'path'
import { objectLoop } from '@dzeio/object-util'
const logger = new Logger(basename(__filename))
export default class implements Endpoint<StringEndpointList, StringEndpoint, {}, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>) {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>) {
const items: Record<string, StringEndpoint> = {}
for (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
name: key,
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang)))
}
}
return items
}
public async common() {
return (await getCards()).reduce((p, c) => {
const types = c[1].types
if (!types) return p
for (const type of types) {
if (!p[type]) {
p[type] = []
}
p[type].push(c)
}
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}

View File

@ -1,34 +0,0 @@
import Type, { TypeSimple } from "@tcgdex/sdk/interfaces/Type"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { getBaseFolder } from "../util"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import { promises as fs } from "fs"
import { List } from "@tcgdex/sdk/interfaces/General"
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "types")
import Logger from '@dzeio/logger'
const logger = new Logger('types/index')
export default async () => {
logger.log('Fetching types')
const typeArr: Array<TypeSimple> = []
for (const i of Object.values(Type)) {
if (typeof i !== "number") continue
typeArr.push({
id: i,
name: TranslationUtil.translate("type", i, lang)
})
}
const typeList: List<TypeSimple> = {
count: typeArr.length,
list: typeArr
}
logger.log('Writing types')
await fs.mkdir(endpoint, {recursive: true})
await fs.writeFile(`${endpoint}/index.json`, JSON.stringify(typeList))
logger.log('Finished')
}

View File

@ -1,57 +0,0 @@
import { getAllCards, getBaseFolder, urlize } from "../util"
import { fetchCard, isCardAvailable, cardToCardSimple } from "../cardUtil"
import Type, { TypeSingle } from "@tcgdex/sdk/interfaces/Type"
import Card from "@tcgdex/sdk/interfaces/Card"
import { Langs } from "@tcgdex/sdk/interfaces/LangList"
import TranslationUtil from "@tcgdex/sdk/TranslationUtil"
import { promises } from "fs"
import Logger from '@dzeio/logger'
const logger = new Logger('types/item')
type typeCards = {
[key in Type]?: Array<Card>
}
const lang = process.env.CARDLANG as Langs || "en"
const endpoint = getBaseFolder(lang, "types")
export default async () => {
logger.log('Fetching cards')
const list = await getAllCards()
const arr: typeCards = {}
for (const i of list) {
const card: Card = (await import(i)).default
if (!(await isCardAvailable(card, lang)) || !card.type) continue
for (const type of card.type) {
if (!(type in arr)) arr[type] = []
arr[type].push(card)
}
}
for (const type in arr) {
if (!Object.prototype.hasOwnProperty.call(arr, type)) {
continue
}
const cards: Array<Card> = arr[type];
const rType: Type = parseInt(type)
logger.log('Processing type', TranslationUtil.translate("type", rType, lang))
const toSave: TypeSingle = {
id: rType,
name: TranslationUtil.translate("type", rType, lang),
cards: await Promise.all(cards.map(el => cardToCardSimple(el, lang)))
}
const index = `${endpoint}/${toSave.id}`
const name = `${endpoint}/${urlize(toSave.name)}`
await promises.mkdir(index, {recursive: true})
await promises.mkdir(name, {recursive: true})
await promises.writeFile(`${index}/index.json`, JSON.stringify(toSave))
await promises.writeFile(`${name}/index.json`, JSON.stringify(toSave))
}
logger.log('Finished')
}

View File

@ -1,50 +0,0 @@
import * as glob from 'glob'
import fetch from 'node-fetch'
const VERSION = 'v1'
export async function getAllCards(set = "**", expansion = "**") {
return (await smartGlob(`./db/cards/${expansion}/${set}/*.js`)).map((it) => it.replace('./', '../../'))
}
export function getAllCards2(set = "**", expansion = "**") {
return glob.sync(`./db/cards/${expansion}/${set}/*.js`)
}
export async function getAllSets(expansion = "**") {
return (await smartGlob(`./db/sets/${expansion}/*.js`))
.map(el => el.substring(el.lastIndexOf('/') + 1, el.lastIndexOf('.')))
}
export function getBaseFolder(lang: string, endpoint: string) {
return `./dist/${VERSION}/${lang}/${endpoint}`
}
export function urlize(str: string): string {
str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, "")
return str.replace(/ /g, "-").toLowerCase()
}
interface fileCacheInterface {
[key: string]: any
}
const fileCache: fileCacheInterface = {}
export async function fetchRemoteFile<T = any>(url: string): Promise<T> {
// console.log(Object.keys(fileCache))
if (!fileCache[url]) {
const resp = await fetch(url)
// console.log(await resp.text(), url)
fileCache[url] = resp.json()
}
return fileCache[url]
}
const globCache: Record<string, Array<string>> = {}
export async function smartGlob(query: string) {
if (!globCache[query]) {
globCache[query] = await new Promise((res) => glob(query, (err, matches) => res(matches)))
}
return globCache[query]
}