identify-media
Version:
Analyse file path and content to make search criteria for media APIs
261 lines (235 loc) • 6.17 kB
text/typescript
export interface TmdbConfiguration {
images: {
base_url: string;
secure_base_url: string;
backdrop_sizes: string[];
logo_sizes: string[];
poster_sizes: string[];
profile_sizes: string[];
still_sizes: string[];
}
change_keys: string[];
}
export interface TmdbSearchQuery {
language?: string;
query: string;
type?: 'movie'|'tv';
year?: number;
page?: number;
}
export const isTmdbSearchQuery = (possible: unknown): possible is TmdbSearchQuery => {
if (!possible) return false;
const possibleQuery = (possible as TmdbSearchQuery);
if (possibleQuery.query === undefined) return false;
return !(!!possibleQuery.type && !['movie', 'tv'].includes(possibleQuery.type));
};
export interface TmdbMovieResult {
poster_path?: string | null;
adult?: boolean;
overview?: string;
release_date?: string;
genre_ids?: number[];
id: number;
original_title?: string;
original_language?: string;
title: string;
backdrop_path?: string | null;
popularity?: number;
vote_count?: number;
video?: boolean;
vote_average?: number;
}
export const isTmdbMovieResult = (possible: unknown): possible is TmdbMovieResult =>
!!possible && (possible as TmdbMovieResult).id !== undefined && (possible as TmdbMovieResult).title !== undefined;
export interface TmdbTVShowResult {
poster_path?: string | null;
popularity?: number;
id: number;
backdrop_path?: string | null;
vote_average?: number;
overview?: string;
first_air_date?: string;
origin_country?: string[];
genre_ids?: number[];
original_language?: string;
vote_count?: number;
name: string;
original_name?: string;
}
export const isTmdbTVShowResult = (possible: unknown): possible is TmdbTVShowResult =>
!!possible && (possible as TmdbTVShowResult).id !== undefined && (possible as TmdbTVShowResult).name !== undefined;
export interface TmdbSearchResponse {
page: number;
total_results: number;
total_pages: number;
results: Array<TmdbMovieResult|TmdbTVShowResult>;
}
export interface TmdbExternalIDsQuery {
id: number;
type: 'movie'|'tv';
}
export interface TmdbExternalIDsResponse extends TmdbExternalIds {
id: number;
}
export interface TmdbFindQuery {
language?: string;
id: string;
idType: 'imdb_id'|'freebase_mid'|'freebase_id'|'tvdb_id'|'tvrage_id'|'facebook_id'|'twitter_id'|'instagram_id';
}
export interface TmdbFindResponse {
movie_results?: TmdbMovieResult[];
tv_results?: TmdbTVShowResult[];
person_results?: unknown;
tv_episode_results?: unknown;
tv_season_results?: unknown;
}
export interface TmdbGetMovieQuery {
id: number;
language?: string;
}
export interface TmdbImage {
aspect_ratio: number;
file_path: string;
height: number;
iso_639_1: null | string;
vote_average: number;
vote_count: number;
width: number;
}
export interface TmdbVideo {
iso_639_1: string;
iso_3166_1: string;
name: string;
key: string;
site: string;
size: number;
type: string;
official: boolean;
published_at: string;
id: string;
}
export interface TmdbExternalIds {
imdb_id: string | null;
facebook_id: string | null;
instagram_id: string | null;
twitter_id: string | null;
}
export interface TmdbMovie {
adult: boolean;
backdrop_path: string | null;
belongs_to_collection: null | object;
budget: number;
genres: {
id: number;
name: string;
}[];
homepage: string | null;
id: number;
imdb_id: string | null;
original_language: string;
original_title: string;
overview: string | null;
popularity: number;
poster_path: string | null;
production_companies: {
name: string;
id: number;
logo_path: string | null;
origin_country: string;
}[];
production_countries: {
iso_3166_1: string;
name: string;
}[];
release_date: string;
revenue: number;
runtime: number | null;
spoken_languages: {
iso_639_1: string;
name: string;
}[];
status: string;
tagline: string | null;
title: string;
video: boolean;
vote_average: number;
vote_count: number;
credits: {
cast: {
adult: boolean;
gender: number | null;
id: number;
known_for_department: string;
name: string;
original_name: string;
popularity: number;
profile_path: string | null;
cast_id: number;
character: string;
credit_id: string;
order: number;
}[];
crew: {
adult: boolean;
gender: number | null;
id: number;
known_for_department: string;
name: string;
original_name: string;
popularity: number;
profile_path: string | null;
credit_id: string;
department: string;
job: string;
}[];
};
external_ids: TmdbExternalIds;
keywords: {
keywords: {
id: number;
name: string;
}[];
};
images: {
backdrops: TmdbImage[];
logos: TmdbImage[];
posters: TmdbImage[];
};
translations: {
translations: {
iso_3166_1: string;
iso_639_1: string;
name: string;
english_name: string;
data: {
title: string
overview: string
homepage: string
};
}[];
};
videos: {
results: TmdbVideo[];
}
}
export interface TmdbGetTVShowQuery {
id: number;
language?: string;
}
export interface TmdbTVShow {
}
export interface TmdbGetSeasonQuery {
id: number;
season: number;
language?: string;
}
export interface TmdbSeason {
}
export interface TmdbGetEpisodeQuery {
id: number;
season: number;
episode: number;
language?: string;
}
export interface TmdbEpisode {
}