{"version":3,"sources":["../src/core/errors.ts","../src/shared/parser.ts","../src/core/http.ts","../src/shared/validation.ts","../src/modules/movies/service.ts","../src/modules/tv/service.ts","../src/modules/search/service.ts","../src/modules/trending/service.ts","../src/modules/configuration/service.ts","../src/modules/person/service.ts","../src/tmdb.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\n/**\n * Custom error class for TMDB API errors.\n * Provides structured error information from TMDB responses.\n */\nexport class TMDBError extends Error {\n  readonly status?: number;\n\n  readonly code?: number;\n\n  readonly body?: TMDBErrorBody;\n\n  constructor(\n    message: string,\n    options?: {\n      status?: number;\n      code?: number;\n      body?: TMDBErrorBody;\n    }\n  ) {\n    super(message);\n    this.name = \"TMDBError\";\n    this.status = options?.status;\n    this.code = options?.code;\n    this.body = options?.body;\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, TMDBError);\n    }\n  }\n\n  get isRateLimit(): boolean {\n    return this.status === 429;\n  }\n\n  get isAuthError(): boolean {\n    return this.status === 401 || this.code === 7; // Invalid API key\n  }\n\n  get isNotFound(): boolean {\n    return this.status === 404 || this.code === 34; // Resource not found\n  }\n\n  get friendlyMessage(): string {\n    if (this.isRateLimit) {\n      return \"Rate limit exceeded. Please wait before making more requests.\";\n    }\n    if (this.isAuthError) {\n      return \"Invalid API key. Please check your TMDB API credentials.\";\n    }\n    if (this.isNotFound) {\n      return \"The requested content was not found.\";\n    }\n    return this.message;\n  }\n}\n","/**\n * @internal\n */\nfunction snakeToCamel(str: string): string {\n  return str.replace(/([-_][a-z])/g, (group) =>\n    group.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\")\n  );\n}\n\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function toCamelCase<T>(obj: any): T {\n  if (Array.isArray(obj)) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return obj.map((v) => toCamelCase(v)) as any;\n  } else if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n    return Object.keys(obj).reduce((acc, key) => {\n      const camelKey = snakeToCamel(key);\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const value = (obj as any)[key];\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      (acc as any)[camelKey] = toCamelCase(value);\n\n      return acc;\n    }, {} as T);\n  }\n  return obj as T;\n}\n","import type { TMDBOptions } from \"../shared/common\";\nimport { TMDBError, type TMDBErrorBody } from \"./errors\";\n\nimport { toCamelCase } from \"../shared/parser\";\n\nconst DEFAULT_BASE_URL = \"https://api.themoviedb.org/3\";\n\n/**\n * Internal HTTP client for TMDB API requests.\n * Handles authentication, error responses, and request formatting.\n *\n * @internal\n */\nexport class HttpClient {\n  private readonly baseUrl: string;\n  private readonly apiKey?: string;\n  private readonly language?: string;\n  private readonly region?: string;\n\n  constructor(options: TMDBOptions) {\n    this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n    this.apiKey = options.apiKey;\n    this.language = options.language;\n    this.region = options.region;\n  }\n\n  /**\n   * Make a GET request to the TMDB API.\n   *\n   * @param path - API endpoint path (e.g., \"/movie/550\")\n   * @param params - Query parameters to include in the request\n   * @returns Promise resolving to the parsed JSON response\n   * @throws {TMDBError} When the request fails or returns an error status\n   */\n  async get<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n    const queryParams = this.buildQueryParams(params);\n    const url = this.baseUrl + path + this.buildQueryString(queryParams);\n\n    try {\n      const response = await fetch(url, {\n        method: \"GET\",\n        headers: {\n          Accept: \"application/json\",\n          \"User-Agent\": \"tmdb-client/0.2.0\",\n        },\n      });\n\n      if (!response.ok) {\n        await this.handleErrorResponse(response);\n      }\n\n      return await this.parseJsonResponse<T>(response);\n    } catch (error) {\n      // Re-throw TMDBError instances as-is\n      if (error instanceof TMDBError) {\n        throw error;\n      }\n\n      // Handle network errors, timeouts, etc.\n      const message = error instanceof Error ? error.message : \"Unknown error occurred\";\n      throw new TMDBError(`Network error: ${message}`, { status: 0 });\n    }\n  }\n\n  /**\n   * Build query parameters, merging request params with client defaults.\n   */\n  private buildQueryParams(params?: Record<string, unknown>): Record<string, unknown> {\n    return {\n      ...params,\n      language: params?.language ?? this.language,\n      region: params?.region ?? this.region,\n      ...(this.apiKey ? { api_key: this.apiKey } : {}),\n    };\n  }\n\n  /**\n   * Convert parameters object to URL query string.\n   * Handles arrays by joining with commas, filters out empty values.\n   */\n  private buildQueryString(params?: Record<string, unknown>): string {\n    if (!params) return \"\";\n\n    const searchParams = new URLSearchParams();\n\n    for (const [key, value] of Object.entries(params)) {\n      if (value === undefined || value === null || value === \"\") {\n        continue;\n      }\n\n      if (Array.isArray(value)) {\n        if (value.length > 0) {\n          searchParams.set(key, value.join(\",\"));\n        }\n        continue;\n      }\n\n      searchParams.set(key, String(value));\n    }\n\n    const queryString = searchParams.toString();\n    return queryString ? `?${queryString}` : \"\";\n  }\n\n  /**\n   * Handle error responses from TMDB API.\n   * Attempts to parse TMDB error format and throws structured TMDBError.\n   */\n  private async handleErrorResponse(response: Response): Promise<never> {\n    let errorBody: TMDBErrorBody | undefined;\n    let message = `HTTP ${response.status}: ${response.statusText}`;\n\n    try {\n      const contentType = response.headers.get(\"content-type\") || \"\";\n      if (contentType.toLowerCase().includes(\"application/json\")) {\n        errorBody = (await response.json()) as TMDBErrorBody;\n\n        if (errorBody.status_message) {\n          message = errorBody.status_message;\n        }\n      }\n    } catch {\n      /* ignore JSON parse errors */\n    }\n\n    if (response.status === 401) {\n      message = \"Invalid API key. Please check your TMDB credentials.\";\n    } else if (response.status === 429) {\n      message = \"Rate limit exceeded. Please slow down your requests.\";\n    } else if (response.status >= 500) {\n      message = \"TMDB server error. Please try again later.\";\n    }\n\n    throw new TMDBError(message, {\n      status: response.status,\n      code: errorBody?.status_code,\n      body: errorBody,\n    });\n  }\n\n  /**\n   * Parse JSON response with proper error handling.\n   */\n  private async parseJsonResponse<T>(response: Response): Promise<T> {\n    const contentType = response.headers.get(\"content-type\") || \"\";\n\n    if (!contentType.toLowerCase().includes(\"application/json\")) {\n      throw new TMDBError(\"Expected JSON response but received different content type\", {\n        status: response.status,\n      });\n    }\n\n    try {\n      const rawJson = await response.json();\n      return toCamelCase<T>(rawJson);\n    } catch {\n      throw new TMDBError(\"Failed to parse JSON response from TMDB\", { status: response.status });\n    }\n  }\n}\n","import { TMDBError } from \"../core\";\n\nexport function validateId(id: number): void {\n  if (!Number.isInteger(id) || id <= 0) {\n    throw new TMDBError(\"Invalid TMDB movie id. Expected a positive integer.\");\n  }\n}\n\nexport function validateQuery(query: string): void {\n  if (!query?.trim()) {\n    throw new TMDBError(\"Search query cannot be empty\");\n  }\n}\n","import type { HttpClient } from \"../../core\";\nimport { validateId } from \"../../shared/validation\";\nimport type {\n  Movie,\n  MovieCredits,\n  MovieImages,\n  GetMovieOptions,\n  GetMovieCreditsOptions,\n  GetMovieImagesOptions,\n  GetRecommendedMoviesOptions,\n  GetSimilarMoviesOptions,\n  RecommendedMovies,\n  SimilarMovies,\n} from \"./types\";\n\n/**\n * Internal service for TMDB movie endpoints.\n * Not exposed to consumers — use the TMDB client facade instead.\n * @internal\n */\nexport class MoviesService {\n  constructor(private readonly http: HttpClient) {}\n\n  async get(id: number, options?: GetMovieOptions): Promise<Movie> {\n    validateId(id);\n    return this.http.get<Movie>(`/movie/${id}`, options);\n  }\n\n  async credits(id: number, options?: GetMovieCreditsOptions): Promise<MovieCredits> {\n    validateId(id);\n    return this.http.get<MovieCredits>(`/movie/${id}/credits`, options);\n  }\n\n  async images(id: number, options?: GetMovieImagesOptions): Promise<MovieImages> {\n    validateId(id);\n    return this.http.get<MovieImages>(`/movie/${id}/images`, options);\n  }\n\n  async recommendations(\n    id: number,\n    options?: GetRecommendedMoviesOptions\n  ): Promise<RecommendedMovies> {\n    validateId(id);\n    return this.http.get<RecommendedMovies>(`/movie/${id}/recommendations`, options);\n  }\n\n  async similar(id: number, options?: GetSimilarMoviesOptions): Promise<SimilarMovies> {\n    validateId(id);\n    return this.http.get<SimilarMovies>(`/movie/${id}/similar`, options);\n  }\n}\n","import { HttpClient } from \"../../core\";\nimport { validateId } from \"../../shared/validation\";\nimport type {\n  TvShow,\n  TvCredits,\n  TvImages,\n  GetTvShowOptions,\n  GetTvCreditsOptions,\n  GetTvImagesOptions,\n  GetRecommendedTvShowsOptions,\n  RecommendedTvShows,\n  GetSimilarTvShowsOptions,\n  SimilarTvShows,\n} from \"./types\";\n\n/**\n * Internal service for TMDB tv endpoints.\n * Not exposed to users — use the TMDB factory instead.\n * @internal\n */\nexport class TvService {\n  constructor(private http: HttpClient) {}\n\n  get(id: number, opts?: GetTvShowOptions): Promise<TvShow> {\n    validateId(id);\n    return this.http.get<TvShow>(`/tv/${id}`, opts);\n  }\n\n  credits(id: number, opts?: GetTvCreditsOptions): Promise<TvCredits> {\n    validateId(id);\n    return this.http.get<TvCredits>(`/tv/${id}/credits`, opts);\n  }\n\n  images(id: number, opts?: GetTvImagesOptions): Promise<TvImages> {\n    validateId(id);\n    return this.http.get<TvImages>(`/tv/${id}/images`, opts);\n  }\n\n  recommendations(id: number, opts?: GetRecommendedTvShowsOptions): Promise<RecommendedTvShows> {\n    validateId(id);\n    return this.http.get<RecommendedTvShows>(`/tv/${id}/recommendations`, opts);\n  }\n\n  similar(id: number, opts?: GetSimilarTvShowsOptions): Promise<SimilarTvShows> {\n    validateId(id);\n    return this.http.get<SimilarTvShows>(`/tv/${id}/similar`, opts);\n  }\n}\n","import type { HttpClient } from \"../../core\";\nimport { validateQuery } from \"../../shared/validation\";\nimport type {\n  MovieSearchResults,\n  TvSearchResults,\n  PeopleSearchResults,\n  MultiSearchResults,\n  GetMovieSearchOptions,\n  GetTvSearchOptions,\n  GetPeopleSearchOptions,\n  GetMultiSearchOptions,\n} from \"./types\";\n\n/**\n * Internal service for TMDB search endpoints.\n * Not exposed to consumers - use TMDB client's search methods instead.\n * @internal\n */\nexport class SearchService {\n  constructor(private readonly http: HttpClient) {}\n\n  async searchMovies(query: string, options?: GetMovieSearchOptions): Promise<MovieSearchResults> {\n    validateQuery(query);\n    return this.http.get<MovieSearchResults>(\"/search/movie\", {\n      query: query.trim(),\n      ...options,\n    });\n  }\n\n  async searchTv(query: string, options?: GetTvSearchOptions): Promise<TvSearchResults> {\n    validateQuery(query);\n    return this.http.get<TvSearchResults>(\"/search/tv\", {\n      query: query.trim(),\n      ...options,\n    });\n  }\n\n  async searchPeople(\n    query: string,\n    options?: GetPeopleSearchOptions\n  ): Promise<PeopleSearchResults> {\n    validateQuery(query);\n    return this.http.get<PeopleSearchResults>(\"/search/person\", {\n      query: query.trim(),\n      ...options,\n    });\n  }\n\n  async searchMulti(query: string, options?: GetMultiSearchOptions): Promise<MultiSearchResults> {\n    validateQuery(query);\n    return this.http.get<MultiSearchResults>(\"/search/multi\", {\n      query: query.trim(),\n      ...options,\n    });\n  }\n}\n","import type { HttpClient } from \"../../core\";\nimport type { TrendingAll, GetTrendingAllOptions } from \"./types\";\n\n/**\n * Internal service for TMDB trending endpoints.\n * Not exposed to users — use the TMDB factory instead.\n * @internal\n */\nexport class TrendingService {\n  constructor(private http: HttpClient) {}\n\n  async getDailyTrending(opts?: GetTrendingAllOptions): Promise<TrendingAll> {\n    return this.http.get<TrendingAll>(`/trending/all/day`, opts);\n  }\n\n  async getWeeklyTrending(opts?: GetTrendingAllOptions): Promise<TrendingAll> {\n    return this.http.get<TrendingAll>(`/trending/all/week`, opts);\n  }\n}\n","import type { HttpClient } from \"../../core\";\nimport type {\n  TMDBConfiguration,\n  Country,\n  JobGroup,\n  Language,\n  TimezoneGroup,\n  GetCountriesOptions,\n} from \"./types\";\n\n/**\n * Internal service for TMDB configuration endpoints.\n * Not exposed to users — use the TMDB factory instead.\n * @internal\n */\nexport class ConfigurationService {\n  constructor(private http: HttpClient) {}\n\n  async getConfig(): Promise<TMDBConfiguration> {\n    return this.http.get<TMDBConfiguration>(\"/configuration\");\n  }\n\n  async countries(opts?: GetCountriesOptions): Promise<Country[]> {\n    return this.http.get<Country[]>(\"/configuration/countries\", opts);\n  }\n\n  async jobs(): Promise<JobGroup[]> {\n    return this.http.get<JobGroup[]>(\"/configuration/jobs\");\n  }\n\n  async languages(): Promise<Language[]> {\n    return this.http.get<Language[]>(\"/configuration/languages\");\n  }\n\n  async timezones(): Promise<TimezoneGroup[]> {\n    return this.http.get<TimezoneGroup[]>(\"/configuration/timezones\");\n  }\n}\n","import type { HttpClient } from \"../../core\";\nimport { validateId } from \"../../shared/validation\";\nimport type {\n  Person,\n  PersonImages,\n  PersonCombinedCredits,\n  GetPersonOptions,\n  GetPersonCombinedCreditsOptions,\n} from \"./types\";\n\n/**\n * Internal service for TMDB person endpoints.\n * @internal\n */\nexport class PersonService {\n  constructor(private readonly http: HttpClient) {}\n\n  async get(id: number, options?: GetPersonOptions): Promise<Person> {\n    validateId(id);\n    return this.http.get<Person>(`/person/${id}`, options);\n  }\n\n  async images(id: number): Promise<PersonImages> {\n    validateId(id);\n    return this.http.get<PersonImages>(`/person/${id}/images`);\n  }\n\n  async combinedCredits(\n    id: number,\n    options?: GetPersonCombinedCreditsOptions\n  ): Promise<PersonCombinedCredits> {\n    validateId(id);\n    return this.http.get<PersonCombinedCredits>(`/person/${id}/combined_credits`, options);\n  }\n}\n","import { HttpClient } from \"./core\";\nimport { TMDBError } from \"./core\";\n\nimport { MoviesService } from \"./modules/movies/service\";\nimport { TvService } from \"./modules/tv/service\";\nimport { SearchService } from \"./modules/search/service\";\nimport { TrendingService } from \"./modules/trending/service\";\nimport { ConfigurationService } from \"./modules/configuration/service\";\n\nimport type {\n  GetMovieOptions,\n  GetMovieCreditsOptions,\n  GetMovieImagesOptions,\n  GetRecommendedMoviesOptions,\n  GetSimilarMoviesOptions,\n  Movie,\n  MovieCredits,\n  MovieImages,\n  RecommendedMovies,\n  SimilarMovies,\n} from \"./modules/movies/types\";\n\nimport type {\n  GetTvShowOptions,\n  GetTvCreditsOptions,\n  GetTvImagesOptions,\n  GetRecommendedTvShowsOptions,\n  GetSimilarTvShowsOptions,\n  TvShow,\n  TvCredits,\n  TvImages,\n  RecommendedTvShows,\n  SimilarTvShows,\n} from \"./modules/tv/types\";\n\nimport type {\n  GetMovieSearchOptions,\n  GetTvSearchOptions,\n  GetPeopleSearchOptions,\n  GetMultiSearchOptions,\n  MovieSearchResults,\n  TvSearchResults,\n  PeopleSearchResults,\n  MultiSearchResults,\n} from \"./modules/search/types\";\n\nimport type { GetTrendingAllOptions, TrendingAll } from \"./modules/trending/types\";\n\nimport type {\n  GetCountriesOptions,\n  TMDBConfiguration,\n  Country,\n  JobGroup,\n  Language,\n  TimezoneGroup,\n} from \"./modules/configuration/types\";\n\nimport type {\n  GetPersonOptions,\n  Person,\n  PersonImages,\n  GetPersonCombinedCreditsOptions,\n  PersonCombinedCredits,\n} from \"./modules/person/types\";\n\nimport type { TMDBOptions } from \"./shared/common\";\nimport { PersonService } from \"./modules/person/service\";\n\nexport class TMDB {\n  readonly movies: {\n    get: (id: number, options?: GetMovieOptions) => Promise<Movie>;\n    credits: (id: number, options?: GetMovieCreditsOptions) => Promise<MovieCredits>;\n    images: (id: number, options?: GetMovieImagesOptions) => Promise<MovieImages>;\n    recommendations: (\n      id: number,\n      options?: GetRecommendedMoviesOptions\n    ) => Promise<RecommendedMovies>;\n    similar: (id: number, options?: GetSimilarMoviesOptions) => Promise<SimilarMovies>;\n  };\n\n  readonly tv: {\n    get: (id: number, options?: GetTvShowOptions) => Promise<TvShow>;\n    credits: (id: number, options?: GetTvCreditsOptions) => Promise<TvCredits>;\n    images: (id: number, options?: GetTvImagesOptions) => Promise<TvImages>;\n    recommendations: (\n      id: number,\n      options?: GetRecommendedTvShowsOptions\n    ) => Promise<RecommendedTvShows>;\n    similar: (id: number, options?: GetSimilarTvShowsOptions) => Promise<SimilarTvShows>;\n  };\n\n  readonly trending: {\n    daily: (options?: GetTrendingAllOptions) => Promise<TrendingAll>;\n    weekly: (options?: GetTrendingAllOptions) => Promise<TrendingAll>;\n  };\n\n  readonly configuration: {\n    get: () => Promise<TMDBConfiguration>;\n    countries: (options?: GetCountriesOptions) => Promise<Country[]>;\n    jobs: () => Promise<JobGroup[]>;\n    languages: () => Promise<Language[]>;\n    timezones: () => Promise<TimezoneGroup[]>;\n  };\n\n  readonly search: {\n    movies: (query: string, options?: GetMovieSearchOptions) => Promise<MovieSearchResults>;\n    tv: (query: string, options?: GetTvSearchOptions) => Promise<TvSearchResults>;\n    people: (query: string, options?: GetPeopleSearchOptions) => Promise<PeopleSearchResults>;\n    multi: (query: string, options?: GetMultiSearchOptions) => Promise<MultiSearchResults>;\n  };\n\n  readonly person: {\n    get: (id: number, options?: GetPersonOptions) => Promise<Person>;\n    images: (id: number) => Promise<PersonImages>;\n    combinedCredits: (\n      id: number,\n      options?: GetPersonCombinedCreditsOptions\n    ) => Promise<PersonCombinedCredits>;\n  };\n\n  private readonly http: HttpClient;\n\n  constructor(opts: TMDBOptions) {\n    if (!opts?.apiKey?.trim()) {\n      throw new TMDBError(\"API key is required.\", { status: 401 });\n    }\n\n    this.http = new HttpClient({\n      apiKey: opts.apiKey,\n      baseUrl: opts.baseUrl ?? \"https://api.themoviedb.org/3\",\n      language: opts.language ?? \"en-US\",\n      timeout: opts.timeout ?? 20_000,\n    });\n\n    const movies = new MoviesService(this.http);\n    const tv = new TvService(this.http);\n    const search = new SearchService(this.http);\n    const trending = new TrendingService(this.http);\n    const configuration = new ConfigurationService(this.http);\n    const person = new PersonService(this.http);\n\n    this.person = {\n      get: person.get.bind(person),\n      images: person.images.bind(person),\n      combinedCredits: person.combinedCredits.bind(person),\n    };\n\n    this.movies = {\n      get: movies.get.bind(movies),\n      credits: movies.credits.bind(movies),\n      images: movies.images.bind(movies),\n      recommendations: movies.recommendations.bind(movies),\n      similar: movies.similar.bind(movies),\n    };\n\n    this.tv = {\n      get: tv.get.bind(tv),\n      credits: tv.credits.bind(tv),\n      images: tv.images.bind(tv),\n      recommendations: tv.recommendations.bind(tv),\n      similar: tv.similar.bind(tv),\n    };\n\n    this.trending = {\n      daily: trending.getDailyTrending.bind(trending),\n      weekly: trending.getWeeklyTrending.bind(trending),\n    };\n\n    this.configuration = {\n      get: configuration.getConfig.bind(configuration),\n      countries: configuration.countries.bind(configuration),\n      jobs: configuration.jobs.bind(configuration),\n      languages: configuration.languages.bind(configuration),\n      timezones: configuration.timezones.bind(configuration),\n    };\n\n    this.search = {\n      movies: search.searchMovies.bind(search),\n      tv: search.searchTv.bind(search),\n      people: search.searchPeople.bind(search),\n      multi: search.searchMulti.bind(search),\n    };\n  }\n}\n"]}