Replace querystring with URLSearchParams

URLSearchParams has greater compatibility with browser code

Created new PageOptions and LocaleOptions for easier use
with URLSearchParams
This commit is contained in:
Tobias Karlsson
2023-03-08 14:00:04 +01:00
parent fe86aed01f
commit f8b5564d22
11 changed files with 113 additions and 68 deletions

View File

@@ -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<MovieChanges>{
const params = querystring.encode(options);
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<MovieChanges>(`${BASE_MOVIE}/${id}/changes?${params}`);
}
@@ -59,13 +62,17 @@ export class MoviesEndpoint extends BaseEndpoint{
return await this.api.get<Keywords>(`${BASE_MOVIE}/${id}/keywords`);
}
async lists(id: number, options?: {page?: number}): Promise<MovieLists>{
const params = querystring.encode(options);
async lists(id: number, options?: PageOptions): Promise<MovieLists>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<MovieLists>(`${BASE_MOVIE}/${id}/lists?${params}`);
}
async recommendations(id: number, options?: {page?: number}): Promise<Recommendations>{
const params = querystring.encode(options);
async recommendations(id: number, options?: PageOptions): Promise<Recommendations>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<Recommendations>(`${BASE_MOVIE}/${id}/recommendations?${params}`);
}
@@ -73,13 +80,17 @@ export class MoviesEndpoint extends BaseEndpoint{
return await this.api.get<ReleaseDates>(`${BASE_MOVIE}/${id}/release_dates`);
}
async reviews(id: number, options?: {page?: number}): Promise<Reviews>{
const params = querystring.encode(options);
async reviews(id: number, options?: PageOptions): Promise<Reviews>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<Reviews>(`${BASE_MOVIE}/${id}/reviews?${params}`);
}
async similar(id: number, options?: {page?: number}): Promise<SimilarMovies>{
const params = querystring.encode(options);
async similar(id: number, options?: PageOptions): Promise<SimilarMovies>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<SimilarMovies>(`${BASE_MOVIE}/${id}/similar?${params}`);
}
@@ -103,23 +114,31 @@ export class MoviesEndpoint extends BaseEndpoint{
return await this.api.get<LatestMovie>(`${BASE_MOVIE}/latest`);
}
async nowPlaying(options?: {page?: number, region?: string, language?: string}): Promise<MoviesPlayingNow>{
const params = querystring.encode(options);
async nowPlaying(options?: LocaleOptions): Promise<MoviesPlayingNow>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<MoviesPlayingNow>(`${BASE_MOVIE}/now_playing?${params}`);
}
async popular(options?: {page?: number}): Promise<PopularMovies>{
const params = querystring.encode(options);
async popular(options?: PageOptions): Promise<PopularMovies>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<PopularMovies>(`${BASE_MOVIE}/popular?${params}`);
}
async topRated(options?: {page?: number, region?: string, language?: string}): Promise<TopRatedMovies>{
const params = querystring.encode(options);
async topRated(options?: LocaleOptions): Promise<TopRatedMovies>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<TopRatedMovies>(`${BASE_MOVIE}/top_rated?${params}`);
}
async upcoming(options?: {page?: number, region?: string, language?: string}): Promise<UpcomingMovies>{
const params = querystring.encode(options);
async upcoming(options?: LocaleOptions): Promise<UpcomingMovies>{
const params = options
? new URLSearchParams(Object.entries(options)).toString()
: '';
return await this.api.get<UpcomingMovies>(`${BASE_MOVIE}/upcoming?${params}`);
}
}