diff --git a/src/endpoints/changes.ts b/src/endpoints/changes.ts index c1d5711..ea4818e 100644 --- a/src/endpoints/changes.ts +++ b/src/endpoints/changes.ts @@ -1,5 +1,6 @@ import { BaseEndpoint } from './base'; import { ChangeOptions, Changes } from '../types/changes'; +import { parseOptions } from '../utils'; export class ChangeEndpoint extends BaseEndpoint { @@ -8,23 +9,17 @@ export class ChangeEndpoint extends BaseEndpoint { } async movies(options?: ChangeOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`/movie/changes?${params}`); } async tvShows(options?: ChangeOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`/tv/changes?${params}`); } async person(options?: ChangeOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`/person/changes${params}`); } } diff --git a/src/endpoints/collections.ts b/src/endpoints/collections.ts index 134df30..0f1237d 100644 --- a/src/endpoints/collections.ts +++ b/src/endpoints/collections.ts @@ -1,4 +1,5 @@ import { DetailedCollection, ImageCollection, LanguageOption, Translations } from '../types'; +import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_COLLECTION = '/collection'; @@ -9,23 +10,17 @@ export class CollectionsEndpoint extends BaseEndpoint { } async details(id: number, options? : LanguageOption): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_COLLECTION}/${id}?${params}`); } async images(id: number, options? : LanguageOption): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_COLLECTION}/${id}/images?${params}`); } async translations(id: number, options? : LanguageOption): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_COLLECTION}/${id}/translations?${params}`); } } \ No newline at end of file diff --git a/src/endpoints/discover.ts b/src/endpoints/discover.ts index bc4365b..027a4f2 100644 --- a/src/endpoints/discover.ts +++ b/src/endpoints/discover.ts @@ -1,4 +1,5 @@ import { MovieDiscoverResult, SortOption, TvShowDiscoverResult } from '../types'; +import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_DISCOVER = '/discover'; @@ -26,7 +27,7 @@ interface DiscoverQueryOptions { } interface MovieQueryOptions extends DiscoverQueryOptions{ - region?: string; + region?: string; certification_country?: string; certification?: string; 'certification.lte'?: string; @@ -65,16 +66,12 @@ export class DiscoverEndpoint extends BaseEndpoint { } async movie(options?: MovieQueryOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_DISCOVER}/movie?${params}`); } async tvShow(options?: TvShowQueryOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_DISCOVER}/tv?${params}`); } } diff --git a/src/endpoints/find.ts b/src/endpoints/find.ts index d791e47..fcae9ec 100644 --- a/src/endpoints/find.ts +++ b/src/endpoints/find.ts @@ -1,5 +1,6 @@ import { BaseEndpoint } from './base'; import { ExternalIdOptions, FindResult } from '../types'; +import { parseOptions } from '../utils'; export class FindEndpoint extends BaseEndpoint { constructor(accessToken: string) { @@ -7,7 +8,7 @@ export class FindEndpoint extends BaseEndpoint { } async byId(externalId: string, options: ExternalIdOptions): Promise { - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get(`/find/${externalId}?${params}`); } } diff --git a/src/endpoints/keywords.ts b/src/endpoints/keywords.ts index df112b8..0637a28 100644 --- a/src/endpoints/keywords.ts +++ b/src/endpoints/keywords.ts @@ -1,5 +1,6 @@ import { BaseEndpoint } from './base'; import { BelongingMovies, Keyword, KeywordsOptions } from '../types'; +import { parseOptions } from '../utils'; const BASE_Keyword = '/keyword'; @@ -13,9 +14,7 @@ export class KeywordsEndpoint extends BaseEndpoint { } async belongingMovies(keywordId : number, options?: KeywordsOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_Keyword}/${keywordId}/movies?${params}`); } } diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index ca57ac3..afb92b3 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -24,6 +24,7 @@ import { Videos, WatchProviders, } from '../types'; +import { parseOptions } from '../utils'; const BASE_MOVIE = '/movie'; @@ -41,9 +42,7 @@ export class MoviesEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/changes?${params}`); } @@ -64,16 +63,12 @@ export class MoviesEndpoint extends BaseEndpoint{ } async lists(id: number, options?: LanguageOption | PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/lists?${params}`); } async recommendations(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/recommendations?${params}`); } @@ -82,16 +77,12 @@ export class MoviesEndpoint extends BaseEndpoint{ } async reviews(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } async similar(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/similar?${params}`); } @@ -116,30 +107,22 @@ export class MoviesEndpoint extends BaseEndpoint{ } async nowPlaying(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/now_playing?${params}`); } async popular(options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } async topRated(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/top_rated?${params}`); } async upcoming(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/upcoming?${params}`); } } diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index 6787d9b..6da72a0 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -12,6 +12,7 @@ import { PopularPersons, TaggedImages } from '../types'; +import { parseOptions } from '../utils'; import { BaseEndpoint } from './base'; const BASE_PERSON = '/person'; @@ -26,9 +27,7 @@ export class PeopleEndpoint extends BaseEndpoint { } async changes(id: number, options? : ChangeOptions): Promise { - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_PERSON}/${id}/changes?${params}`); } @@ -53,9 +52,7 @@ export class PeopleEndpoint extends BaseEndpoint { } async taggedImages(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_PERSON}/${id}/tagged_images?${params}`); } @@ -68,9 +65,7 @@ export class PeopleEndpoint extends BaseEndpoint { } async popular(options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_PERSON}/popular?${params}`); } } diff --git a/src/endpoints/search.ts b/src/endpoints/search.ts index 03e3207..7a8ab78 100644 --- a/src/endpoints/search.ts +++ b/src/endpoints/search.ts @@ -1,6 +1,7 @@ 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'; @@ -30,34 +31,34 @@ export class SearchEndpoint extends BaseEndpoint { } async companies(options: SearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/company?${params}`); } async collections(options: SearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/collection?${params}`); } async keywords(options: SearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/keyword?${params}`); } async movies(options: MovieSearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/movie?${params}`); } async people(options: PeopleSearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/person?${params}`); } // TODO: Multi search async tvShows(options: TvSearchOptions): Promise>{ - const params = new URLSearchParams(Object.entries(options)).toString(); + const params = parseOptions(options); return await this.api.get>(`${BASE_SEARCH}/tv?${params}`); } } diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index b2f5444..8b1fb2f 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -27,6 +27,7 @@ import { Videos, WatchProviders, } from '../types'; +import { parseOptions } from '../utils'; const BASE_TV = '/tv'; @@ -44,9 +45,7 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/${id}/changes?${params}`); } @@ -79,16 +78,12 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async recommendations(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/${id}/recommendations?${params}`); } async reviews(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/${id}/reviews?${params}`); } @@ -97,9 +92,7 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async similar(id: number, options?: PageOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/${id}/similar?${params}`); } @@ -128,23 +121,17 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async airingToday(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/airing_today?${params}`); } async popular(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/popular?${params}`); } async topRated(options?: PageOption & LanguageOption & RegionOption): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() - : ''; + const params = parseOptions(options); return await this.api.get(`${BASE_TV}/top_rated?${params}`); } } diff --git a/src/utils/index.ts b/src/utils/index.ts index eb42ebf..2107f61 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1 +1,2 @@ export * from './getImagePath'; +export * from './parseOptions'; diff --git a/src/utils/parseOptions.ts b/src/utils/parseOptions.ts new file mode 100644 index 0000000..9066db5 --- /dev/null +++ b/src/utils/parseOptions.ts @@ -0,0 +1,7 @@ +export function parseOptions( + options?: { [s: string]: any }, +): string { + return options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; +}