support for most of the append_to_response options
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { BaseEndpoint } from './base';
|
||||
import {
|
||||
AlternativeTitles,
|
||||
AppendToResponse,
|
||||
AppendToResponseKeys,
|
||||
ChangeOptions,
|
||||
Credits,
|
||||
ExternalIds,
|
||||
@@ -33,8 +35,18 @@ export class MoviesEndpoint extends BaseEndpoint {
|
||||
super(accessToken);
|
||||
}
|
||||
|
||||
async details(id: number): Promise<MovieDetails> {
|
||||
return await this.api.get<MovieDetails>(`${BASE_MOVIE}/${id}`);
|
||||
async details<T extends AppendToResponseKeys[]>(
|
||||
id: number,
|
||||
appendToResponse?: T
|
||||
) {
|
||||
const options = {
|
||||
append_to_response: appendToResponse ? appendToResponse.join(',') : undefined,
|
||||
};
|
||||
|
||||
return await this.api.get<AppendToResponse<MovieDetails, T>>(
|
||||
`${BASE_MOVIE}/${id}`,
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
async alternativeTitles(id: number): Promise<AlternativeTitles> {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { BaseEndpoint } from './base';
|
||||
import {
|
||||
AlternativeTitles,
|
||||
AppendToResponse,
|
||||
AppendToResponseKeys,
|
||||
ChangeOptions,
|
||||
ContentRatings,
|
||||
Credits,
|
||||
@@ -35,8 +37,19 @@ export class TvShowsEndpoint extends BaseEndpoint {
|
||||
super(accessToken);
|
||||
}
|
||||
|
||||
async details(id: number): Promise<TvShowDetails> {
|
||||
return await this.api.get<TvShowDetails>(`${BASE_TV}/${id}`);
|
||||
async details<T extends AppendToResponseKeys[]>(
|
||||
id: number,
|
||||
appendToResponse?: T
|
||||
) {
|
||||
const options = {
|
||||
append_to_response: appendToResponse
|
||||
? appendToResponse.join(',')
|
||||
: undefined,
|
||||
};
|
||||
return await this.api.get<AppendToResponse<TvShowDetails, T>>(
|
||||
`${BASE_TV}/${id}`,
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
async alternativeTitles(id: number): Promise<AlternativeTitles> {
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
import {
|
||||
Credits,
|
||||
Images,
|
||||
Keywords,
|
||||
Recommendations,
|
||||
Reviews,
|
||||
Translations,
|
||||
Videos,
|
||||
} from '.';
|
||||
|
||||
export interface LanguageOption {
|
||||
language?: string;
|
||||
}
|
||||
@@ -9,3 +19,31 @@ export interface RegionOption {
|
||||
export interface PageOption {
|
||||
page?: number;
|
||||
}
|
||||
|
||||
export type AppendToResponseKeys =
|
||||
| 'images'
|
||||
| 'videos'
|
||||
| 'credits'
|
||||
| 'recommendations'
|
||||
| 'reviews'
|
||||
| 'keywords';
|
||||
|
||||
export type AppendToResponse<
|
||||
K,
|
||||
T extends AppendToResponseKeys[] | undefined
|
||||
> = K &
|
||||
(T extends undefined
|
||||
? object
|
||||
: T extends Array<unknown>
|
||||
? ('credits' extends T[number] ? { credits: Omit<Credits, 'id'> } : object) &
|
||||
('videos' extends T[number] ? { videos: Omit<Videos, 'id'> } : object) &
|
||||
('images' extends T[number] ? { images: Omit<Images, 'id'> } : object) &
|
||||
('recommendations' extends T[number]
|
||||
? { recommendations: Recommendations }
|
||||
: object) &
|
||||
('reviews' extends T[number] ? { reviews: Omit<Reviews, 'id'> } : object) &
|
||||
('reviews' extends T[number]
|
||||
? { reviews: Omit<Translations, 'id'> }
|
||||
: object) &
|
||||
('keywords' extends T[number] ? { keywords: Omit<Keywords, 'id'> } : object)
|
||||
: never);
|
||||
|
||||
Reference in New Issue
Block a user