node-csfd-api 5.2.2 → 5.4.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 (99) hide show
  1. package/bin/export-ratings.mjs +1 -1
  2. package/bin/mcp-server.mjs +1 -1
  3. package/bin/server.mjs +1 -1
  4. package/fetchers/fetch.polyfill.js +1 -2
  5. package/fetchers/fetch.polyfill.js.map +1 -1
  6. package/fetchers/fetch.polyfill.mjs +1 -2
  7. package/fetchers/fetch.polyfill.mjs.map +1 -1
  8. package/fetchers/index.js +55 -12
  9. package/fetchers/index.js.map +1 -1
  10. package/fetchers/index.mjs +54 -11
  11. package/fetchers/index.mjs.map +1 -1
  12. package/helpers/cinema.helper.js +2 -3
  13. package/helpers/cinema.helper.js.map +1 -1
  14. package/helpers/cinema.helper.mjs +1 -2
  15. package/helpers/cinema.helper.mjs.map +1 -1
  16. package/helpers/creator.helper.js +2 -3
  17. package/helpers/creator.helper.js.map +1 -1
  18. package/helpers/creator.helper.mjs +1 -2
  19. package/helpers/creator.helper.mjs.map +1 -1
  20. package/helpers/global.helper.js +17 -18
  21. package/helpers/global.helper.js.map +1 -1
  22. package/helpers/global.helper.mjs +17 -17
  23. package/helpers/global.helper.mjs.map +1 -1
  24. package/helpers/movie.helper.js +5 -12
  25. package/helpers/movie.helper.js.map +1 -1
  26. package/helpers/movie.helper.mjs +4 -11
  27. package/helpers/movie.helper.mjs.map +1 -1
  28. package/helpers/search-creator.helper.js +2 -3
  29. package/helpers/search-creator.helper.js.map +1 -1
  30. package/helpers/search-creator.helper.mjs +1 -2
  31. package/helpers/search-creator.helper.mjs.map +1 -1
  32. package/helpers/search-user.helper.js +2 -3
  33. package/helpers/search-user.helper.js.map +1 -1
  34. package/helpers/search-user.helper.mjs +1 -2
  35. package/helpers/search-user.helper.mjs.map +1 -1
  36. package/helpers/search.helper.js +2 -3
  37. package/helpers/search.helper.js.map +1 -1
  38. package/helpers/search.helper.mjs +1 -2
  39. package/helpers/search.helper.mjs.map +1 -1
  40. package/helpers/user-ratings.helper.js +7 -7
  41. package/helpers/user-ratings.helper.js.map +1 -1
  42. package/helpers/user-ratings.helper.mjs +7 -7
  43. package/helpers/user-ratings.helper.mjs.map +1 -1
  44. package/helpers/user-reviews.helper.js +5 -6
  45. package/helpers/user-reviews.helper.js.map +1 -1
  46. package/helpers/user-reviews.helper.mjs +4 -5
  47. package/helpers/user-reviews.helper.mjs.map +1 -1
  48. package/index.js +9 -12
  49. package/index.js.map +1 -1
  50. package/index.mjs +2 -5
  51. package/index.mjs.map +1 -1
  52. package/package.json +1 -1
  53. package/package.mjs +1 -1
  54. package/services/cinema.service.js +4 -5
  55. package/services/cinema.service.js.map +1 -1
  56. package/services/cinema.service.mjs +1 -2
  57. package/services/cinema.service.mjs.map +1 -1
  58. package/services/creator.service.js +4 -5
  59. package/services/creator.service.js.map +1 -1
  60. package/services/creator.service.mjs +1 -2
  61. package/services/creator.service.mjs.map +1 -1
  62. package/services/movie.service.js +6 -11
  63. package/services/movie.service.js.map +1 -1
  64. package/services/movie.service.mjs +3 -8
  65. package/services/movie.service.mjs.map +1 -1
  66. package/services/search.service.js +7 -8
  67. package/services/search.service.js.map +1 -1
  68. package/services/search.service.mjs +1 -2
  69. package/services/search.service.mjs.map +1 -1
  70. package/services/user-ratings.service.js +5 -6
  71. package/services/user-ratings.service.js.map +1 -1
  72. package/services/user-ratings.service.mjs +1 -2
  73. package/services/user-ratings.service.mjs.map +1 -1
  74. package/services/user-reviews.service.js +5 -6
  75. package/services/user-reviews.service.js.map +1 -1
  76. package/services/user-reviews.service.mjs +1 -2
  77. package/services/user-reviews.service.mjs.map +1 -1
  78. package/src/fetchers/fetch.polyfill.mjs +8 -0
  79. package/src/fetchers/index.mjs +76 -0
  80. package/src/helpers/cinema.helper.mjs +80 -0
  81. package/src/helpers/creator.helper.mjs +69 -0
  82. package/src/helpers/global.helper.mjs +101 -0
  83. package/src/helpers/movie.helper.mjs +302 -0
  84. package/src/helpers/search-creator.helper.mjs +17 -0
  85. package/src/helpers/search-user.helper.mjs +24 -0
  86. package/src/helpers/search.helper.mjs +46 -0
  87. package/src/helpers/user-ratings.helper.mjs +35 -0
  88. package/src/helpers/user-reviews.helper.mjs +48 -0
  89. package/src/index.mjs +64 -0
  90. package/src/services/cinema.service.mjs +32 -0
  91. package/src/services/creator.service.mjs +33 -0
  92. package/src/services/movie.service.mjs +62 -0
  93. package/src/services/search.service.mjs +76 -0
  94. package/src/services/user-ratings.service.mjs +66 -0
  95. package/src/services/user-reviews.service.mjs +68 -0
  96. package/src/vars.mjs +22 -0
  97. package/vars.js +1 -2
  98. package/vars.js.map +1 -1
  99. package/vars.mjs +1 -1
@@ -1,5 +1,4 @@
1
- const require_global_helper = require('./global.helper.js');
2
-
1
+ const require_global_helper = require("./global.helper.js");
3
2
  //#region src/helpers/user-ratings.helper.ts
4
3
  const getUserRatingId = (el) => {
5
4
  const url = el.querySelector("td.name .film-title-name").attributes.href;
@@ -10,25 +9,25 @@ const getUserRating = (el) => {
10
9
  return ratingText.includes("stars-") ? +ratingText.split("-").pop() : 0;
11
10
  };
12
11
  const getUserRatingType = (el) => {
13
- const typeText = el.querySelectorAll("td.name .film-title-info .info");
14
- return require_global_helper.parseFilmType(typeText.length > 1 ? typeText[1].text : "film");
12
+ const typeNode = el.querySelector("td.name .film-title-info .info ~ .info");
13
+ return require_global_helper.parseFilmType(typeNode ? typeNode.text : "film");
15
14
  };
16
15
  const getUserRatingTitle = (el) => {
17
16
  return el.querySelector("td.name .film-title-name").text;
18
17
  };
19
18
  const getUserRatingYear = (el) => {
20
- return +el.querySelectorAll("td.name .film-title-info .info")[0]?.text || null;
19
+ const yearNode = el.querySelector("td.name .film-title-info .info");
20
+ return yearNode ? +yearNode.text || null : null;
21
21
  };
22
22
  const getUserRatingColorRating = (el) => {
23
23
  return require_global_helper.parseColor(el.querySelector("td.name .icon").classNames.split(" ").pop());
24
24
  };
25
25
  const getUserRatingDate = (el) => {
26
- return el.querySelector("td.date-only").text.trim();
26
+ return require_global_helper.parseDate(el.querySelector("td.date-only").text.trim());
27
27
  };
28
28
  const getUserRatingUrl = (el) => {
29
29
  return `https://www.csfd.cz${el.querySelector("td.name .film-title-name").attributes.href}`;
30
30
  };
31
-
32
31
  //#endregion
33
32
  exports.getUserRating = getUserRating;
34
33
  exports.getUserRatingColorRating = getUserRatingColorRating;
@@ -38,4 +37,5 @@ exports.getUserRatingTitle = getUserRatingTitle;
38
37
  exports.getUserRatingType = getUserRatingType;
39
38
  exports.getUserRatingUrl = getUserRatingUrl;
40
39
  exports.getUserRatingYear = getUserRatingYear;
40
+
41
41
  //# sourceMappingURL=user-ratings.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-ratings.helper.js","names":["parseIdFromUrl","parseFilmType","parseColor"],"sources":["../../src/helpers/user-ratings.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserRatingId = (el: HTMLElement): number => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('td.star-rating-only .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserRatingType = (el: HTMLElement): CSFDFilmTypes => {\n const typeText = el.querySelectorAll('td.name .film-title-info .info');\n\n return parseFilmType(typeText.length > 1 ? typeText[1].text : 'film');\n};\n\nexport const getUserRatingTitle = (el: HTMLElement): string => {\n return el.querySelector('td.name .film-title-name').text;\n};\n\nexport const getUserRatingYear = (el: HTMLElement): number => {\n return +el.querySelectorAll('td.name .film-title-info .info')[0]?.text || null;\n};\n\nexport const getUserRatingColorRating = (el: HTMLElement): CSFDColorRating => {\n const color = parseColor(\n el.querySelector('td.name .icon').classNames.split(' ').pop() as CSFDColors\n );\n return color;\n};\n\nexport const getUserRatingDate = (el: HTMLElement): string => {\n return el.querySelector('td.date-only').text.trim();\n};\n\nexport const getUserRatingUrl = (el: HTMLElement): string => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n"],"mappings":";;;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,2BAA2B,CAAC,WAAW;AACpE,QAAOA,qCAAe,IAAI;;AAG5B,MAAa,iBAAiB,OAA+B;CAC3D,MAAM,aAAa,GAAG,cAAc,6BAA6B,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAG7F,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,iBAAiB,iCAAiC;AAEtE,QAAOC,oCAAc,SAAS,SAAS,IAAI,SAAS,GAAG,OAAO,OAAO;;AAGvE,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,2BAA2B,CAAC;;AAGtD,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,CAAC,GAAG,iBAAiB,iCAAiC,CAAC,IAAI,QAAQ;;AAG5E,MAAa,4BAA4B,OAAqC;AAI5E,QAHcC,iCACZ,GAAG,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,CAC9D;;AAIH,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,eAAe,CAAC,KAAK,MAAM;;AAGrD,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,2BAA2B,CAAC,WAAW"}
1
+ {"version":3,"file":"user-ratings.helper.js","names":["parseIdFromUrl","parseFilmType","parseColor","parseDate"],"sources":["../../src/helpers/user-ratings.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserRatingId = (el: HTMLElement): number => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('td.star-rating-only .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserRatingType = (el: HTMLElement): CSFDFilmTypes => {\n const typeNode = el.querySelector('td.name .film-title-info .info ~ .info');\n return parseFilmType(typeNode ? typeNode.text : 'film');\n};\n\nexport const getUserRatingTitle = (el: HTMLElement): string => {\n return el.querySelector('td.name .film-title-name').text;\n};\n\nexport const getUserRatingYear = (el: HTMLElement): number | null => {\n const yearNode = el.querySelector('td.name .film-title-info .info');\n return yearNode ? +yearNode.text || null : null;\n};\n\nexport const getUserRatingColorRating = (el: HTMLElement): CSFDColorRating => {\n const color = parseColor(\n el.querySelector('td.name .icon').classNames.split(' ').pop() as CSFDColors\n );\n return color;\n};\n\nexport const getUserRatingDate = (el: HTMLElement): string => {\n const date = el.querySelector('td.date-only').text.trim();\n return parseDate(date);\n};\n\nexport const getUserRatingUrl = (el: HTMLElement): string => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n"],"mappings":";;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,2BAA2B,CAAC,WAAW;AACpE,QAAOA,sBAAAA,eAAe,IAAI;;AAG5B,MAAa,iBAAiB,OAA+B;CAC3D,MAAM,aAAa,GAAG,cAAc,6BAA6B,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAG7F,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,yCAAyC;AAC3E,QAAOC,sBAAAA,cAAc,WAAW,SAAS,OAAO,OAAO;;AAGzD,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,2BAA2B,CAAC;;AAGtD,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,iCAAiC;AACnE,QAAO,WAAW,CAAC,SAAS,QAAQ,OAAO;;AAG7C,MAAa,4BAA4B,OAAqC;AAI5E,QAHcC,sBAAAA,WACZ,GAAG,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,CAC9D;;AAIH,MAAa,qBAAqB,OAA4B;AAE5D,QAAOC,sBAAAA,UADM,GAAG,cAAc,eAAe,CAAC,KAAK,MAAM,CACnC;;AAGxB,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,2BAA2B,CAAC,WAAW"}
@@ -1,5 +1,4 @@
1
- import { parseColor, parseFilmType, parseIdFromUrl } from "./global.helper.mjs";
2
-
1
+ import { parseColor, parseDate, parseFilmType, parseIdFromUrl } from "./global.helper.mjs";
3
2
  //#region src/helpers/user-ratings.helper.ts
4
3
  const getUserRatingId = (el) => {
5
4
  const url = el.querySelector("td.name .film-title-name").attributes.href;
@@ -10,25 +9,26 @@ const getUserRating = (el) => {
10
9
  return ratingText.includes("stars-") ? +ratingText.split("-").pop() : 0;
11
10
  };
12
11
  const getUserRatingType = (el) => {
13
- const typeText = el.querySelectorAll("td.name .film-title-info .info");
14
- return parseFilmType(typeText.length > 1 ? typeText[1].text : "film");
12
+ const typeNode = el.querySelector("td.name .film-title-info .info ~ .info");
13
+ return parseFilmType(typeNode ? typeNode.text : "film");
15
14
  };
16
15
  const getUserRatingTitle = (el) => {
17
16
  return el.querySelector("td.name .film-title-name").text;
18
17
  };
19
18
  const getUserRatingYear = (el) => {
20
- return +el.querySelectorAll("td.name .film-title-info .info")[0]?.text || null;
19
+ const yearNode = el.querySelector("td.name .film-title-info .info");
20
+ return yearNode ? +yearNode.text || null : null;
21
21
  };
22
22
  const getUserRatingColorRating = (el) => {
23
23
  return parseColor(el.querySelector("td.name .icon").classNames.split(" ").pop());
24
24
  };
25
25
  const getUserRatingDate = (el) => {
26
- return el.querySelector("td.date-only").text.trim();
26
+ return parseDate(el.querySelector("td.date-only").text.trim());
27
27
  };
28
28
  const getUserRatingUrl = (el) => {
29
29
  return `https://www.csfd.cz${el.querySelector("td.name .film-title-name").attributes.href}`;
30
30
  };
31
-
32
31
  //#endregion
33
32
  export { getUserRating, getUserRatingColorRating, getUserRatingDate, getUserRatingId, getUserRatingTitle, getUserRatingType, getUserRatingUrl, getUserRatingYear };
33
+
34
34
  //# sourceMappingURL=user-ratings.helper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-ratings.helper.mjs","names":[],"sources":["../../src/helpers/user-ratings.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserRatingId = (el: HTMLElement): number => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('td.star-rating-only .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserRatingType = (el: HTMLElement): CSFDFilmTypes => {\n const typeText = el.querySelectorAll('td.name .film-title-info .info');\n\n return parseFilmType(typeText.length > 1 ? typeText[1].text : 'film');\n};\n\nexport const getUserRatingTitle = (el: HTMLElement): string => {\n return el.querySelector('td.name .film-title-name').text;\n};\n\nexport const getUserRatingYear = (el: HTMLElement): number => {\n return +el.querySelectorAll('td.name .film-title-info .info')[0]?.text || null;\n};\n\nexport const getUserRatingColorRating = (el: HTMLElement): CSFDColorRating => {\n const color = parseColor(\n el.querySelector('td.name .icon').classNames.split(' ').pop() as CSFDColors\n );\n return color;\n};\n\nexport const getUserRatingDate = (el: HTMLElement): string => {\n return el.querySelector('td.date-only').text.trim();\n};\n\nexport const getUserRatingUrl = (el: HTMLElement): string => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n"],"mappings":";;;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,2BAA2B,CAAC,WAAW;AACpE,QAAO,eAAe,IAAI;;AAG5B,MAAa,iBAAiB,OAA+B;CAC3D,MAAM,aAAa,GAAG,cAAc,6BAA6B,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAG7F,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,iBAAiB,iCAAiC;AAEtE,QAAO,cAAc,SAAS,SAAS,IAAI,SAAS,GAAG,OAAO,OAAO;;AAGvE,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,2BAA2B,CAAC;;AAGtD,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,CAAC,GAAG,iBAAiB,iCAAiC,CAAC,IAAI,QAAQ;;AAG5E,MAAa,4BAA4B,OAAqC;AAI5E,QAHc,WACZ,GAAG,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,CAC9D;;AAIH,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,eAAe,CAAC,KAAK,MAAM;;AAGrD,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,2BAA2B,CAAC,WAAW"}
1
+ {"version":3,"file":"user-ratings.helper.mjs","names":[],"sources":["../../src/helpers/user-ratings.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserRatingId = (el: HTMLElement): number => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('td.star-rating-only .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserRatingType = (el: HTMLElement): CSFDFilmTypes => {\n const typeNode = el.querySelector('td.name .film-title-info .info ~ .info');\n return parseFilmType(typeNode ? typeNode.text : 'film');\n};\n\nexport const getUserRatingTitle = (el: HTMLElement): string => {\n return el.querySelector('td.name .film-title-name').text;\n};\n\nexport const getUserRatingYear = (el: HTMLElement): number | null => {\n const yearNode = el.querySelector('td.name .film-title-info .info');\n return yearNode ? +yearNode.text || null : null;\n};\n\nexport const getUserRatingColorRating = (el: HTMLElement): CSFDColorRating => {\n const color = parseColor(\n el.querySelector('td.name .icon').classNames.split(' ').pop() as CSFDColors\n );\n return color;\n};\n\nexport const getUserRatingDate = (el: HTMLElement): string => {\n const date = el.querySelector('td.date-only').text.trim();\n return parseDate(date);\n};\n\nexport const getUserRatingUrl = (el: HTMLElement): string => {\n const url = el.querySelector('td.name .film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n"],"mappings":";;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,2BAA2B,CAAC,WAAW;AACpE,QAAO,eAAe,IAAI;;AAG5B,MAAa,iBAAiB,OAA+B;CAC3D,MAAM,aAAa,GAAG,cAAc,6BAA6B,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAG7F,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,yCAAyC;AAC3E,QAAO,cAAc,WAAW,SAAS,OAAO,OAAO;;AAGzD,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,2BAA2B,CAAC;;AAGtD,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,iCAAiC;AACnE,QAAO,WAAW,CAAC,SAAS,QAAQ,OAAO;;AAG7C,MAAa,4BAA4B,OAAqC;AAI5E,QAHc,WACZ,GAAG,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,CAC9D;;AAIH,MAAa,qBAAqB,OAA4B;AAE5D,QAAO,UADM,GAAG,cAAc,eAAe,CAAC,KAAK,MAAM,CACnC;;AAGxB,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,2BAA2B,CAAC,WAAW"}
@@ -1,5 +1,4 @@
1
- const require_global_helper = require('./global.helper.js');
2
-
1
+ const require_global_helper = require("./global.helper.js");
3
2
  //#region src/helpers/user-reviews.helper.ts
4
3
  const getUserReviewId = (el) => {
5
4
  const url = el.querySelector(".film-title-name").attributes.href;
@@ -10,15 +9,15 @@ const getUserReviewRating = (el) => {
10
9
  return ratingText.includes("stars-") ? +ratingText.split("-").pop() : 0;
11
10
  };
12
11
  const getUserReviewType = (el) => {
13
- const typeText = el.querySelectorAll(".film-title-info .info");
14
- return require_global_helper.parseFilmType(typeText.length > 1 ? typeText[1].text.slice(1, -1) : "film");
12
+ const typeNode = el.querySelector(".film-title-info .info ~ .info");
13
+ return require_global_helper.parseFilmType(typeNode ? typeNode.text.slice(1, -1) : "film");
15
14
  };
16
15
  const getUserReviewTitle = (el) => {
17
16
  return el.querySelector(".film-title-name").text;
18
17
  };
19
18
  const getUserReviewYear = (el) => {
20
19
  const infoSpan = el.querySelector(".film-title-info .info");
21
- return infoSpan ? +infoSpan.text.replace(/[()]/g, "") : null;
20
+ return infoSpan ? +infoSpan.text.replace(/[()]/g, "") || null : null;
22
21
  };
23
22
  const getUserReviewColorRating = (el) => {
24
23
  return require_global_helper.parseColor(el.querySelector(".film-title-inline i.icon")?.classNames.split(" ").pop());
@@ -42,7 +41,6 @@ const getUserReviewPoster = (el) => {
42
41
  const src = img?.attributes.src;
43
42
  return src ? `https:${src}` : null;
44
43
  };
45
-
46
44
  //#endregion
47
45
  exports.getUserReviewColorRating = getUserReviewColorRating;
48
46
  exports.getUserReviewDate = getUserReviewDate;
@@ -54,4 +52,5 @@ exports.getUserReviewTitle = getUserReviewTitle;
54
52
  exports.getUserReviewType = getUserReviewType;
55
53
  exports.getUserReviewUrl = getUserReviewUrl;
56
54
  exports.getUserReviewYear = getUserReviewYear;
55
+
57
56
  //# sourceMappingURL=user-reviews.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-reviews.helper.js","names":["parseIdFromUrl","parseFilmType","parseColor","parseDate"],"sources":["../../src/helpers/user-reviews.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserReviewId = (el: HTMLElement): number => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserReviewRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('.star-rating .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserReviewType = (el: HTMLElement): CSFDFilmTypes => {\n // Type can be in the second .info span (e.g., \"(seriál)\") // TODO need more tests\n const typeText = el.querySelectorAll('.film-title-info .info');\n\n return parseFilmType(typeText.length > 1 ? typeText[1].text.slice(1, -1) : 'film');\n};\n\nexport const getUserReviewTitle = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').text;\n};\n\nexport const getUserReviewYear = (el: HTMLElement): number => {\n const infoSpan = el.querySelector('.film-title-info .info');\n return infoSpan ? +infoSpan.text.replace(/[()]/g, '') : null;\n};\n\nexport const getUserReviewColorRating = (el: HTMLElement): CSFDColorRating => {\n const icon = el.querySelector('.film-title-inline i.icon');\n const color = parseColor(icon?.classNames.split(' ').pop() as CSFDColors);\n return color;\n};\n\nexport const getUserReviewDate = (el: HTMLElement): string | null => {\n const dateRaw = el.querySelector('.article-header-date-content .info time').text.trim();\n return parseDate(dateRaw);\n};\n\nexport const getUserReviewUrl = (el: HTMLElement): string => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n\nexport const getUserReviewText = (el: HTMLElement): string => {\n return el.querySelector('.comment').text.trim();\n};\n\nexport const getUserReviewPoster = (el: HTMLElement): string => {\n const img = el.querySelector('.article-img img');\n const srcset = img?.attributes.srcset;\n\n if (srcset) {\n // Extract 3x version from srcset (e.g., \"url 1x, url 2x, url 3x\")\n const srcsetParts = srcset.split(',').map((s) => s.trim());\n const poster3x = srcsetParts.find((s) => s.endsWith('3x'));\n if (poster3x) {\n const url = poster3x.replace(/\\s+3x$/, '').trim();\n return `https:${url}`;\n }\n }\n\n // Fallback to src if srcset not available\n const src = img?.attributes.src;\n return src ? `https:${src}` : null;\n};\n"],"mappings":";;;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,mBAAmB,CAAC,WAAW;AAC5D,QAAOA,qCAAe,IAAI;;AAG5B,MAAa,uBAAuB,OAA+B;CACjE,MAAM,aAAa,GAAG,cAAc,sBAAsB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAGtF,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CAEnE,MAAM,WAAW,GAAG,iBAAiB,yBAAyB;AAE9D,QAAOC,oCAAc,SAAS,SAAS,IAAI,SAAS,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;;AAGpF,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,mBAAmB,CAAC;;AAG9C,MAAa,qBAAqB,OAA4B;CAC5D,MAAM,WAAW,GAAG,cAAc,yBAAyB;AAC3D,QAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,SAAS,GAAG,GAAG;;AAG1D,MAAa,4BAA4B,OAAqC;AAG5E,QADcC,iCADD,GAAG,cAAc,4BAA4B,EAC3B,WAAW,MAAM,IAAI,CAAC,KAAK,CAAe;;AAI3E,MAAa,qBAAqB,OAAmC;AAEnE,QAAOC,gCADS,GAAG,cAAc,0CAA0C,CAAC,KAAK,MAAM,CAC9D;;AAG3B,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,mBAAmB,CAAC,WAAW;;AAI9D,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,WAAW,CAAC,KAAK,MAAM;;AAGjD,MAAa,uBAAuB,OAA4B;CAC9D,MAAM,MAAM,GAAG,cAAc,mBAAmB;CAChD,MAAM,SAAS,KAAK,WAAW;AAE/B,KAAI,QAAQ;EAGV,MAAM,WADc,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,CAC7B,MAAM,MAAM,EAAE,SAAS,KAAK,CAAC;AAC1D,MAAI,SAEF,QAAO,SADK,SAAS,QAAQ,UAAU,GAAG,CAAC,MAAM;;CAMrD,MAAM,MAAM,KAAK,WAAW;AAC5B,QAAO,MAAM,SAAS,QAAQ"}
1
+ {"version":3,"file":"user-reviews.helper.js","names":["parseIdFromUrl","parseFilmType","parseColor","parseDate"],"sources":["../../src/helpers/user-reviews.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserReviewId = (el: HTMLElement): number => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserReviewRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('.star-rating .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserReviewType = (el: HTMLElement): CSFDFilmTypes => {\n // Type can be in the second .info span (e.g., \"(seriál)\") // TODO need more tests\n const typeNode = el.querySelector('.film-title-info .info ~ .info');\n return parseFilmType(typeNode ? typeNode.text.slice(1, -1) : 'film');\n};\n\nexport const getUserReviewTitle = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').text;\n};\n\nexport const getUserReviewYear = (el: HTMLElement): number | null => {\n const infoSpan = el.querySelector('.film-title-info .info');\n return infoSpan ? +infoSpan.text.replace(/[()]/g, '') || null : null;\n};\n\nexport const getUserReviewColorRating = (el: HTMLElement): CSFDColorRating => {\n const icon = el.querySelector('.film-title-inline i.icon');\n const color = parseColor(icon?.classNames.split(' ').pop() as CSFDColors);\n return color;\n};\n\nexport const getUserReviewDate = (el: HTMLElement): string | null => {\n const dateRaw = el.querySelector('.article-header-date-content .info time').text.trim();\n return parseDate(dateRaw);\n};\n\nexport const getUserReviewUrl = (el: HTMLElement): string => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n\nexport const getUserReviewText = (el: HTMLElement): string => {\n return el.querySelector('.comment').text.trim();\n};\n\nexport const getUserReviewPoster = (el: HTMLElement): string => {\n const img = el.querySelector('.article-img img');\n const srcset = img?.attributes.srcset;\n\n if (srcset) {\n // Extract 3x version from srcset (e.g., \"url 1x, url 2x, url 3x\")\n const srcsetParts = srcset.split(',').map((s) => s.trim());\n const poster3x = srcsetParts.find((s) => s.endsWith('3x'));\n if (poster3x) {\n const url = poster3x.replace(/\\s+3x$/, '').trim();\n return `https:${url}`;\n }\n }\n\n // Fallback to src if srcset not available\n const src = img?.attributes.src;\n return src ? `https:${src}` : null;\n};\n"],"mappings":";;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,mBAAmB,CAAC,WAAW;AAC5D,QAAOA,sBAAAA,eAAe,IAAI;;AAG5B,MAAa,uBAAuB,OAA+B;CACjE,MAAM,aAAa,GAAG,cAAc,sBAAsB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAGtF,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CAEnE,MAAM,WAAW,GAAG,cAAc,iCAAiC;AACnE,QAAOC,sBAAAA,cAAc,WAAW,SAAS,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;;AAGtE,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,mBAAmB,CAAC;;AAG9C,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,yBAAyB;AAC3D,QAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,SAAS,GAAG,IAAI,OAAO;;AAGlE,MAAa,4BAA4B,OAAqC;AAG5E,QADcC,sBAAAA,WADD,GAAG,cAAc,4BAA4B,EAC3B,WAAW,MAAM,IAAI,CAAC,KAAK,CAAe;;AAI3E,MAAa,qBAAqB,OAAmC;AAEnE,QAAOC,sBAAAA,UADS,GAAG,cAAc,0CAA0C,CAAC,KAAK,MAAM,CAC9D;;AAG3B,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,mBAAmB,CAAC,WAAW;;AAI9D,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,WAAW,CAAC,KAAK,MAAM;;AAGjD,MAAa,uBAAuB,OAA4B;CAC9D,MAAM,MAAM,GAAG,cAAc,mBAAmB;CAChD,MAAM,SAAS,KAAK,WAAW;AAE/B,KAAI,QAAQ;EAGV,MAAM,WADc,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,CAC7B,MAAM,MAAM,EAAE,SAAS,KAAK,CAAC;AAC1D,MAAI,SAEF,QAAO,SADK,SAAS,QAAQ,UAAU,GAAG,CAAC,MAAM;;CAMrD,MAAM,MAAM,KAAK,WAAW;AAC5B,QAAO,MAAM,SAAS,QAAQ"}
@@ -1,5 +1,4 @@
1
1
  import { parseColor, parseDate, parseFilmType, parseIdFromUrl } from "./global.helper.mjs";
2
-
3
2
  //#region src/helpers/user-reviews.helper.ts
4
3
  const getUserReviewId = (el) => {
5
4
  const url = el.querySelector(".film-title-name").attributes.href;
@@ -10,15 +9,15 @@ const getUserReviewRating = (el) => {
10
9
  return ratingText.includes("stars-") ? +ratingText.split("-").pop() : 0;
11
10
  };
12
11
  const getUserReviewType = (el) => {
13
- const typeText = el.querySelectorAll(".film-title-info .info");
14
- return parseFilmType(typeText.length > 1 ? typeText[1].text.slice(1, -1) : "film");
12
+ const typeNode = el.querySelector(".film-title-info .info ~ .info");
13
+ return parseFilmType(typeNode ? typeNode.text.slice(1, -1) : "film");
15
14
  };
16
15
  const getUserReviewTitle = (el) => {
17
16
  return el.querySelector(".film-title-name").text;
18
17
  };
19
18
  const getUserReviewYear = (el) => {
20
19
  const infoSpan = el.querySelector(".film-title-info .info");
21
- return infoSpan ? +infoSpan.text.replace(/[()]/g, "") : null;
20
+ return infoSpan ? +infoSpan.text.replace(/[()]/g, "") || null : null;
22
21
  };
23
22
  const getUserReviewColorRating = (el) => {
24
23
  return parseColor(el.querySelector(".film-title-inline i.icon")?.classNames.split(" ").pop());
@@ -42,7 +41,7 @@ const getUserReviewPoster = (el) => {
42
41
  const src = img?.attributes.src;
43
42
  return src ? `https:${src}` : null;
44
43
  };
45
-
46
44
  //#endregion
47
45
  export { getUserReviewColorRating, getUserReviewDate, getUserReviewId, getUserReviewPoster, getUserReviewRating, getUserReviewText, getUserReviewTitle, getUserReviewType, getUserReviewUrl, getUserReviewYear };
46
+
48
47
  //# sourceMappingURL=user-reviews.helper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-reviews.helper.mjs","names":[],"sources":["../../src/helpers/user-reviews.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserReviewId = (el: HTMLElement): number => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserReviewRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('.star-rating .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserReviewType = (el: HTMLElement): CSFDFilmTypes => {\n // Type can be in the second .info span (e.g., \"(seriál)\") // TODO need more tests\n const typeText = el.querySelectorAll('.film-title-info .info');\n\n return parseFilmType(typeText.length > 1 ? typeText[1].text.slice(1, -1) : 'film');\n};\n\nexport const getUserReviewTitle = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').text;\n};\n\nexport const getUserReviewYear = (el: HTMLElement): number => {\n const infoSpan = el.querySelector('.film-title-info .info');\n return infoSpan ? +infoSpan.text.replace(/[()]/g, '') : null;\n};\n\nexport const getUserReviewColorRating = (el: HTMLElement): CSFDColorRating => {\n const icon = el.querySelector('.film-title-inline i.icon');\n const color = parseColor(icon?.classNames.split(' ').pop() as CSFDColors);\n return color;\n};\n\nexport const getUserReviewDate = (el: HTMLElement): string | null => {\n const dateRaw = el.querySelector('.article-header-date-content .info time').text.trim();\n return parseDate(dateRaw);\n};\n\nexport const getUserReviewUrl = (el: HTMLElement): string => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n\nexport const getUserReviewText = (el: HTMLElement): string => {\n return el.querySelector('.comment').text.trim();\n};\n\nexport const getUserReviewPoster = (el: HTMLElement): string => {\n const img = el.querySelector('.article-img img');\n const srcset = img?.attributes.srcset;\n\n if (srcset) {\n // Extract 3x version from srcset (e.g., \"url 1x, url 2x, url 3x\")\n const srcsetParts = srcset.split(',').map((s) => s.trim());\n const poster3x = srcsetParts.find((s) => s.endsWith('3x'));\n if (poster3x) {\n const url = poster3x.replace(/\\s+3x$/, '').trim();\n return `https:${url}`;\n }\n }\n\n // Fallback to src if srcset not available\n const src = img?.attributes.src;\n return src ? `https:${src}` : null;\n};\n"],"mappings":";;;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,mBAAmB,CAAC,WAAW;AAC5D,QAAO,eAAe,IAAI;;AAG5B,MAAa,uBAAuB,OAA+B;CACjE,MAAM,aAAa,GAAG,cAAc,sBAAsB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAGtF,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CAEnE,MAAM,WAAW,GAAG,iBAAiB,yBAAyB;AAE9D,QAAO,cAAc,SAAS,SAAS,IAAI,SAAS,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;;AAGpF,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,mBAAmB,CAAC;;AAG9C,MAAa,qBAAqB,OAA4B;CAC5D,MAAM,WAAW,GAAG,cAAc,yBAAyB;AAC3D,QAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,SAAS,GAAG,GAAG;;AAG1D,MAAa,4BAA4B,OAAqC;AAG5E,QADc,WADD,GAAG,cAAc,4BAA4B,EAC3B,WAAW,MAAM,IAAI,CAAC,KAAK,CAAe;;AAI3E,MAAa,qBAAqB,OAAmC;AAEnE,QAAO,UADS,GAAG,cAAc,0CAA0C,CAAC,KAAK,MAAM,CAC9D;;AAG3B,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,mBAAmB,CAAC,WAAW;;AAI9D,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,WAAW,CAAC,KAAK,MAAM;;AAGjD,MAAa,uBAAuB,OAA4B;CAC9D,MAAM,MAAM,GAAG,cAAc,mBAAmB;CAChD,MAAM,SAAS,KAAK,WAAW;AAE/B,KAAI,QAAQ;EAGV,MAAM,WADc,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,CAC7B,MAAM,MAAM,EAAE,SAAS,KAAK,CAAC;AAC1D,MAAI,SAEF,QAAO,SADK,SAAS,QAAQ,UAAU,GAAG,CAAC,MAAM;;CAMrD,MAAM,MAAM,KAAK,WAAW;AAC5B,QAAO,MAAM,SAAS,QAAQ"}
1
+ {"version":3,"file":"user-reviews.helper.mjs","names":[],"sources":["../../src/helpers/user-reviews.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserReviewId = (el: HTMLElement): number => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getUserReviewRating = (el: HTMLElement): CSFDStars => {\n const ratingText = el.querySelector('.star-rating .stars').classNames.split(' ').pop();\n\n const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n return rating as CSFDStars;\n};\n\nexport const getUserReviewType = (el: HTMLElement): CSFDFilmTypes => {\n // Type can be in the second .info span (e.g., \"(seriál)\") // TODO need more tests\n const typeNode = el.querySelector('.film-title-info .info ~ .info');\n return parseFilmType(typeNode ? typeNode.text.slice(1, -1) : 'film');\n};\n\nexport const getUserReviewTitle = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').text;\n};\n\nexport const getUserReviewYear = (el: HTMLElement): number | null => {\n const infoSpan = el.querySelector('.film-title-info .info');\n return infoSpan ? +infoSpan.text.replace(/[()]/g, '') || null : null;\n};\n\nexport const getUserReviewColorRating = (el: HTMLElement): CSFDColorRating => {\n const icon = el.querySelector('.film-title-inline i.icon');\n const color = parseColor(icon?.classNames.split(' ').pop() as CSFDColors);\n return color;\n};\n\nexport const getUserReviewDate = (el: HTMLElement): string | null => {\n const dateRaw = el.querySelector('.article-header-date-content .info time').text.trim();\n return parseDate(dateRaw);\n};\n\nexport const getUserReviewUrl = (el: HTMLElement): string => {\n const url = el.querySelector('.film-title-name').attributes.href;\n return `https://www.csfd.cz${url}`;\n};\n\nexport const getUserReviewText = (el: HTMLElement): string => {\n return el.querySelector('.comment').text.trim();\n};\n\nexport const getUserReviewPoster = (el: HTMLElement): string => {\n const img = el.querySelector('.article-img img');\n const srcset = img?.attributes.srcset;\n\n if (srcset) {\n // Extract 3x version from srcset (e.g., \"url 1x, url 2x, url 3x\")\n const srcsetParts = srcset.split(',').map((s) => s.trim());\n const poster3x = srcsetParts.find((s) => s.endsWith('3x'));\n if (poster3x) {\n const url = poster3x.replace(/\\s+3x$/, '').trim();\n return `https:${url}`;\n }\n }\n\n // Fallback to src if srcset not available\n const src = img?.attributes.src;\n return src ? `https:${src}` : null;\n};\n"],"mappings":";;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,mBAAmB,CAAC,WAAW;AAC5D,QAAO,eAAe,IAAI;;AAG5B,MAAa,uBAAuB,OAA+B;CACjE,MAAM,aAAa,GAAG,cAAc,sBAAsB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK;AAGtF,QADe,WAAW,SAAS,SAAS,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG;;AAIhF,MAAa,qBAAqB,OAAmC;CAEnE,MAAM,WAAW,GAAG,cAAc,iCAAiC;AACnE,QAAO,cAAc,WAAW,SAAS,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;;AAGtE,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,mBAAmB,CAAC;;AAG9C,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,yBAAyB;AAC3D,QAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,SAAS,GAAG,IAAI,OAAO;;AAGlE,MAAa,4BAA4B,OAAqC;AAG5E,QADc,WADD,GAAG,cAAc,4BAA4B,EAC3B,WAAW,MAAM,IAAI,CAAC,KAAK,CAAe;;AAI3E,MAAa,qBAAqB,OAAmC;AAEnE,QAAO,UADS,GAAG,cAAc,0CAA0C,CAAC,KAAK,MAAM,CAC9D;;AAG3B,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,mBAAmB,CAAC,WAAW;;AAI9D,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,WAAW,CAAC,KAAK,MAAM;;AAGjD,MAAa,uBAAuB,OAA4B;CAC9D,MAAM,MAAM,GAAG,cAAc,mBAAmB;CAChD,MAAM,SAAS,KAAK,WAAW;AAE/B,KAAI,QAAQ;EAGV,MAAM,WADc,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,CAC7B,MAAM,MAAM,EAAE,SAAS,KAAK,CAAC;AAC1D,MAAI,SAEF,QAAO,SADK,SAAS,QAAQ,UAAU,GAAG,CAAC,MAAM;;CAMrD,MAAM,MAAM,KAAK,WAAW;AAC5B,QAAO,MAAM,SAAS,QAAQ"}
package/index.js CHANGED
@@ -1,11 +1,10 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cinema_service = require('./services/cinema.service.js');
3
- const require_creator_service = require('./services/creator.service.js');
4
- const require_movie_service = require('./services/movie.service.js');
5
- const require_search_service = require('./services/search.service.js');
6
- const require_user_ratings_service = require('./services/user-ratings.service.js');
7
- const require_user_reviews_service = require('./services/user-reviews.service.js');
8
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_cinema_service = require("./services/cinema.service.js");
3
+ const require_creator_service = require("./services/creator.service.js");
4
+ const require_movie_service = require("./services/movie.service.js");
5
+ const require_search_service = require("./services/search.service.js");
6
+ const require_user_ratings_service = require("./services/user-ratings.service.js");
7
+ const require_user_reviews_service = require("./services/user-reviews.service.js");
9
8
  //#region src/index.ts
10
9
  var Csfd = class {
11
10
  constructor(userRatingsService, userReviewsService, movieService, creatorService, searchService, cinemaService, defaultOptions) {
@@ -56,11 +55,9 @@ const movieScraper = new require_movie_service.MovieScraper();
56
55
  const userRatingsScraper = new require_user_ratings_service.UserRatingsScraper();
57
56
  const userReviewsScraper = new require_user_reviews_service.UserReviewsScraper();
58
57
  const cinemaScraper = new require_cinema_service.CinemaScraper();
59
- const creatorScraper = new require_creator_service.CreatorScraper();
60
- const searchScraper = new require_search_service.SearchScraper();
61
- const csfd = new Csfd(userRatingsScraper, userReviewsScraper, movieScraper, creatorScraper, searchScraper, cinemaScraper);
62
-
58
+ const csfd = new Csfd(userRatingsScraper, userReviewsScraper, movieScraper, new require_creator_service.CreatorScraper(), new require_search_service.SearchScraper(), cinemaScraper);
63
59
  //#endregion
64
60
  exports.Csfd = Csfd;
65
61
  exports.csfd = csfd;
62
+
66
63
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["MovieScraper","UserRatingsScraper","UserReviewsScraper","CinemaScraper","CreatorScraper","SearchScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from './dto/user-reviews';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\nimport { UserReviewsScraper } from './services/user-reviews.service';\nimport { CSFDOptions } from './types';\n\nexport class Csfd {\n private defaultOptions?: CSFDOptions;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private userReviewsService: UserReviewsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptions?: CSFDOptions\n ) {\n this.defaultOptions = defaultOptions;\n }\n\n public setOptions({ request, language }: CSFDOptions): void {\n if (request !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, request };\n }\n if (language !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, language };\n }\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n const opts = options ?? this.defaultOptions;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n const opts = options ?? this.defaultOptions;\n return this.userReviewsService.userReviews(user, config, opts);\n }\n\n public async movie(movie: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const opts = options ?? this.defaultOptions;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const opts = options ?? this.defaultOptions;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const opts = options ?? this.defaultOptions;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(\n district: number | string,\n period: CSFDCinemaPeriod,\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const opts = options ?? this.defaultOptions;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst userReviewsScraper = new UserReviewsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n userReviewsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\n\nexport type * from './dto';\n\n"],"mappings":";;;;;;;;;AAcA,IAAa,OAAb,MAAkB;CAGhB,YACE,AAAQ,oBACR,AAAQ,oBACR,AAAQ,cACR,AAAQ,gBACR,AAAQ,eACR,AAAQ,eACR,gBACA;EAPQ;EACA;EACA;EACA;EACA;EACA;AAGR,OAAK,iBAAiB;;CAGxB,AAAO,WAAW,EAAE,SAAS,YAA+B;AAC1D,MAAI,YAAY,OACd,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAS;AAE3D,MAAI,aAAa,OACf,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAU;;CAI9D,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,SAA2C;EAC3E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,SAA6C;EACjF,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,SAA4C;EAC5E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OACX,UACA,QACA,SACuB;EACvB,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAIA,oCAAc;AACvC,MAAM,qBAAqB,IAAIC,iDAAoB;AACnD,MAAM,qBAAqB,IAAIC,iDAAoB;AACnD,MAAM,gBAAgB,IAAIC,sCAAe;AACzC,MAAM,iBAAiB,IAAIC,wCAAgB;AAC3C,MAAM,gBAAgB,IAAIC,sCAAe;AAEzC,MAAa,OAAO,IAAI,KACtB,oBACA,oBACA,cACA,gBACA,eACA,cACD"}
1
+ {"version":3,"file":"index.js","names":["MovieScraper","UserRatingsScraper","UserReviewsScraper","CinemaScraper","CreatorScraper","SearchScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from './dto/user-reviews';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\nimport { UserReviewsScraper } from './services/user-reviews.service';\nimport { CSFDOptions } from './types';\n\nexport class Csfd {\n private defaultOptions?: CSFDOptions;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private userReviewsService: UserReviewsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptions?: CSFDOptions\n ) {\n this.defaultOptions = defaultOptions;\n }\n\n public setOptions({ request, language }: CSFDOptions): void {\n if (request !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, request };\n }\n if (language !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, language };\n }\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n const opts = options ?? this.defaultOptions;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n const opts = options ?? this.defaultOptions;\n return this.userReviewsService.userReviews(user, config, opts);\n }\n\n public async movie(movie: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const opts = options ?? this.defaultOptions;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const opts = options ?? this.defaultOptions;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const opts = options ?? this.defaultOptions;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(\n district: number | string,\n period: CSFDCinemaPeriod,\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const opts = options ?? this.defaultOptions;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst userReviewsScraper = new UserReviewsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n userReviewsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\n\nexport type * from './dto';\n\n"],"mappings":";;;;;;;;AAcA,IAAa,OAAb,MAAkB;CAGhB,YACE,oBACA,oBACA,cACA,gBACA,eACA,eACA,gBACA;AAPQ,OAAA,qBAAA;AACA,OAAA,qBAAA;AACA,OAAA,eAAA;AACA,OAAA,iBAAA;AACA,OAAA,gBAAA;AACA,OAAA,gBAAA;AAGR,OAAK,iBAAiB;;CAGxB,WAAkB,EAAE,SAAS,YAA+B;AAC1D,MAAI,YAAY,KAAA,EACd,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAS;AAE3D,MAAI,aAAa,KAAA,EACf,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAU;;CAI9D,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,SAA2C;EAC3E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,SAA6C;EACjF,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,SAA4C;EAC5E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OACX,UACA,QACA,SACuB;EACvB,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAIA,sBAAAA,cAAc;AACvC,MAAM,qBAAqB,IAAIC,6BAAAA,oBAAoB;AACnD,MAAM,qBAAqB,IAAIC,6BAAAA,oBAAoB;AACnD,MAAM,gBAAgB,IAAIC,uBAAAA,eAAe;AAIzC,MAAa,OAAO,IAAI,KACtB,oBACA,oBACA,cANqB,IAAIC,wBAAAA,gBAAgB,EACrB,IAAIC,uBAAAA,eAAe,EAQvC,cACD"}
package/index.mjs CHANGED
@@ -4,7 +4,6 @@ import { MovieScraper } from "./services/movie.service.mjs";
4
4
  import { SearchScraper } from "./services/search.service.mjs";
5
5
  import { UserRatingsScraper } from "./services/user-ratings.service.mjs";
6
6
  import { UserReviewsScraper } from "./services/user-reviews.service.mjs";
7
-
8
7
  //#region src/index.ts
9
8
  var Csfd = class {
10
9
  constructor(userRatingsService, userReviewsService, movieService, creatorService, searchService, cinemaService, defaultOptions) {
@@ -55,10 +54,8 @@ const movieScraper = new MovieScraper();
55
54
  const userRatingsScraper = new UserRatingsScraper();
56
55
  const userReviewsScraper = new UserReviewsScraper();
57
56
  const cinemaScraper = new CinemaScraper();
58
- const creatorScraper = new CreatorScraper();
59
- const searchScraper = new SearchScraper();
60
- const csfd = new Csfd(userRatingsScraper, userReviewsScraper, movieScraper, creatorScraper, searchScraper, cinemaScraper);
61
-
57
+ const csfd = new Csfd(userRatingsScraper, userReviewsScraper, movieScraper, new CreatorScraper(), new SearchScraper(), cinemaScraper);
62
58
  //#endregion
63
59
  export { Csfd, csfd };
60
+
64
61
  //# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from './dto/user-reviews';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\nimport { UserReviewsScraper } from './services/user-reviews.service';\nimport { CSFDOptions } from './types';\n\nexport class Csfd {\n private defaultOptions?: CSFDOptions;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private userReviewsService: UserReviewsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptions?: CSFDOptions\n ) {\n this.defaultOptions = defaultOptions;\n }\n\n public setOptions({ request, language }: CSFDOptions): void {\n if (request !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, request };\n }\n if (language !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, language };\n }\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n const opts = options ?? this.defaultOptions;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n const opts = options ?? this.defaultOptions;\n return this.userReviewsService.userReviews(user, config, opts);\n }\n\n public async movie(movie: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const opts = options ?? this.defaultOptions;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const opts = options ?? this.defaultOptions;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const opts = options ?? this.defaultOptions;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(\n district: number | string,\n period: CSFDCinemaPeriod,\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const opts = options ?? this.defaultOptions;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst userReviewsScraper = new UserReviewsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n userReviewsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\n\nexport type * from './dto';\n\n"],"mappings":";;;;;;;;AAcA,IAAa,OAAb,MAAkB;CAGhB,YACE,AAAQ,oBACR,AAAQ,oBACR,AAAQ,cACR,AAAQ,gBACR,AAAQ,eACR,AAAQ,eACR,gBACA;EAPQ;EACA;EACA;EACA;EACA;EACA;AAGR,OAAK,iBAAiB;;CAGxB,AAAO,WAAW,EAAE,SAAS,YAA+B;AAC1D,MAAI,YAAY,OACd,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAS;AAE3D,MAAI,aAAa,OACf,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAU;;CAI9D,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,SAA2C;EAC3E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,SAA6C;EACjF,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,SAA4C;EAC5E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OACX,UACA,QACA,SACuB;EACvB,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAI,cAAc;AACvC,MAAM,qBAAqB,IAAI,oBAAoB;AACnD,MAAM,qBAAqB,IAAI,oBAAoB;AACnD,MAAM,gBAAgB,IAAI,eAAe;AACzC,MAAM,iBAAiB,IAAI,gBAAgB;AAC3C,MAAM,gBAAgB,IAAI,eAAe;AAEzC,MAAa,OAAO,IAAI,KACtB,oBACA,oBACA,cACA,gBACA,eACA,cACD"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from './dto/user-reviews';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\nimport { UserReviewsScraper } from './services/user-reviews.service';\nimport { CSFDOptions } from './types';\n\nexport class Csfd {\n private defaultOptions?: CSFDOptions;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private userReviewsService: UserReviewsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptions?: CSFDOptions\n ) {\n this.defaultOptions = defaultOptions;\n }\n\n public setOptions({ request, language }: CSFDOptions): void {\n if (request !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, request };\n }\n if (language !== undefined) {\n this.defaultOptions = { ...this.defaultOptions, language };\n }\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n const opts = options ?? this.defaultOptions;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n const opts = options ?? this.defaultOptions;\n return this.userReviewsService.userReviews(user, config, opts);\n }\n\n public async movie(movie: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const opts = options ?? this.defaultOptions;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const opts = options ?? this.defaultOptions;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const opts = options ?? this.defaultOptions;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(\n district: number | string,\n period: CSFDCinemaPeriod,\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const opts = options ?? this.defaultOptions;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst userReviewsScraper = new UserReviewsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n userReviewsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\n\nexport type * from './dto';\n\n"],"mappings":";;;;;;;AAcA,IAAa,OAAb,MAAkB;CAGhB,YACE,oBACA,oBACA,cACA,gBACA,eACA,eACA,gBACA;AAPQ,OAAA,qBAAA;AACA,OAAA,qBAAA;AACA,OAAA,eAAA;AACA,OAAA,iBAAA;AACA,OAAA,gBAAA;AACA,OAAA,gBAAA;AAGR,OAAK,iBAAiB;;CAGxB,WAAkB,EAAE,SAAS,YAA+B;AAC1D,MAAI,YAAY,KAAA,EACd,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAS;AAE3D,MAAI,aAAa,KAAA,EACf,MAAK,iBAAiB;GAAE,GAAG,KAAK;GAAgB;GAAU;;CAI9D,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,SAA2C;EAC3E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,SAA6C;EACjF,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,SAA4C;EAC5E,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OACX,UACA,QACA,SACuB;EACvB,MAAM,OAAO,WAAW,KAAK;AAC7B,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAI,cAAc;AACvC,MAAM,qBAAqB,IAAI,oBAAoB;AACnD,MAAM,qBAAqB,IAAI,oBAAoB;AACnD,MAAM,gBAAgB,IAAI,eAAe;AAIzC,MAAa,OAAO,IAAI,KACtB,oBACA,oBACA,cANqB,IAAI,gBAAgB,EACrB,IAAI,eAAe,EAQvC,cACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-csfd-api",
3
- "version": "5.2.2",
3
+ "version": "5.4.0",
4
4
  "description": "ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)",
5
5
  "author": "BART! <bart@bartweb.cz>",
6
6
  "publishConfig": {
package/package.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  //#region package.json
3
3
  var name = "node-csfd-api";
4
- var version = "5.2.2";
4
+ var version = "5.4.0";
5
5
  var homepage = "https://github.com/bartholomej/node-csfd-api#readme";
6
6
 
7
7
  //#endregion
@@ -1,8 +1,7 @@
1
- const require_index = require('../fetchers/index.js');
2
- const require_vars = require('../vars.js');
3
- const require_cinema_helper = require('../helpers/cinema.helper.js');
1
+ const require_index = require("../fetchers/index.js");
2
+ const require_vars = require("../vars.js");
3
+ const require_cinema_helper = require("../helpers/cinema.helper.js");
4
4
  let node_html_parser = require("node-html-parser");
5
-
6
5
  //#region src/services/cinema.service.ts
7
6
  var CinemaScraper = class {
8
7
  async cinemas(district = 1, period = "today", options) {
@@ -26,7 +25,7 @@ var CinemaScraper = class {
26
25
  return cinemas;
27
26
  }
28
27
  };
29
-
30
28
  //#endregion
31
29
  exports.CinemaScraper = CinemaScraper;
30
+
32
31
  //# sourceMappingURL=cinema.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","parseCinema","getCinemaId","getCinemaUrl","getCinemaCoords","getGroupedFilmsByDate"],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,0CAHW,MAAMA,wBADXC,wBAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,AAAQ,aAAa,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAaC,kCAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAIC,kCAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAKC,mCAAa,EAAE;IACpB,QAAQC,sCAAgB,EAAE;IAC1B,YAAYC,4CAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
1
+ {"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","parseCinema","getCinemaId","getCinemaUrl","getCinemaCoords","getGroupedFilmsByDate"],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,eAAA,GAAA,iBAAA,OAHW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,aAAqB,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAaC,sBAAAA,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAIC,sBAAAA,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAKC,sBAAAA,aAAa,EAAE;IACpB,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,YAAYC,sBAAAA,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
@@ -2,7 +2,6 @@ import { fetchPage } from "../fetchers/index.mjs";
2
2
  import { cinemasUrl } from "../vars.mjs";
3
3
  import { getCinemaCoords, getCinemaId, getCinemaUrl, getGroupedFilmsByDate, parseCinema } from "../helpers/cinema.helper.mjs";
4
4
  import { parse } from "node-html-parser";
5
-
6
5
  //#region src/services/cinema.service.ts
7
6
  var CinemaScraper = class {
8
7
  async cinemas(district = 1, period = "today", options) {
@@ -26,7 +25,7 @@ var CinemaScraper = class {
26
25
  return cinemas;
27
26
  }
28
27
  };
29
-
30
28
  //#endregion
31
29
  export { CinemaScraper };
30
+
32
31
  //# sourceMappingURL=cinema.service.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cinema.service.mjs","names":[],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,cAFc,MADH,MAAM,UADX,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,AAAQ,aAAa,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAI,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAK,aAAa,EAAE;IACpB,QAAQ,gBAAgB,EAAE;IAC1B,YAAY,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
1
+ {"version":3,"file":"cinema.service.mjs","names":[],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,cAFc,MADH,MAAM,UADX,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,aAAqB,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAI,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAK,aAAa,EAAE;IACpB,QAAQ,gBAAgB,EAAE;IAC1B,YAAY,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
@@ -1,8 +1,7 @@
1
- const require_index = require('../fetchers/index.js');
2
- const require_vars = require('../vars.js');
3
- const require_creator_helper = require('../helpers/creator.helper.js');
1
+ const require_index = require("../fetchers/index.js");
2
+ const require_vars = require("../vars.js");
3
+ const require_creator_helper = require("../helpers/creator.helper.js");
4
4
  let node_html_parser = require("node-html-parser");
5
-
6
5
  //#region src/services/creator.service.ts
7
6
  var CreatorScraper = class {
8
7
  async creator(creatorId, options) {
@@ -27,7 +26,7 @@ var CreatorScraper = class {
27
26
  };
28
27
  }
29
28
  };
30
-
31
29
  //#endregion
32
30
  exports.CreatorScraper = CreatorScraper;
31
+
33
32
  //# sourceMappingURL=creator.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorBirthdayInfo","getCreatorName","getCreatorPhoto","getCreatorBio","getCreatorFilms"],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,0CAFW,MAAMA,wBADXC,wBAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,AAAQ,aAAa,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAeC,8CAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAMC,sCAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAOC,uCAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAKC,qCAAc,QAAQ;GAC3B,OAAOC,uCAAgB,UAAU;GAClC"}
1
+ {"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorBirthdayInfo","getCreatorName","getCreatorPhoto","getCreatorBio","getCreatorFilms"],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,eAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAeC,uBAAAA,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAMC,uBAAAA,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAOC,uBAAAA,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAKC,uBAAAA,cAAc,QAAQ;GAC3B,OAAOC,uBAAAA,gBAAgB,UAAU;GAClC"}
@@ -2,7 +2,6 @@ import { fetchPage } from "../fetchers/index.mjs";
2
2
  import { creatorUrl } from "../vars.mjs";
3
3
  import { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from "../helpers/creator.helper.mjs";
4
4
  import { parse } from "node-html-parser";
5
-
6
5
  //#region src/services/creator.service.ts
7
6
  var CreatorScraper = class {
8
7
  async creator(creatorId, options) {
@@ -27,7 +26,7 @@ var CreatorScraper = class {
27
26
  };
28
27
  }
29
28
  };
30
-
31
29
  //#endregion
32
30
  export { CreatorScraper };
31
+
33
32
  //# sourceMappingURL=creator.service.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"creator.service.mjs","names":[],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,AAAQ,aAAa,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAe,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
1
+ {"version":3,"file":"creator.service.mjs","names":[],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAe,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
@@ -1,8 +1,7 @@
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');
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
4
  let node_html_parser = require("node-html-parser");
5
-
6
5
  //#region src/services/movie.service.ts
7
6
  var MovieScraper = class {
8
7
  async movie(movieId, options) {
@@ -25,10 +24,9 @@ var MovieScraper = class {
25
24
  const type = require_movie_helper.getMovieType(el);
26
25
  const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
27
26
  const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
28
- const title = type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el);
29
27
  return {
30
28
  id: movieId,
31
- title,
29
+ title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
32
30
  year: require_movie_helper.getMovieYear(jsonLd),
33
31
  duration: require_movie_helper.getMovieDuration(jsonLd, el),
34
32
  descriptions: require_movie_helper.getMovieDescriptions(el),
@@ -51,16 +49,13 @@ var MovieScraper = class {
51
49
  similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
52
50
  seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
53
51
  episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
54
- parent: type === "series" ? null : require_movie_helper.getSeasonOrEpisodeParent(el, {
55
- id: movieId,
56
- title
57
- }),
52
+ parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
58
53
  episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
59
54
  seasonName
60
55
  };
61
56
  }
62
57
  };
63
-
64
58
  //#endregion
65
59
  exports.MovieScraper = MovieScraper;
60
+
66
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 === 'series' ? null : getSeasonOrEpisodeParent(el, { id: movieId, title }),\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,wCAFW,MAAMA,wBADXC,sBAAS,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,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,kCAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,6CAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,mDAA8B,GAAG;EAEjE,MAAM,QAAQ,SAAS,YAAY,aAAa,aAAaC,mCAAc,GAAG;AAC9E,SAAO;GACL,IAAI;GACJ;GACA,MAAMC,kCAAa,OAAO;GAC1B,UAAUC,sCAAiB,QAAQ,GAAG;GACtC,cAAcC,0CAAqB,GAAG;GACtC,QAAQC,oCAAe,GAAG;GAC1B;GACA,KAAKR,sBAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qCAAgB,GAAG;GAC5B,aAAaC,yCAAoB,YAAY;GAC7C,QAAQC,oCAAe,QAAQ;GAC/B,aAAaC,yCAAoB,QAAQ;GACzC,aAAaC,yCAAoB,GAAG;GACpC,QAAQC,oCAAe,GAAG;GAC1B,OAAOC,yCAAoB,GAAG;GAC9B,QAAQC,oCAAe,GAAG;GAC1B,UAAUC,sCAAiB,IAAI,QAAQ;GACvC,KAAKC,kCAAa,QAAQ;GAC1B,MAAMC,kCAAa,QAAQ;GAC3B,WAAWC,uCAAkB,QAAQ;GACrC,SAASC,uCAAkB,SAAS,cAAc;GAClD,SAASA,uCAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,0CAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,0CAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,WAAW,OAAOC,8CAAyB,IAAI;IAAE,IAAI;IAAS;IAAO,CAAC;GACvF,aAAa,SAAS,YAAYC,oCAAe,GAAG,GAAG;GACvD;GACD"}
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"}