{"version":3,"file":"search.service.cjs","names":["fetchPage","searchUrl","getUrlByLanguage","getSearchUrl","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","getUser","getUserRealName","getAvatar","getCreatorUrl","getCreatorName","getCreatorImage"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n  getSearchColorRating,\n  getSearchOrigins,\n  getSearchPoster,\n  getSearchTitle,\n  getSearchType,\n  getSearchUrl,\n  getSearchYear,\n  parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n  public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n    const url = searchUrl(text, { language: options?.language });\n    const response = await fetchPage(url, { ...options?.request });\n\n    const html = parse(response);\n    const moviesNode = html.querySelectorAll('.main-movies article');\n    const usersNode = html.querySelectorAll('.main-users article');\n    const tvSeriesNode = html.querySelectorAll('.main-series article');\n    const creatorsNode = html.querySelectorAll('.main-authors article');\n\n    return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n  }\n\n  private parseSearch(\n    moviesNode: HTMLElement[],\n    usersNode: HTMLElement[],\n    tvSeriesNode: HTMLElement[],\n    creatorsNode: HTMLElement[],\n    language?: CSFDLanguage\n  ) {\n    const baseUrl = getUrlByLanguage(language);\n\n    const movies: CSFDSearchMovie[] = [];\n    const users: CSFDSearchUser[] = [];\n    const tvSeries: CSFDSearchMovie[] = [];\n    const creators: CSFDSearchCreator[] = [];\n\n    const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n      const url = getSearchUrl(m);\n      return {\n        id: parseIdFromUrl(url),\n        title: getSearchTitle(m),\n        year: getSearchYear(m),\n        url: `${baseUrl}${url}`,\n        type: getSearchType(m),\n        colorRating: getSearchColorRating(m),\n        poster: getSearchPoster(m),\n        origins: getSearchOrigins(m),\n        creators: {\n          directors: parseSearchPeople(m, 'directors'),\n          actors: parseSearchPeople(m, 'actors')\n        }\n      };\n    };\n\n    const userMapper = (m: HTMLElement): CSFDSearchUser => {\n      const url = getUserUrl(m);\n      return {\n        id: parseIdFromUrl(url),\n        user: getUser(m),\n        userRealName: getUserRealName(m),\n        avatar: getAvatar(m),\n        url: `${baseUrl}${url}`\n      };\n    };\n\n    const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n      const url = getCreatorUrl(m);\n      return {\n        id: parseIdFromUrl(url),\n        name: getCreatorName(m),\n        image: getCreatorImage(m),\n        url: `${baseUrl}${url}`\n      };\n    };\n\n    movies.push(...moviesNode.map(movieMapper));\n    users.push(...usersNode.map(userMapper));\n    tvSeries.push(...tvSeriesNode.map(movieMapper));\n    creators.push(...creatorsNode.map(creatorMapper));\n\n    const search: CSFDSearch = {\n      movies,\n      users,\n      tvSeries,\n      creators\n    };\n    return search;\n  }\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,QAAA,GAAA,iBAAA,MAAA,CAAa,MAFIA,cAAAA,UADXC,aAAAA,UAAU,MAAM,EAAE,UAAU,SAAS,SAAS,CACvB,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,CAElC;EAC3B,MAAM,aAAa,KAAK,iBAAiB,sBAAsB;EAC/D,MAAM,YAAY,KAAK,iBAAiB,qBAAqB;EAC7D,MAAM,eAAe,KAAK,iBAAiB,sBAAsB;EACjE,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAElE,OAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,QAAQ;CAC9F;CAEA,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,QAAQ;EAEzC,MAAM,SAA4B,CAAC;EACnC,MAAM,QAA0B,CAAC;EACjC,MAAM,WAA8B,CAAC;EACrC,MAAM,WAAgC,CAAC;EAEvC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,CAAC;GAC1B,OAAO;IACL,IAAIC,sBAAAA,eAAe,GAAG;IACtB,OAAOC,sBAAAA,eAAe,CAAC;IACvB,MAAMC,sBAAAA,cAAc,CAAC;IACrB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,CAAC;IACrB,aAAaC,sBAAAA,qBAAqB,CAAC;IACnC,QAAQC,sBAAAA,gBAAgB,CAAC;IACzB,SAASC,sBAAAA,iBAAiB,CAAC;IAC3B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,WAAW;KAC3C,QAAQA,sBAAAA,kBAAkB,GAAG,QAAQ;IACvC;GACF;EACF;EAEA,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,CAAC;GACxB,OAAO;IACL,IAAIR,sBAAAA,eAAe,GAAG;IACtB,MAAMS,2BAAAA,QAAQ,CAAC;IACf,cAAcC,2BAAAA,gBAAgB,CAAC;IAC/B,QAAQC,2BAAAA,UAAU,CAAC;IACnB,KAAK,GAAG,UAAU;GACpB;EACF;EAEA,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,CAAC;GAC3B,OAAO;IACL,IAAIZ,sBAAAA,eAAe,GAAG;IACtB,MAAMa,8BAAAA,eAAe,CAAC;IACtB,OAAOC,8BAAAA,gBAAgB,CAAC;IACxB,KAAK,GAAG,UAAU;GACpB;EACF;EAEA,OAAO,KAAK,GAAG,WAAW,IAAI,WAAW,CAAC;EAC1C,MAAM,KAAK,GAAG,UAAU,IAAI,UAAU,CAAC;EACvC,SAAS,KAAK,GAAG,aAAa,IAAI,WAAW,CAAC;EAC9C,SAAS,KAAK,GAAG,aAAa,IAAI,aAAa,CAAC;EAQhD,OAAO;GALL;GACA;GACA;GACA;EAEU;CACd;AACF"}