From f8b5564d2223197327cc01b48719886821b68e63 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 8 Mar 2023 14:00:04 +0100 Subject: [PATCH 1/6] Replace querystring with URLSearchParams URLSearchParams has greater compatibility with browser code Created new PageOptions and LocaleOptions for easier use with URLSearchParams --- src/endpoints/changes.ts | 14 ++++++---- src/endpoints/discover.ts | 11 +++++--- src/endpoints/find.ts | 3 +-- src/endpoints/movies.ts | 55 ++++++++++++++++++++++++++------------- src/endpoints/people.ts | 20 ++++++++------ src/endpoints/search.ts | 16 +++++------- src/endpoints/tv-shows.ts | 46 ++++++++++++++++++++------------ src/types/changes.ts | 4 +-- src/types/find.ts | 3 +-- src/types/index.ts | 1 + src/types/page.ts | 8 ++++++ 11 files changed, 113 insertions(+), 68 deletions(-) create mode 100644 src/types/page.ts diff --git a/src/endpoints/changes.ts b/src/endpoints/changes.ts index 4b74652..c1d5711 100644 --- a/src/endpoints/changes.ts +++ b/src/endpoints/changes.ts @@ -1,4 +1,3 @@ -import querystring from 'querystring'; import { BaseEndpoint } from './base'; import { ChangeOptions, Changes } from '../types/changes'; @@ -9,18 +8,23 @@ export class ChangeEndpoint extends BaseEndpoint { } async movies(options?: ChangeOptions): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`/movie/changes?${params}`); } async tvShows(options?: ChangeOptions): Promise { - const params = querystring.stringify(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`/tv/changes?${params}`); } async person(options?: ChangeOptions): Promise { - const params = querystring.stringify(options); - + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`/person/changes${params}`); } } diff --git a/src/endpoints/discover.ts b/src/endpoints/discover.ts index c039978..bc4365b 100644 --- a/src/endpoints/discover.ts +++ b/src/endpoints/discover.ts @@ -1,10 +1,9 @@ import { MovieDiscoverResult, SortOption, TvShowDiscoverResult } from '../types'; import { BaseEndpoint } from './base'; -import querystring, { ParsedUrlQueryInput } from 'querystring'; const BASE_DISCOVER = '/discover'; -interface DiscoverQueryOptions extends ParsedUrlQueryInput{ +interface DiscoverQueryOptions { language?: string; sort_by?: SortOption; page?: number; @@ -66,12 +65,16 @@ export class DiscoverEndpoint extends BaseEndpoint { } async movie(options?: MovieQueryOptions): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_DISCOVER}/movie?${params}`); } async tvShow(options?: TvShowQueryOptions): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_DISCOVER}/tv?${params}`); } } diff --git a/src/endpoints/find.ts b/src/endpoints/find.ts index 4df537d..d791e47 100644 --- a/src/endpoints/find.ts +++ b/src/endpoints/find.ts @@ -1,5 +1,4 @@ import { BaseEndpoint } from './base'; -import querystring from 'querystring'; import { ExternalIdOptions, FindResult } from '../types'; export class FindEndpoint extends BaseEndpoint { @@ -8,7 +7,7 @@ export class FindEndpoint extends BaseEndpoint { } async byId(externalId: string, options: ExternalIdOptions): Promise { - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`/find/${externalId}?${params}`); } } diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index 92a2f7c..e967a1f 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -7,10 +7,12 @@ import { Images, Keywords, LatestMovie, + LocaleOptions, MovieChanges, MovieDetails, MovieLists, MoviesPlayingNow, + PageOptions, PopularMovies, Recommendations, ReleaseDates, @@ -21,7 +23,6 @@ import { Videos, WatchProviders, } from '../types'; -import querystring from 'querystring'; const BASE_MOVIE = '/movie'; @@ -39,7 +40,9 @@ export class MoviesEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/${id}/changes?${params}`); } @@ -59,13 +62,17 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/${id}/keywords`); } - async lists(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async lists(id: number, options?: PageOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/${id}/lists?${params}`); } - async recommendations(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async recommendations(id: number, options?: PageOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/${id}/recommendations?${params}`); } @@ -73,13 +80,17 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/${id}/release_dates`); } - async reviews(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async reviews(id: number, options?: PageOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } - async similar(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async similar(id: number, options?: PageOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/${id}/similar?${params}`); } @@ -103,23 +114,31 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/latest`); } - async nowPlaying(options?: {page?: number, region?: string, language?: string}): Promise{ - const params = querystring.encode(options); + async nowPlaying(options?: LocaleOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/now_playing?${params}`); } - async popular(options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async popular(options?: PageOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } - async topRated(options?: {page?: number, region?: string, language?: string}): Promise{ - const params = querystring.encode(options); + async topRated(options?: LocaleOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/top_rated?${params}`); } - async upcoming(options?: {page?: number, region?: string, language?: string}): Promise{ - const params = querystring.encode(options); + async upcoming(options?: LocaleOptions): Promise{ + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_MOVIE}/upcoming?${params}`); } } diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index d5e4f68..a17b1f6 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -1,10 +1,8 @@ -import { ChangeOptions, ExternalIds, Image, PeopleTranslations, PersonChanges, PersonCombinedCredits, PersonDetail, PersonMovieCredit, PersonTvShowCredit, PopularPersons, TaggedImages } from '../types'; +import { ChangeOptions, ExternalIds, Image, PageOptions, PeopleTranslations, PersonChanges, PersonCombinedCredits, PersonDetail, PersonMovieCredit, PersonTvShowCredit, PopularPersons, TaggedImages } from '../types'; import { BaseEndpoint } from './base'; -import querystring from 'querystring'; const BASE_PERSON = '/person'; - export class PeopleEndpoint extends BaseEndpoint { constructor(accessToken: string) { super(accessToken); @@ -15,7 +13,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async changes(id: number, options? : ChangeOptions): Promise { - const params = querystring.encode(options); + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_PERSON}/${id}/changes?${params}`); } @@ -39,8 +39,10 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get<{id: number, profiles: Image[]}>(`${BASE_PERSON}/${id}/images`) } - async taggedImages(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async taggedImages(id: number, options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_PERSON}/${id}/tagged_images?${params}`); } @@ -52,8 +54,10 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get(`${BASE_PERSON}/latest`); } - async popular(options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async popular(options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_PERSON}/popular?${params}`); } } diff --git a/src/endpoints/search.ts b/src/endpoints/search.ts index 0fc8e99..03e3207 100644 --- a/src/endpoints/search.ts +++ b/src/endpoints/search.ts @@ -1,11 +1,10 @@ import { BaseEndpoint } from './base'; -import querystring, { ParsedUrlQueryInput } from 'querystring'; import { Search } from '../types/search'; import { Collection, Company, Movie, Person, TV } from '../types'; const BASE_SEARCH = '/search'; -export interface SearchOptions extends ParsedUrlQueryInput { +export interface SearchOptions { query: string; page?: number; } @@ -31,35 +30,34 @@ export class SearchEndpoint extends BaseEndpoint { } async companies(options: SearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/company?${params}`); } async collections(options: SearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/collection?${params}`); } async keywords(options: SearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/keyword?${params}`); } async movies(options: MovieSearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/movie?${params}`); } async people(options: PeopleSearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/person?${params}`); } // TODO: Multi search async tvShows(options: TvSearchOptions): Promise>{ - const params = querystring.encode(options); + const params = new URLSearchParams(Object.entries(options)).toString(); return await this.api.get>(`${BASE_SEARCH}/tv?${params}`); } - } diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 439755e..f3d807d 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -9,7 +9,9 @@ import { Images, Keywords, LatestTvShows, + LocaleOptions, OnTheAir, + PageOptions, PopularTvShows, Recommendations, Reviews, @@ -24,7 +26,6 @@ import { Videos, WatchProviders, } from '../types'; -import querystring from 'querystring'; const BASE_TV = '/tv'; @@ -42,7 +43,9 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = querystring.encode(options); + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/${id}/changes?${params}`); } @@ -74,13 +77,17 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/${id}/keywords`); } - async recommendations(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async recommendations(id: number, options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/${id}/recommendations?${params}`); } - async reviews(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async reviews(id: number, options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/${id}/reviews?${params}`); } @@ -88,8 +95,10 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/${id}/screened_theatrically`); } - async similar(id: number, options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async similar(id: number, options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/${id}/similar?${params}`); } @@ -117,21 +126,24 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/on_the_air`); } - async airingToday(options?: {page?: number, region?: string, language?: string}): Promise{ - const params = querystring.encode(options); + async airingToday(options?: LocaleOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/airing_today?${params}`); } - async popular(options?: {page?: number}): Promise{ - const params = querystring.encode(options); + async popular(options?: PageOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/popular?${params}`); } - async topRated(options?: {page?: number, region?: string, language?: string}): Promise{ - const params = querystring.encode(options); + async topRated(options?: LocaleOptions): Promise{ + const params = options == undefined + ? undefined + : new URLSearchParams(Object.entries(options)).toString(); return await this.api.get(`${BASE_TV}/top_rated?${params}`); } - } - - diff --git a/src/types/changes.ts b/src/types/changes.ts index 04489ea..a92187d 100644 --- a/src/types/changes.ts +++ b/src/types/changes.ts @@ -1,5 +1,3 @@ -import { ParsedUrlQueryInput } from 'querystring'; - export interface Change { id: number; adult: boolean | undefined; @@ -12,7 +10,7 @@ export interface Changes{ total_results: number; } -export interface ChangeOptions extends ParsedUrlQueryInput { +export interface ChangeOptions { end_date?: string; start_date?: string; page?: number; diff --git a/src/types/find.ts b/src/types/find.ts index a4a3b8f..035e97d 100644 --- a/src/types/find.ts +++ b/src/types/find.ts @@ -1,4 +1,3 @@ -import { ParsedUrlQueryInput } from 'querystring'; import { Episode, Media, MediaType, Movie, Person, Season, TV } from '.'; export type ExternalSource = @@ -11,7 +10,7 @@ export type ExternalSource = | 'twitter_id' | 'instagram_id'; -export interface ExternalIdOptions extends ParsedUrlQueryInput { +export interface ExternalIdOptions { external_source: ExternalSource; language?: string; } diff --git a/src/types/index.ts b/src/types/index.ts index 783be6b..681f8af 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -6,6 +6,7 @@ export * from './movies'; export * from './search'; export * from './tv-shows'; export * from './watch-providers'; +export * from './page'; export * from './people'; export * from './discover'; export * from './review'; diff --git a/src/types/page.ts b/src/types/page.ts new file mode 100644 index 0000000..5d27852 --- /dev/null +++ b/src/types/page.ts @@ -0,0 +1,8 @@ +export interface PageOptions { + page?: number; +} + +export interface LocaleOptions extends PageOptions { + region?: string; + language?: string; +} From f44f1081ca75b0938db65ef98ab4e66fa0d8db86 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 29 Mar 2023 21:29:56 +0200 Subject: [PATCH 2/6] Do not use undefined params --- src/endpoints/collections.ts | 14 +++++++----- src/endpoints/keywords.ts | 5 +++-- src/endpoints/movies.ts | 36 +++++++++++++++---------------- src/endpoints/people.ts | 18 ++++++++-------- src/endpoints/tv-shows.ts | 42 ++++++++++++++++++------------------ src/types/keywords.ts | 3 +-- src/types/options.ts | 10 ++++----- 7 files changed, 65 insertions(+), 63 deletions(-) diff --git a/src/endpoints/collections.ts b/src/endpoints/collections.ts index 386fb6d..134df30 100644 --- a/src/endpoints/collections.ts +++ b/src/endpoints/collections.ts @@ -1,6 +1,5 @@ import { DetailedCollection, ImageCollection, LanguageOption, Translations } from '../types'; import { BaseEndpoint } from './base'; -import querystring from 'querystring'; const BASE_COLLECTION = '/collection'; @@ -10,18 +9,23 @@ export class CollectionsEndpoint extends BaseEndpoint { } async details(id: number, options? : LanguageOption): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_COLLECTION}/${id}?${params}`); } async images(id: number, options? : LanguageOption): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_COLLECTION}/${id}/images?${params}`); } async translations(id: number, options? : LanguageOption): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_COLLECTION}/${id}/translations?${params}`); } - } \ No newline at end of file diff --git a/src/endpoints/keywords.ts b/src/endpoints/keywords.ts index 818189e..df112b8 100644 --- a/src/endpoints/keywords.ts +++ b/src/endpoints/keywords.ts @@ -1,5 +1,4 @@ import { BaseEndpoint } from './base'; -import querystring from 'querystring'; import { BelongingMovies, Keyword, KeywordsOptions } from '../types'; const BASE_Keyword = '/keyword'; @@ -14,7 +13,9 @@ export class KeywordsEndpoint extends BaseEndpoint { } async belongingMovies(keywordId : number, options?: KeywordsOptions): Promise { - const params = querystring.encode(options); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_Keyword}/${keywordId}/movies?${params}`); } } diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index e967a1f..e32b682 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -40,8 +40,8 @@ export class MoviesEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/changes?${params}`); } @@ -63,15 +63,15 @@ export class MoviesEndpoint extends BaseEndpoint{ } async lists(id: number, options?: PageOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/lists?${params}`); } async recommendations(id: number, options?: PageOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/recommendations?${params}`); } @@ -81,15 +81,15 @@ export class MoviesEndpoint extends BaseEndpoint{ } async reviews(id: number, options?: PageOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } async similar(id: number, options?: PageOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/similar?${params}`); } @@ -115,29 +115,29 @@ export class MoviesEndpoint extends BaseEndpoint{ } async nowPlaying(options?: LocaleOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/now_playing?${params}`); } async popular(options?: PageOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } async topRated(options?: LocaleOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/top_rated?${params}`); } async upcoming(options?: LocaleOptions): Promise{ - const params = options - ? new URLSearchParams(Object.entries(options)).toString() + const params = options + ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/upcoming?${params}`); } diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index a17b1f6..d3bbbc9 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -13,9 +13,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async changes(id: number, options? : ChangeOptions): Promise { - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_PERSON}/${id}/changes?${params}`); } @@ -40,9 +40,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async taggedImages(id: number, options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_PERSON}/${id}/tagged_images?${params}`); } @@ -55,9 +55,9 @@ export class PeopleEndpoint extends BaseEndpoint { } async popular(options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_PERSON}/popular?${params}`); } } diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index f3d807d..48de437 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -43,9 +43,9 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async changes(id: number, options?: ChangeOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/${id}/changes?${params}`); } @@ -78,16 +78,16 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async recommendations(id: number, options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/${id}/recommendations?${params}`); } async reviews(id: number, options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/${id}/reviews?${params}`); } @@ -96,9 +96,9 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async similar(id: number, options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/${id}/similar?${params}`); } @@ -127,23 +127,23 @@ export class TvShowsEndpoint extends BaseEndpoint{ } async airingToday(options?: LocaleOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/airing_today?${params}`); } async popular(options?: PageOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/popular?${params}`); } async topRated(options?: LocaleOptions): Promise{ - const params = options == undefined - ? undefined - : new URLSearchParams(Object.entries(options)).toString(); + const params = options + ? new URLSearchParams(Object.entries(options)).toString() + : ''; return await this.api.get(`${BASE_TV}/top_rated?${params}`); } } diff --git a/src/types/keywords.ts b/src/types/keywords.ts index f820bed..6393160 100644 --- a/src/types/keywords.ts +++ b/src/types/keywords.ts @@ -1,7 +1,6 @@ -import { ParsedUrlQueryInput } from 'querystring'; import { Movie } from '.'; -export interface KeywordsOptions extends ParsedUrlQueryInput { +export interface KeywordsOptions { include_adult?: boolean; language?: string; } diff --git a/src/types/options.ts b/src/types/options.ts index 2f30fb4..f0b0437 100644 --- a/src/types/options.ts +++ b/src/types/options.ts @@ -1,9 +1,7 @@ -import { ParsedUrlQueryInput } from 'querystring'; - -export interface LanguageOption extends ParsedUrlQueryInput { - language?: string; +export interface LanguageOption { + language?: string; } -export interface PageOption extends ParsedUrlQueryInput { - page?: number; +export interface PageOption { + page?: number; } From d19e6f3be9be256a640ef90b800375a564379535 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 29 Mar 2023 21:34:12 +0200 Subject: [PATCH 3/6] Add new interface RegionOption --- src/types/options.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/types/options.ts b/src/types/options.ts index f0b0437..13af8ff 100644 --- a/src/types/options.ts +++ b/src/types/options.ts @@ -2,6 +2,10 @@ export interface LanguageOption { language?: string; } +export interface RegionOption { + region?: string; +} + export interface PageOption { page?: number; } From 3ce67c63c5bd74a74270d7ded7c0291a623ccc99 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 29 Mar 2023 21:34:33 +0200 Subject: [PATCH 4/6] Use union types for Region, Language, and Page options --- src/endpoints/movies.ts | 21 +++++++++++---------- src/endpoints/people.ts | 19 ++++++++++++++++--- src/endpoints/tv-shows.ts | 17 +++++++++-------- src/types/index.ts | 1 - src/types/page.ts | 8 -------- 5 files changed, 36 insertions(+), 30 deletions(-) delete mode 100644 src/types/page.ts diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index e32b682..ca57ac3 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -6,15 +6,16 @@ import { ExternalIds, Images, Keywords, + LanguageOption, LatestMovie, - LocaleOptions, MovieChanges, MovieDetails, MovieLists, MoviesPlayingNow, - PageOptions, + PageOption, PopularMovies, Recommendations, + RegionOption, ReleaseDates, Reviews, SimilarMovies, @@ -62,14 +63,14 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/${id}/keywords`); } - async lists(id: number, options?: PageOptions): Promise{ + async lists(id: number, options?: LanguageOption | PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/lists?${params}`); } - async recommendations(id: number, options?: PageOptions): Promise{ + async recommendations(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; @@ -80,14 +81,14 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/${id}/release_dates`); } - async reviews(id: number, options?: PageOptions): Promise{ + async reviews(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } - async similar(id: number, options?: PageOptions): Promise{ + async similar(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; @@ -114,28 +115,28 @@ export class MoviesEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_MOVIE}/latest`); } - async nowPlaying(options?: LocaleOptions): Promise{ + async nowPlaying(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/now_playing?${params}`); } - async popular(options?: PageOptions): Promise{ + async popular(options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } - async topRated(options?: LocaleOptions): Promise{ + async topRated(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_MOVIE}/top_rated?${params}`); } - async upcoming(options?: LocaleOptions): Promise{ + async upcoming(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index d3bbbc9..6787d9b 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -1,4 +1,17 @@ -import { ChangeOptions, ExternalIds, Image, PageOptions, PeopleTranslations, PersonChanges, PersonCombinedCredits, PersonDetail, PersonMovieCredit, PersonTvShowCredit, PopularPersons, TaggedImages } from '../types'; +import { + ChangeOptions, + ExternalIds, + Image, + PageOption, + PeopleTranslations, + PersonChanges, + PersonCombinedCredits, + PersonDetail, + PersonMovieCredit, + PersonTvShowCredit, + PopularPersons, + TaggedImages +} from '../types'; import { BaseEndpoint } from './base'; const BASE_PERSON = '/person'; @@ -39,7 +52,7 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get<{id: number, profiles: Image[]}>(`${BASE_PERSON}/${id}/images`) } - async taggedImages(id: number, options?: PageOptions): Promise{ + async taggedImages(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; @@ -54,7 +67,7 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get(`${BASE_PERSON}/latest`); } - async popular(options?: PageOptions): Promise{ + async popular(options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 48de437..b2f5444 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -8,12 +8,13 @@ import { ExternalIds, Images, Keywords, + LanguageOption, LatestTvShows, - LocaleOptions, OnTheAir, - PageOptions, + PageOption, PopularTvShows, Recommendations, + RegionOption, Reviews, ScreenedTheatrically, SeasonDetails, @@ -77,14 +78,14 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/${id}/keywords`); } - async recommendations(id: number, options?: PageOptions): Promise{ + async recommendations(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_TV}/${id}/recommendations?${params}`); } - async reviews(id: number, options?: PageOptions): Promise{ + async reviews(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; @@ -95,7 +96,7 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/${id}/screened_theatrically`); } - async similar(id: number, options?: PageOptions): Promise{ + async similar(id: number, options?: PageOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; @@ -126,21 +127,21 @@ export class TvShowsEndpoint extends BaseEndpoint{ return await this.api.get(`${BASE_TV}/on_the_air`); } - async airingToday(options?: LocaleOptions): Promise{ + async airingToday(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_TV}/airing_today?${params}`); } - async popular(options?: PageOptions): Promise{ + async popular(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; return await this.api.get(`${BASE_TV}/popular?${params}`); } - async topRated(options?: LocaleOptions): Promise{ + async topRated(options?: PageOption & LanguageOption & RegionOption): Promise{ const params = options ? new URLSearchParams(Object.entries(options)).toString() : ''; diff --git a/src/types/index.ts b/src/types/index.ts index c395a2b..003d1c8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -7,7 +7,6 @@ export * from './movies'; export * from './search'; export * from './tv-shows'; export * from './watch-providers'; -export * from './page'; export * from './people'; export * from './discover'; export * from './review'; diff --git a/src/types/page.ts b/src/types/page.ts deleted file mode 100644 index 5d27852..0000000 --- a/src/types/page.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface PageOptions { - page?: number; -} - -export interface LocaleOptions extends PageOptions { - region?: string; - language?: string; -} From 1e006a58541e455c6437a3992e75da56b2f403e8 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Tue, 4 Apr 2023 08:13:31 +0200 Subject: [PATCH 5/6] Add parseOptions function --- src/endpoints/changes.ts | 13 ++++--------- src/endpoints/collections.ts | 13 ++++--------- src/endpoints/discover.ts | 11 ++++------- src/endpoints/find.ts | 3 ++- src/endpoints/keywords.ts | 5 ++--- src/endpoints/movies.ts | 37 ++++++++++-------------------------- src/endpoints/people.ts | 13 ++++--------- src/endpoints/search.ts | 13 +++++++------ src/endpoints/tv-shows.ts | 29 ++++++++-------------------- src/utils/index.ts | 1 + src/utils/parseOptions.ts | 7 +++++++ 11 files changed, 53 insertions(+), 92 deletions(-) create mode 100644 src/utils/parseOptions.ts 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() + : ''; +} From ce8287925efb600bb6e0a097a3cd94a29f32a557 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Tue, 11 Apr 2023 08:20:57 +0200 Subject: [PATCH 6/6] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 32a7b6b..ac44ea6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tmdb-ts", - "version": "0.1.4", + "version": "0.1.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tmdb-ts", - "version": "0.1.4", + "version": "0.1.6", "license": "MIT", "dependencies": { "cross-fetch": "^3.1.4" diff --git a/package.json b/package.json index 69f926c..2b6db84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tmdb-ts", - "version": "0.1.4", + "version": "0.1.6", "description": "TMDB v3 library wrapper", "main": "dist/index.js", "types": "dist/index.d.ts",