support for most of the append_to_response options

This commit is contained in:
DerPenz
2023-04-19 20:12:09 +02:00
parent 4f5c39ba7a
commit a5acac981c
3 changed files with 67 additions and 4 deletions

View File

@@ -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> {

View File

@@ -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> {

View File

@@ -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);