node-csfd-api 2.14.4 → 3.0.0-alpha.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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/_virtual/rolldown_runtime.js +25 -0
  3. package/dto/cinema.d.mts +28 -0
  4. package/dto/cinema.d.ts +28 -0
  5. package/dto/creator.d.mts +17 -0
  6. package/dto/creator.d.ts +17 -0
  7. package/dto/global.d.mts +26 -0
  8. package/dto/global.d.ts +26 -0
  9. package/dto/movie.d.mts +69 -0
  10. package/dto/movie.d.ts +69 -0
  11. package/dto/search.d.mts +32 -0
  12. package/dto/search.d.ts +32 -0
  13. package/dto/user-ratings.d.mts +22 -0
  14. package/dto/user-ratings.d.ts +22 -0
  15. package/fetchers/fetch.polyfill.js +10 -9
  16. package/fetchers/fetch.polyfill.js.map +1 -0
  17. package/fetchers/fetch.polyfill.mjs +8 -0
  18. package/fetchers/fetch.polyfill.mjs.map +1 -0
  19. package/fetchers/fetchers.js +24 -0
  20. package/fetchers/fetchers.js.map +1 -0
  21. package/fetchers/fetchers.mjs +24 -0
  22. package/fetchers/fetchers.mjs.map +1 -0
  23. package/helpers/cinema.helper.js +70 -91
  24. package/helpers/cinema.helper.js.map +1 -0
  25. package/helpers/cinema.helper.mjs +80 -0
  26. package/helpers/cinema.helper.mjs.map +1 -0
  27. package/helpers/creator.helper.js +64 -78
  28. package/helpers/creator.helper.js.map +1 -0
  29. package/helpers/creator.helper.mjs +69 -0
  30. package/helpers/creator.helper.mjs.map +1 -0
  31. package/helpers/global.helper.js +37 -55
  32. package/helpers/global.helper.js.map +1 -0
  33. package/helpers/global.helper.mjs +45 -0
  34. package/helpers/global.helper.mjs.map +1 -0
  35. package/helpers/movie.helper.js +161 -252
  36. package/helpers/movie.helper.js.map +1 -0
  37. package/helpers/movie.helper.mjs +144 -0
  38. package/helpers/movie.helper.mjs.map +1 -0
  39. package/helpers/search-user.helper.js +20 -18
  40. package/helpers/search-user.helper.js.map +1 -0
  41. package/helpers/search-user.helper.mjs +24 -0
  42. package/helpers/search-user.helper.mjs.map +1 -0
  43. package/helpers/search.helper.js +52 -62
  44. package/helpers/search.helper.js.map +1 -0
  45. package/helpers/search.helper.mjs +45 -0
  46. package/helpers/search.helper.mjs.map +1 -0
  47. package/helpers/user-ratings.helper.js +47 -56
  48. package/helpers/user-ratings.helper.js.map +1 -0
  49. package/helpers/user-ratings.helper.mjs +44 -0
  50. package/helpers/user-ratings.helper.mjs.map +1 -0
  51. package/index.d.mts +29 -0
  52. package/index.d.ts +28 -23
  53. package/index.js +41 -38
  54. package/index.js.map +1 -0
  55. package/index.mjs +41 -0
  56. package/index.mjs.map +1 -0
  57. package/package.json +11 -25
  58. package/services/cinema.service.d.mts +11 -0
  59. package/services/cinema.service.d.ts +10 -5
  60. package/services/cinema.service.js +34 -33
  61. package/services/cinema.service.js.map +1 -0
  62. package/services/cinema.service.mjs +33 -0
  63. package/services/cinema.service.mjs.map +1 -0
  64. package/services/creator.service.d.mts +11 -0
  65. package/services/creator.service.d.ts +10 -5
  66. package/services/creator.service.js +34 -35
  67. package/services/creator.service.js.map +1 -0
  68. package/services/creator.service.mjs +33 -0
  69. package/services/creator.service.mjs.map +1 -0
  70. package/services/movie.service.d.mts +11 -0
  71. package/services/movie.service.d.ts +10 -5
  72. package/services/movie.service.js +61 -61
  73. package/services/movie.service.js.map +1 -0
  74. package/services/movie.service.mjs +60 -0
  75. package/services/movie.service.mjs.map +1 -0
  76. package/services/search.service.d.mts +10 -0
  77. package/services/search.service.d.ts +9 -4
  78. package/services/search.service.js +80 -79
  79. package/services/search.service.js.map +1 -0
  80. package/services/search.service.mjs +79 -0
  81. package/services/search.service.mjs.map +1 -0
  82. package/services/user-ratings.service.d.mts +12 -0
  83. package/services/user-ratings.service.d.ts +11 -6
  84. package/services/user-ratings.service.js +63 -81
  85. package/services/user-ratings.service.js.map +1 -0
  86. package/services/user-ratings.service.mjs +64 -0
  87. package/services/user-ratings.service.mjs.map +1 -0
  88. package/vars.js +11 -9
  89. package/vars.js.map +1 -0
  90. package/vars.mjs +12 -0
  91. package/vars.mjs.map +1 -0
  92. package/fetchers/fetch.polyfill.d.ts +0 -1
  93. package/fetchers/index.d.ts +0 -1
  94. package/fetchers/index.js +0 -27
  95. package/helpers/cinema.helper.d.ts +0 -18
  96. package/helpers/creator.helper.d.ts +0 -17
  97. package/helpers/global.helper.d.ts +0 -17
  98. package/helpers/movie.helper.d.ts +0 -25
  99. package/helpers/search-user.helper.d.ts +0 -5
  100. package/helpers/search.helper.d.ts +0 -11
  101. package/helpers/user-ratings.helper.d.ts +0 -13
  102. package/interfaces/cinema.interface.d.ts +0 -23
  103. package/interfaces/cinema.interface.js +0 -2
  104. package/interfaces/creator.interface.d.ts +0 -12
  105. package/interfaces/creator.interface.js +0 -2
  106. package/interfaces/global.d.ts +0 -22
  107. package/interfaces/global.js +0 -2
  108. package/interfaces/movie.interface.d.ts +0 -66
  109. package/interfaces/movie.interface.js +0 -2
  110. package/interfaces/search.interface.d.ts +0 -27
  111. package/interfaces/search.interface.js +0 -2
  112. package/interfaces/user-ratings.interface.d.ts +0 -18
  113. package/interfaces/user-ratings.interface.js +0 -2
  114. package/vars.d.ts +0 -6
@@ -1,68 +1,50 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseISO8601Duration = exports.getDuration = exports.addProtocol = exports.parseColor = exports.getColor = exports.parseIdFromUrl = void 0;
1
+
2
+ //#region src/helpers/global.helper.ts
4
3
  const parseIdFromUrl = (url) => {
5
- if (url) {
6
- const idSlug = url === null || url === void 0 ? void 0 : url.split('/')[2];
7
- const id = idSlug === null || idSlug === void 0 ? void 0 : idSlug.split('-')[0];
8
- return +id || null;
9
- }
10
- else {
11
- return null;
12
- }
4
+ if (url) return +(url?.split("/")[2])?.split("-")[0] || null;
5
+ else return null;
13
6
  };
14
- exports.parseIdFromUrl = parseIdFromUrl;
15
7
  const getColor = (cls) => {
16
- switch (cls) {
17
- case 'page-lightgrey':
18
- return 'unknown';
19
- case 'page-red':
20
- return 'good';
21
- case 'page-blue':
22
- return 'average';
23
- case 'page-grey':
24
- return 'bad';
25
- default:
26
- return 'unknown';
27
- }
8
+ switch (cls) {
9
+ case "page-lightgrey": return "unknown";
10
+ case "page-red": return "good";
11
+ case "page-blue": return "average";
12
+ case "page-grey": return "bad";
13
+ default: return "unknown";
14
+ }
28
15
  };
29
- exports.getColor = getColor;
30
16
  const parseColor = (quality) => {
31
- switch (quality) {
32
- case 'lightgrey':
33
- return 'unknown';
34
- case 'red':
35
- return 'good';
36
- case 'blue':
37
- return 'average';
38
- case 'grey':
39
- return 'bad';
40
- default:
41
- return 'unknown';
42
- }
17
+ switch (quality) {
18
+ case "lightgrey": return "unknown";
19
+ case "red": return "good";
20
+ case "blue": return "average";
21
+ case "grey": return "bad";
22
+ default: return "unknown";
23
+ }
43
24
  };
44
- exports.parseColor = parseColor;
45
25
  const addProtocol = (url) => {
46
- return url.startsWith('//') ? 'https:' + url : url;
26
+ return url.startsWith("//") ? "https:" + url : url;
47
27
  };
48
- exports.addProtocol = addProtocol;
49
28
  const getDuration = (matches) => {
50
- return {
51
- sign: matches[1] === undefined ? '+' : '-',
52
- years: matches[2] === undefined ? 0 : matches[2],
53
- months: matches[3] === undefined ? 0 : matches[3],
54
- weeks: matches[4] === undefined ? 0 : matches[4],
55
- days: matches[5] === undefined ? 0 : matches[5],
56
- hours: matches[6] === undefined ? 0 : matches[6],
57
- minutes: matches[7] === undefined ? 0 : matches[7],
58
- seconds: matches[8] === undefined ? 0 : matches[8]
59
- };
29
+ return {
30
+ sign: matches[1] === void 0 ? "+" : "-",
31
+ years: matches[2] === void 0 ? 0 : matches[2],
32
+ months: matches[3] === void 0 ? 0 : matches[3],
33
+ weeks: matches[4] === void 0 ? 0 : matches[4],
34
+ days: matches[5] === void 0 ? 0 : matches[5],
35
+ hours: matches[6] === void 0 ? 0 : matches[6],
36
+ minutes: matches[7] === void 0 ? 0 : matches[7],
37
+ seconds: matches[8] === void 0 ? 0 : matches[8]
38
+ };
60
39
  };
61
- exports.getDuration = getDuration;
62
40
  const parseISO8601Duration = (iso) => {
63
- const iso8601DurationRegex = /(-)?P(?:([.,\d]+)Y)?(?:([.,\d]+)M)?(?:([.,\d]+)W)?(?:([.,\d]+)D)?T(?:([.,\d]+)H)?(?:([.,\d]+)M)?(?:([.,\d]+)S)?/;
64
- const matches = iso.match(iso8601DurationRegex);
65
- const duration = (0, exports.getDuration)(matches);
66
- return +duration.minutes;
41
+ return +getDuration(iso.match(/(-)?P(?:([.,\d]+)Y)?(?:([.,\d]+)M)?(?:([.,\d]+)W)?(?:([.,\d]+)D)?T(?:([.,\d]+)H)?(?:([.,\d]+)M)?(?:([.,\d]+)S)?/)).minutes;
67
42
  };
43
+
44
+ //#endregion
45
+ exports.addProtocol = addProtocol;
46
+ exports.getColor = getColor;
47
+ exports.parseColor = parseColor;
68
48
  exports.parseISO8601Duration = parseISO8601Duration;
49
+ exports.parseIdFromUrl = parseIdFromUrl;
50
+ //# sourceMappingURL=global.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.helper.js","names":[],"sources":["../../src/helpers/global.helper.ts"],"sourcesContent":["import { CSFDColorRating } from '../dto/global';\nimport { Colors } from '../dto/user-ratings';\n\nexport const parseIdFromUrl = (url: string): number => {\n if (url) {\n const idSlug = url?.split('/')[2];\n const id = idSlug?.split('-')[0];\n return +id || null;\n } else {\n return null;\n }\n};\n\nexport const getColor = (cls: string): CSFDColorRating => {\n switch (cls) {\n case 'page-lightgrey':\n return 'unknown';\n case 'page-red':\n return 'good';\n case 'page-blue':\n return 'average';\n case 'page-grey':\n return 'bad';\n default:\n return 'unknown';\n }\n};\n\nexport const parseColor = (quality: Colors): CSFDColorRating => {\n switch (quality) {\n case 'lightgrey':\n return 'unknown';\n case 'red':\n return 'good';\n case 'blue':\n return 'average';\n case 'grey':\n return 'bad';\n default:\n return 'unknown';\n }\n};\n\nexport const addProtocol = (url: string): string => {\n return url.startsWith('//') ? 'https:' + url : url;\n};\n\nexport const getDuration = (matches: any[]) => {\n return {\n sign: matches[1] === undefined ? '+' : '-',\n years: matches[2] === undefined ? 0 : matches[2],\n months: matches[3] === undefined ? 0 : matches[3],\n weeks: matches[4] === undefined ? 0 : matches[4],\n days: matches[5] === undefined ? 0 : matches[5],\n hours: matches[6] === undefined ? 0 : matches[6],\n minutes: matches[7] === undefined ? 0 : matches[7],\n seconds: matches[8] === undefined ? 0 : matches[8]\n };\n};\n\nexport const parseISO8601Duration = (iso: string): number => {\n const iso8601DurationRegex =\n /(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?/;\n\n const matches = iso.match(iso8601DurationRegex);\n\n const duration = getDuration(matches);\n\n return +duration.minutes;\n};\n"],"mappings":";;AAGA,MAAa,kBAAkB,QAAwB;AACrD,KAAI,IAGF,QAAO,EAFQ,KAAK,MAAM,IAAI,CAAC,KACZ,MAAM,IAAI,CAAC,MAChB;KAEd,QAAO;;AAIX,MAAa,YAAY,QAAiC;AACxD,SAAQ,KAAR;EACE,KAAK,iBACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,QACE,QAAO;;;AAIb,MAAa,cAAc,YAAqC;AAC9D,SAAQ,SAAR;EACE,KAAK,YACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,MAAa,eAAe,QAAwB;AAClD,QAAO,IAAI,WAAW,KAAK,GAAG,WAAW,MAAM;;AAGjD,MAAa,eAAe,YAAmB;AAC7C,QAAO;EACL,MAAM,QAAQ,OAAO,SAAY,MAAM;EACvC,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,QAAQ,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC/C,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,MAAM,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC7C,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,SAAS,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAChD,SAAS,QAAQ,OAAO,SAAY,IAAI,QAAQ;EACjD;;AAGH,MAAa,wBAAwB,QAAwB;AAQ3D,QAAO,CAFU,YAFD,IAAI,MAFlB,kHAE6C,CAEV,CAEpB"}
@@ -0,0 +1,45 @@
1
+ //#region src/helpers/global.helper.ts
2
+ const parseIdFromUrl = (url) => {
3
+ if (url) return +(url?.split("/")[2])?.split("-")[0] || null;
4
+ else return null;
5
+ };
6
+ const getColor = (cls) => {
7
+ switch (cls) {
8
+ case "page-lightgrey": return "unknown";
9
+ case "page-red": return "good";
10
+ case "page-blue": return "average";
11
+ case "page-grey": return "bad";
12
+ default: return "unknown";
13
+ }
14
+ };
15
+ const parseColor = (quality) => {
16
+ switch (quality) {
17
+ case "lightgrey": return "unknown";
18
+ case "red": return "good";
19
+ case "blue": return "average";
20
+ case "grey": return "bad";
21
+ default: return "unknown";
22
+ }
23
+ };
24
+ const addProtocol = (url) => {
25
+ return url.startsWith("//") ? "https:" + url : url;
26
+ };
27
+ const getDuration = (matches) => {
28
+ return {
29
+ sign: matches[1] === void 0 ? "+" : "-",
30
+ years: matches[2] === void 0 ? 0 : matches[2],
31
+ months: matches[3] === void 0 ? 0 : matches[3],
32
+ weeks: matches[4] === void 0 ? 0 : matches[4],
33
+ days: matches[5] === void 0 ? 0 : matches[5],
34
+ hours: matches[6] === void 0 ? 0 : matches[6],
35
+ minutes: matches[7] === void 0 ? 0 : matches[7],
36
+ seconds: matches[8] === void 0 ? 0 : matches[8]
37
+ };
38
+ };
39
+ const parseISO8601Duration = (iso) => {
40
+ return +getDuration(iso.match(/(-)?P(?:([.,\d]+)Y)?(?:([.,\d]+)M)?(?:([.,\d]+)W)?(?:([.,\d]+)D)?T(?:([.,\d]+)H)?(?:([.,\d]+)M)?(?:([.,\d]+)S)?/)).minutes;
41
+ };
42
+
43
+ //#endregion
44
+ export { addProtocol, getColor, parseColor, parseISO8601Duration, parseIdFromUrl };
45
+ //# sourceMappingURL=global.helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.helper.mjs","names":[],"sources":["../../src/helpers/global.helper.ts"],"sourcesContent":["import { CSFDColorRating } from '../dto/global';\nimport { Colors } from '../dto/user-ratings';\n\nexport const parseIdFromUrl = (url: string): number => {\n if (url) {\n const idSlug = url?.split('/')[2];\n const id = idSlug?.split('-')[0];\n return +id || null;\n } else {\n return null;\n }\n};\n\nexport const getColor = (cls: string): CSFDColorRating => {\n switch (cls) {\n case 'page-lightgrey':\n return 'unknown';\n case 'page-red':\n return 'good';\n case 'page-blue':\n return 'average';\n case 'page-grey':\n return 'bad';\n default:\n return 'unknown';\n }\n};\n\nexport const parseColor = (quality: Colors): CSFDColorRating => {\n switch (quality) {\n case 'lightgrey':\n return 'unknown';\n case 'red':\n return 'good';\n case 'blue':\n return 'average';\n case 'grey':\n return 'bad';\n default:\n return 'unknown';\n }\n};\n\nexport const addProtocol = (url: string): string => {\n return url.startsWith('//') ? 'https:' + url : url;\n};\n\nexport const getDuration = (matches: any[]) => {\n return {\n sign: matches[1] === undefined ? '+' : '-',\n years: matches[2] === undefined ? 0 : matches[2],\n months: matches[3] === undefined ? 0 : matches[3],\n weeks: matches[4] === undefined ? 0 : matches[4],\n days: matches[5] === undefined ? 0 : matches[5],\n hours: matches[6] === undefined ? 0 : matches[6],\n minutes: matches[7] === undefined ? 0 : matches[7],\n seconds: matches[8] === undefined ? 0 : matches[8]\n };\n};\n\nexport const parseISO8601Duration = (iso: string): number => {\n const iso8601DurationRegex =\n /(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?/;\n\n const matches = iso.match(iso8601DurationRegex);\n\n const duration = getDuration(matches);\n\n return +duration.minutes;\n};\n"],"mappings":";AAGA,MAAa,kBAAkB,QAAwB;AACrD,KAAI,IAGF,QAAO,EAFQ,KAAK,MAAM,IAAI,CAAC,KACZ,MAAM,IAAI,CAAC,MAChB;KAEd,QAAO;;AAIX,MAAa,YAAY,QAAiC;AACxD,SAAQ,KAAR;EACE,KAAK,iBACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,QACE,QAAO;;;AAIb,MAAa,cAAc,YAAqC;AAC9D,SAAQ,SAAR;EACE,KAAK,YACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,MAAa,eAAe,QAAwB;AAClD,QAAO,IAAI,WAAW,KAAK,GAAG,WAAW,MAAM;;AAGjD,MAAa,eAAe,YAAmB;AAC7C,QAAO;EACL,MAAM,QAAQ,OAAO,SAAY,MAAM;EACvC,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,QAAQ,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC/C,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,MAAM,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC7C,OAAO,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAC9C,SAAS,QAAQ,OAAO,SAAY,IAAI,QAAQ;EAChD,SAAS,QAAQ,OAAO,SAAY,IAAI,QAAQ;EACjD;;AAGH,MAAa,wBAAwB,QAAwB;AAQ3D,QAAO,CAFU,YAFD,IAAI,MAFlB,kHAE6C,CAEV,CAEpB"}
@@ -1,253 +1,162 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTags = exports.getPremieres = exports.getBoxMovies = exports.getBoxContent = exports.getVods = exports.getType = exports.getGroup = exports.parsePeople = exports.getDescriptions = exports.getTrivia = exports.getRandomPhoto = exports.getPoster = exports.getTitlesOther = exports.getDuration = exports.getYear = exports.getRatingCount = exports.getRating = exports.getColorRating = exports.getOrigins = exports.getGenres = exports.getTitle = exports.getId = void 0;
4
- const global_helper_1 = require("./global.helper");
5
- const getId = (el) => {
6
- const url = el.querySelector('.tabs .tab-nav-list a').attributes.href;
7
- return (0, global_helper_1.parseIdFromUrl)(url);
8
- };
9
- exports.getId = getId;
10
- const getTitle = (el) => {
11
- return el.querySelector('h1').innerText.split(`(`)[0].trim();
12
- };
13
- exports.getTitle = getTitle;
14
- const getGenres = (el) => {
15
- const genresRaw = el.querySelector('.genres').textContent;
16
- return genresRaw.split(' / ');
17
- };
18
- exports.getGenres = getGenres;
19
- const getOrigins = (el) => {
20
- const originsRaw = el.querySelector('.origin').textContent;
21
- const origins = originsRaw.split(',')[0];
22
- return origins.split(' / ');
23
- };
24
- exports.getOrigins = getOrigins;
25
- const getColorRating = (bodyClasses) => {
26
- return (0, global_helper_1.getColor)(bodyClasses[1]);
27
- };
28
- exports.getColorRating = getColorRating;
29
- const getRating = (el) => {
30
- const ratingRaw = el.querySelector('.film-rating-average').textContent;
31
- const rating = ratingRaw === null || ratingRaw === void 0 ? void 0 : ratingRaw.replace(/%/g, '').trim();
32
- const ratingInt = parseInt(rating);
33
- if (Number.isInteger(ratingInt)) {
34
- return ratingInt;
35
- }
36
- else {
37
- return null;
38
- }
39
- };
40
- exports.getRating = getRating;
41
- const getRatingCount = (el) => {
42
- var _a;
43
- const ratingCountRaw = (_a = el.querySelector('.box-rating-container .counter')) === null || _a === void 0 ? void 0 : _a.textContent;
44
- const ratingCount = +(ratingCountRaw === null || ratingCountRaw === void 0 ? void 0 : ratingCountRaw.replace(/[(\s)]/g, ''));
45
- if (Number.isInteger(ratingCount)) {
46
- return ratingCount;
47
- }
48
- else {
49
- return null;
50
- }
51
- };
52
- exports.getRatingCount = getRatingCount;
53
- const getYear = (el) => {
54
- try {
55
- const jsonLd = JSON.parse(el);
56
- return +jsonLd.dateCreated;
57
- }
58
- catch (error) {
59
- console.error('node-csfd-api: Error parsing JSON-LD', error);
60
- return null;
61
- }
62
- };
63
- exports.getYear = getYear;
64
- const getDuration = (jsonLdRaw, el) => {
65
- let duration = null;
66
- try {
67
- const jsonLd = JSON.parse(jsonLdRaw);
68
- duration = jsonLd.duration;
69
- return (0, global_helper_1.parseISO8601Duration)(duration);
70
- }
71
- catch (error) {
72
- const origin = el.querySelector('.origin').innerText;
73
- const timeString = origin.split(',');
74
- if (timeString.length > 2) {
75
- // Get last time elelment
76
- const timeString2 = timeString.pop().trim();
77
- // Clean it
78
- const timeRaw = timeString2.split('(')[0].trim();
79
- // Split by minutes and hours
80
- const hoursMinsRaw = timeRaw.split('min')[0];
81
- const hoursMins = hoursMinsRaw.split('h');
82
- // Resolve hours + minutes format
83
- duration = hoursMins.length > 1 ? +hoursMins[0] * 60 + +hoursMins[1] : +hoursMins[0];
84
- return duration;
85
- }
86
- else {
87
- return null;
88
- }
89
- }
90
- };
91
- exports.getDuration = getDuration;
92
- const getTitlesOther = (el) => {
93
- const namesNode = el.querySelectorAll('.film-names li');
94
- if (!namesNode.length) {
95
- return [];
96
- }
97
- const titlesOther = namesNode.map((el) => {
98
- const country = el.querySelector('img.flag').attributes.alt;
99
- const title = el.textContent.trim().split('\n')[0];
100
- if (country && title) {
101
- return {
102
- country,
103
- title
104
- };
105
- }
106
- else {
107
- return null;
108
- }
109
- });
110
- return titlesOther.filter((x) => x);
111
- };
112
- exports.getTitlesOther = getTitlesOther;
113
- const getPoster = (el) => {
114
- var _a;
115
- const poster = el.querySelector('.film-posters img');
116
- // Resolve empty image
117
- if (poster) {
118
- if ((_a = poster.classNames) === null || _a === void 0 ? void 0 : _a.includes('empty-image')) {
119
- return null;
120
- }
121
- else {
122
- // Full sized image (not thumb)
123
- const imageThumb = poster.attributes.src.split('?')[0];
124
- const image = imageThumb.replace(/\/w140\//, '/w1080/');
125
- return (0, global_helper_1.addProtocol)(image);
126
- }
127
- }
128
- else {
129
- return null;
130
- }
131
- };
132
- exports.getPoster = getPoster;
133
- const getRandomPhoto = (el) => {
134
- var _a;
135
- const imageNode = el.querySelector('.gallery-item picture img');
136
- const image = (_a = imageNode === null || imageNode === void 0 ? void 0 : imageNode.attributes) === null || _a === void 0 ? void 0 : _a.src;
137
- if (image) {
138
- return image.replace(/\/w663\//, '/w1326/');
139
- }
140
- else {
141
- return null;
142
- }
143
- };
144
- exports.getRandomPhoto = getRandomPhoto;
145
- const getTrivia = (el) => {
146
- const triviaNodes = el.querySelectorAll('.article-trivia ul li');
147
- if (triviaNodes === null || triviaNodes === void 0 ? void 0 : triviaNodes.length) {
148
- return triviaNodes.map((node) => node.textContent.trim().replace(/(\r\n|\n|\r|\t)/gm, ''));
149
- }
150
- else {
151
- return null;
152
- }
153
- };
154
- exports.getTrivia = getTrivia;
155
- const getDescriptions = (el) => {
156
- return el
157
- .querySelectorAll('.body--plots .plot-full p, .body--plots .plots .plots-item p')
158
- .map((movie) => { var _a; return (_a = movie.textContent) === null || _a === void 0 ? void 0 : _a.trim().replace(/(\r\n|\n|\r|\t)/gm, ''); });
159
- };
160
- exports.getDescriptions = getDescriptions;
161
- const parsePeople = (el) => {
162
- const people = el.querySelectorAll('a');
163
- return (people
164
- // Filter out "more" links
165
- .filter((x) => x.classNames.length === 0)
166
- .map((person) => {
167
- return {
168
- id: (0, global_helper_1.parseIdFromUrl)(person.attributes.href),
169
- name: person.innerText.trim(),
170
- url: `https://www.csfd.cz${person.attributes.href}`
171
- };
172
- }));
173
- };
174
- exports.parsePeople = parsePeople;
175
- const getGroup = (el, group) => {
176
- const creators = el.querySelectorAll('.creators h4');
177
- const element = creators.filter((elem) => elem.textContent.trim().includes(group))[0];
178
- if (element === null || element === void 0 ? void 0 : element.parentNode) {
179
- return (0, exports.parsePeople)(element.parentNode);
180
- }
181
- else {
182
- return [];
183
- }
184
- };
185
- exports.getGroup = getGroup;
186
- const getType = (el) => {
187
- var _a;
188
- const type = el.querySelector('.film-header-name .type');
189
- return ((_a = type === null || type === void 0 ? void 0 : type.innerText) === null || _a === void 0 ? void 0 : _a.replace(/[{()}]/g, '')) || 'film';
190
- };
191
- exports.getType = getType;
192
- const getVods = (el) => {
193
- let vods = [];
194
- if (el) {
195
- const buttons = el.querySelectorAll('.box-buttons .button');
196
- const buttonsVod = buttons.filter((x) => !x.classNames.includes('button-social'));
197
- vods = buttonsVod.map((btn) => {
198
- return {
199
- title: btn.textContent.trim(),
200
- url: btn.attributes.href
201
- };
202
- });
203
- }
204
- return vods.length ? vods : [];
205
- };
206
- exports.getVods = getVods;
207
- // Get box content
1
+ const require_global_helper = require('./global.helper.js');
2
+
3
+ //#region src/helpers/movie.helper.ts
4
+ const getMovieTitle = (el) => {
5
+ return el.querySelector("h1").innerText.split(`(`)[0].trim();
6
+ };
7
+ const getMovieGenres = (el) => {
8
+ return el.querySelector(".genres").textContent.split(" / ");
9
+ };
10
+ const getMovieOrigins = (el) => {
11
+ return el.querySelector(".origin").textContent.split(",")[0].split(" / ");
12
+ };
13
+ const getMovieColorRating = (bodyClasses) => {
14
+ return require_global_helper.getColor(bodyClasses[1]);
15
+ };
16
+ const getMovieRating = (el) => {
17
+ const rating = el.querySelector(".film-rating-average").textContent?.replace(/%/g, "").trim();
18
+ const ratingInt = parseInt(rating);
19
+ if (Number.isInteger(ratingInt)) return ratingInt;
20
+ else return null;
21
+ };
22
+ const getMovieRatingCount = (el) => {
23
+ const ratingCount = +(el.querySelector(".box-rating-container .counter")?.textContent)?.replace(/[(\s)]/g, "");
24
+ if (Number.isInteger(ratingCount)) return ratingCount;
25
+ else return null;
26
+ };
27
+ const getMovieYear = (el) => {
28
+ try {
29
+ return +JSON.parse(el).dateCreated;
30
+ } catch (error) {
31
+ console.error("node-csfd-api: Error parsing JSON-LD", error);
32
+ return null;
33
+ }
34
+ };
35
+ const getMovieDuration = (jsonLdRaw, el) => {
36
+ let duration = null;
37
+ try {
38
+ duration = JSON.parse(jsonLdRaw).duration;
39
+ return require_global_helper.parseISO8601Duration(duration);
40
+ } catch (error) {
41
+ const timeString = el.querySelector(".origin").innerText.split(",");
42
+ if (timeString.length > 2) {
43
+ const hoursMins = timeString.pop().trim().split("(")[0].trim().split("min")[0].split("h");
44
+ duration = hoursMins.length > 1 ? +hoursMins[0] * 60 + +hoursMins[1] : +hoursMins[0];
45
+ return duration;
46
+ } else return null;
47
+ }
48
+ };
49
+ const getMovieTitlesOther = (el) => {
50
+ const namesNode = el.querySelectorAll(".film-names li");
51
+ if (!namesNode.length) return [];
52
+ return namesNode.map((el$1) => {
53
+ const country = el$1.querySelector("img.flag").attributes.alt;
54
+ const title = el$1.textContent.trim().split("\n")[0];
55
+ if (country && title) return {
56
+ country,
57
+ title
58
+ };
59
+ else return null;
60
+ }).filter((x) => x);
61
+ };
62
+ const getMoviePoster = (el) => {
63
+ const poster = el.querySelector(".film-posters img");
64
+ if (poster) if (poster.classNames?.includes("empty-image")) return null;
65
+ else return require_global_helper.addProtocol(poster.attributes.src.split("?")[0].replace(/\/w140\//, "/w1080/"));
66
+ else return null;
67
+ };
68
+ const getMovieRandomPhoto = (el) => {
69
+ const image = el.querySelector(".gallery-item picture img")?.attributes?.src;
70
+ if (image) return image.replace(/\/w663\//, "/w1326/");
71
+ else return null;
72
+ };
73
+ const getMovieTrivia = (el) => {
74
+ const triviaNodes = el.querySelectorAll(".article-trivia ul li");
75
+ if (triviaNodes?.length) return triviaNodes.map((node) => node.textContent.trim().replace(/(\r\n|\n|\r|\t)/gm, ""));
76
+ else return null;
77
+ };
78
+ const getMovieDescriptions = (el) => {
79
+ return el.querySelectorAll(".body--plots .plot-full p, .body--plots .plots .plots-item p").map((movie) => movie.textContent?.trim().replace(/(\r\n|\n|\r|\t)/gm, ""));
80
+ };
81
+ const parseMoviePeople = (el) => {
82
+ return el.querySelectorAll("a").filter((x) => x.classNames.length === 0).map((person) => {
83
+ return {
84
+ id: require_global_helper.parseIdFromUrl(person.attributes.href),
85
+ name: person.innerText.trim(),
86
+ url: `https://www.csfd.cz${person.attributes.href}`
87
+ };
88
+ });
89
+ };
90
+ const getMovieGroup = (el, group) => {
91
+ const element = el.querySelectorAll(".creators h4").filter((elem) => elem.textContent.trim().includes(group))[0];
92
+ if (element?.parentNode) return parseMoviePeople(element.parentNode);
93
+ else return [];
94
+ };
95
+ const getMovieType = (el) => {
96
+ return el.querySelector(".film-header-name .type")?.innerText?.replace(/[{()}]/g, "") || "film";
97
+ };
98
+ const getMovieVods = (el) => {
99
+ let vods = [];
100
+ if (el) vods = el.querySelectorAll(".box-buttons .button").filter((x) => !x.classNames.includes("button-social")).map((btn) => {
101
+ return {
102
+ title: btn.textContent.trim(),
103
+ url: btn.attributes.href
104
+ };
105
+ });
106
+ return vods.length ? vods : [];
107
+ };
208
108
  const getBoxContent = (el, box) => {
209
- var _a;
210
- const headers = el.querySelectorAll('section.box .box-header');
211
- return (_a = headers.find((header) => header.querySelector('h3').textContent.trim().includes(box))) === null || _a === void 0 ? void 0 : _a.parentNode;
212
- };
213
- exports.getBoxContent = getBoxContent;
214
- const getBoxMovies = (el, boxName) => {
215
- const movieListItem = [];
216
- const box = (0, exports.getBoxContent)(el, boxName);
217
- const movieTitleNodes = box === null || box === void 0 ? void 0 : box.querySelectorAll('.article-header .film-title-name');
218
- if (movieTitleNodes === null || movieTitleNodes === void 0 ? void 0 : movieTitleNodes.length) {
219
- for (const item of movieTitleNodes) {
220
- movieListItem.push({
221
- id: (0, global_helper_1.parseIdFromUrl)(item.attributes.href),
222
- title: item.textContent.trim(),
223
- url: `https://www.csfd.cz${item.attributes.href}`
224
- });
225
- }
226
- }
227
- return movieListItem;
228
- };
229
- exports.getBoxMovies = getBoxMovies;
230
- const getPremieres = (el) => {
231
- var _a, _b;
232
- const premiereNodes = el.querySelectorAll('.box-premieres li');
233
- const premiere = [];
234
- for (const premiereNode of premiereNodes) {
235
- const title = premiereNode.querySelector('p + span').attributes.title;
236
- if (title) {
237
- const [date, ...company] = title === null || title === void 0 ? void 0 : title.split(' ');
238
- premiere.push({
239
- country: ((_a = premiereNode.querySelector('.flag')) === null || _a === void 0 ? void 0 : _a.attributes.title) || null,
240
- format: (_b = premiereNode.querySelector('p').textContent.trim()) === null || _b === void 0 ? void 0 : _b.split(' od')[0],
241
- date,
242
- company: company.join(' ')
243
- });
244
- }
245
- }
246
- return premiere;
247
- };
248
- exports.getPremieres = getPremieres;
249
- const getTags = (el) => {
250
- const tagsRaw = el.querySelectorAll('.box-content a[href*="/tag/"]');
251
- return tagsRaw.map((tag) => tag.textContent);
252
- };
253
- exports.getTags = getTags;
109
+ return el.querySelectorAll("section.box .box-header").find((header) => header.querySelector("h3").textContent.trim().includes(box))?.parentNode;
110
+ };
111
+ const getMovieBoxMovies = (el, boxName) => {
112
+ const movieListItem = [];
113
+ const movieTitleNodes = getBoxContent(el, boxName)?.querySelectorAll(".article-header .film-title-name");
114
+ if (movieTitleNodes?.length) for (const item of movieTitleNodes) movieListItem.push({
115
+ id: require_global_helper.parseIdFromUrl(item.attributes.href),
116
+ title: item.textContent.trim(),
117
+ url: `https://www.csfd.cz${item.attributes.href}`
118
+ });
119
+ return movieListItem;
120
+ };
121
+ const getMoviePremieres = (el) => {
122
+ const premiereNodes = el.querySelectorAll(".box-premieres li");
123
+ const premiere = [];
124
+ for (const premiereNode of premiereNodes) {
125
+ const title = premiereNode.querySelector("p + span").attributes.title;
126
+ if (title) {
127
+ const [date, ...company] = title?.split(" ");
128
+ premiere.push({
129
+ country: premiereNode.querySelector(".flag")?.attributes.title || null,
130
+ format: premiereNode.querySelector("p").textContent.trim()?.split(" od")[0],
131
+ date,
132
+ company: company.join(" ")
133
+ });
134
+ }
135
+ }
136
+ return premiere;
137
+ };
138
+ const getMovieTags = (el) => {
139
+ return el.querySelectorAll(".box-content a[href*=\"/tag/\"]").map((tag) => tag.textContent);
140
+ };
141
+
142
+ //#endregion
143
+ exports.getMovieBoxMovies = getMovieBoxMovies;
144
+ exports.getMovieColorRating = getMovieColorRating;
145
+ exports.getMovieDescriptions = getMovieDescriptions;
146
+ exports.getMovieDuration = getMovieDuration;
147
+ exports.getMovieGenres = getMovieGenres;
148
+ exports.getMovieGroup = getMovieGroup;
149
+ exports.getMovieOrigins = getMovieOrigins;
150
+ exports.getMoviePoster = getMoviePoster;
151
+ exports.getMoviePremieres = getMoviePremieres;
152
+ exports.getMovieRandomPhoto = getMovieRandomPhoto;
153
+ exports.getMovieRating = getMovieRating;
154
+ exports.getMovieRatingCount = getMovieRatingCount;
155
+ exports.getMovieTags = getMovieTags;
156
+ exports.getMovieTitle = getMovieTitle;
157
+ exports.getMovieTitlesOther = getMovieTitlesOther;
158
+ exports.getMovieTrivia = getMovieTrivia;
159
+ exports.getMovieType = getMovieType;
160
+ exports.getMovieVods = getMovieVods;
161
+ exports.getMovieYear = getMovieYear;
162
+ //# sourceMappingURL=movie.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movie.helper.js","names":["getColor","parseISO8601Duration","el","addProtocol","parseIdFromUrl","vods: CSFDVod[]","movieListItem: CSFDMovieListItem[]","premiere: CSFDPremiere[]"],"sources":["../../src/helpers/movie.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating } from '../dto/global';\nimport {\n CSFDBoxContent,\n CSFDCreatorGroups,\n CSFDGenres,\n CSFDMovieCreator,\n CSFDMovieListItem,\n CSFDPremiere,\n CSFDTitlesOther,\n CSFDVod,\n CSFDVodService\n} from '../dto/movie';\nimport { addProtocol, getColor, parseISO8601Duration, parseIdFromUrl } from './global.helper.js';\n\nexport const getMovieId = (el: HTMLElement): number => {\n const url = el.querySelector('.tabs .tab-nav-list a').attributes.href;\n return parseIdFromUrl(url);\n};\n\nexport const getMovieTitle = (el: HTMLElement): string => {\n return el.querySelector('h1').innerText.split(`(`)[0].trim();\n};\n\nexport const getMovieGenres = (el: HTMLElement): CSFDGenres[] => {\n const genresRaw = el.querySelector('.genres').textContent;\n return genresRaw.split(' / ') as CSFDGenres[];\n};\n\nexport const getMovieOrigins = (el: HTMLElement): string[] => {\n const originsRaw = el.querySelector('.origin').textContent;\n const origins = originsRaw.split(',')[0];\n return origins.split(' / ');\n};\n\nexport const getMovieColorRating = (bodyClasses: string[]): CSFDColorRating => {\n return getColor(bodyClasses[1]);\n};\n\nexport const getMovieRating = (el: HTMLElement): number => {\n const ratingRaw = el.querySelector('.film-rating-average').textContent;\n const rating = ratingRaw?.replace(/%/g, '').trim();\n const ratingInt = parseInt(rating);\n\n if (Number.isInteger(ratingInt)) {\n return ratingInt;\n } else {\n return null;\n }\n};\n\nexport const getMovieRatingCount = (el: HTMLElement): number => {\n const ratingCountRaw = el.querySelector('.box-rating-container .counter')?.textContent;\n const ratingCount = +ratingCountRaw?.replace(/[(\\s)]/g, '');\n if (Number.isInteger(ratingCount)) {\n return ratingCount;\n } else {\n return null;\n }\n};\n\nexport const getMovieYear = (el: string): number => {\n try {\n const jsonLd = JSON.parse(el);\n return +jsonLd.dateCreated;\n } catch (error) {\n console.error('node-csfd-api: Error parsing JSON-LD', error);\n return null;\n }\n};\n\nexport const getMovieDuration = (jsonLdRaw: string, el: HTMLElement): number => {\n let duration = null;\n try {\n const jsonLd = JSON.parse(jsonLdRaw);\n duration = jsonLd.duration;\n return parseISO8601Duration(duration);\n } catch (error) {\n const origin = el.querySelector('.origin').innerText;\n const timeString = origin.split(',');\n if (timeString.length > 2) {\n // Get last time elelment\n const timeString2 = timeString.pop().trim();\n // Clean it\n const timeRaw = timeString2.split('(')[0].trim();\n // Split by minutes and hours\n const hoursMinsRaw = timeRaw.split('min')[0];\n const hoursMins = hoursMinsRaw.split('h');\n // Resolve hours + minutes format\n duration = hoursMins.length > 1 ? +hoursMins[0] * 60 + +hoursMins[1] : +hoursMins[0];\n return duration;\n } else {\n return null;\n }\n }\n};\n\nexport const getMovieTitlesOther = (el: HTMLElement): CSFDTitlesOther[] => {\n const namesNode = el.querySelectorAll('.film-names li');\n\n if (!namesNode.length) {\n return [];\n }\n\n const titlesOther = namesNode.map((el) => {\n const country = el.querySelector('img.flag').attributes.alt;\n const title = el.textContent.trim().split('\\n')[0];\n\n if (country && title) {\n return {\n country,\n title\n };\n } else {\n return null;\n }\n });\n\n return titlesOther.filter((x) => x);\n};\n\nexport const getMoviePoster = (el: HTMLElement | null): string => {\n const poster = el.querySelector('.film-posters img');\n // Resolve empty image\n if (poster) {\n if (poster.classNames?.includes('empty-image')) {\n return null;\n } else {\n // Full sized image (not thumb)\n const imageThumb = poster.attributes.src.split('?')[0];\n const image = imageThumb.replace(/\\/w140\\//, '/w1080/');\n return addProtocol(image);\n }\n } else {\n return null;\n }\n};\n\nexport const getMovieRandomPhoto = (el: HTMLElement | null): string => {\n const imageNode = el.querySelector('.gallery-item picture img');\n const image = imageNode?.attributes?.src;\n if (image) {\n return image.replace(/\\/w663\\//, '/w1326/');\n } else {\n return null;\n }\n};\n\nexport const getMovieTrivia = (el: HTMLElement | null): string[] => {\n const triviaNodes = el.querySelectorAll('.article-trivia ul li');\n if (triviaNodes?.length) {\n return triviaNodes.map((node) => node.textContent.trim().replace(/(\\r\\n|\\n|\\r|\\t)/gm, ''));\n } else {\n return null;\n }\n};\n\nexport const getMovieDescriptions = (el: HTMLElement): string[] => {\n return el\n .querySelectorAll('.body--plots .plot-full p, .body--plots .plots .plots-item p')\n .map((movie) => movie.textContent?.trim().replace(/(\\r\\n|\\n|\\r|\\t)/gm, ''));\n};\n\nconst parseMoviePeople = (el: HTMLElement): CSFDMovieCreator[] => {\n const people = el.querySelectorAll('a');\n return (\n people\n // Filter out \"more\" links\n .filter((x) => x.classNames.length === 0)\n .map((person) => {\n return {\n id: parseIdFromUrl(person.attributes.href),\n name: person.innerText.trim(),\n url: `https://www.csfd.cz${person.attributes.href}`\n };\n })\n );\n};\n\nexport const getMovieGroup = (el: HTMLElement, group: CSFDCreatorGroups): CSFDMovieCreator[] => {\n const creators = el.querySelectorAll('.creators h4');\n const element = creators.filter((elem) => elem.textContent.trim().includes(group))[0];\n if (element?.parentNode) {\n return parseMoviePeople(element.parentNode as HTMLElement);\n } else {\n return [];\n }\n};\n\nexport const getMovieType = (el: HTMLElement): string => {\n const type = el.querySelector('.film-header-name .type');\n return type?.innerText?.replace(/[{()}]/g, '') || 'film';\n};\n\nexport const getMovieVods = (el: HTMLElement | null): CSFDVod[] => {\n let vods: CSFDVod[] = [];\n if (el) {\n const buttons = el.querySelectorAll('.box-buttons .button');\n const buttonsVod = buttons.filter((x) => !x.classNames.includes('button-social'));\n vods = buttonsVod.map((btn) => {\n return {\n title: btn.textContent.trim() as CSFDVodService,\n url: btn.attributes.href\n };\n });\n }\n return vods.length ? vods : [];\n};\n\n// Get box content\nconst getBoxContent = (el: HTMLElement, box: string): HTMLElement => {\n const headers = el.querySelectorAll('section.box .box-header');\n return headers.find((header) => header.querySelector('h3').textContent.trim().includes(box))\n ?.parentNode;\n};\n\nexport const getMovieBoxMovies = (el: HTMLElement, boxName: CSFDBoxContent): CSFDMovieListItem[] => {\n const movieListItem: CSFDMovieListItem[] = [];\n const box = getBoxContent(el, boxName);\n const movieTitleNodes = box?.querySelectorAll('.article-header .film-title-name');\n if (movieTitleNodes?.length) {\n for (const item of movieTitleNodes) {\n movieListItem.push({\n id: parseIdFromUrl(item.attributes.href),\n title: item.textContent.trim(),\n url: `https://www.csfd.cz${item.attributes.href}`\n });\n }\n }\n return movieListItem;\n};\n\nexport const getMoviePremieres = (el: HTMLElement): CSFDPremiere[] => {\n const premiereNodes = el.querySelectorAll('.box-premieres li');\n const premiere: CSFDPremiere[] = [];\n for (const premiereNode of premiereNodes) {\n const title = premiereNode.querySelector('p + span').attributes.title;\n\n if (title) {\n const [date, ...company] = title?.split(' ');\n\n premiere.push({\n country: premiereNode.querySelector('.flag')?.attributes.title || null,\n format: premiereNode.querySelector('p').textContent.trim()?.split(' od')[0],\n date,\n company: company.join(' ')\n });\n }\n }\n return premiere;\n};\n\nexport const getMovieTags = (el: HTMLElement): string[] => {\n const tagsRaw = el.querySelectorAll('.box-content a[href*=\"/tag/\"]');\n return tagsRaw.map((tag) => tag.textContent);\n};\n"],"mappings":"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"}