feat: Add random endpoints to the SDK (#277)

This commit is contained in:
Florian Bouillon 2024-10-17 22:52:19 +02:00 committed by GitHub
parent 54a4b729b3
commit e08fd98269
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 39 additions and 12 deletions

View File

@ -138,3 +138,13 @@ for (const endpoint of endpoints) {
}) })
} }
test(`random card/set/serie`, async () => {
const tcgdex = new TCGdex('en')
TCGdex.fetch = fetch
expect((await tcgdex.random.card())).toBeTruthy()
expect((await tcgdex.random.set())).toBeTruthy()
expect((await tcgdex.random.serie())).toBeTruthy()
})

6
src/interfaces.d.ts vendored
View File

@ -316,6 +316,6 @@ export type Quality = 'low' | 'high'
export type Extension = 'jpg' | 'webp' | 'png' export type Extension = 'jpg' | 'webp' | 'png'
export type Endpoints = 'cards' | 'categories' | 'dex-ids' | 'energy-types' | export type Endpoints = 'cards' | 'categories' | 'dex-ids' | 'energy-types' |
'hp' | 'illustrators' | 'rarities' | 'regulation-marks' | 'hp' | 'illustrators' | 'rarities' | 'regulation-marks' |
'retreats' | 'series' | 'sets' | 'stages' | 'suffixes' | 'retreats' | 'series' | 'sets' | 'stages' | 'suffixes' |
'trainer-types' | 'types' | 'variants' 'trainer-types' | 'types' | 'variants' | 'random'

View File

@ -17,6 +17,7 @@ import type {
} from './interfaces' } from './interfaces'
import CardModel from './models/Card' import CardModel from './models/Card'
import CardResumeModel from './models/CardResume' import CardResumeModel from './models/CardResume'
import Model from './models/Model'
import SerieModel from './models/Serie' import SerieModel from './models/Serie'
import SerieResume from './models/SerieResume' import SerieResume from './models/SerieResume'
import SetModel from './models/Set' import SetModel from './models/Set'
@ -48,6 +49,22 @@ export default class TCGdex {
*/ */
public cacheTTL = 60 * 60 public cacheTTL = 60 * 60
// random card/set/serie endpoints
public readonly random = {
card: async (): Promise<CardModel> => {
const res = await this.fetch('random', 'card')
return Model.build(new CardModel(this), res)
},
set: async (): Promise<SetModel> => {
const res = await this.fetch('random', 'set')
return Model.build(new SetModel(this), res)
},
serie: async (): Promise<SerieModel> => {
const res = await this.fetch('random', 'serie')
return Model.build(new SerieModel(this), res)
}
}
public readonly card = new Endpoint(this, CardModel, CardResumeModel, 'cards') public readonly card = new Endpoint(this, CardModel, CardResumeModel, 'cards')
public readonly set = new Endpoint(this, SetModel, SetResumeModel, 'sets') public readonly set = new Endpoint(this, SetModel, SetResumeModel, 'sets')
public readonly serie = new Endpoint(this, SerieModel, SerieResume, 'series') public readonly serie = new Endpoint(this, SerieModel, SerieResume, 'series')
@ -226,6 +243,13 @@ export default class TCGdex {
*/ */
public async fetch(...endpoint: ['sets', string]): Promise<TCGdexSet | undefined> public async fetch(...endpoint: ['sets', string]): Promise<TCGdexSet | undefined>
/**
* Fetch a random element
* @param endpoint_0 'random'
* @param endpoint_1 {'set' | 'card' | 'serie'} the type of random element you want to get
*/
public async fetch(...endpoint: ['random', 'set' | 'card' | 'serie']): Promise<Card | TCGdexSet | Serie | undefined>
/** /**
* Fetch every sets * Fetch every sets
* @param endpoint_0 'sets' * @param endpoint_0 'sets'
@ -310,14 +334,7 @@ export default class TCGdex {
// handle the Search Params // handle the Search Params
if (searchParams) { if (searchParams) {
path += '?' path += '?' + searchParams.map((it) => `${this.encode(it.key)}=${this.encode(it.value)}`).join('&')
for (let idx = 0; idx < searchParams.length; idx++) {
const param = searchParams[idx]
if (idx !== 0) {
path += '&'
}
path += `${this.encode(param.key)}=${this.encode(param.value)}`
}
} }
// return with the endpoint and all the shit // return with the endpoint and all the shit

View File

@ -16,5 +16,5 @@ export const ENDPOINTS: Array<Endpoints> = [
'cards', 'categories', 'dex-ids', 'energy-types', 'cards', 'categories', 'dex-ids', 'energy-types',
'hp', 'illustrators', 'rarities', 'regulation-marks', 'hp', 'illustrators', 'rarities', 'regulation-marks',
'retreats', 'series', 'sets', 'stages', 'suffixes', 'retreats', 'series', 'sets', 'stages', 'suffixes',
'trainer-types', 'types', 'variants' 'trainer-types', 'types', 'variants', 'random'
] as const ] as const