tmdb-kit 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +455 -196
  2. package/dist/cli.js +3823 -0
  3. package/dist/client.d.cts +71 -0
  4. package/dist/client.d.ts +71 -0
  5. package/dist/errors.d.cts +86 -0
  6. package/dist/errors.d.ts +86 -0
  7. package/dist/helpers/cache.d.cts +28 -0
  8. package/dist/helpers/cache.d.ts +28 -0
  9. package/dist/helpers/pagination.d.cts +35 -0
  10. package/dist/helpers/pagination.d.ts +35 -0
  11. package/dist/helpers/retry.d.cts +47 -0
  12. package/dist/helpers/retry.d.ts +47 -0
  13. package/dist/helpers/timeout.d.cts +20 -0
  14. package/dist/helpers/timeout.d.ts +20 -0
  15. package/dist/http.d.cts +80 -0
  16. package/dist/http.d.ts +80 -0
  17. package/dist/index.cjs +1115 -768
  18. package/dist/index.cjs.map +27 -1
  19. package/dist/index.d.cts +13 -783
  20. package/dist/index.d.ts +13 -783
  21. package/dist/index.js +1074 -744
  22. package/dist/index.js.map +27 -1
  23. package/dist/query.d.cts +91 -0
  24. package/dist/query.d.ts +91 -0
  25. package/dist/resources/configuration.d.cts +17 -0
  26. package/dist/resources/configuration.d.ts +17 -0
  27. package/dist/resources/genres.d.cts +13 -0
  28. package/dist/resources/genres.d.ts +13 -0
  29. package/dist/resources/images.d.cts +17 -0
  30. package/dist/resources/images.d.ts +17 -0
  31. package/dist/resources/movies.d.cts +21 -0
  32. package/dist/resources/movies.d.ts +21 -0
  33. package/dist/resources/people.d.cts +14 -0
  34. package/dist/resources/people.d.ts +14 -0
  35. package/dist/resources/search.d.cts +15 -0
  36. package/dist/resources/search.d.ts +15 -0
  37. package/dist/resources/trending.d.cts +23 -0
  38. package/dist/resources/trending.d.ts +23 -0
  39. package/dist/resources/tv.d.cts +30 -0
  40. package/dist/resources/tv.d.ts +30 -0
  41. package/dist/search-guards.d.cts +32 -0
  42. package/dist/search-guards.d.ts +32 -0
  43. package/dist/types.d.cts +550 -0
  44. package/dist/types.d.ts +550 -0
  45. package/package.json +26 -19
@@ -0,0 +1,91 @@
1
+ import type { ImageSize, RegionCode, LanguageCode, TrendingTimeWindow } from './types.js';
2
+ /** Primitives allowed as query parameter values. */
3
+ export type QueryPrimitive = string | number | boolean;
4
+ /** A single query parameter value: primitive, array, or nullish. */
5
+ export type QueryValue = QueryPrimitive | readonly QueryPrimitive[] | null | undefined;
6
+ /** Key-value map of query parameters for API requests. */
7
+ export type QueryParams = Record<string, QueryValue>;
8
+ /** Default query parameters inherited from the client configuration. */
9
+ export interface QueryDefaults {
10
+ language?: LanguageCode;
11
+ region?: RegionCode;
12
+ }
13
+ export declare const DEFAULT_API_BASE_URL = "https://api.themoviedb.org/3";
14
+ export declare const DEFAULT_IMAGE_BASE_URL = "https://image.tmdb.org/t/p";
15
+ /**
16
+ * Append query parameters to a URL object.
17
+ *
18
+ * - `undefined` and `null` values are skipped.
19
+ * - Arrays are joined with commas (TMDB convention).
20
+ * - All values are converted to strings.
21
+ */
22
+ export declare function appendQuery(url: URL, query: QueryParams): void;
23
+ /**
24
+ * Merge a language query parameter with client defaults.
25
+ *
26
+ * If `query.language` is set it takes precedence; otherwise the client's
27
+ * default language is used.
28
+ */
29
+ export declare function withLanguage(defaults: QueryDefaults, query: QueryParams): QueryParams;
30
+ /**
31
+ * Merge language and region defaults for list endpoints.
32
+ *
33
+ * Combines {@link withLanguage} with region fallback from client defaults.
34
+ */
35
+ export declare function withListDefaults(defaults: QueryDefaults, query: QueryParams): QueryParams;
36
+ /**
37
+ * Convert a string or string array to a comma-separated list.
38
+ *
39
+ * Returns `undefined` if the input is `undefined` (skips the parameter).
40
+ * TMDB uses comma-separated values for multi-value query parameters.
41
+ */
42
+ export declare function toCommaList(value: string | readonly string[] | undefined): string | undefined;
43
+ /**
44
+ * Validate and convert a numeric ID to a string for use in URL paths.
45
+ *
46
+ * @throws {TMDBRequestError} If `value` is not a positive integer.
47
+ */
48
+ export declare function toId(value: number, name: string): string;
49
+ /**
50
+ * Validate and convert a season number to a string for use in URL paths.
51
+ *
52
+ * Season `0` is valid and refers to specials.
53
+ *
54
+ * @throws {TMDBRequestError} If `value` is not a non-negative integer.
55
+ */
56
+ export declare function toSeasonNumber(value: number): string;
57
+ /**
58
+ * Validate and normalize a string identifier for use in URL paths.
59
+ *
60
+ * @throws {TMDBRequestError} If `value` is empty or contains non-identifier characters.
61
+ */
62
+ export declare function toGroupId(value: string): string;
63
+ /**
64
+ * Validate and trim a search query string.
65
+ *
66
+ * @throws {TMDBRequestError} If the query is empty after trimming.
67
+ */
68
+ export declare function toSearchQuery(value: string): string;
69
+ /**
70
+ * Validate a trending time window value.
71
+ *
72
+ * @throws {TMDBRequestError} If `value` is not `"day"` or `"week"`.
73
+ */
74
+ export declare function toTimeWindow(value: TrendingTimeWindow): TrendingTimeWindow;
75
+ export interface BuildImageUrlOptions {
76
+ baseUrl?: string;
77
+ /**
78
+ * Transform the resolved TMDB image URL before returning it. Use this to
79
+ * route requests through a CDN, image proxy, or to add signatures.
80
+ */
81
+ transform?: (url: string) => string;
82
+ }
83
+ /**
84
+ * Build a full TMDB image URL from the path returned by API payloads.
85
+ * Returns null for nullish image paths so UI code can branch naturally.
86
+ */
87
+ export declare function buildImageUrl(path: string | null | undefined, size?: ImageSize, options?: BuildImageUrlOptions): string | null;
88
+ /**
89
+ * Strip trailing slashes from a base URL to ensure consistent path joining.
90
+ */
91
+ export declare function normalizeBaseUrl(baseUrl: string): string;
@@ -0,0 +1,17 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { Configuration, Country, JobDepartment, Language, RequestOptions, Timezone } from '../types.cjs';
3
+ /**
4
+ * Access TMDB configuration data (image sizes, countries, languages, etc.).
5
+ *
6
+ * Obtained via `client.configuration`.
7
+ */
8
+ export declare class ConfigurationResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ details(options?: RequestOptions): Promise<Configuration>;
12
+ countries(options?: RequestOptions): Promise<Country[]>;
13
+ jobs(options?: RequestOptions): Promise<JobDepartment[]>;
14
+ languages(options?: RequestOptions): Promise<Language[]>;
15
+ primaryTranslations(options?: RequestOptions): Promise<string[]>;
16
+ timezones(options?: RequestOptions): Promise<Timezone[]>;
17
+ }
@@ -0,0 +1,17 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { Configuration, Country, JobDepartment, Language, RequestOptions, Timezone } from '../types.js';
3
+ /**
4
+ * Access TMDB configuration data (image sizes, countries, languages, etc.).
5
+ *
6
+ * Obtained via `client.configuration`.
7
+ */
8
+ export declare class ConfigurationResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ details(options?: RequestOptions): Promise<Configuration>;
12
+ countries(options?: RequestOptions): Promise<Country[]>;
13
+ jobs(options?: RequestOptions): Promise<JobDepartment[]>;
14
+ languages(options?: RequestOptions): Promise<Language[]>;
15
+ primaryTranslations(options?: RequestOptions): Promise<string[]>;
16
+ timezones(options?: RequestOptions): Promise<Timezone[]>;
17
+ }
@@ -0,0 +1,13 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { GenresResponse, LanguageOptions } from '../types.cjs';
3
+ /**
4
+ * Access TMDB genre lists for movies and TV shows.
5
+ *
6
+ * Obtained via `client.genres`.
7
+ */
8
+ export declare class GenresResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ movies(options?: LanguageOptions): Promise<GenresResponse>;
12
+ tv(options?: LanguageOptions): Promise<GenresResponse>;
13
+ }
@@ -0,0 +1,13 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { GenresResponse, LanguageOptions } from '../types.js';
3
+ /**
4
+ * Access TMDB genre lists for movies and TV shows.
5
+ *
6
+ * Obtained via `client.genres`.
7
+ */
8
+ export declare class GenresResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ movies(options?: LanguageOptions): Promise<GenresResponse>;
12
+ tv(options?: LanguageOptions): Promise<GenresResponse>;
13
+ }
@@ -0,0 +1,17 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { ImageSize } from '../types.cjs';
3
+ /** Function that transforms a TMDB image URL (e.g. for CDN proxying). */
4
+ export type ImageUrlTransform = (url: string) => string;
5
+ /**
6
+ * Helper for constructing TMDB image URLs from API path values.
7
+ *
8
+ * Obtained via `client.images`. Supports optional URL transforms for
9
+ * routing image requests through a CDN or proxy.
10
+ */
11
+ export declare class ImagesHelper {
12
+ #private;
13
+ constructor(transport: TMDBTransport, transform?: ImageUrlTransform);
14
+ url(path: string | null | undefined, size?: ImageSize, options?: {
15
+ transform?: ImageUrlTransform;
16
+ }): string | null;
17
+ }
@@ -0,0 +1,17 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { ImageSize } from '../types.js';
3
+ /** Function that transforms a TMDB image URL (e.g. for CDN proxying). */
4
+ export type ImageUrlTransform = (url: string) => string;
5
+ /**
6
+ * Helper for constructing TMDB image URLs from API path values.
7
+ *
8
+ * Obtained via `client.images`. Supports optional URL transforms for
9
+ * routing image requests through a CDN or proxy.
10
+ */
11
+ export declare class ImagesHelper {
12
+ #private;
13
+ constructor(transport: TMDBTransport, transform?: ImageUrlTransform);
14
+ url(path: string | null | undefined, size?: ImageSize, options?: {
15
+ transform?: ImageUrlTransform;
16
+ }): string | null;
17
+ }
@@ -0,0 +1,21 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { CreditsResponse, ImageQueryOptions, ImagesResponse, LanguageOptions, ListOptions, MovieDetails, MovieDetailsOptions, MovieSummary, PagedResponse, TMDBObject, VideosResponse } from '../types.cjs';
3
+ /**
4
+ * Access TMDB movie endpoints (popular, top-rated, details, credits, etc.).
5
+ *
6
+ * Obtained via `client.movies`.
7
+ */
8
+ export declare class MoviesResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
12
+ topRated(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
13
+ nowPlaying(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
14
+ upcoming(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
15
+ details<TAppend extends TMDBObject = TMDBObject>(movieId: number, options?: MovieDetailsOptions): Promise<MovieDetails & TAppend>;
16
+ credits(movieId: number, options?: LanguageOptions): Promise<CreditsResponse>;
17
+ images(movieId: number, options?: ImageQueryOptions): Promise<ImagesResponse>;
18
+ recommendations(movieId: number, options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
19
+ similar(movieId: number, options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
20
+ videos(movieId: number, options?: LanguageOptions): Promise<VideosResponse>;
21
+ }
@@ -0,0 +1,21 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { CreditsResponse, ImageQueryOptions, ImagesResponse, LanguageOptions, ListOptions, MovieDetails, MovieDetailsOptions, MovieSummary, PagedResponse, TMDBObject, VideosResponse } from '../types.js';
3
+ /**
4
+ * Access TMDB movie endpoints (popular, top-rated, details, credits, etc.).
5
+ *
6
+ * Obtained via `client.movies`.
7
+ */
8
+ export declare class MoviesResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
12
+ topRated(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
13
+ nowPlaying(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
14
+ upcoming(options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
15
+ details<TAppend extends TMDBObject = TMDBObject>(movieId: number, options?: MovieDetailsOptions): Promise<MovieDetails & TAppend>;
16
+ credits(movieId: number, options?: LanguageOptions): Promise<CreditsResponse>;
17
+ images(movieId: number, options?: ImageQueryOptions): Promise<ImagesResponse>;
18
+ recommendations(movieId: number, options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
19
+ similar(movieId: number, options?: ListOptions): Promise<PagedResponse<MovieSummary>>;
20
+ videos(movieId: number, options?: LanguageOptions): Promise<VideosResponse>;
21
+ }
@@ -0,0 +1,14 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { LanguageOptions, ListOptions, PagedResponse, PersonCombinedCreditsResponse, PersonDetails, PersonSummary } from '../types.cjs';
3
+ /**
4
+ * Access TMDB person (actor, director, etc.) endpoints.
5
+ *
6
+ * Obtained via `client.people`.
7
+ */
8
+ export declare class PeopleResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<PersonSummary>>;
12
+ details(personId: number, options?: LanguageOptions): Promise<PersonDetails>;
13
+ combinedCredits(personId: number, options?: LanguageOptions): Promise<PersonCombinedCreditsResponse>;
14
+ }
@@ -0,0 +1,14 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { LanguageOptions, ListOptions, PagedResponse, PersonCombinedCreditsResponse, PersonDetails, PersonSummary } from '../types.js';
3
+ /**
4
+ * Access TMDB person (actor, director, etc.) endpoints.
5
+ *
6
+ * Obtained via `client.people`.
7
+ */
8
+ export declare class PeopleResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<PersonSummary>>;
12
+ details(personId: number, options?: LanguageOptions): Promise<PersonDetails>;
13
+ combinedCredits(personId: number, options?: LanguageOptions): Promise<PersonCombinedCreditsResponse>;
14
+ }
@@ -0,0 +1,15 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { MovieSearchOptions, MovieSearchResult, MultiSearchOptions, PagedResponse, PersonSearchResult, SearchMultiResult, TVSearchOptions, TVSearchResult } from '../types.cjs';
3
+ /**
4
+ * Search TMDB for movies, TV shows, people, or all media types.
5
+ *
6
+ * Obtained via `client.search`.
7
+ */
8
+ export declare class SearchResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ movies(query: string, options?: MovieSearchOptions): Promise<PagedResponse<MovieSearchResult>>;
12
+ tv(query: string, options?: TVSearchOptions): Promise<PagedResponse<TVSearchResult>>;
13
+ people(query: string, options?: MultiSearchOptions): Promise<PagedResponse<PersonSearchResult>>;
14
+ multi(query: string, options?: MultiSearchOptions): Promise<PagedResponse<SearchMultiResult>>;
15
+ }
@@ -0,0 +1,15 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { MovieSearchOptions, MovieSearchResult, MultiSearchOptions, PagedResponse, PersonSearchResult, SearchMultiResult, TVSearchOptions, TVSearchResult } from '../types.js';
3
+ /**
4
+ * Search TMDB for movies, TV shows, people, or all media types.
5
+ *
6
+ * Obtained via `client.search`.
7
+ */
8
+ export declare class SearchResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ movies(query: string, options?: MovieSearchOptions): Promise<PagedResponse<MovieSearchResult>>;
12
+ tv(query: string, options?: TVSearchOptions): Promise<PagedResponse<TVSearchResult>>;
13
+ people(query: string, options?: MultiSearchOptions): Promise<PagedResponse<PersonSearchResult>>;
14
+ multi(query: string, options?: MultiSearchOptions): Promise<PagedResponse<SearchMultiResult>>;
15
+ }
@@ -0,0 +1,23 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { ListOptions, MovieSummary, PagedResponse, PersonSummary, TrendingResult, TrendingTimeWindow, TVSummary } from '../types.cjs';
3
+ type TrendingOptions = Omit<ListOptions, 'region'>;
4
+ /**
5
+ * Access TMDB trending content (movies, TV, people) for day/week windows.
6
+ *
7
+ * Obtained via `client.trending`.
8
+ */
9
+ export declare class TrendingResource {
10
+ #private;
11
+ constructor(transport: TMDBTransport);
12
+ all(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<TrendingResult>>;
13
+ movies(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<MovieSummary & {
14
+ media_type?: 'movie';
15
+ }>>;
16
+ tv(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<TVSummary & {
17
+ media_type?: 'tv';
18
+ }>>;
19
+ people(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<PersonSummary & {
20
+ media_type?: 'person';
21
+ }>>;
22
+ }
23
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { ListOptions, MovieSummary, PagedResponse, PersonSummary, TrendingResult, TrendingTimeWindow, TVSummary } from '../types.js';
3
+ type TrendingOptions = Omit<ListOptions, 'region'>;
4
+ /**
5
+ * Access TMDB trending content (movies, TV, people) for day/week windows.
6
+ *
7
+ * Obtained via `client.trending`.
8
+ */
9
+ export declare class TrendingResource {
10
+ #private;
11
+ constructor(transport: TMDBTransport);
12
+ all(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<TrendingResult>>;
13
+ movies(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<MovieSummary & {
14
+ media_type?: 'movie';
15
+ }>>;
16
+ tv(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<TVSummary & {
17
+ media_type?: 'tv';
18
+ }>>;
19
+ people(timeWindow?: TrendingTimeWindow, options?: TrendingOptions): Promise<PagedResponse<PersonSummary & {
20
+ media_type?: 'person';
21
+ }>>;
22
+ }
23
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { TMDBTransport } from '../http.cjs';
2
+ import type { AggregateCreditsResponse, CreditsResponse, EpisodeDetails, EpisodeDetailsOptions, EpisodeGroupDetails, EpisodeGroupsResponse, ImageQueryOptions, ImagesResponse, LanguageOptions, ListOptions, PagedResponse, SeasonImagesResponse, TMDBObject, TVDetails, TVDetailsOptions, TVSeasonDetails, TVSeasonDetailsOptions, TVSummary, VideosResponse } from '../types.cjs';
3
+ /**
4
+ * Access TMDB TV show endpoints (popular, top-rated, details, seasons, etc.).
5
+ *
6
+ * Obtained via `client.tv`.
7
+ */
8
+ export declare class TVResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
12
+ topRated(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
13
+ airingToday(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
14
+ onTheAir(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
15
+ details<TAppend extends TMDBObject = TMDBObject>(seriesId: number, options?: TVDetailsOptions): Promise<TVDetails & TAppend>;
16
+ credits(seriesId: number, options?: LanguageOptions): Promise<CreditsResponse>;
17
+ images(seriesId: number, options?: ImageQueryOptions): Promise<ImagesResponse>;
18
+ recommendations(seriesId: number, options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
19
+ similar(seriesId: number, options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
20
+ videos(seriesId: number, options?: LanguageOptions): Promise<VideosResponse>;
21
+ seasonDetails<TAppend extends TMDBObject = TMDBObject>(seriesId: number, seasonNumber: number, options?: TVSeasonDetailsOptions): Promise<TVSeasonDetails & TAppend>;
22
+ seasonCredits(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<CreditsResponse>;
23
+ seasonAggregateCredits(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<AggregateCreditsResponse>;
24
+ seasonImages(seriesId: number, seasonNumber: number, options?: ImageQueryOptions): Promise<SeasonImagesResponse>;
25
+ seasonVideos(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<VideosResponse>;
26
+ episodeDetails<TAppend extends TMDBObject = TMDBObject>(seriesId: number, seasonNumber: number, episodeNumber: number, options?: EpisodeDetailsOptions): Promise<EpisodeDetails & TAppend>;
27
+ aggregateCredits(seriesId: number, options?: LanguageOptions): Promise<AggregateCreditsResponse>;
28
+ episodeGroups(seriesId: number, options?: LanguageOptions): Promise<EpisodeGroupsResponse>;
29
+ episodeGroup(groupId: string, options?: LanguageOptions): Promise<EpisodeGroupDetails>;
30
+ }
@@ -0,0 +1,30 @@
1
+ import type { TMDBTransport } from '../http.js';
2
+ import type { AggregateCreditsResponse, CreditsResponse, EpisodeDetails, EpisodeDetailsOptions, EpisodeGroupDetails, EpisodeGroupsResponse, ImageQueryOptions, ImagesResponse, LanguageOptions, ListOptions, PagedResponse, SeasonImagesResponse, TMDBObject, TVDetails, TVDetailsOptions, TVSeasonDetails, TVSeasonDetailsOptions, TVSummary, VideosResponse } from '../types.js';
3
+ /**
4
+ * Access TMDB TV show endpoints (popular, top-rated, details, seasons, etc.).
5
+ *
6
+ * Obtained via `client.tv`.
7
+ */
8
+ export declare class TVResource {
9
+ #private;
10
+ constructor(transport: TMDBTransport);
11
+ popular(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
12
+ topRated(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
13
+ airingToday(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
14
+ onTheAir(options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
15
+ details<TAppend extends TMDBObject = TMDBObject>(seriesId: number, options?: TVDetailsOptions): Promise<TVDetails & TAppend>;
16
+ credits(seriesId: number, options?: LanguageOptions): Promise<CreditsResponse>;
17
+ images(seriesId: number, options?: ImageQueryOptions): Promise<ImagesResponse>;
18
+ recommendations(seriesId: number, options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
19
+ similar(seriesId: number, options?: Omit<ListOptions, 'region'>): Promise<PagedResponse<TVSummary>>;
20
+ videos(seriesId: number, options?: LanguageOptions): Promise<VideosResponse>;
21
+ seasonDetails<TAppend extends TMDBObject = TMDBObject>(seriesId: number, seasonNumber: number, options?: TVSeasonDetailsOptions): Promise<TVSeasonDetails & TAppend>;
22
+ seasonCredits(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<CreditsResponse>;
23
+ seasonAggregateCredits(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<AggregateCreditsResponse>;
24
+ seasonImages(seriesId: number, seasonNumber: number, options?: ImageQueryOptions): Promise<SeasonImagesResponse>;
25
+ seasonVideos(seriesId: number, seasonNumber: number, options?: LanguageOptions): Promise<VideosResponse>;
26
+ episodeDetails<TAppend extends TMDBObject = TMDBObject>(seriesId: number, seasonNumber: number, episodeNumber: number, options?: EpisodeDetailsOptions): Promise<EpisodeDetails & TAppend>;
27
+ aggregateCredits(seriesId: number, options?: LanguageOptions): Promise<AggregateCreditsResponse>;
28
+ episodeGroups(seriesId: number, options?: LanguageOptions): Promise<EpisodeGroupsResponse>;
29
+ episodeGroup(groupId: string, options?: LanguageOptions): Promise<EpisodeGroupDetails>;
30
+ }
@@ -0,0 +1,32 @@
1
+ import type { MovieMultiResult, MovieSearchResult, PersonMultiResult, PersonSearchResult, SearchMultiResult, TVMultiResult, TVSearchResult } from './types.cjs';
2
+ /**
3
+ * Type guard that narrows a `search.multi()` result to a movie entry.
4
+ *
5
+ * The `media_type` field is required on every `/search/multi` payload by
6
+ * TMDB, so this check is safe at runtime and produces a strictly typed
7
+ * MovieSummary on the narrowed branch.
8
+ */
9
+ export declare function isMovieSearchResult(result: SearchMultiResult): result is MovieMultiResult;
10
+ export declare function isMovieSearchResult(result: unknown): result is MovieMultiResult;
11
+ /** Type guard that narrows a `search.multi()` result to a TV entry. */
12
+ export declare function isTVSearchResult(result: SearchMultiResult): result is TVMultiResult;
13
+ export declare function isTVSearchResult(result: unknown): result is TVMultiResult;
14
+ /** Type guard that narrows a `search.multi()` result to a person entry. */
15
+ export declare function isPersonSearchResult(result: SearchMultiResult): result is PersonMultiResult;
16
+ export declare function isPersonSearchResult(result: unknown): result is PersonMultiResult;
17
+ /**
18
+ * Convenience alias: `isMovieSearchResult` works on a `search.movies()`
19
+ * result (which already has the narrow type but is also tagged with
20
+ * `media_type?: 'movie'`), as well as on multi-search results.
21
+ */
22
+ export declare function isMovie(result: MovieSearchResult | SearchMultiResult): result is MovieMultiResult;
23
+ export declare function isMovie(result: SearchMultiResult): result is MovieMultiResult;
24
+ export declare function isMovie(result: unknown): result is MovieMultiResult;
25
+ /** Type guard that narrows a search result to a TV entry. */
26
+ export declare function isTV(result: TVSearchResult | SearchMultiResult): result is TVMultiResult;
27
+ export declare function isTV(result: SearchMultiResult): result is TVMultiResult;
28
+ export declare function isTV(result: unknown): result is TVMultiResult;
29
+ /** Type guard that narrows a search result to a person entry. */
30
+ export declare function isPerson(result: PersonSearchResult | SearchMultiResult): result is PersonMultiResult;
31
+ export declare function isPerson(result: SearchMultiResult): result is PersonMultiResult;
32
+ export declare function isPerson(result: unknown): result is PersonMultiResult;
@@ -0,0 +1,32 @@
1
+ import type { MovieMultiResult, MovieSearchResult, PersonMultiResult, PersonSearchResult, SearchMultiResult, TVMultiResult, TVSearchResult } from './types.js';
2
+ /**
3
+ * Type guard that narrows a `search.multi()` result to a movie entry.
4
+ *
5
+ * The `media_type` field is required on every `/search/multi` payload by
6
+ * TMDB, so this check is safe at runtime and produces a strictly typed
7
+ * MovieSummary on the narrowed branch.
8
+ */
9
+ export declare function isMovieSearchResult(result: SearchMultiResult): result is MovieMultiResult;
10
+ export declare function isMovieSearchResult(result: unknown): result is MovieMultiResult;
11
+ /** Type guard that narrows a `search.multi()` result to a TV entry. */
12
+ export declare function isTVSearchResult(result: SearchMultiResult): result is TVMultiResult;
13
+ export declare function isTVSearchResult(result: unknown): result is TVMultiResult;
14
+ /** Type guard that narrows a `search.multi()` result to a person entry. */
15
+ export declare function isPersonSearchResult(result: SearchMultiResult): result is PersonMultiResult;
16
+ export declare function isPersonSearchResult(result: unknown): result is PersonMultiResult;
17
+ /**
18
+ * Convenience alias: `isMovieSearchResult` works on a `search.movies()`
19
+ * result (which already has the narrow type but is also tagged with
20
+ * `media_type?: 'movie'`), as well as on multi-search results.
21
+ */
22
+ export declare function isMovie(result: MovieSearchResult | SearchMultiResult): result is MovieMultiResult;
23
+ export declare function isMovie(result: SearchMultiResult): result is MovieMultiResult;
24
+ export declare function isMovie(result: unknown): result is MovieMultiResult;
25
+ /** Type guard that narrows a search result to a TV entry. */
26
+ export declare function isTV(result: TVSearchResult | SearchMultiResult): result is TVMultiResult;
27
+ export declare function isTV(result: SearchMultiResult): result is TVMultiResult;
28
+ export declare function isTV(result: unknown): result is TVMultiResult;
29
+ /** Type guard that narrows a search result to a person entry. */
30
+ export declare function isPerson(result: PersonSearchResult | SearchMultiResult): result is PersonMultiResult;
31
+ export declare function isPerson(result: SearchMultiResult): result is PersonMultiResult;
32
+ export declare function isPerson(result: unknown): result is PersonMultiResult;