From cf7a561e3f9ee9e8d144711fa4c23eabb2a400c6 Mon Sep 17 00:00:00 2001 From: DerPenz Date: Fri, 21 Apr 2023 20:59:12 +0200 Subject: [PATCH] full support for /movie and /tv --- src/endpoints/movies.ts | 6 +-- src/endpoints/tv-shows.ts | 6 +-- src/types/index.ts | 1 + src/types/options.ts | 79 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 84 insertions(+), 8 deletions(-) diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index 8ac18d5..6d5c60f 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -2,7 +2,7 @@ import { BaseEndpoint } from './base'; import { AlternativeTitles, AppendToResponse, - AppendToResponseKeys, + AppendToResponseMovieKeys, ChangeOptions, Changes, Credits, @@ -35,7 +35,7 @@ export class MoviesEndpoint extends BaseEndpoint { super(accessToken); } - async details( + async details( id: number, appendToResponse?: T ) { @@ -45,7 +45,7 @@ export class MoviesEndpoint extends BaseEndpoint { : undefined, }; - return await this.api.get>( + return await this.api.get>( `${BASE_MOVIE}/${id}`, options ); diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 71777ea..f0d21fb 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -2,7 +2,7 @@ import { BaseEndpoint } from './base'; import { AlternativeTitles, AppendToResponse, - AppendToResponseKeys, + AppendToResponseTvKeys, ChangeOptions, Changes, ContentRatings, @@ -37,7 +37,7 @@ export class TvShowsEndpoint extends BaseEndpoint { super(accessToken); } - async details( + async details( id: number, appendToResponse?: T ) { @@ -46,7 +46,7 @@ export class TvShowsEndpoint extends BaseEndpoint { ? appendToResponse.join(',') : undefined, }; - return await this.api.get>( + return await this.api.get>( `${BASE_TV}/${id}`, options ); diff --git a/src/types/index.ts b/src/types/index.ts index d502ff5..292685d 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -128,6 +128,7 @@ export interface ContentRatings { } export interface ContentRatingsResult { + descriptor: unknown[]; iso_3166_1: string; rating: string; } diff --git a/src/types/options.ts b/src/types/options.ts index d13dee9..24a8e84 100644 --- a/src/types/options.ts +++ b/src/types/options.ts @@ -1,12 +1,22 @@ import { + AlternativeTitles, Changes, + ContentRatings, Credits, + EpisodeGroups, + ExternalIds, Images, Keywords, + MovieLists, Recommendations, + ReleaseDates, Reviews, + ScreenedTheatrically, + SimilarMovies, + SimilarTvShows, Translations, Videos, + WatchProviders, } from '.'; export interface LanguageOption { @@ -21,18 +31,50 @@ export interface PageOption { page?: number; } -export type AppendToResponseKeys = +export type AppendToResponseMovieKeys = | 'images' | 'videos' | 'credits' | 'recommendations' | 'reviews' | 'changes' + | 'similar' + | 'lists' + | 'release_dates' + | 'alternative_titles' + | 'external_ids' + | 'translations' + | 'watch/providers' | 'keywords'; +export type AppendToResponseTvKeys = + | 'content_ratings' + | 'images' + | 'videos' + | 'credits' + | 'recommendations' + | 'reviews' + | 'changes' + | 'similar' + | 'alternative_titles' + | 'external_ids' + | 'translations' + | 'watch/providers' + | 'aggregate_credits' + | 'episode_groups' + | 'screened_theatrically' + | 'keywords'; + +type AppendToResponseAllKeys = + | AppendToResponseTvKeys + | AppendToResponseMovieKeys; + +export type AppendToResponseMediaType = 'movie' | 'tvShow'; + export type AppendToResponse< K, - T extends AppendToResponseKeys[] | undefined + T extends AppendToResponseAllKeys[] | undefined, + Media extends AppendToResponseMediaType > = K & (T extends undefined ? object @@ -56,5 +98,38 @@ export type AppendToResponse< : object) & ('keywords' extends T[number] ? { keywords: Omit } + : object) & + ('lists' extends T[number] + ? { lists: Omit } + : object) & + ('release_dates' extends T[number] + ? { release_dates: Omit } + : object) & + ('alternative_titles' extends T[number] + ? { alternative_titles: Omit } + : object) & + ('external_ids' extends T[number] + ? { external_ids: Omit } + : object) & + ('translations' extends T[number] + ? { translations: Omit } + : object) & + ('watch/providers' extends T[number] + ? { 'watch/providers': Omit } + : object) & + ('aggregate_credits' extends T[number] + ? { aggregate_credits: Omit } + : object) & + ('episode_groups' extends T[number] + ? { episode_groups: Omit } + : object) & + ('screened_theatrically' extends T[number] + ? { screened_theatrically: Omit } + : object) & + ('similar' extends T[number] + ? { similar: Media extends 'movie' ? SimilarMovies : SimilarTvShows } + : object) & + ('content_ratings' extends T[number] + ? { content_ratings: Omit } : object) : never);