{"version":3,"file":"movie.service.cjs","names":["extractId","fetchPage","movieUrl","LIB_PREFIX","getMovieType","getSeriesAndSeasonTitle","detectSeasonOrEpisodeListType","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieCreators","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies","getSeasonsOrEpisodes","getSeasonOrEpisodeParent","getEpisodeCode"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport { extractId } from '../helpers/global.helper';\nimport {\n  detectSeasonOrEpisodeListType,\n  getEpisodeCode,\n  getMovieBoxMovies,\n  getMovieColorRating,\n  getMovieCreators,\n  getMovieDescriptions,\n  getMovieDuration,\n  getMovieGenres,\n  getMovieOrigins,\n  getMoviePoster,\n  getMoviePremieres,\n  getMovieRandomPhoto,\n  getMovieRating,\n  getMovieRatingCount,\n  getMovieTags,\n  getMovieTitle,\n  getMovieTitlesOther,\n  getMovieTrivia,\n  getMovieType,\n  getMovieVods,\n  getMovieYear,\n  getSeasonOrEpisodeParent,\n  getSeasonsOrEpisodes,\n  getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { LIB_PREFIX, movieUrl } from '../vars';\n\nexport class MovieScraper {\n  public async movie(movieId: number | string, options?: CSFDOptions): Promise<CSFDMovie> {\n    const id = extractId(movieId);\n    if (id === null || isNaN(id)) {\n      throw new Error('node-csfd-api: movieId must be a valid number');\n    }\n    const url = movieUrl(id, { language: options?.language });\n    const response = await fetchPage(url, { ...options?.request });\n\n    const movieHtml = parse(response);\n\n    const pageClasses = movieHtml.querySelector('.page-content').classNames.split(' ');\n    const asideNode = movieHtml.querySelector('.aside-movie-profile');\n    const movieNode = movieHtml.querySelector('.main-movie-profile');\n    const jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]')?.textContent;\n    let jsonLd: MovieJsonLd | null = null;\n    try {\n      jsonLd = JSON.parse(jsonLdString);\n    } catch (e) {\n      console.error(LIB_PREFIX + ' Error parsing JSON-LD', e);\n    }\n    return this.buildMovie(id, movieHtml, movieNode as HTMLElement, asideNode as HTMLElement, pageClasses, jsonLd, options);\n  }\n\n  private buildMovie(\n    movieId: number,\n    movieHtml: HTMLElement,\n    el: HTMLElement,\n    asideEl: HTMLElement,\n    pageClasses: string[],\n    jsonLd: MovieJsonLd | null,\n    options: CSFDOptions\n  ) {\n    const type = getMovieType(el) as CSFDFilmTypes;\n    const { seriesName = null, seasonName = null } =\n      type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n    const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(movieHtml);\n\n    const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n    return {\n      id: movieId,\n      title,\n      year: getMovieYear(jsonLd),\n      duration: getMovieDuration(jsonLd, el),\n      descriptions: getMovieDescriptions(el),\n      genres: getMovieGenres(el),\n      type,\n      url: movieUrl(movieId, { language: options?.language }),\n      origins: getMovieOrigins(el),\n      colorRating: getMovieColorRating(pageClasses),\n      rating: getMovieRating(asideEl),\n      ratingCount: getMovieRatingCount(asideEl),\n      titlesOther: getMovieTitlesOther(el),\n      poster: getMoviePoster(el),\n      photo: getMovieRandomPhoto(el),\n      trivia: getMovieTrivia(el),\n      creators: getMovieCreators(el, options),\n      vod: getMovieVods(el),\n      tags: getMovieTags(asideEl),\n      premieres: getMoviePremieres(asideEl),\n      related: getMovieBoxMovies(asideEl, 'Související'),\n      similar: getMovieBoxMovies(asideEl, 'Podobné'),\n      seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(movieHtml) : null,\n      episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(movieHtml) : null,\n      parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n      episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n      seasonName\n    };\n  }\n}\n"],"mappings":";;;;;;AAkCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAA0B,SAA2C;EACtF,MAAM,KAAKA,sBAAAA,UAAU,OAAO;EAC5B,IAAI,OAAO,QAAQ,MAAM,EAAE,GACzB,MAAM,IAAI,MAAM,+CAA+C;EAKjE,MAAM,aAAA,GAAA,iBAAA,MAAA,CAAkB,MAFDC,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,SAAS,CACpB,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,CAE7B;EAEhC,MAAM,cAAc,UAAU,cAAc,eAAe,CAAC,CAAC,WAAW,MAAM,GAAG;EACjF,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,YAAY,UAAU,cAAc,qBAAqB;EAC/D,MAAM,eAAe,UAAU,cAAc,sCAAoC,CAAC,EAAE;EACpF,IAAI,SAA6B;EACjC,IAAI;GACF,SAAS,KAAK,MAAM,YAAY;EAClC,SAAS,GAAG;GACV,QAAQ,MAAMC,aAAAA,aAAa,0BAA0B,CAAC;EACxD;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,WAA0B,WAA0B,aAAa,QAAQ,OAAO;CACxH;CAEA,WACE,SACA,WACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,EAAE;EAC5B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,EAAE,IAAI,CAAC;EACrD,MAAM,0BAA0BC,qBAAAA,8BAA8B,SAAS;EAGvE,OAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,EAAE;GAI3E,MAAMC,qBAAAA,aAAa,MAAM;GACzB,UAAUC,qBAAAA,iBAAiB,QAAQ,EAAE;GACrC,cAAcC,qBAAAA,qBAAqB,EAAE;GACrC,QAAQC,qBAAAA,eAAe,EAAE;GACzB;GACA,KAAKT,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,SAAS,CAAC;GACtD,SAASU,qBAAAA,gBAAgB,EAAE;GAC3B,aAAaC,qBAAAA,oBAAoB,WAAW;GAC5C,QAAQC,qBAAAA,eAAe,OAAO;GAC9B,aAAaC,qBAAAA,oBAAoB,OAAO;GACxC,aAAaC,qBAAAA,oBAAoB,EAAE;GACnC,QAAQC,qBAAAA,eAAe,EAAE;GACzB,OAAOC,qBAAAA,oBAAoB,EAAE;GAC7B,QAAQC,qBAAAA,eAAe,EAAE;GACzB,UAAUC,qBAAAA,iBAAiB,IAAI,OAAO;GACtC,KAAKC,qBAAAA,aAAa,EAAE;GACpB,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,WAAWC,qBAAAA,kBAAkB,OAAO;GACpC,SAASC,qBAAAA,kBAAkB,SAAS,aAAa;GACjD,SAASA,qBAAAA,kBAAkB,SAAS,SAAS;GAC7C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,SAAS,IAAI;GACnF,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,SAAS,IAAI;GACrF,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,EAAE,IAAI;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,EAAE,IAAI;GACvD;EACF;CACF;AACF"}