Merge pull request #41 from benlei/master

Adding company data, network data, tv show aggregate credits
This commit is contained in:
Blake
2023-11-09 09:44:05 -05:00
committed by GitHub
15 changed files with 190 additions and 17 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "tmdb-ts",
"version": "1.0.0",
"version": "1.5.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "tmdb-ts",
"version": "1.0.0",
"version": "1.5.0",
"license": "MIT",
"dependencies": {
"cross-fetch": "^3.1.4"

View File

@@ -1,16 +1,15 @@
{
"name": "tmdb-ts",
"version": "1.4.0",
"version": "1.5.0",
"description": "TMDB v3 library wrapper",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"compile": "rm -rf dist && tsc -d && npm run copy-types",
"compile": "rm -rf dist && tsc -d",
"lint": "eslint --ext .ts src/",
"lint:fix": "eslint --ext .ts src/ --fix",
"format": "npx prettier --write src",
"pre-commit": "npm run lint",
"copy-types": "mkdir dist/types && cp src/types/*.d.ts dist/types"
"pre-commit": "npm run lint"
},
"bugs": {
"url": "https://github.com/blakejoy/tmdb-ts/issues",

View File

@@ -0,0 +1,26 @@
import {
CompanyDetails,
AlternativeNames,
CompanyImages,
} from './../types/companies';
import { BaseEndpoint } from './base';
export class CompaniesEndpoint extends BaseEndpoint {
constructor(protected readonly accessToken: string) {
super(accessToken);
}
async details(id: number): Promise<CompanyDetails> {
return await this.api.get<CompanyDetails>(`/company/${id}`);
}
async alternativeNames(id: number): Promise<AlternativeNames> {
return await this.api.get<AlternativeNames>(
`/company/${id}/alternative_names`
);
}
async images(id: number): Promise<CompanyImages> {
return await this.api.get<CompanyImages>(`/company/${id}/images`);
}
}

View File

@@ -16,4 +16,3 @@ export * from './keywords';
export * from './collections';
export * from './tv-seasons';
export * from './tv-episode';

View File

@@ -58,8 +58,14 @@ export class MoviesEndpoint extends BaseEndpoint {
);
}
async changes(id: number, options?: ChangeOption): Promise<Changes<MovieChangeValue>> {
return await this.api.get<Changes<MovieChangeValue>>(`${BASE_MOVIE}/${id}/changes`, options);
async changes(
id: number,
options?: ChangeOption
): Promise<Changes<MovieChangeValue>> {
return await this.api.get<Changes<MovieChangeValue>>(
`${BASE_MOVIE}/${id}/changes`,
options
);
}
async credits(id: number): Promise<Credits> {

23
src/endpoints/networks.ts Normal file
View File

@@ -0,0 +1,23 @@
import { NetworkDetails, NetworkImages } from '..';
import { AlternativeNames } from './../types/companies';
import { BaseEndpoint } from './base';
export class NetworksEndpoint extends BaseEndpoint {
constructor(protected readonly accessToken: string) {
super(accessToken);
}
async details(id: number): Promise<NetworkDetails> {
return await this.api.get<NetworkDetails>(`/network/${id}`);
}
async alternativeNames(id: number): Promise<AlternativeNames> {
return await this.api.get<AlternativeNames>(
`/network/${id}/alternative_names`
);
}
async images(id: number): Promise<NetworkImages> {
return await this.api.get<NetworkImages>(`/network/${id}/images`);
}
}

View File

@@ -12,6 +12,7 @@ import {
Videos,
AppendToResponseTvSeasonKey,
AppendToResponse,
AggregateCredits,
} from '..';
import { BaseEndpoint } from './base';
@@ -46,7 +47,7 @@ export class TvSeasonsEndpoint extends BaseEndpoint {
seasonSelection: SeasonSelection,
options?: LanguageOption
) {
return await this.api.get<Credits>(
return await this.api.get<AggregateCredits>(
`${BASE_SEASON(seasonSelection)}/aggregate_credits`,
options
);

View File

@@ -1,5 +1,6 @@
import { BaseEndpoint } from './base';
import {
AggregateCredits,
AlternativeTitles,
AppendToResponse,
AppendToResponseTvKey,
@@ -59,8 +60,14 @@ export class TvShowsEndpoint extends BaseEndpoint {
);
}
async changes(id: number, options?: ChangeOption): Promise<Changes<TvShowChangeValue>> {
return await this.api.get<Changes<TvShowChangeValue>>(`${BASE_TV}/${id}/changes`, options);
async changes(
id: number,
options?: ChangeOption
): Promise<Changes<TvShowChangeValue>> {
return await this.api.get<Changes<TvShowChangeValue>>(
`${BASE_TV}/${id}/changes`,
options
);
}
async contentRatings(id: number): Promise<ContentRatings> {
@@ -69,6 +76,12 @@ export class TvShowsEndpoint extends BaseEndpoint {
);
}
async aggregateCredits(id: number): Promise<AggregateCredits> {
return await this.api.get<AggregateCredits>(
`${BASE_TV}/${id}/aggregate_credits`
);
}
async credits(id: number): Promise<Credits> {
return await this.api.get<Credits>(`${BASE_TV}/${id}/credits`);
}

View File

@@ -18,6 +18,8 @@ import {
TvSeasonsEndpoint,
TvEpisodesEndpoint,
} from './endpoints';
import { CompaniesEndpoint } from './endpoints/companies';
import { NetworksEndpoint } from './endpoints/networks';
export class TMDB {
private readonly accessToken: string;
@@ -46,6 +48,14 @@ export class TMDB {
return new CreditsEndpoint(this.accessToken);
}
get companies(): CompaniesEndpoint {
return new CompaniesEndpoint(this.accessToken);
}
get networks(): NetworksEndpoint {
return new NetworksEndpoint(this.accessToken);
}
get search(): SearchEndpoint {
return new SearchEndpoint(this.accessToken);
}
@@ -94,7 +104,7 @@ export class TMDB {
return new CollectionsEndpoint(this.accessToken);
}
get tvSeasons() : TvSeasonsEndpoint {
get tvSeasons(): TvSeasonsEndpoint {
return new TvSeasonsEndpoint(this.accessToken);
}
}

33
src/types/companies.ts Normal file
View File

@@ -0,0 +1,33 @@
import { Image } from '.';
export interface CompanyDetails {
description: string;
headquarters: string;
homepage: string;
id: number;
logo_path: string;
name: string;
origin_country: string;
parent_company: ParentCompany;
}
export interface ParentCompany {
name: string;
id: number;
logo_path: string;
}
export interface AlternativeNames {
id: number;
results: Name[];
}
export interface Name {
name: string;
type: string;
}
export interface CompanyImages {
id: number;
logos: Image[];
}

View File

@@ -101,3 +101,49 @@ export interface Videos {
id: number;
results: Video[];
}
export interface AggregateCredits {
id: number;
cast: AggregateCast[];
crew: AggregateCrew[];
}
export interface CastRole {
credit_id: string;
character: string;
episode_count: number;
}
export interface AggregateCast {
adult: boolean;
gender: number;
id: number;
known_for_department: string;
name: string;
original_name: string;
popularity: number;
profile_path: string;
roles: CastRole[];
total_episode_count: number;
order: number;
}
export interface CrewJob {
credit_id: string;
job: string;
episode_count: number;
}
export interface AggregateCrew {
adult: boolean;
gender: number;
id: number;
known_for_department: string;
name: string;
original_name: string;
popularity: number;
profile_path: string;
jobs: CrewJob[];
department: string;
total_episode_count: number;
}

View File

@@ -1,6 +1,8 @@
export * from './options';
export * from './certification';
export * from './credits';
export * from './companies';
export * from './networks';
export * from './configuration';
export * from './changes';
export * from './movies';

15
src/types/networks.ts Normal file
View File

@@ -0,0 +1,15 @@
import { Image } from '.';
export interface NetworkDetails {
headquarters: string;
homepage: string;
id: number;
logo_path: string;
name: string;
origin_country: string;
}
export interface NetworkImages {
id: number;
logos: Image[];
}

View File

@@ -164,9 +164,9 @@ export type AppendToResponse<
? MovieChangeValue
: Media extends 'tvShow'
? TvShowChangeValue
: Media extends 'tvSeason'
? TvSeasonChangeValue :
TvEpisodeChangeValue
: Media extends 'tvSeason'
? TvSeasonChangeValue
: TvEpisodeChangeValue
>;
}
: object) &

View File

@@ -55,4 +55,4 @@ export interface TvEpisodeTranslations {
};
}
export type TvEpisodeChangeValue = string | unknown;
export type TvEpisodeChangeValue = string | unknown;