compiler/endpoints/variants.ts
Florian Bouillon 5069fb9945
Added multiple endpoints (#18)
Added new endpoints:
energyTypes
trainerTypes
suffixes
stages
dexIds
regulationMarks
variants
2021-10-07 13:04:23 +02:00

49 lines
1.4 KiB
TypeScript

import { objectLoop } from '@dzeio/object-util'
import { StringEndpointList, StringEndpoint } from '@tcgdex/sdk/dist/types/interfaces'
import { Card, Languages } from '../db/interfaces'
import { Endpoint } from '../interfaces'
import { cardToCardSimple, getCards } from '../utils/cardUtil'
export default class implements Endpoint<StringEndpointList, StringEndpoint, Record<string, unknown>, Record<string, Array<[string, Card]>>> {
public constructor(
private lang: keyof Languages
) {}
public async index(common: Record<string, Array<[string, Card]>>): Promise<StringEndpointList> {
return Object.keys(common)
}
public async item(common: Record<string, Array<[string, Card]>>): Promise<Record<string, StringEndpoint>> {
const items: Record<string, StringEndpoint> = {}
for await (const key of Object.keys(common)) {
const val = common[key]
items[key] = {
cards: await Promise.all(val.map(([id, card]) => cardToCardSimple(id, card, this.lang))),
name: key
}
}
return items
}
public async common(): Promise<Record<string, Array<[string, Card]>>> {
return (await getCards(this.lang)).reduce((p, c) => {
const { variants } = c[1]
if (!variants) {
return p
}
objectLoop(variants, (isSet, key) => {
if (!isSet) {
return
}
if (!p[key]) {
p[key] = []
}
p[key].push(c)
})
return p
}, {} as Record<string, Array<[string, Card]>>)
}
}