diff --git a/package-lock.json b/package-lock.json index abea7fc..9f04105 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tmdb-ts", - "version": "1.5.0", + "version": "1.6.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tmdb-ts", - "version": "1.5.0", + "version": "1.6.1", "license": "MIT", "dependencies": { "cross-fetch": "^3.1.4" diff --git a/package.json b/package.json index adff52d..cfb1e43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tmdb-ts", - "version": "1.6.0", + "version": "1.6.1", "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 fbe28ed..7965cfe 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,5 +1,6 @@ import fetch from 'cross-fetch'; import { parseOptions } from './utils'; +import { ErrorResponse } from './types'; const BASE_URL_V3 = 'https://api.themoviedb.org/3'; @@ -17,6 +18,11 @@ export class Api { 'Content-Type': 'application/json;charset=utf-8', }, }); + + if (!response.ok) { + return Promise.reject((await response.json()) as ErrorResponse); + } + return (await response.json()) as T; } } diff --git a/src/endpoints/collections.ts b/src/endpoints/collections.ts index 8227931..06089b9 100644 --- a/src/endpoints/collections.ts +++ b/src/endpoints/collections.ts @@ -24,7 +24,10 @@ export class CollectionsEndpoint extends BaseEndpoint { ); } - async images(id: number, options?: CollectionImageOptions): Promise { + async images( + id: number, + options?: CollectionImageOptions + ): Promise { const computedOptions = { include_image_language: options?.include_image_language?.join(','), language: options?.language, diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index c686651..f94e25b 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -35,7 +35,7 @@ export interface MoviesImageSearchOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_image_language?: string[], + include_image_language?: string[]; } export class MoviesEndpoint extends BaseEndpoint { @@ -85,12 +85,18 @@ export class MoviesEndpoint extends BaseEndpoint { return await this.api.get(`${BASE_MOVIE}/${id}/external_ids`); } - async images(id: number, options?: MoviesImageSearchOptions): Promise { + async images( + id: number, + options?: MoviesImageSearchOptions + ): Promise { const computedOptions = { include_image_language: options?.include_image_language?.join(','), language: options?.language, }; - return await this.api.get(`${BASE_MOVIE}/${id}/images`, computedOptions); + return await this.api.get( + `${BASE_MOVIE}/${id}/images`, + computedOptions + ); } async keywords(id: number): Promise { @@ -120,11 +126,17 @@ export class MoviesEndpoint extends BaseEndpoint { ); } - async reviews(id: number, options?: LanguageOption & PageOption): Promise { + async reviews( + id: number, + options?: LanguageOption & PageOption + ): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/reviews`, options); } - async similar(id: number, options?: LanguageOption & PageOption): Promise { + async similar( + id: number, + options?: LanguageOption & PageOption + ): Promise { return await this.api.get( `${BASE_MOVIE}/${id}/similar`, options diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index 9d7e606..7f00d4c 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -34,7 +34,7 @@ export class PeopleEndpoint extends BaseEndpoint { append_to_response: appendToResponse ? appendToResponse.join(',') : undefined, - language: language + language: language, }; return await this.api.get>( `${BASE_PERSON}/${id}`, @@ -52,21 +52,30 @@ export class PeopleEndpoint extends BaseEndpoint { ); } - async movieCredits(id: number, options?: LanguageOption): Promise { + async movieCredits( + id: number, + options?: LanguageOption + ): Promise { return await this.api.get( `${BASE_PERSON}/${id}/movie_credits`, options ); } - async tvShowCredits(id: number, options?: LanguageOption): Promise { + async tvShowCredits( + id: number, + options?: LanguageOption + ): Promise { return await this.api.get( `${BASE_PERSON}/${id}/tv_credits`, options ); } - async combinedCredits(id: number, options?: LanguageOption): Promise { + async combinedCredits( + id: number, + options?: LanguageOption + ): Promise { return await this.api.get( `${BASE_PERSON}/${id}/combined_credits`, options @@ -98,7 +107,9 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get(`${BASE_PERSON}/latest`); } - async popular(options?: LanguageOption & PageOption): Promise { + async popular( + options?: LanguageOption & PageOption + ): Promise { return await this.api.get( `${BASE_PERSON}/popular`, options diff --git a/src/endpoints/search.ts b/src/endpoints/search.ts index 7b83ab0..8fca0c8 100644 --- a/src/endpoints/search.ts +++ b/src/endpoints/search.ts @@ -1,6 +1,15 @@ import { BaseEndpoint } from './base'; import { MultiSearchResult, Search } from '../types/search'; -import { Collection, Company, LanguageOption, Movie, PageOption, Person, RegionOption, TV } from '../types'; +import { + Collection, + Company, + LanguageOption, + Movie, + PageOption, + Person, + RegionOption, + TV, +} from '../types'; const BASE_SEARCH = '/search'; @@ -9,27 +18,44 @@ export interface SearchOptions { page?: number; } -export interface MovieSearchOptions extends SearchOptions, LanguageOption, PageOption, RegionOption { +export interface MovieSearchOptions + extends SearchOptions, + LanguageOption, + PageOption, + RegionOption { include_adult?: boolean; year?: number; primary_release_year?: number; } -export interface CollectionSearchOptions extends SearchOptions, LanguageOption, PageOption, RegionOption { +export interface CollectionSearchOptions + extends SearchOptions, + LanguageOption, + PageOption, + RegionOption { include_adult?: boolean; } -export interface TvSearchOptions extends SearchOptions, LanguageOption, PageOption { +export interface TvSearchOptions + extends SearchOptions, + LanguageOption, + PageOption { include_adult?: boolean; year?: number; first_air_date_year?: number; } -export interface PeopleSearchOptions extends SearchOptions, LanguageOption, PageOption { +export interface PeopleSearchOptions + extends SearchOptions, + LanguageOption, + PageOption { include_adult?: boolean; } -export interface MultiSearchOptions extends SearchOptions, LanguageOption, PageOption { +export interface MultiSearchOptions + extends SearchOptions, + LanguageOption, + PageOption { include_adult?: boolean; } diff --git a/src/endpoints/trending.ts b/src/endpoints/trending.ts index e6558e0..1188d35 100644 --- a/src/endpoints/trending.ts +++ b/src/endpoints/trending.ts @@ -1,4 +1,9 @@ -import { TrendingMediaType, TimeWindow, TrendingResults, LanguageOption } from '../types'; +import { + TrendingMediaType, + TimeWindow, + TrendingResults, + LanguageOption, +} from '../types'; import { BaseEndpoint } from './base'; export class TrendingEndpoint extends BaseEndpoint { diff --git a/src/endpoints/tv-episode.ts b/src/endpoints/tv-episode.ts index ff80f7c..7bb8d4b 100644 --- a/src/endpoints/tv-episode.ts +++ b/src/endpoints/tv-episode.ts @@ -8,7 +8,6 @@ import { Images, TvEpisodeTranslations, Videos, - AppendToResponseMovieKey, AppendToResponse, Changes, TvEpisodeChangeValue, @@ -24,14 +23,14 @@ export interface TvEpisodeImageSearchOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_image_language?: string[], + include_image_language?: string[]; } export interface TvEpisodeVideoSearchOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_video_language?: string[], + include_video_language?: string[]; } export class TvEpisodesEndpoint extends BaseEndpoint { @@ -76,7 +75,10 @@ export class TvEpisodesEndpoint extends BaseEndpoint { ); } - async images(episodeSelection: EpisodeSelection, options?: TvEpisodeImageSearchOptions) { + async images( + episodeSelection: EpisodeSelection, + options?: TvEpisodeImageSearchOptions + ) { const computedOptions = { include_image_language: options?.include_image_language?.join(','), language: options?.language, @@ -93,7 +95,10 @@ export class TvEpisodesEndpoint extends BaseEndpoint { ); } - async videos(episodeSelection: EpisodeSelection, options?: TvEpisodeVideoSearchOptions) { + async videos( + episodeSelection: EpisodeSelection, + options?: TvEpisodeVideoSearchOptions + ) { const computedOptions = { include_video_language: options?.include_video_language?.join(','), language: options?.language, diff --git a/src/endpoints/tv-seasons.ts b/src/endpoints/tv-seasons.ts index 221f71d..f8be74d 100644 --- a/src/endpoints/tv-seasons.ts +++ b/src/endpoints/tv-seasons.ts @@ -24,14 +24,14 @@ export interface TvSeasonImageSearchOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_image_language?: string[], + include_image_language?: string[]; } export interface TvSeasonVideoSearchOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_video_language?: string[], + include_video_language?: string[]; } export class TvSeasonsEndpoint extends BaseEndpoint { @@ -91,7 +91,10 @@ export class TvSeasonsEndpoint extends BaseEndpoint { ); } - async images(seasonSelection: SeasonSelection, options?: TvSeasonImageSearchOptions) { + async images( + seasonSelection: SeasonSelection, + options?: TvSeasonImageSearchOptions + ) { const computedOptions = { include_image_language: options?.include_image_language?.join(','), language: options?.language, @@ -102,7 +105,10 @@ export class TvSeasonsEndpoint extends BaseEndpoint { ); } - async videos(seasonSelection: SeasonSelection, options?: TvSeasonVideoSearchOptions) { + async videos( + seasonSelection: SeasonSelection, + options?: TvSeasonVideoSearchOptions + ) { const computedOptions = { include_video_language: options?.include_video_language?.join(','), language: options?.language, diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 478828d..fec2ac5 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -80,7 +80,10 @@ export class TvShowsEndpoint extends BaseEndpoint { ); } - async aggregateCredits(id: number, options?: LanguageOption): Promise { + async aggregateCredits( + id: number, + options?: LanguageOption + ): Promise { return await this.api.get( `${BASE_TV}/${id}/aggregate_credits`, options @@ -110,7 +113,10 @@ export class TvShowsEndpoint extends BaseEndpoint { include_image_language: options?.include_image_language?.join(','), language: options?.language, }; - return await this.api.get(`${BASE_TV}/${id}/images`, computedOptions); + return await this.api.get( + `${BASE_TV}/${id}/images`, + computedOptions + ); } async keywords(id: number): Promise { @@ -127,7 +133,10 @@ export class TvShowsEndpoint extends BaseEndpoint { ); } - async reviews(id: number, options?: LanguageOption & PageOption): Promise { + async reviews( + id: number, + options?: LanguageOption & PageOption + ): Promise { return await this.api.get(`${BASE_TV}/${id}/reviews`, options); } @@ -137,7 +146,10 @@ export class TvShowsEndpoint extends BaseEndpoint { ); } - async similar(id: number, options?: LanguageOption & PageOption): Promise { + async similar( + id: number, + options?: LanguageOption & PageOption + ): Promise { return await this.api.get( `${BASE_TV}/${id}/similar`, options @@ -153,7 +165,10 @@ export class TvShowsEndpoint extends BaseEndpoint { include_video_language: options?.include_video_language?.join(','), language: options?.language, }; - return await this.api.get(`${BASE_TV}/${id}/videos`, computedOptions); + return await this.api.get( + `${BASE_TV}/${id}/videos`, + computedOptions + ); } /** diff --git a/src/types/collections.ts b/src/types/collections.ts index a91e080..8b6792b 100644 --- a/src/types/collections.ts +++ b/src/types/collections.ts @@ -19,5 +19,5 @@ export interface CollectionImageOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_image_language?: string[], -} \ No newline at end of file + include_image_language?: string[]; +} diff --git a/src/types/index.ts b/src/types/index.ts index b63bf19..cadf6bb 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -19,6 +19,12 @@ export * from './collections'; export * from './tv-episode'; export * from './tv-seasons'; +export interface ErrorResponse { + status_code: number; + status_message: string; + success: boolean; +} + export type MediaType = 'movie' | 'tv' | 'person'; export interface AuthorDetails { diff --git a/src/types/tv-shows.ts b/src/types/tv-shows.ts index 352fb80..b204fb3 100644 --- a/src/types/tv-shows.ts +++ b/src/types/tv-shows.ts @@ -279,12 +279,12 @@ export interface TvShowImageOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_image_language?: string[], + include_image_language?: string[]; } export interface TvShowVideoOptions extends LanguageOption { /** * a list of ISO-639-1 values to query */ - include_video_language?: string[], -} \ No newline at end of file + include_video_language?: string[]; +}