Skip to content

Commit

Permalink
perf: remove boilerplate
Browse files Browse the repository at this point in the history
  • Loading branch information
tutkli committed May 13, 2024
1 parent b98dcb8 commit 6a60194
Show file tree
Hide file tree
Showing 10 changed files with 137 additions and 212 deletions.
111 changes: 46 additions & 65 deletions src/clients/anime.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import type {
JikanMoreInfo,
JikanNews,
JikanRelation,
JikanResponse,
Recommendation
} from '../models'
import { BaseClient } from './base.client'
Expand All @@ -32,19 +31,16 @@ export class AnimeClient extends BaseClient {
* Get complete anime resource data
* @param id anime id
*/
public async getAnimeFullById(id: number) {
return this.getResource<JikanResponse<Anime>>(
AnimeEndpoints.animeFullById,
{ id }
)
public getAnimeFullById(id: number) {
return this.getResource<Anime>(AnimeEndpoints.animeFullById, { id })
}

/**
* Get anime resource
* @param id anime id
*/
public async getAnimeById(id: number) {
return this.getResource<JikanResponse<Anime>>(AnimeEndpoints.animeById, {
public getAnimeById(id: number) {
return this.getResource<Anime>(AnimeEndpoints.animeById, {
id
})
}
Expand All @@ -53,31 +49,27 @@ export class AnimeClient extends BaseClient {
* Get characters of a specific anime
* @param id anime id
*/
public async getAnimeCharacters(id: number) {
return this.getResource<JikanResponse<AnimeCharacter[]>>(
AnimeEndpoints.animeCharacters,
{ id }
)
public getAnimeCharacters(id: number) {
return this.getResource<AnimeCharacter[]>(AnimeEndpoints.animeCharacters, {
id
})
}

/**
* Get staff of a specific Anime
* @param id anime id
*/
public async getAnimeStaff(id: number) {
return this.getResource<JikanResponse<AnimeStaff[]>>(
AnimeEndpoints.animeStaff,
{ id }
)
public getAnimeStaff(id: number) {
return this.getResource<AnimeStaff[]>(AnimeEndpoints.animeStaff, { id })
}

/**
* Get a list of all the episodes of a specific anime
* @param id anime id
* @param page page number
*/
public async getAnimeEpisodes(id: number, page = 1) {
return this.getResource<JikanResponse<AnimeEpisode[]>>(
public getAnimeEpisodes(id: number, page = 1) {
return this.getResource<AnimeEpisode[]>(
AnimeEndpoints.animeEpisodes,
{ id },
{ page }
Expand All @@ -89,20 +81,20 @@ export class AnimeClient extends BaseClient {
* @param anime_id anime id
* @param episode_id episode id
*/
public async getAnimeEpisodeById(anime_id: number, episode_id: number) {
return this.getResource<JikanResponse<AnimeEpisode>>(
AnimeEndpoints.animeEpisodeById,
{ id: anime_id, episode: episode_id }
)
public getAnimeEpisodeById(anime_id: number, episode_id: number) {
return this.getResource<AnimeEpisode>(AnimeEndpoints.animeEpisodeById, {
id: anime_id,
episode: episode_id
})
}

/**
* Get a list of news articles related to the anime
* @param id anime id
* @param page page number
*/
public async getAnimeNews(id: number, page: number) {
return this.getResource<JikanResponse<JikanNews[]>>(
public getAnimeNews(id: number, page: number) {
return this.getResource<JikanNews[]>(
AnimeEndpoints.animeNews,
{ id },
{ page }
Expand All @@ -114,8 +106,8 @@ export class AnimeClient extends BaseClient {
* @param id anime id
* @param filter filter topics
*/
public async getAnimeForum(id: number, filter?: ForumFilter) {
return this.getResource<JikanResponse<JikanForum[]>>(
public getAnimeForum(id: number, filter?: ForumFilter) {
return this.getResource<JikanForum[]>(
AnimeEndpoints.animeForum,
{ id },
filter ? { filter } : undefined
Expand All @@ -126,20 +118,17 @@ export class AnimeClient extends BaseClient {
* Get videos related to the anime
* @param id anime id
*/
public async getAnimeVideos(id: number) {
return this.getResource<JikanResponse<AnimeVideos>>(
AnimeEndpoints.animeVideos,
{ id }
)
public getAnimeVideos(id: number) {
return this.getResource<AnimeVideos>(AnimeEndpoints.animeVideos, { id })
}

/**
* Get episode videos related to the anime
* @param id anime id
* @param page page number
*/
public async getAnimeEpisodeVideos(id: number, page = 1) {
return this.getResource<JikanResponse<AnimeEpisodeVideo[]>>(
public getAnimeEpisodeVideos(id: number, page = 1) {
return this.getResource<AnimeEpisodeVideo[]>(
AnimeEndpoints.animeVideosEpisodes,
{ id },
{ page }
Expand All @@ -150,41 +139,36 @@ export class AnimeClient extends BaseClient {
* Get pictures related to the Anime
* @param id anime id
*/
public async getAnimePictures(id: number) {
return this.getResource<JikanResponse<AnimePicture[]>>(
AnimeEndpoints.animePictures,
{ id }
)
public getAnimePictures(id: number) {
return this.getResource<AnimePicture[]>(AnimeEndpoints.animePictures, {
id
})
}

/**
* Get statistics related to the Anime
* @param id anime id
*/
public async getAnimeStatistics(id: number) {
return this.getResource<JikanResponse<AnimeStatistics>>(
AnimeEndpoints.animeStatistics,
{ id }
)
public getAnimeStatistics(id: number) {
return this.getResource<AnimeStatistics>(AnimeEndpoints.animeStatistics, {
id
})
}

/**
* Get more info related to the anime
* @param id anime id
*/
public async getAnimeMoreInfo(id: number) {
return this.getResource<JikanResponse<JikanMoreInfo>>(
AnimeEndpoints.animeMoreInfo,
{ id }
)
public getAnimeMoreInfo(id: number) {
return this.getResource<JikanMoreInfo>(AnimeEndpoints.animeMoreInfo, { id })
}

/**
* Get recommendations based on the anime
* @param id anime id
*/
public async getAnimeRecommendations(id: number) {
return this.getResource<JikanResponse<Recommendation[]>>(
public getAnimeRecommendations(id: number) {
return this.getResource<Recommendation[]>(
AnimeEndpoints.animeRecommendations,
{ id }
)
Expand All @@ -194,31 +178,28 @@ export class AnimeClient extends BaseClient {
* Get anime relations
* @param id anime id
*/
public async getAnimeRelations(id: number) {
return this.getResource<JikanResponse<JikanRelation[]>>(
AnimeEndpoints.animeRelations,
{ id }
)
public getAnimeRelations(id: number) {
return this.getResource<JikanRelation[]>(AnimeEndpoints.animeRelations, {
id
})
}

/**
* Get anime external links
* @param id anime id
*/
public getAnimeExternal(id: number) {
return this.getResource<JikanResponse<JikanExternalLink[]>>(
AnimeEndpoints.animeExternal,
{ id }
)
return this.getResource<JikanExternalLink[]>(AnimeEndpoints.animeExternal, {
id
})
}

/**
* Get all the Animes within the given filter. Returns all the Animes if no filters are given.
* @param searchParams Filter parameters
* @returns JikanResponse with Anime array data
*/
public async getAnimeSearch(searchParams?: Partial<AnimeSearchParams>) {
return this.getResource<JikanResponse<Anime[]>>(
public getAnimeSearch(searchParams?: Partial<AnimeSearchParams>) {
return this.getResource<Anime[]>(
AnimeEndpoints.animeSearch,
{},
searchParams
Expand Down
12 changes: 8 additions & 4 deletions src/clients/base.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
handleResponseError
} from '../config'
import { BaseURL } from '../constants'
import type { JikanResponse } from '../models'

/**
* **Client Args**
Expand Down Expand Up @@ -66,11 +67,14 @@ export abstract class BaseClient {
endpoint: string,
identifiers: { [key in string]: unknown } = {},
params: { [key in string]: unknown } = {}
): Promise<T> {
): Promise<JikanResponse<T>> {
return (
await this.api.get<T>(this.replaceIdentifiers(endpoint, identifiers), {
params
})
await this.api.get<JikanResponse<T>>(
this.replaceIdentifiers(endpoint, identifiers),
{
params
}
)
).data
}

Expand Down
56 changes: 22 additions & 34 deletions src/clients/characters.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import type {
CharacterManga,
CharacterVoiceActor,
CharactersSearchParams,
JikanImagesCollection,
JikanResponse
JikanImagesCollection
} from '../models'
import { BaseClient } from './base.client'

Expand All @@ -21,34 +20,29 @@ export class CharactersClient extends BaseClient {
/**
* Get complete Character data
* @param id The Character ID
* @returns JikanResponse with Character data
*/
public async getCharacterFullById(id: number) {
return this.getResource<JikanResponse<Character>>(
CharactersEndpoints.characterFullById,
{ id }
)
public getCharacterFullById(id: number) {
return this.getResource<Character>(CharactersEndpoints.characterFullById, {
id
})
}

/**
* Get Character data
* @param id The Character ID
* @returns JikanResponse with Character data
*/
public async getCharacterById(id: number) {
return this.getResource<JikanResponse<Character>>(
CharactersEndpoints.characterById,
{ id }
)
public getCharacterById(id: number) {
return this.getResource<Character>(CharactersEndpoints.characterById, {
id
})
}

/**
* Get Character anime data
* @param id The Character ID
* @returns JikanResponse with CharacterAnime data
*/
public async getCharacterAnime(id: number) {
return this.getResource<JikanResponse<CharacterAnime[]>>(
public getCharacterAnime(id: number) {
return this.getResource<CharacterAnime[]>(
CharactersEndpoints.characterAnime,
{ id }
)
Expand All @@ -57,10 +51,9 @@ export class CharactersClient extends BaseClient {
/**
* Get Character manga data
* @param id The Character ID
* @returns JikanResponse with CharacterManga data
*/
public async getCharacterManga(id: number) {
return this.getResource<JikanResponse<CharacterManga[]>>(
public getCharacterManga(id: number) {
return this.getResource<CharacterManga[]>(
CharactersEndpoints.charactersManga,
{ id }
)
Expand All @@ -69,10 +62,9 @@ export class CharactersClient extends BaseClient {
/**
* Get Character voices data
* @param id The Character ID
* @returns JikanResponse with CharacterVoiceActor data
*/
public async getCharacterVoiceActors(id: number) {
return this.getResource<JikanResponse<CharacterVoiceActor[]>>(
public getCharacterVoiceActors(id: number) {
return this.getResource<CharacterVoiceActor[]>(
CharactersEndpoints.characterVoiceActors,
{ id }
)
Expand All @@ -81,24 +73,20 @@ export class CharactersClient extends BaseClient {
/**
* Get Character pictures data
* @param id The Character ID
* @returns JikanResponse with JikanImagesCollection data
*/
public async getCharacterPictures(id: number) {
return this.getResource<JikanResponse<JikanImagesCollection[]>>(
public getCharacterPictures(id: number) {
return this.getResource<JikanImagesCollection[]>(
CharactersEndpoints.characterPictures,
{ id }
)
}

/**
* Get all the Characters within the given filter. Returns all Characters if no filters are given.
@param searchParams Filter parameters
* @returns JikanResponse with Character array data
*/
public async getCharacterSearch(
searchParams: Partial<CharactersSearchParams>
) {
return this.getResource<JikanResponse<Character[]>>(
* Get all the Characters within the given filter. Returns all Characters if no filters are given.
* @param searchParams Filter parameters
*/
public getCharacterSearch(searchParams: Partial<CharactersSearchParams>) {
return this.getResource<Character[]>(
CharactersEndpoints.characterSearch,
{},
searchParams
Expand Down
10 changes: 5 additions & 5 deletions src/clients/genres.client.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { GenresEndpoints } from '../constants'
import type { Genre, GenresFilter, JikanResponse } from '../models'
import type { Genre, GenresFilter } from '../models'
import { BaseClient } from './base.client'

/**
Expand All @@ -14,8 +14,8 @@ export class GenresClient extends BaseClient {
* Get Anime genres
* @param filter Type of the desired genres
*/
public async getAnimeGenres(filter?: GenresFilter) {
return this.getResource<JikanResponse<Genre[]>>(
public getAnimeGenres(filter?: GenresFilter) {
return this.getResource<Genre[]>(
GenresEndpoints.animeGenres,
{},
{ filter }
Expand All @@ -26,8 +26,8 @@ export class GenresClient extends BaseClient {
* Get Manga genres
* @param filter Type of the desired genres
*/
public async getMangaGenres(filter?: GenresFilter) {
return this.getResource<JikanResponse<Genre[]>>(
public getMangaGenres(filter?: GenresFilter) {
return this.getResource<Genre[]>(
GenresEndpoints.mangaGenres,
{},
{ filter }
Expand Down
Loading

0 comments on commit 6a60194

Please sign in to comment.