mirror of
https://github.com/tcgdex/compiler.git
synced 2025-07-28 23:19:50 +00:00
Nearly finished 😄
Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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
30
endpoints/cards.ts
Normal 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()
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
43
endpoints/categories.ts
Normal 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]>>)
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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)
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
44
endpoints/hp.ts
Normal 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]>>)
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
44
endpoints/illustrators.ts
Normal 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]>>)
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
44
endpoints/rarities.ts
Normal 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]>>)
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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)
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
42
endpoints/retreats.ts
Normal 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
32
endpoints/series.ts
Normal 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()
|
||||
}
|
||||
}
|
@ -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
56
endpoints/sets.ts
Normal 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
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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
46
endpoints/types.ts
Normal 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]>>)
|
||||
}
|
||||
}
|
@ -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')
|
||||
}
|
@ -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')
|
||||
}
|
@ -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]
|
||||
}
|
Reference in New Issue
Block a user