{"version":3,"sources":["../src/client/error.ts","../src/client/http.ts","../src/services/movie.ts","../src/services/tv.ts","../src/services/search.ts","../src/services/trending.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export interface TMDBErrorBody {\n  status_code?: number;\n  status_message?: string;\n  success?: boolean;\n}\n\nexport class TMDBError extends Error {\n  status?: number;\n  code?: number;\n  constructor(message: string, opts?: { status?: number; code?: number }) {\n    super(message);\n    this.name = \"TMDBError\";\n    this.status = opts?.status;\n    this.code = opts?.code;\n  }\n}\n","import type { TMDBOptions } from \"./types\";\nimport { TMDBError, type TMDBErrorBody } from \"./error\";\n\nconst DEFAULT_BASE = \"https://api.themoviedb.org/3\";\n\nexport class HttpClient {\n  private baseUrl: string;\n  private apiKey?: string;\n  private language?: string;\n  private region?: string;\n\n  constructor(opts: TMDBOptions) {\n    this.baseUrl = opts.baseUrl ?? DEFAULT_BASE;\n    this.apiKey = opts.apiKey;\n    this.language = opts.language;\n    this.region = opts.region;\n  }\n\n  private qs(params?: Record<string, unknown>): string {\n    if (!params) return \"\";\n    const sp = new URLSearchParams();\n    for (const [k, v] of Object.entries(params)) {\n      if (v === undefined || v === null || v === \"\") continue;\n      if (Array.isArray(v)) {\n        if (v.length) sp.set(k, v.join(\",\"));\n        continue;\n      }\n      sp.set(k, String(v));\n    }\n    const s = sp.toString();\n    return s ? `?${s}` : \"\";\n  }\n\n  async get<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n    const query = {\n      ...params,\n      language: params?.language ?? this.language,\n      region: params?.region ?? this.region,\n      ...(this.apiKey ? { api_key: this.apiKey } : {}),\n    };\n\n    const url = this.baseUrl + path + this.qs(query);\n\n    const res = await fetch(url, {\n      method: \"GET\",\n      headers: { Accept: \"application/json\" },\n    });\n\n    if (!res.ok) {\n      let body: TMDBErrorBody | undefined;\n      try {\n        body = (await res.json()) as TMDBErrorBody;\n      } catch {\n        // Non-JSON error body; leave `body` as undefined\n      }\n\n      const msg = body?.status_message || `TMDB request failed (${res.status})`;\n      throw new TMDBError(msg, { status: res.status, code: body?.status_code });\n    }\n\n    return (await res.json()) as T;\n  }\n}\n","import { HttpClient } from \"../client\";\nimport type { Paged, Movie, Credits, ImagesResponse } from \"./types\";\n\nexport class MovieService {\n  constructor(private http: HttpClient) {}\n\n  getById(id: number, opts?: { append_to_response?: string; language?: string }) {\n    return this.http.get<Movie>(`/movie/${id}`, opts);\n  }\n\n  credits(id: number, opts?: { language?: string }) {\n    return this.http.get<Credits>(`/movie/${id}/credits`, opts);\n  }\n\n  images(id: number, opts?: { include_image_language?: string; language?: string }) {\n    return this.http.get<ImagesResponse>(`/movie/${id}/images`, opts);\n  }\n\n  recommendations(id: number, opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<Movie>>(`/movie/${id}/recommendations`, opts);\n  }\n\n  similar(id: number, opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<Movie>>(`/movie/${id}/similar`, opts);\n  }\n}\n","import { HttpClient } from \"../client\";\nimport type { ITVSeries, Credits, ImagesResponse, Paged } from \"./types\";\n\nexport class TvService {\n  constructor(private http: HttpClient) {}\n\n  getById(id: number, opts?: { append_to_response?: string; language?: string }) {\n    return this.http.get<ITVSeries>(`/tv/${id}`, opts);\n  }\n\n  credits(id: number, opts?: { language?: string }) {\n    return this.http.get<Credits>(`/tv/${id}/credits`, opts);\n  }\n\n  images(id: number, opts?: { include_image_language?: string; language?: string }) {\n    return this.http.get<ImagesResponse>(`/tv/${id}/images`, opts);\n  }\n\n  recommendations(id: number, opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<ITVSeries>>(`/tv/${id}/recommendations`, opts);\n  }\n\n  similar(id: number, opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<ITVSeries>>(`/tv/${id}/similar`, opts);\n  }\n}\n","import type { HttpClient } from \"../client\";\nimport type { Paged } from \"./types\";\nimport type { SearchMovie, SearchTv, SearchPerson, MultiSearchResult } from \"./types\";\n\nexport class SearchService {\n  constructor(private http: HttpClient) {}\n\n  movie(\n    query: string,\n    opts?: {\n      page?: number;\n      include_adult?: boolean;\n      language?: string;\n      region?: string;\n      year?: number;\n      primary_release_year?: number;\n    }\n  ) {\n    return this.http.get<Paged<SearchMovie>>(\"/search/movie\", { query, ...opts });\n  }\n\n  tv(\n    query: string,\n    opts?: {\n      page?: number;\n      include_adult?: boolean;\n      language?: string;\n      first_air_date_year?: number;\n    }\n  ) {\n    return this.http.get<Paged<SearchTv>>(\"/search/tv\", { query, ...opts });\n  }\n\n  people(\n    query: string,\n    opts?: { page?: number; include_adult?: boolean; language?: string; region?: string }\n  ) {\n    return this.http.get<Paged<SearchPerson>>(\"/search/person\", { query, ...opts });\n  }\n\n  multi(\n    query: string,\n    opts?: { page?: number; include_adult?: boolean; language?: string; region?: string }\n  ) {\n    return this.http.get<Paged<MultiSearchResult>>(\"/search/multi\", { query, ...opts });\n  }\n}\n","import type { HttpClient } from \"../client\";\n\nimport type { Paged, TrendingAllItem } from \"./types\";\n\nexport class TrendingService {\n  constructor(private http: HttpClient) {}\n\n  daily(opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<TrendingAllItem>>(`/trending/all/day`, opts);\n  }\n\n  weekly(opts?: { page?: number; language?: string }) {\n    return this.http.get<Paged<TrendingAllItem>>(`/trending/all/week`, opts);\n  }\n}\n","import type { TMDBOptions } from \"./client\";\nimport { HttpClient } from \"./client\";\nimport { MovieService, TvService, SearchService, TrendingService } from \"./services\";\n\nexport class TMDB {\n  readonly movie: MovieService;\n  readonly tv: TvService;\n  readonly search: SearchService;\n  readonly trending: TrendingService;\n\n  constructor(options: TMDBOptions) {\n    if (!options.apiKey) {\n      throw new Error(\"TMDB: apiKey is required for v3.\");\n    }\n    const http = new HttpClient(options);\n    this.movie = new MovieService(http);\n    this.tv = new TvService(http);\n    this.search = new SearchService(http);\n    this.trending = new TrendingService(http);\n  }\n}\n\nexport type { TMDBOptions } from \"./client\";\nexport { TMDBError } from \"./client\";\nexport * from \"./services\";\n"]}