diff --git a/package.json b/package.json index 4f3a84c..d74362e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tmdb-ts", - "version": "0.1.9", + "version": "0.2.0", "description": "TMDB v3 library wrapper", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/api.ts b/src/api.ts index ddc38f4..e14813c 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,4 +1,5 @@ import fetch from 'cross-fetch'; +import { parseOptions } from './utils'; const BASE_URL_V3 = 'https://api.themoviedb.org/3'; @@ -7,8 +8,9 @@ export default class Api { this.accessToken = accessToken; } - async get(path: string): Promise { - const response = await fetch(`${BASE_URL_V3}${path}`, { + async get(path: string, options?: Record): Promise { + const params = parseOptions(options); + const response = await fetch(`${BASE_URL_V3}${path}?${params}`, { method: 'GET', headers: { Authorization: `Bearer ${this.accessToken}`, diff --git a/src/endpoints/changes.ts b/src/endpoints/changes.ts index 8f3675d..a4316b5 100644 --- a/src/endpoints/changes.ts +++ b/src/endpoints/changes.ts @@ -1,6 +1,5 @@ import { BaseEndpoint } from './base'; import { ChangeOptions, Changes } from '../types/changes'; -import { parseOptions } from '../utils'; export class ChangeEndpoint extends BaseEndpoint { constructor(protected readonly accessToken: string) { @@ -8,17 +7,14 @@ export class ChangeEndpoint extends BaseEndpoint { } async movies(options?: ChangeOptions): Promise { - const params = parseOptions(options); - return await this.api.get(`/movie/changes?${params}`); + return await this.api.get(`/movie/changes`, options); } async tvShows(options?: ChangeOptions): Promise { - const params = parseOptions(options); - return await this.api.get(`/tv/changes?${params}`); + return await this.api.get(`/tv/changes`, options); } async person(options?: ChangeOptions): Promise { - const params = parseOptions(options); - return await this.api.get(`/person/changes${params}`); + return await this.api.get(`/person/change`, options); } } diff --git a/src/endpoints/collections.ts b/src/endpoints/collections.ts index 295d45b..50550a9 100644 --- a/src/endpoints/collections.ts +++ b/src/endpoints/collections.ts @@ -4,7 +4,6 @@ import { LanguageOption, Translations, } from '../types'; -import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_COLLECTION = '/collection'; @@ -18,16 +17,16 @@ export class CollectionsEndpoint extends BaseEndpoint { id: number, options?: LanguageOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_COLLECTION}/${id}?${params}` + `${BASE_COLLECTION}/${id}`, + options ); } async images(id: number, options?: LanguageOption): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_COLLECTION}/${id}/images?${params}` + `${BASE_COLLECTION}/${id}/images`, + options ); } @@ -35,9 +34,9 @@ export class CollectionsEndpoint extends BaseEndpoint { id: number, options?: LanguageOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_COLLECTION}/${id}/translations?${params}` + `${BASE_COLLECTION}/${id}/translations`, + options ); } } diff --git a/src/endpoints/discover.ts b/src/endpoints/discover.ts index aa5babc..41304db 100644 --- a/src/endpoints/discover.ts +++ b/src/endpoints/discover.ts @@ -3,7 +3,6 @@ import { SortOption, TvShowDiscoverResult, } from '../types'; -import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_DISCOVER = '/discover'; @@ -70,16 +69,16 @@ export class DiscoverEndpoint extends BaseEndpoint { } async movie(options?: MovieQueryOptions): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_DISCOVER}/movie?${params}` + `${BASE_DISCOVER}/movie`, + options ); } async tvShow(options?: TvShowQueryOptions): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_DISCOVER}/tv?${params}` + `${BASE_DISCOVER}/tv`, + options ); } } diff --git a/src/endpoints/find.ts b/src/endpoints/find.ts index 76a68be..503a32e 100644 --- a/src/endpoints/find.ts +++ b/src/endpoints/find.ts @@ -1,6 +1,5 @@ import { BaseEndpoint } from './base'; import { ExternalIdOptions, FindResult } from '../types'; -import { parseOptions } from '../utils'; export class FindEndpoint extends BaseEndpoint { constructor(accessToken: string) { @@ -11,7 +10,6 @@ export class FindEndpoint extends BaseEndpoint { externalId: string, options: ExternalIdOptions ): Promise { - const params = parseOptions(options); - return await this.api.get(`/find/${externalId}?${params}`); + return await this.api.get(`/find/${externalId}`, options); } } diff --git a/src/endpoints/keywords.ts b/src/endpoints/keywords.ts index 3929299..0a5b459 100644 --- a/src/endpoints/keywords.ts +++ b/src/endpoints/keywords.ts @@ -1,6 +1,5 @@ import { BaseEndpoint } from './base'; import { BelongingMovies, Keyword, KeywordsOptions } from '../types'; -import { parseOptions } from '../utils'; const BASE_Keyword = '/keyword'; @@ -17,9 +16,9 @@ export class KeywordsEndpoint extends BaseEndpoint { keywordId: number, options?: KeywordsOptions ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_Keyword}/${keywordId}/movies?${params}` + `${BASE_Keyword}/${keywordId}/movies`, + options ); } } diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index 5f56c89..f9c312f 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -25,7 +25,6 @@ import { Videos, WatchProviders, } from '../types'; -import { parseOptions } from '../utils'; const BASE_MOVIE = '/movie'; @@ -45,9 +44,9 @@ export class MoviesEndpoint extends BaseEndpoint { } async changes(id: number, options?: ChangeOptions): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/${id}/changes?${params}` + `${BASE_MOVIE}/${id}/changes`, + options ); } @@ -71,19 +70,16 @@ export class MoviesEndpoint extends BaseEndpoint { id: number, options?: LanguageOption | PageOption ): Promise { - const params = parseOptions(options); - return await this.api.get( - `${BASE_MOVIE}/${id}/lists?${params}` - ); + return await this.api.get(`${BASE_MOVIE}/${id}/lists`, options); } async recommendations( id: number, options?: PageOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/${id}/recommendations?${params}` + `${BASE_MOVIE}/${id}/recommendations`, + options ); } @@ -94,14 +90,13 @@ export class MoviesEndpoint extends BaseEndpoint { } async reviews(id: number, options?: PageOption): Promise { - const params = parseOptions(options); - return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); + return await this.api.get(`${BASE_MOVIE}/${id}/reviews`, options); } async similar(id: number, options?: PageOption): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/${id}/similar?${params}` + `${BASE_MOVIE}/${id}/similar`, + options ); } @@ -130,32 +125,31 @@ export class MoviesEndpoint extends BaseEndpoint { async nowPlaying( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/now_playing?${params}` + `${BASE_MOVIE}/now_playing`, + options ); } async popular(options?: PageOption): Promise { - const params = parseOptions(options); - return await this.api.get(`${BASE_MOVIE}/popular?${params}`); + return await this.api.get(`${BASE_MOVIE}/popular`, options); } async topRated( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/top_rated?${params}` + `${BASE_MOVIE}/top_rated`, + options ); } async upcoming( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_MOVIE}/upcoming?${params}` + `${BASE_MOVIE}/upcoming`, + options ); } } diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index 8a3a4c4..26742ce 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -12,7 +12,6 @@ import { PopularPersons, TaggedImages, } from '../types'; -import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_PERSON = '/person'; @@ -27,9 +26,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async changes(id: number, options?: ChangeOptions): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_PERSON}/${id}/changes?${params}` + `${BASE_PERSON}/${id}/changes`, + options ); } @@ -62,9 +61,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async taggedImages(id: number, options?: PageOption): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_PERSON}/${id}/tagged_images?${params}` + `${BASE_PERSON}/${id}/tagged_images`, + options ); } @@ -79,9 +78,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async popular(options?: PageOption): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_PERSON}/popular?${params}` + `${BASE_PERSON}/popular`, + options ); } } diff --git a/src/endpoints/search.ts b/src/endpoints/search.ts index 1f02fd4..3c32437 100644 --- a/src/endpoints/search.ts +++ b/src/endpoints/search.ts @@ -1,7 +1,6 @@ import { BaseEndpoint } from './base'; import { Search } from '../types/search'; import { Collection, Company, Movie, Person, TV } from '../types'; -import { parseOptions } from '../utils'; const BASE_SEARCH = '/search'; @@ -31,44 +30,39 @@ export class SearchEndpoint extends BaseEndpoint { } async companies(options: SearchOptions): Promise> { - const params = parseOptions(options); return await this.api.get>( - `${BASE_SEARCH}/company?${params}` + `${BASE_SEARCH}/company`, + options ); } async collections(options: SearchOptions): Promise> { - const params = parseOptions(options); return await this.api.get>( - `${BASE_SEARCH}/collection?${params}` + `${BASE_SEARCH}/collection`, + options ); } async keywords( options: SearchOptions ): Promise> { - const params = parseOptions(options); return await this.api.get>( - `${BASE_SEARCH}/keyword?${params}` + `${BASE_SEARCH}/keyword`, + options ); } async movies(options: MovieSearchOptions): Promise> { - const params = parseOptions(options); - return await this.api.get>(`${BASE_SEARCH}/movie?${params}`); + return await this.api.get>(`${BASE_SEARCH}/movie`, options); } async people(options: PeopleSearchOptions): Promise> { - const params = parseOptions(options); - return await this.api.get>( - `${BASE_SEARCH}/person?${params}` - ); + return await this.api.get>(`${BASE_SEARCH}/person`, options); } // TODO: Multi search async tvShows(options: TvSearchOptions): Promise> { - const params = parseOptions(options); - return await this.api.get>(`${BASE_SEARCH}/tv?${params}`); + return await this.api.get>(`${BASE_SEARCH}/tv`, options); } } diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 8d2133c..c1c3746 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -27,7 +27,6 @@ import { Videos, WatchProviders, } from '../types'; -import { parseOptions } from '../utils'; const BASE_TV = '/tv'; @@ -47,9 +46,9 @@ export class TvShowsEndpoint extends BaseEndpoint { } async changes(id: number, options?: ChangeOptions): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_TV}/${id}/changes?${params}` + `${BASE_TV}/${id}/changes`, + options ); } @@ -89,15 +88,14 @@ export class TvShowsEndpoint extends BaseEndpoint { id: number, options?: PageOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_TV}/${id}/recommendations?${params}` + `${BASE_TV}/${id}/recommendations`, + options ); } async reviews(id: number, options?: PageOption): Promise { - const params = parseOptions(options); - return await this.api.get(`${BASE_TV}/${id}/reviews?${params}`); + return await this.api.get(`${BASE_TV}/${id}/reviews`, options); } async screenedTheatrically(id: number): Promise { @@ -107,9 +105,9 @@ export class TvShowsEndpoint extends BaseEndpoint { } async similar(id: number, options?: PageOption): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_TV}/${id}/similar?${params}` + `${BASE_TV}/${id}/similar`, + options ); } @@ -142,25 +140,21 @@ export class TvShowsEndpoint extends BaseEndpoint { async airingToday( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); return await this.api.get( - `${BASE_TV}/airing_today?${params}` + `${BASE_TV}/airing_today`, + options ); } async popular( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); - return await this.api.get(`${BASE_TV}/popular?${params}`); + return await this.api.get(`${BASE_TV}/popular`, options); } async topRated( options?: PageOption & LanguageOption & RegionOption ): Promise { - const params = parseOptions(options); - return await this.api.get( - `${BASE_TV}/top_rated?${params}` - ); + return await this.api.get(`${BASE_TV}/top_rated`, options); } } diff --git a/src/utils/parseOptions.ts b/src/utils/parseOptions.ts index 0830abd..9ef0d54 100644 --- a/src/utils/parseOptions.ts +++ b/src/utils/parseOptions.ts @@ -1,4 +1,4 @@ +export function parseOptions(options?: Record): string { /* eslint-disable @typescript-eslint/no-explicit-any */ -export function parseOptions(options?: { [s: string]: any }): string { return options ? new URLSearchParams(Object.entries(options)).toString() : ''; }