Skip to content

Commit

Permalink
feat: Add random endpoints to the SDK (#277)
Browse files Browse the repository at this point in the history
  • Loading branch information
Aviortheking authored Oct 17, 2024
1 parent 54a4b72 commit e08fd98
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 12 deletions.
10 changes: 10 additions & 0 deletions __tests__/basic.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 3 additions & 3 deletions src/interfaces.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,6 @@ export type Quality = 'low' | 'high'
export type Extension = 'jpg' | 'webp' | 'png'

export type Endpoints = 'cards' | 'categories' | 'dex-ids' | 'energy-types' |
'hp' | 'illustrators' | 'rarities' | 'regulation-marks' |
'retreats' | 'series' | 'sets' | 'stages' | 'suffixes' |
'trainer-types' | 'types' | 'variants'
'hp' | 'illustrators' | 'rarities' | 'regulation-marks' |
'retreats' | 'series' | 'sets' | 'stages' | 'suffixes' |
'trainer-types' | 'types' | 'variants' | 'random'
33 changes: 25 additions & 8 deletions src/tcgdex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import type {
} from './interfaces'
import CardModel from './models/Card'
import CardResumeModel from './models/CardResume'
import Model from './models/Model'
import SerieModel from './models/Serie'
import SerieResume from './models/SerieResume'
import SetModel from './models/Set'
Expand Down Expand Up @@ -48,6 +49,22 @@ export default class TCGdex {
*/
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 set = new Endpoint(this, SetModel, SetResumeModel, 'sets')
public readonly serie = new Endpoint(this, SerieModel, SerieResume, 'series')
Expand Down Expand Up @@ -226,6 +243,13 @@ export default class TCGdex {
*/
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
* @param endpoint_0 'sets'
Expand Down Expand Up @@ -310,14 +334,7 @@ export default class TCGdex {

// handle the Search Params
if (searchParams) {
path += '?'
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)}`
}
path += '?' + searchParams.map((it) => `${this.encode(it.key)}=${this.encode(it.value)}`).join('&')
}

// return with the endpoint and all the shit
Expand Down
2 changes: 1 addition & 1 deletion src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ export const ENDPOINTS: Array<Endpoints> = [
'cards', 'categories', 'dex-ids', 'energy-types',
'hp', 'illustrators', 'rarities', 'regulation-marks',
'retreats', 'series', 'sets', 'stages', 'suffixes',
'trainer-types', 'types', 'variants'
'trainer-types', 'types', 'variants', 'random'
] as const

0 comments on commit e08fd98

Please sign in to comment.