node-csfd-api 5.3.0 → 5.5.0-next.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 (132) hide show
  1. package/bin/{export-ratings.mjs → export-ratings.js} +1 -1
  2. package/bin/{mcp-server.mjs → mcp-server.js} +2 -2
  3. package/bin/{server.mjs → server.js} +2 -2
  4. package/{cli.mjs → cli.js} +3 -3
  5. package/dto/{cinema.d.mts → cinema.d.cts} +2 -2
  6. package/dto/{creator.d.mts → creator.d.cts} +2 -2
  7. package/dto/{global.d.mts → global.d.cts} +1 -1
  8. package/dto/{movie.d.mts → movie.d.cts} +2 -2
  9. package/dto/{options.d.mts → options.d.cts} +1 -1
  10. package/dto/{search.d.mts → search.d.cts} +3 -3
  11. package/dto/{user-ratings.d.mts → user-ratings.d.cts} +2 -2
  12. package/dto/{user-reviews.d.mts → user-reviews.d.cts} +2 -2
  13. package/fetchers/{fetch.polyfill.mjs → fetch.polyfill.cjs} +3 -4
  14. package/fetchers/fetch.polyfill.cjs.map +1 -0
  15. package/fetchers/fetch.polyfill.js +2 -3
  16. package/fetchers/fetch.polyfill.js.map +1 -1
  17. package/fetchers/index.cjs +75 -0
  18. package/fetchers/index.cjs.map +1 -0
  19. package/fetchers/index.js +56 -12
  20. package/fetchers/index.js.map +1 -1
  21. package/helpers/cinema.helper.cjs +83 -0
  22. package/helpers/cinema.helper.cjs.map +1 -0
  23. package/helpers/cinema.helper.js +4 -8
  24. package/helpers/cinema.helper.js.map +1 -1
  25. package/helpers/creator.helper.cjs +72 -0
  26. package/helpers/creator.helper.cjs.map +1 -0
  27. package/helpers/creator.helper.js +6 -10
  28. package/helpers/creator.helper.js.map +1 -1
  29. package/helpers/global.helper.cjs +109 -0
  30. package/helpers/{global.helper.mjs.map → global.helper.cjs.map} +1 -1
  31. package/helpers/global.helper.js +1 -9
  32. package/helpers/movie.helper.cjs +324 -0
  33. package/helpers/movie.helper.cjs.map +1 -0
  34. package/helpers/movie.helper.js +12 -35
  35. package/helpers/movie.helper.js.map +1 -1
  36. package/helpers/search-creator.helper.cjs +18 -0
  37. package/helpers/search-creator.helper.cjs.map +1 -0
  38. package/helpers/search-creator.helper.js +3 -5
  39. package/helpers/search-creator.helper.js.map +1 -1
  40. package/helpers/search-user.helper.cjs +26 -0
  41. package/helpers/search-user.helper.cjs.map +1 -0
  42. package/helpers/search-user.helper.js +5 -8
  43. package/helpers/search-user.helper.js.map +1 -1
  44. package/helpers/search.helper.cjs +52 -0
  45. package/helpers/search.helper.cjs.map +1 -0
  46. package/helpers/search.helper.js +6 -13
  47. package/helpers/search.helper.js.map +1 -1
  48. package/helpers/user-ratings.helper.cjs +41 -0
  49. package/helpers/user-ratings.helper.cjs.map +1 -0
  50. package/helpers/user-ratings.helper.js +6 -13
  51. package/helpers/user-ratings.helper.js.map +1 -1
  52. package/helpers/user-reviews.helper.cjs +56 -0
  53. package/helpers/user-reviews.helper.cjs.map +1 -0
  54. package/helpers/user-reviews.helper.js +6 -15
  55. package/helpers/user-reviews.helper.js.map +1 -1
  56. package/index.cjs +64 -0
  57. package/index.cjs.map +1 -0
  58. package/{index.d.mts → index.d.cts} +15 -15
  59. package/index.js +13 -14
  60. package/index.js.map +1 -1
  61. package/{package.mjs → package.js} +1 -1
  62. package/package.json +13 -7
  63. package/services/cinema.service.cjs +31 -0
  64. package/services/cinema.service.cjs.map +1 -0
  65. package/services/{cinema.service.d.mts → cinema.service.d.cts} +3 -3
  66. package/services/cinema.service.js +11 -11
  67. package/services/cinema.service.js.map +1 -1
  68. package/services/creator.service.cjs +32 -0
  69. package/services/creator.service.cjs.map +1 -0
  70. package/services/{creator.service.d.mts → creator.service.d.cts} +3 -3
  71. package/services/creator.service.js +11 -11
  72. package/services/creator.service.js.map +1 -1
  73. package/services/movie.service.cjs +61 -0
  74. package/services/movie.service.cjs.map +1 -0
  75. package/services/{movie.service.d.mts → movie.service.d.cts} +3 -3
  76. package/services/movie.service.js +33 -33
  77. package/services/movie.service.js.map +1 -1
  78. package/services/search.service.cjs +75 -0
  79. package/services/search.service.cjs.map +1 -0
  80. package/services/{search.service.d.mts → search.service.d.cts} +3 -3
  81. package/services/search.service.js +29 -29
  82. package/services/search.service.js.map +1 -1
  83. package/services/user-ratings.service.cjs +65 -0
  84. package/services/user-ratings.service.cjs.map +1 -0
  85. package/services/{user-ratings.service.d.mts → user-ratings.service.d.cts} +3 -3
  86. package/services/user-ratings.service.js +18 -18
  87. package/services/user-ratings.service.js.map +1 -1
  88. package/services/user-reviews.service.cjs +67 -0
  89. package/services/user-reviews.service.cjs.map +1 -0
  90. package/services/{user-reviews.service.d.mts → user-reviews.service.d.cts} +3 -3
  91. package/services/user-reviews.service.js +20 -20
  92. package/services/user-reviews.service.js.map +1 -1
  93. package/src/fetchers/fetch.polyfill.js +6 -0
  94. package/src/fetchers/index.js +76 -0
  95. package/{helpers/cinema.helper.mjs → src/helpers/cinema.helper.js} +5 -4
  96. package/{helpers/creator.helper.mjs → src/helpers/creator.helper.js} +5 -4
  97. package/{helpers/global.helper.mjs → src/helpers/global.helper.js} +3 -3
  98. package/{helpers/movie.helper.mjs → src/helpers/movie.helper.js} +5 -4
  99. package/{helpers/search-creator.helper.mjs → src/helpers/search-creator.helper.js} +5 -4
  100. package/{helpers/search-user.helper.mjs → src/helpers/search-user.helper.js} +5 -4
  101. package/{helpers/search.helper.mjs → src/helpers/search.helper.js} +5 -4
  102. package/{helpers/user-ratings.helper.mjs → src/helpers/user-ratings.helper.js} +5 -4
  103. package/{helpers/user-reviews.helper.mjs → src/helpers/user-reviews.helper.js} +5 -4
  104. package/{index.mjs → src/index.js} +14 -10
  105. package/{services/cinema.service.mjs → src/services/cinema.service.js} +7 -6
  106. package/{services/creator.service.mjs → src/services/creator.service.js} +7 -6
  107. package/{services/movie.service.mjs → src/services/movie.service.js} +7 -6
  108. package/{services/search.service.mjs → src/services/search.service.js} +10 -9
  109. package/{services/user-ratings.service.mjs → src/services/user-ratings.service.js} +8 -7
  110. package/{services/user-reviews.service.mjs → src/services/user-reviews.service.js} +8 -7
  111. package/{vars.mjs → src/vars.js} +3 -3
  112. package/vars.cjs +28 -0
  113. package/{vars.mjs.map → vars.cjs.map} +1 -1
  114. package/vars.js +1 -7
  115. package/fetchers/fetch.polyfill.mjs.map +0 -1
  116. package/fetchers/index.mjs +0 -31
  117. package/fetchers/index.mjs.map +0 -1
  118. package/helpers/cinema.helper.mjs.map +0 -1
  119. package/helpers/creator.helper.mjs.map +0 -1
  120. package/helpers/movie.helper.mjs.map +0 -1
  121. package/helpers/search-creator.helper.mjs.map +0 -1
  122. package/helpers/search-user.helper.mjs.map +0 -1
  123. package/helpers/search.helper.mjs.map +0 -1
  124. package/helpers/user-ratings.helper.mjs.map +0 -1
  125. package/helpers/user-reviews.helper.mjs.map +0 -1
  126. package/index.mjs.map +0 -1
  127. package/services/cinema.service.mjs.map +0 -1
  128. package/services/creator.service.mjs.map +0 -1
  129. package/services/movie.service.mjs.map +0 -1
  130. package/services/search.service.mjs.map +0 -1
  131. package/services/user-ratings.service.mjs.map +0 -1
  132. package/services/user-reviews.service.mjs.map +0 -1
@@ -0,0 +1,61 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_movie_helper = require("../helpers/movie.helper.cjs");
4
+ let node_html_parser = require("node-html-parser");
5
+ //#region src/services/movie.service.ts
6
+ var MovieScraper = class {
7
+ async movie(movieId, options) {
8
+ const id = Number(movieId);
9
+ if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
10
+ const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
11
+ const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
12
+ const asideNode = movieHtml.querySelector(".aside-movie-profile");
13
+ const movieNode = movieHtml.querySelector(".main-movie-profile");
14
+ const jsonLdString = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
15
+ let jsonLd = null;
16
+ try {
17
+ jsonLd = JSON.parse(jsonLdString);
18
+ } catch (e) {
19
+ console.error("node-csfd-api: Error parsing JSON-LD", e);
20
+ }
21
+ return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
22
+ }
23
+ buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
24
+ const type = require_movie_helper.getMovieType(el);
25
+ const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
26
+ const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
27
+ return {
28
+ id: movieId,
29
+ title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
30
+ year: require_movie_helper.getMovieYear(jsonLd),
31
+ duration: require_movie_helper.getMovieDuration(jsonLd, el),
32
+ descriptions: require_movie_helper.getMovieDescriptions(el),
33
+ genres: require_movie_helper.getMovieGenres(el),
34
+ type,
35
+ url: require_vars.movieUrl(movieId, { language: options?.language }),
36
+ origins: require_movie_helper.getMovieOrigins(el),
37
+ colorRating: require_movie_helper.getMovieColorRating(pageClasses),
38
+ rating: require_movie_helper.getMovieRating(asideEl),
39
+ ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
40
+ titlesOther: require_movie_helper.getMovieTitlesOther(el),
41
+ poster: require_movie_helper.getMoviePoster(el),
42
+ photo: require_movie_helper.getMovieRandomPhoto(el),
43
+ trivia: require_movie_helper.getMovieTrivia(el),
44
+ creators: require_movie_helper.getMovieCreators(el, options),
45
+ vod: require_movie_helper.getMovieVods(asideEl),
46
+ tags: require_movie_helper.getMovieTags(asideEl),
47
+ premieres: require_movie_helper.getMoviePremieres(asideEl),
48
+ related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
49
+ similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
50
+ seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
51
+ episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
52
+ parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
53
+ episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
54
+ seasonName
55
+ };
56
+ }
57
+ };
58
+ //#endregion
59
+ exports.MovieScraper = MovieScraper;
60
+
61
+ //# sourceMappingURL=movie.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movie.service.cjs","names":["fetchPage","movieUrl","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 {\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 { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (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\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\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(el);\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(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,aAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,qBAAAA,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,GAAG;GAI5E,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,UAAUC,qBAAAA,iBAAiB,QAAQ,GAAG;GACtC,cAAcC,qBAAAA,qBAAqB,GAAG;GACtC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B;GACA,KAAKR,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qBAAAA,gBAAgB,GAAG;GAC5B,aAAaC,qBAAAA,oBAAoB,YAAY;GAC7C,QAAQC,qBAAAA,eAAe,QAAQ;GAC/B,aAAaC,qBAAAA,oBAAoB,QAAQ;GACzC,aAAaC,qBAAAA,oBAAoB,GAAG;GACpC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,OAAOC,qBAAAA,oBAAoB,GAAG;GAC9B,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,UAAUC,qBAAAA,iBAAiB,IAAI,QAAQ;GACvC,KAAKC,qBAAAA,aAAa,QAAQ;GAC1B,MAAMC,qBAAAA,aAAa,QAAQ;GAC3B,WAAWC,qBAAAA,kBAAkB,QAAQ;GACrC,SAASC,qBAAAA,kBAAkB,SAAS,cAAc;GAClD,SAASA,qBAAAA,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,GAAG,GAAG;GACvD;GACD"}
@@ -1,5 +1,5 @@
1
- import { CSFDMovie } from "../dto/movie.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDMovie } from "../dto/movie.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/movie.service.d.ts
5
5
  declare class MovieScraper {
@@ -8,4 +8,4 @@ declare class MovieScraper {
8
8
  }
9
9
  //#endregion
10
10
  export { MovieScraper };
11
- //# sourceMappingURL=movie.service.d.mts.map
11
+ //# sourceMappingURL=movie.service.d.cts.map
@@ -1,13 +1,13 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_movie_helper = require("../helpers/movie.helper.js");
4
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { movieUrl } from "../vars.js";
3
+ import { detectSeasonOrEpisodeListType, getEpisodeCode, getMovieBoxMovies, getMovieColorRating, getMovieCreators, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear, getSeasonOrEpisodeParent, getSeasonsOrEpisodes, getSeriesAndSeasonTitle } from "../helpers/movie.helper.js";
4
+ import { parse } from "node-html-parser";
5
5
  //#region src/services/movie.service.ts
6
6
  var MovieScraper = class {
7
7
  async movie(movieId, options) {
8
8
  const id = Number(movieId);
9
9
  if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
10
- const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
10
+ const movieHtml = parse(await fetchPage(movieUrl(id, { language: options?.language }), { ...options?.request }));
11
11
  const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
12
12
  const asideNode = movieHtml.querySelector(".aside-movie-profile");
13
13
  const movieNode = movieHtml.querySelector(".main-movie-profile");
@@ -21,41 +21,41 @@ var MovieScraper = class {
21
21
  return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
22
22
  }
23
23
  buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
24
- const type = require_movie_helper.getMovieType(el);
25
- const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
26
- const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
24
+ const type = getMovieType(el);
25
+ const { seriesName = null, seasonName = null } = type === "season" ? getSeriesAndSeasonTitle(el) : {};
26
+ const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);
27
27
  return {
28
28
  id: movieId,
29
- title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
30
- year: require_movie_helper.getMovieYear(jsonLd),
31
- duration: require_movie_helper.getMovieDuration(jsonLd, el),
32
- descriptions: require_movie_helper.getMovieDescriptions(el),
33
- genres: require_movie_helper.getMovieGenres(el),
29
+ title: type === "season" && seriesName ? seriesName : getMovieTitle(el),
30
+ year: getMovieYear(jsonLd),
31
+ duration: getMovieDuration(jsonLd, el),
32
+ descriptions: getMovieDescriptions(el),
33
+ genres: getMovieGenres(el),
34
34
  type,
35
- url: require_vars.movieUrl(movieId, { language: options?.language }),
36
- origins: require_movie_helper.getMovieOrigins(el),
37
- colorRating: require_movie_helper.getMovieColorRating(pageClasses),
38
- rating: require_movie_helper.getMovieRating(asideEl),
39
- ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
40
- titlesOther: require_movie_helper.getMovieTitlesOther(el),
41
- poster: require_movie_helper.getMoviePoster(el),
42
- photo: require_movie_helper.getMovieRandomPhoto(el),
43
- trivia: require_movie_helper.getMovieTrivia(el),
44
- creators: require_movie_helper.getMovieCreators(el, options),
45
- vod: require_movie_helper.getMovieVods(asideEl),
46
- tags: require_movie_helper.getMovieTags(asideEl),
47
- premieres: require_movie_helper.getMoviePremieres(asideEl),
48
- related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
49
- similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
50
- seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
51
- episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
52
- parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
53
- episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
35
+ url: movieUrl(movieId, { language: options?.language }),
36
+ origins: getMovieOrigins(el),
37
+ colorRating: getMovieColorRating(pageClasses),
38
+ rating: getMovieRating(asideEl),
39
+ ratingCount: getMovieRatingCount(asideEl),
40
+ titlesOther: getMovieTitlesOther(el),
41
+ poster: getMoviePoster(el),
42
+ photo: getMovieRandomPhoto(el),
43
+ trivia: getMovieTrivia(el),
44
+ creators: getMovieCreators(el, options),
45
+ vod: getMovieVods(asideEl),
46
+ tags: getMovieTags(asideEl),
47
+ premieres: getMoviePremieres(asideEl),
48
+ related: getMovieBoxMovies(asideEl, "Související"),
49
+ similar: getMovieBoxMovies(asideEl, "Podobné"),
50
+ seasons: seasonOrEpisodeListType === "seasons" ? getSeasonsOrEpisodes(el) : null,
51
+ episodes: seasonOrEpisodeListType === "episodes" ? getSeasonsOrEpisodes(el) : null,
52
+ parent: type === "season" || type === "episode" ? getSeasonOrEpisodeParent(el) : null,
53
+ episodeCode: type === "episode" ? getEpisodeCode(el) : null,
54
54
  seasonName
55
55
  };
56
56
  }
57
57
  };
58
58
  //#endregion
59
- exports.MovieScraper = MovieScraper;
59
+ export { MovieScraper };
60
60
 
61
61
  //# sourceMappingURL=movie.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","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 {\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 { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (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\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\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(el);\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(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,aAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,qBAAAA,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,GAAG;GAI5E,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,UAAUC,qBAAAA,iBAAiB,QAAQ,GAAG;GACtC,cAAcC,qBAAAA,qBAAqB,GAAG;GACtC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B;GACA,KAAKR,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qBAAAA,gBAAgB,GAAG;GAC5B,aAAaC,qBAAAA,oBAAoB,YAAY;GAC7C,QAAQC,qBAAAA,eAAe,QAAQ;GAC/B,aAAaC,qBAAAA,oBAAoB,QAAQ;GACzC,aAAaC,qBAAAA,oBAAoB,GAAG;GACpC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,OAAOC,qBAAAA,oBAAoB,GAAG;GAC9B,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,UAAUC,qBAAAA,iBAAiB,IAAI,QAAQ;GACvC,KAAKC,qBAAAA,aAAa,QAAQ;GAC1B,MAAMC,qBAAAA,aAAa,QAAQ;GAC3B,WAAWC,qBAAAA,kBAAkB,QAAQ;GACrC,SAASC,qBAAAA,kBAAkB,SAAS,cAAc;GAClD,SAASA,qBAAAA,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,GAAG,GAAG;GACvD;GACD"}
1
+ {"version":3,"file":"movie.service.js","names":[],"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 {\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 { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (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\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\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(el);\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(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,YAAY,MAFD,MAAM,UADX,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAO,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAW,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0B,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAa,cAAc,GAAG;GAI5E,MAAM,aAAa,OAAO;GAC1B,UAAU,iBAAiB,QAAQ,GAAG;GACtC,cAAc,qBAAqB,GAAG;GACtC,QAAQ,eAAe,GAAG;GAC1B;GACA,KAAK,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAAS,gBAAgB,GAAG;GAC5B,aAAa,oBAAoB,YAAY;GAC7C,QAAQ,eAAe,QAAQ;GAC/B,aAAa,oBAAoB,QAAQ;GACzC,aAAa,oBAAoB,GAAG;GACpC,QAAQ,eAAe,GAAG;GAC1B,OAAO,oBAAoB,GAAG;GAC9B,QAAQ,eAAe,GAAG;GAC1B,UAAU,iBAAiB,IAAI,QAAQ;GACvC,KAAK,aAAa,QAAQ;GAC1B,MAAM,aAAa,QAAQ;GAC3B,WAAW,kBAAkB,QAAQ;GACrC,SAAS,kBAAkB,SAAS,cAAc;GAClD,SAAS,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAY,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAa,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAY,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAY,eAAe,GAAG,GAAG;GACvD;GACD"}
@@ -0,0 +1,75 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_global_helper = require("../helpers/global.helper.cjs");
4
+ const require_search_creator_helper = require("../helpers/search-creator.helper.cjs");
5
+ const require_search_user_helper = require("../helpers/search-user.helper.cjs");
6
+ const require_search_helper = require("../helpers/search.helper.cjs");
7
+ let node_html_parser = require("node-html-parser");
8
+ //#region src/services/search.service.ts
9
+ var SearchScraper = class {
10
+ async search(text, options) {
11
+ const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
12
+ const moviesNode = html.querySelectorAll(".main-movies article");
13
+ const usersNode = html.querySelectorAll(".main-users article");
14
+ const tvSeriesNode = html.querySelectorAll(".main-series article");
15
+ const creatorsNode = html.querySelectorAll(".main-authors article");
16
+ return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
17
+ }
18
+ parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
19
+ const baseUrl = require_vars.getUrlByLanguage(language);
20
+ const movies = [];
21
+ const users = [];
22
+ const tvSeries = [];
23
+ const creators = [];
24
+ const movieMapper = (m) => {
25
+ const url = require_search_helper.getSearchUrl(m);
26
+ return {
27
+ id: require_global_helper.parseIdFromUrl(url),
28
+ title: require_search_helper.getSearchTitle(m),
29
+ year: require_search_helper.getSearchYear(m),
30
+ url: `${baseUrl}${url}`,
31
+ type: require_search_helper.getSearchType(m),
32
+ colorRating: require_search_helper.getSearchColorRating(m),
33
+ poster: require_search_helper.getSearchPoster(m),
34
+ origins: require_search_helper.getSearchOrigins(m),
35
+ creators: {
36
+ directors: require_search_helper.parseSearchPeople(m, "directors"),
37
+ actors: require_search_helper.parseSearchPeople(m, "actors")
38
+ }
39
+ };
40
+ };
41
+ const userMapper = (m) => {
42
+ const url = require_search_user_helper.getUserUrl(m);
43
+ return {
44
+ id: require_global_helper.parseIdFromUrl(url),
45
+ user: require_search_user_helper.getUser(m),
46
+ userRealName: require_search_user_helper.getUserRealName(m),
47
+ avatar: require_search_user_helper.getAvatar(m),
48
+ url: `${baseUrl}${url}`
49
+ };
50
+ };
51
+ const creatorMapper = (m) => {
52
+ const url = require_search_creator_helper.getCreatorUrl(m);
53
+ return {
54
+ id: require_global_helper.parseIdFromUrl(url),
55
+ name: require_search_creator_helper.getCreatorName(m),
56
+ image: require_search_creator_helper.getCreatorImage(m),
57
+ url: `${baseUrl}${url}`
58
+ };
59
+ };
60
+ movies.push(...moviesNode.map(movieMapper));
61
+ users.push(...usersNode.map(userMapper));
62
+ tvSeries.push(...tvSeriesNode.map(movieMapper));
63
+ creators.push(...creatorsNode.map(creatorMapper));
64
+ return {
65
+ movies,
66
+ users,
67
+ tvSeries,
68
+ creators
69
+ };
70
+ }
71
+ };
72
+ //#endregion
73
+ exports.SearchScraper = SearchScraper;
74
+
75
+ //# sourceMappingURL=search.service.cjs.map
@@ -0,0 +1 @@
1
+ {"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,OAFW,MAAMA,cAAAA,UADXC,aAAAA,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,EAAE;AAC3B,UAAO;IACL,IAAIC,sBAAAA,eAAe,IAAI;IACvB,OAAOC,sBAAAA,eAAe,EAAE;IACxB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,aAAaC,sBAAAA,qBAAqB,EAAE;IACpC,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,SAASC,sBAAAA,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,YAAY;KAC5C,QAAQA,sBAAAA,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,EAAE;AACzB,UAAO;IACL,IAAIR,sBAAAA,eAAe,IAAI;IACvB,MAAMS,2BAAAA,QAAQ,EAAE;IAChB,cAAcC,2BAAAA,gBAAgB,EAAE;IAChC,QAAQC,2BAAAA,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,EAAE;AAC5B,UAAO;IACL,IAAIZ,sBAAAA,eAAe,IAAI;IACvB,MAAMa,8BAAAA,eAAe,EAAE;IACvB,OAAOC,8BAAAA,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
@@ -1,5 +1,5 @@
1
- import { CSFDSearch } from "../dto/search.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDSearch } from "../dto/search.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/search.service.d.ts
5
5
  declare class SearchScraper {
@@ -8,4 +8,4 @@ declare class SearchScraper {
8
8
  }
9
9
  //#endregion
10
10
  export { SearchScraper };
11
- //# sourceMappingURL=search.service.d.mts.map
11
+ //# sourceMappingURL=search.service.d.cts.map
@@ -1,14 +1,14 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_global_helper = require("../helpers/global.helper.js");
4
- const require_search_creator_helper = require("../helpers/search-creator.helper.js");
5
- const require_search_user_helper = require("../helpers/search-user.helper.js");
6
- const require_search_helper = require("../helpers/search.helper.js");
7
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { getUrlByLanguage, searchUrl } from "../vars.js";
3
+ import { parseIdFromUrl } from "../helpers/global.helper.js";
4
+ import { getCreatorImage, getCreatorName, getCreatorUrl } from "../helpers/search-creator.helper.js";
5
+ import { getAvatar, getUser, getUserRealName, getUserUrl } from "../helpers/search-user.helper.js";
6
+ import { getSearchColorRating, getSearchOrigins, getSearchPoster, getSearchTitle, getSearchType, getSearchUrl, getSearchYear, parseSearchPeople } from "../helpers/search.helper.js";
7
+ import { parse } from "node-html-parser";
8
8
  //#region src/services/search.service.ts
9
9
  var SearchScraper = class {
10
10
  async search(text, options) {
11
- const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
11
+ const html = parse(await fetchPage(searchUrl(text, { language: options?.language }), { ...options?.request }));
12
12
  const moviesNode = html.querySelectorAll(".main-movies article");
13
13
  const usersNode = html.querySelectorAll(".main-users article");
14
14
  const tvSeriesNode = html.querySelectorAll(".main-series article");
@@ -16,44 +16,44 @@ var SearchScraper = class {
16
16
  return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
17
17
  }
18
18
  parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
19
- const baseUrl = require_vars.getUrlByLanguage(language);
19
+ const baseUrl = getUrlByLanguage(language);
20
20
  const movies = [];
21
21
  const users = [];
22
22
  const tvSeries = [];
23
23
  const creators = [];
24
24
  const movieMapper = (m) => {
25
- const url = require_search_helper.getSearchUrl(m);
25
+ const url = getSearchUrl(m);
26
26
  return {
27
- id: require_global_helper.parseIdFromUrl(url),
28
- title: require_search_helper.getSearchTitle(m),
29
- year: require_search_helper.getSearchYear(m),
27
+ id: parseIdFromUrl(url),
28
+ title: getSearchTitle(m),
29
+ year: getSearchYear(m),
30
30
  url: `${baseUrl}${url}`,
31
- type: require_search_helper.getSearchType(m),
32
- colorRating: require_search_helper.getSearchColorRating(m),
33
- poster: require_search_helper.getSearchPoster(m),
34
- origins: require_search_helper.getSearchOrigins(m),
31
+ type: getSearchType(m),
32
+ colorRating: getSearchColorRating(m),
33
+ poster: getSearchPoster(m),
34
+ origins: getSearchOrigins(m),
35
35
  creators: {
36
- directors: require_search_helper.parseSearchPeople(m, "directors"),
37
- actors: require_search_helper.parseSearchPeople(m, "actors")
36
+ directors: parseSearchPeople(m, "directors"),
37
+ actors: parseSearchPeople(m, "actors")
38
38
  }
39
39
  };
40
40
  };
41
41
  const userMapper = (m) => {
42
- const url = require_search_user_helper.getUserUrl(m);
42
+ const url = getUserUrl(m);
43
43
  return {
44
- id: require_global_helper.parseIdFromUrl(url),
45
- user: require_search_user_helper.getUser(m),
46
- userRealName: require_search_user_helper.getUserRealName(m),
47
- avatar: require_search_user_helper.getAvatar(m),
44
+ id: parseIdFromUrl(url),
45
+ user: getUser(m),
46
+ userRealName: getUserRealName(m),
47
+ avatar: getAvatar(m),
48
48
  url: `${baseUrl}${url}`
49
49
  };
50
50
  };
51
51
  const creatorMapper = (m) => {
52
- const url = require_search_creator_helper.getCreatorUrl(m);
52
+ const url = getCreatorUrl(m);
53
53
  return {
54
- id: require_global_helper.parseIdFromUrl(url),
55
- name: require_search_creator_helper.getCreatorName(m),
56
- image: require_search_creator_helper.getCreatorImage(m),
54
+ id: parseIdFromUrl(url),
55
+ name: getCreatorName(m),
56
+ image: getCreatorImage(m),
57
57
  url: `${baseUrl}${url}`
58
58
  };
59
59
  };
@@ -70,6 +70,6 @@ var SearchScraper = class {
70
70
  }
71
71
  };
72
72
  //#endregion
73
- exports.SearchScraper = SearchScraper;
73
+ export { SearchScraper };
74
74
 
75
75
  //# sourceMappingURL=search.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.service.js","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,OAFW,MAAMA,cAAAA,UADXC,aAAAA,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,EAAE;AAC3B,UAAO;IACL,IAAIC,sBAAAA,eAAe,IAAI;IACvB,OAAOC,sBAAAA,eAAe,EAAE;IACxB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,aAAaC,sBAAAA,qBAAqB,EAAE;IACpC,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,SAASC,sBAAAA,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,YAAY;KAC5C,QAAQA,sBAAAA,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,EAAE;AACzB,UAAO;IACL,IAAIR,sBAAAA,eAAe,IAAI;IACvB,MAAMS,2BAAAA,QAAQ,EAAE;IAChB,cAAcC,2BAAAA,gBAAgB,EAAE;IAChC,QAAQC,2BAAAA,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,EAAE;AAC5B,UAAO;IACL,IAAIZ,sBAAAA,eAAe,IAAI;IACvB,MAAMa,8BAAAA,eAAe,EAAE;IACvB,OAAOC,8BAAAA,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
1
+ {"version":3,"file":"search.service.js","names":[],"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,OAAO,MAFI,MAAM,UADX,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAU,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAM,aAAa,EAAE;AAC3B,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,OAAO,eAAe,EAAE;IACxB,MAAM,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAM,cAAc,EAAE;IACtB,aAAa,qBAAqB,EAAE;IACpC,QAAQ,gBAAgB,EAAE;IAC1B,SAAS,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAW,kBAAkB,GAAG,YAAY;KAC5C,QAAQ,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAM,WAAW,EAAE;AACzB,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,QAAQ,EAAE;IAChB,cAAc,gBAAgB,EAAE;IAChC,QAAQ,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAM,cAAc,EAAE;AAC5B,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,eAAe,EAAE;IACvB,OAAO,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
@@ -0,0 +1,65 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_global_helper = require("../helpers/global.helper.cjs");
4
+ const require_user_ratings_helper = require("../helpers/user-ratings.helper.cjs");
5
+ let node_html_parser = require("node-html-parser");
6
+ //#region src/services/user-ratings.service.ts
7
+ var UserRatingsScraper = class {
8
+ async userRatings(user, config, options) {
9
+ let allMovies = [];
10
+ const pageToFetch = config?.page || 1;
11
+ const url = require_vars.userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
12
+ const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
13
+ const movies = items.querySelectorAll("#snippet--ratings table tr");
14
+ const pagesNode = items.querySelector(".pagination");
15
+ const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
16
+ allMovies = this.getPage(config, movies);
17
+ if (config?.allPages) {
18
+ console.log("User", user, url);
19
+ console.log("Fetching all pages", pages);
20
+ for (let i = 2; i <= pages; i++) {
21
+ console.log("Fetching page", i, "out of", pages, "...");
22
+ const movies = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--ratings table tr");
23
+ allMovies = [...allMovies, ...this.getPage(config, movies)];
24
+ if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
25
+ }
26
+ return allMovies;
27
+ }
28
+ return allMovies;
29
+ }
30
+ getPage(config, movies) {
31
+ const films = [];
32
+ if (config) {
33
+ if (config.includesOnly?.length && config.excludes?.length) console.warn(`node-csfd-api:
34
+ You can not use both parameters 'includesOnly' and 'excludes'.
35
+ Parameter 'includesOnly' will be used now:`, config.includesOnly);
36
+ }
37
+ const includesSet = config?.includesOnly?.length ? new Set(config.includesOnly) : null;
38
+ const excludesSet = config?.excludes?.length ? new Set(config.excludes) : null;
39
+ for (const el of movies) {
40
+ const type = require_user_ratings_helper.getUserRatingType(el);
41
+ if (includesSet) {
42
+ if (includesSet.has(type)) films.push(this.buildUserRatings(el, type));
43
+ } else if (excludesSet) {
44
+ if (!excludesSet.has(type)) films.push(this.buildUserRatings(el, type));
45
+ } else films.push(this.buildUserRatings(el, type));
46
+ }
47
+ return films;
48
+ }
49
+ buildUserRatings(el, type) {
50
+ return {
51
+ id: require_user_ratings_helper.getUserRatingId(el),
52
+ title: require_user_ratings_helper.getUserRatingTitle(el),
53
+ year: require_user_ratings_helper.getUserRatingYear(el),
54
+ type,
55
+ url: require_user_ratings_helper.getUserRatingUrl(el),
56
+ colorRating: require_user_ratings_helper.getUserRatingColorRating(el),
57
+ userDate: require_user_ratings_helper.getUserRatingDate(el),
58
+ userRating: require_user_ratings_helper.getUserRating(el)
59
+ };
60
+ }
61
+ };
62
+ //#endregion
63
+ exports.UserRatingsScraper = UserRatingsScraper;
64
+
65
+ //# sourceMappingURL=user-ratings.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-ratings.service.cjs","names":["userRatingsUrl","fetchPage","sleep","getUserRatingType","getUserRatingId","getUserRatingTitle","getUserRatingYear","getUserRatingUrl","getUserRatingColorRating","getUserRatingDate","getUserRating"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear\n} from '../helpers/user-ratings.helper';\nimport { CSFDOptions } from '../types';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const pageToFetch = config?.page || 1;\n const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, {\n language: options?.language\n });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const movies = items.querySelectorAll('#snippet--ratings table tr');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allMovies = this.getPage(config, movies);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userRatingsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const movies = items.querySelectorAll('#snippet--ratings table tr');\n allMovies = [...allMovies, ...this.getPage(config, movies)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allMovies;\n }\n\n return allMovies;\n }\n\n private getPage(config: CSFDUserRatingConfig, movies: HTMLElement[]) {\n const films: CSFDUserRatings[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n const includesSet = config?.includesOnly?.length ? new Set(config.includesOnly) : null;\n const excludesSet = config?.excludes?.length ? new Set(config.excludes) : null;\n\n for (const el of movies) {\n const type = getUserRatingType(el);\n\n // Filtering includesOnly\n if (includesSet) {\n if (includesSet.has(type)) {\n films.push(this.buildUserRatings(el, type));\n }\n // Filter excludes\n } else if (excludesSet) {\n if (!excludesSet.has(type)) {\n films.push(this.buildUserRatings(el, type));\n }\n } else {\n // Without filtering\n films.push(this.buildUserRatings(el, type));\n }\n }\n return films;\n }\n\n private buildUserRatings(el: HTMLElement, type: CSFDFilmTypes): CSFDUserRatings {\n return {\n id: getUserRatingId(el),\n title: getUserRatingTitle(el),\n year: getUserRatingYear(el),\n type,\n url: getUserRatingUrl(el),\n colorRating: getUserRatingColorRating(el) as CSFDColorRating,\n userDate: getUserRatingDate(el),\n userRating: getUserRating(el) as CSFDStars\n };\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAI,YAA+B,EAAE;EACrC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAMA,aAAAA,eAAe,MAAM,cAAc,IAAI,cAAc,KAAA,GAAW,EAC1E,UAAU,SAAS,UACpB,CAAC;EAEF,MAAM,SAAA,GAAA,iBAAA,OADW,MAAMC,cAAAA,UAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,SAAS,MAAM,iBAAiB,6BAA6B;EAGnE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,cAAY,KAAK,QAAQ,QAAQ,OAAO;AAExC,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAM,UAAA,GAAA,iBAAA,OAHW,MAAMA,cAAAA,UADXD,aAAAA,eAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACR,iBAAiB,6BAA6B;AACnE,gBAAY,CAAC,GAAG,WAAW,GAAG,KAAK,QAAQ,QAAQ,OAAO,CAAC;AAG3D,QAAI,OAAO,cACT,OAAME,sBAAAA,MAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,QAAgB,QAA8B,QAAuB;EACnE,MAAM,QAA2B,EAAE;AACnC,MAAI;OACE,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;EAIL,MAAM,cAAc,QAAQ,cAAc,SAAS,IAAI,IAAI,OAAO,aAAa,GAAG;EAClF,MAAM,cAAc,QAAQ,UAAU,SAAS,IAAI,IAAI,OAAO,SAAS,GAAG;AAE1E,OAAK,MAAM,MAAM,QAAQ;GACvB,MAAM,OAAOC,4BAAAA,kBAAkB,GAAG;AAGlC,OAAI;QACE,YAAY,IAAI,KAAK,CACvB,OAAM,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC;cAGpC;QACL,CAAC,YAAY,IAAI,KAAK,CACxB,OAAM,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC;SAI7C,OAAM,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC;;AAG/C,SAAO;;CAGT,iBAAyB,IAAiB,MAAsC;AAC9E,SAAO;GACL,IAAIC,4BAAAA,gBAAgB,GAAG;GACvB,OAAOC,4BAAAA,mBAAmB,GAAG;GAC7B,MAAMC,4BAAAA,kBAAkB,GAAG;GAC3B;GACA,KAAKC,4BAAAA,iBAAiB,GAAG;GACzB,aAAaC,4BAAAA,yBAAyB,GAAG;GACzC,UAAUC,4BAAAA,kBAAkB,GAAG;GAC/B,YAAYC,4BAAAA,cAAc,GAAG;GAC9B"}
@@ -1,5 +1,5 @@
1
- import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/user-ratings.service.d.ts
5
5
  declare class UserRatingsScraper {
@@ -9,4 +9,4 @@ declare class UserRatingsScraper {
9
9
  }
10
10
  //#endregion
11
11
  export { UserRatingsScraper };
12
- //# sourceMappingURL=user-ratings.service.d.mts.map
12
+ //# sourceMappingURL=user-ratings.service.d.cts.map
@@ -1,15 +1,15 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_global_helper = require("../helpers/global.helper.js");
4
- const require_user_ratings_helper = require("../helpers/user-ratings.helper.js");
5
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { userRatingsUrl } from "../vars.js";
3
+ import { sleep } from "../helpers/global.helper.js";
4
+ import { getUserRating, getUserRatingColorRating, getUserRatingDate, getUserRatingId, getUserRatingTitle, getUserRatingType, getUserRatingUrl, getUserRatingYear } from "../helpers/user-ratings.helper.js";
5
+ import { parse } from "node-html-parser";
6
6
  //#region src/services/user-ratings.service.ts
7
7
  var UserRatingsScraper = class {
8
8
  async userRatings(user, config, options) {
9
9
  let allMovies = [];
10
10
  const pageToFetch = config?.page || 1;
11
- const url = require_vars.userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
12
- const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
11
+ const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
12
+ const items = parse(await fetchPage(url, { ...options?.request }));
13
13
  const movies = items.querySelectorAll("#snippet--ratings table tr");
14
14
  const pagesNode = items.querySelector(".pagination");
15
15
  const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
@@ -19,9 +19,9 @@ var UserRatingsScraper = class {
19
19
  console.log("Fetching all pages", pages);
20
20
  for (let i = 2; i <= pages; i++) {
21
21
  console.log("Fetching page", i, "out of", pages, "...");
22
- const movies = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--ratings table tr");
22
+ const movies = parse(await fetchPage(userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--ratings table tr");
23
23
  allMovies = [...allMovies, ...this.getPage(config, movies)];
24
- if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
24
+ if (config.allPagesDelay) await sleep(config.allPagesDelay);
25
25
  }
26
26
  return allMovies;
27
27
  }
@@ -37,7 +37,7 @@ var UserRatingsScraper = class {
37
37
  const includesSet = config?.includesOnly?.length ? new Set(config.includesOnly) : null;
38
38
  const excludesSet = config?.excludes?.length ? new Set(config.excludes) : null;
39
39
  for (const el of movies) {
40
- const type = require_user_ratings_helper.getUserRatingType(el);
40
+ const type = getUserRatingType(el);
41
41
  if (includesSet) {
42
42
  if (includesSet.has(type)) films.push(this.buildUserRatings(el, type));
43
43
  } else if (excludesSet) {
@@ -48,18 +48,18 @@ var UserRatingsScraper = class {
48
48
  }
49
49
  buildUserRatings(el, type) {
50
50
  return {
51
- id: require_user_ratings_helper.getUserRatingId(el),
52
- title: require_user_ratings_helper.getUserRatingTitle(el),
53
- year: require_user_ratings_helper.getUserRatingYear(el),
51
+ id: getUserRatingId(el),
52
+ title: getUserRatingTitle(el),
53
+ year: getUserRatingYear(el),
54
54
  type,
55
- url: require_user_ratings_helper.getUserRatingUrl(el),
56
- colorRating: require_user_ratings_helper.getUserRatingColorRating(el),
57
- userDate: require_user_ratings_helper.getUserRatingDate(el),
58
- userRating: require_user_ratings_helper.getUserRating(el)
55
+ url: getUserRatingUrl(el),
56
+ colorRating: getUserRatingColorRating(el),
57
+ userDate: getUserRatingDate(el),
58
+ userRating: getUserRating(el)
59
59
  };
60
60
  }
61
61
  };
62
62
  //#endregion
63
- exports.UserRatingsScraper = UserRatingsScraper;
63
+ export { UserRatingsScraper };
64
64
 
65
65
  //# sourceMappingURL=user-ratings.service.js.map