diff --git a/package-lock.json b/package-lock.json index d87e6a7..32a7b6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tmdb-ts", - "version": "0.1.3", + "version": "0.1.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tmdb-ts", - "version": "0.1.3", + "version": "0.1.4", "license": "MIT", "dependencies": { "cross-fetch": "^3.1.4" @@ -1704,9 +1704,9 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -1836,9 +1836,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -4099,9 +4099,9 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -4204,9 +4204,9 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" diff --git a/src/endpoints/collections.ts b/src/endpoints/collections.ts new file mode 100644 index 0000000..386fb6d --- /dev/null +++ b/src/endpoints/collections.ts @@ -0,0 +1,27 @@ +import { DetailedCollection, ImageCollection, LanguageOption, Translations } from '../types'; +import { BaseEndpoint } from './base'; +import querystring from 'querystring'; + +const BASE_COLLECTION = '/collection'; + +export class CollectionsEndpoint extends BaseEndpoint { + constructor(protected readonly accessToken: string) { + super(accessToken); + } + + async details(id: number, options? : LanguageOption): Promise { + const params = querystring.encode(options); + return await this.api.get(`${BASE_COLLECTION}/${id}?${params}`); + } + + async images(id: number, options? : LanguageOption): Promise { + const params = querystring.encode(options); + return await this.api.get(`${BASE_COLLECTION}/${id}/images?${params}`); + } + + async translations(id: number, options? : LanguageOption): Promise { + const params = querystring.encode(options); + return await this.api.get(`${BASE_COLLECTION}/${id}/translations?${params}`); + } + +} \ No newline at end of file diff --git a/src/endpoints/index.ts b/src/endpoints/index.ts index afa61d5..e254664 100644 --- a/src/endpoints/index.ts +++ b/src/endpoints/index.ts @@ -14,4 +14,6 @@ export * from './people'; export * from './review'; export * from './trending'; export * from './find'; +export * from './keywords'; +export * from './collections'; diff --git a/src/endpoints/keywords.ts b/src/endpoints/keywords.ts new file mode 100644 index 0000000..818189e --- /dev/null +++ b/src/endpoints/keywords.ts @@ -0,0 +1,20 @@ +import { BaseEndpoint } from './base'; +import querystring from 'querystring'; +import { BelongingMovies, Keyword, KeywordsOptions } from '../types'; + +const BASE_Keyword = '/keyword'; + +export class KeywordsEndpoint extends BaseEndpoint { + constructor(accessToken: string) { + super(accessToken); + } + + async details(keywordId : number): Promise { + return await this.api.get(`${BASE_Keyword}/${keywordId}`); + } + + async belongingMovies(keywordId : number, options?: KeywordsOptions): Promise { + const params = querystring.encode(options); + return await this.api.get(`${BASE_Keyword}/${keywordId}/movies?${params}`); + } +} diff --git a/src/tmdb.ts b/src/tmdb.ts index eb386a3..73af31a 100644 --- a/src/tmdb.ts +++ b/src/tmdb.ts @@ -13,6 +13,8 @@ import { ReviewEndpoint, TrendingEndpoint, FindEndpoint, + KeywordsEndpoint, + CollectionsEndpoint, } from './endpoints'; export default class TMDB { @@ -77,4 +79,12 @@ export default class TMDB { get find() : FindEndpoint{ return new FindEndpoint(this.accessToken); } + + get keywords() : KeywordsEndpoint{ + return new KeywordsEndpoint(this.accessToken); + } + + get collections() : CollectionsEndpoint{ + return new CollectionsEndpoint(this.accessToken); + } } diff --git a/src/types/collections.ts b/src/types/collections.ts new file mode 100644 index 0000000..bffdc50 --- /dev/null +++ b/src/types/collections.ts @@ -0,0 +1,16 @@ +import { Movie } from "."; + +export interface Collection { + id: number; + backdrop_path: string; + name: string; + poster_path: string; + adult: boolean; + original_language: string; + original_name: string; + overview: string; +} + +export interface DetailedCollection extends Collection { + parts: Movie[] +} diff --git a/src/types/credits.ts b/src/types/credits.ts index 678081d..9eaebb4 100644 --- a/src/types/credits.ts +++ b/src/types/credits.ts @@ -1,4 +1,4 @@ -import { Person } from './'; +import { Image, Person } from './'; export interface CreditSeason { air_date?: string; @@ -82,31 +82,10 @@ export interface Credits { crew: Crew[]; } - -export interface Backdrop { - aspect_ratio: number; - file_path: string; - height: number; - iso_639_1?: any; - vote_average: number; - vote_count: number; - width: number; -} - -export interface Poster { - aspect_ratio: number; - file_path: string; - height: number; - iso_639_1: string; - vote_average: number; - vote_count: number; - width: number; -} - -export interface CreditImages { +export interface ImageCollection { id: number; - backdrops: Backdrop[]; - posters: Poster[]; + backdrops: Image[]; + posters: Image[]; } @@ -124,14 +103,4 @@ export interface Video { export interface Videos { id: number; results: Video[]; -} - -export interface Keywords { - id: number; - keywords: Array<{ - id: number; - name: string; - }> - -} - +} \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts index 681f8af..c395a2b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,4 @@ +export * from './options'; export * from './certification'; export * from './credits'; export * from './configuration'; @@ -12,6 +13,8 @@ export * from './discover'; export * from './review'; export * from './trending'; export * from './find'; +export * from './keywords'; +export * from './collections'; export interface AuthorDetails { name: string; @@ -49,17 +52,8 @@ export interface Person { popularity: number; } -export interface Collection { - id:number; - backdrop_path: string; - name: string; - poster_path: string; -} - export interface Movie { id: number; - logo_path: string; - name: string; poster_path: string; adult: boolean; overview: string; diff --git a/src/types/keywords.ts b/src/types/keywords.ts new file mode 100644 index 0000000..f820bed --- /dev/null +++ b/src/types/keywords.ts @@ -0,0 +1,24 @@ +import { ParsedUrlQueryInput } from 'querystring'; +import { Movie } from '.'; + +export interface KeywordsOptions extends ParsedUrlQueryInput { + include_adult?: boolean; + language?: string; +} + +export interface BelongingMovies{ + page: number; + results: Movie[]; + total_results: number; + total_pages: number; +} + +export interface Keyword{ + id: number; + name: string; +} + +export interface Keywords { + id: number; + keywords: Keyword[]; +} \ No newline at end of file diff --git a/src/types/options.ts b/src/types/options.ts new file mode 100644 index 0000000..2f30fb4 --- /dev/null +++ b/src/types/options.ts @@ -0,0 +1,9 @@ +import { ParsedUrlQueryInput } from 'querystring'; + +export interface LanguageOption extends ParsedUrlQueryInput { + language?: string; +} + +export interface PageOption extends ParsedUrlQueryInput { + page?: number; +}