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.
- package/LICENSE +21 -0
- package/_virtual/rolldown_runtime.js +25 -0
- package/dto/cinema.d.mts +28 -0
- package/dto/cinema.d.ts +28 -0
- package/dto/creator.d.mts +17 -0
- package/dto/creator.d.ts +17 -0
- package/dto/global.d.mts +26 -0
- package/dto/global.d.ts +26 -0
- package/dto/movie.d.mts +69 -0
- package/dto/movie.d.ts +69 -0
- package/dto/search.d.mts +32 -0
- package/dto/search.d.ts +32 -0
- package/dto/user-ratings.d.mts +22 -0
- package/dto/user-ratings.d.ts +22 -0
- package/fetchers/fetch.polyfill.js +10 -9
- package/fetchers/fetch.polyfill.js.map +1 -0
- package/fetchers/fetch.polyfill.mjs +8 -0
- package/fetchers/fetch.polyfill.mjs.map +1 -0
- package/fetchers/fetchers.js +24 -0
- package/fetchers/fetchers.js.map +1 -0
- package/fetchers/fetchers.mjs +24 -0
- package/fetchers/fetchers.mjs.map +1 -0
- package/helpers/cinema.helper.js +70 -91
- package/helpers/cinema.helper.js.map +1 -0
- package/helpers/cinema.helper.mjs +80 -0
- package/helpers/cinema.helper.mjs.map +1 -0
- package/helpers/creator.helper.js +64 -78
- package/helpers/creator.helper.js.map +1 -0
- package/helpers/creator.helper.mjs +69 -0
- package/helpers/creator.helper.mjs.map +1 -0
- package/helpers/global.helper.js +37 -55
- package/helpers/global.helper.js.map +1 -0
- package/helpers/global.helper.mjs +45 -0
- package/helpers/global.helper.mjs.map +1 -0
- package/helpers/movie.helper.js +161 -252
- package/helpers/movie.helper.js.map +1 -0
- package/helpers/movie.helper.mjs +144 -0
- package/helpers/movie.helper.mjs.map +1 -0
- package/helpers/search-user.helper.js +20 -18
- package/helpers/search-user.helper.js.map +1 -0
- package/helpers/search-user.helper.mjs +24 -0
- package/helpers/search-user.helper.mjs.map +1 -0
- package/helpers/search.helper.js +52 -62
- package/helpers/search.helper.js.map +1 -0
- package/helpers/search.helper.mjs +45 -0
- package/helpers/search.helper.mjs.map +1 -0
- package/helpers/user-ratings.helper.js +47 -56
- package/helpers/user-ratings.helper.js.map +1 -0
- package/helpers/user-ratings.helper.mjs +44 -0
- package/helpers/user-ratings.helper.mjs.map +1 -0
- package/index.d.mts +29 -0
- package/index.d.ts +28 -23
- package/index.js +41 -38
- package/index.js.map +1 -0
- package/index.mjs +41 -0
- package/index.mjs.map +1 -0
- package/package.json +11 -25
- package/services/cinema.service.d.mts +11 -0
- package/services/cinema.service.d.ts +10 -5
- package/services/cinema.service.js +34 -33
- package/services/cinema.service.js.map +1 -0
- package/services/cinema.service.mjs +33 -0
- package/services/cinema.service.mjs.map +1 -0
- package/services/creator.service.d.mts +11 -0
- package/services/creator.service.d.ts +10 -5
- package/services/creator.service.js +34 -35
- package/services/creator.service.js.map +1 -0
- package/services/creator.service.mjs +33 -0
- package/services/creator.service.mjs.map +1 -0
- package/services/movie.service.d.mts +11 -0
- package/services/movie.service.d.ts +10 -5
- package/services/movie.service.js +61 -61
- package/services/movie.service.js.map +1 -0
- package/services/movie.service.mjs +60 -0
- package/services/movie.service.mjs.map +1 -0
- package/services/search.service.d.mts +10 -0
- package/services/search.service.d.ts +9 -4
- package/services/search.service.js +80 -79
- package/services/search.service.js.map +1 -0
- package/services/search.service.mjs +79 -0
- package/services/search.service.mjs.map +1 -0
- package/services/user-ratings.service.d.mts +12 -0
- package/services/user-ratings.service.d.ts +11 -6
- package/services/user-ratings.service.js +63 -81
- package/services/user-ratings.service.js.map +1 -0
- package/services/user-ratings.service.mjs +64 -0
- package/services/user-ratings.service.mjs.map +1 -0
- package/vars.js +11 -9
- package/vars.js.map +1 -0
- package/vars.mjs +12 -0
- package/vars.mjs.map +1 -0
- package/fetchers/fetch.polyfill.d.ts +0 -1
- package/fetchers/index.d.ts +0 -1
- package/fetchers/index.js +0 -27
- package/helpers/cinema.helper.d.ts +0 -18
- package/helpers/creator.helper.d.ts +0 -17
- package/helpers/global.helper.d.ts +0 -17
- package/helpers/movie.helper.d.ts +0 -25
- package/helpers/search-user.helper.d.ts +0 -5
- package/helpers/search.helper.d.ts +0 -11
- package/helpers/user-ratings.helper.d.ts +0 -13
- package/interfaces/cinema.interface.d.ts +0 -23
- package/interfaces/cinema.interface.js +0 -2
- package/interfaces/creator.interface.d.ts +0 -12
- package/interfaces/creator.interface.js +0 -2
- package/interfaces/global.d.ts +0 -22
- package/interfaces/global.js +0 -2
- package/interfaces/movie.interface.d.ts +0 -66
- package/interfaces/movie.interface.js +0 -2
- package/interfaces/search.interface.d.ts +0 -27
- package/interfaces/search.interface.js +0 -2
- package/interfaces/user-ratings.interface.d.ts +0 -18
- package/interfaces/user-ratings.interface.js +0 -2
- package/vars.d.ts +0 -6
package/helpers/global.helper.js
CHANGED
|
@@ -1,68 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
26
|
+
return url.startsWith("//") ? "https:" + url : url;
|
|
47
27
|
};
|
|
48
|
-
exports.addProtocol = addProtocol;
|
|
49
28
|
const getDuration = (matches) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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"}
|
package/helpers/movie.helper.js
CHANGED
|
@@ -1,253 +1,162 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
exports.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
exports.
|
|
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":";;;AAoBA,MAAa,iBAAiB,OAA4B;AACxD,QAAO,GAAG,cAAc,KAAK,CAAC,UAAU,MAAM,IAAI,CAAC,GAAG,MAAM;;AAG9D,MAAa,kBAAkB,OAAkC;AAE/D,QADkB,GAAG,cAAc,UAAU,CAAC,YAC7B,MAAM,MAAM;;AAG/B,MAAa,mBAAmB,OAA8B;AAG5D,QAFmB,GAAG,cAAc,UAAU,CAAC,YACpB,MAAM,IAAI,CAAC,GACvB,MAAM,MAAM;;AAG7B,MAAa,uBAAuB,gBAA2C;AAC7E,QAAOA,+BAAS,YAAY,GAAG;;AAGjC,MAAa,kBAAkB,OAA4B;CAEzD,MAAM,SADY,GAAG,cAAc,uBAAuB,CAAC,aACjC,QAAQ,MAAM,GAAG,CAAC,MAAM;CAClD,MAAM,YAAY,SAAS,OAAO;AAElC,KAAI,OAAO,UAAU,UAAU,CAC7B,QAAO;KAEP,QAAO;;AAIX,MAAa,uBAAuB,OAA4B;CAE9D,MAAM,cAAc,EADG,GAAG,cAAc,iCAAiC,EAAE,cACtC,QAAQ,WAAW,GAAG;AAC3D,KAAI,OAAO,UAAU,YAAY,CAC/B,QAAO;KAEP,QAAO;;AAIX,MAAa,gBAAgB,OAAuB;AAClD,KAAI;AAEF,SAAO,CADQ,KAAK,MAAM,GAAG,CACd;UACR,OAAO;AACd,UAAQ,MAAM,wCAAwC,MAAM;AAC5D,SAAO;;;AAIX,MAAa,oBAAoB,WAAmB,OAA4B;CAC9E,IAAI,WAAW;AACf,KAAI;AAEF,aADe,KAAK,MAAM,UAAU,CAClB;AAClB,SAAOC,2CAAqB,SAAS;UAC9B,OAAO;EAEd,MAAM,aADS,GAAG,cAAc,UAAU,CAAC,UACjB,MAAM,IAAI;AACpC,MAAI,WAAW,SAAS,GAAG;GAOzB,MAAM,YALc,WAAW,KAAK,CAAC,MAAM,CAEf,MAAM,IAAI,CAAC,GAAG,MAAM,CAEnB,MAAM,MAAM,CAAC,GACX,MAAM,IAAI;AAEzC,cAAW,UAAU,SAAS,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,KAAK,CAAC,UAAU;AAClF,UAAO;QAEP,QAAO;;;AAKb,MAAa,uBAAuB,OAAuC;CACzE,MAAM,YAAY,GAAG,iBAAiB,iBAAiB;AAEvD,KAAI,CAAC,UAAU,OACb,QAAO,EAAE;AAiBX,QAdoB,UAAU,KAAK,SAAO;EACxC,MAAM,UAAUC,KAAG,cAAc,WAAW,CAAC,WAAW;EACxD,MAAM,QAAQA,KAAG,YAAY,MAAM,CAAC,MAAM,KAAK,CAAC;AAEhD,MAAI,WAAW,MACb,QAAO;GACL;GACA;GACD;MAED,QAAO;GAET,CAEiB,QAAQ,MAAM,EAAE;;AAGrC,MAAa,kBAAkB,OAAmC;CAChE,MAAM,SAAS,GAAG,cAAc,oBAAoB;AAEpD,KAAI,OACF,KAAI,OAAO,YAAY,SAAS,cAAc,CAC5C,QAAO;KAKP,QAAOC,kCAFY,OAAO,WAAW,IAAI,MAAM,IAAI,CAAC,GAC3B,QAAQ,YAAY,UAAU,CAC9B;KAG3B,QAAO;;AAIX,MAAa,uBAAuB,OAAmC;CAErE,MAAM,QADY,GAAG,cAAc,4BAA4B,EACtC,YAAY;AACrC,KAAI,MACF,QAAO,MAAM,QAAQ,YAAY,UAAU;KAE3C,QAAO;;AAIX,MAAa,kBAAkB,OAAqC;CAClE,MAAM,cAAc,GAAG,iBAAiB,wBAAwB;AAChE,KAAI,aAAa,OACf,QAAO,YAAY,KAAK,SAAS,KAAK,YAAY,MAAM,CAAC,QAAQ,qBAAqB,GAAG,CAAC;KAE1F,QAAO;;AAIX,MAAa,wBAAwB,OAA8B;AACjE,QAAO,GACJ,iBAAiB,+DAA+D,CAChF,KAAK,UAAU,MAAM,aAAa,MAAM,CAAC,QAAQ,qBAAqB,GAAG,CAAC;;AAG/E,MAAM,oBAAoB,OAAwC;AAEhE,QADe,GAAG,iBAAiB,IAAI,CAIlC,QAAQ,MAAM,EAAE,WAAW,WAAW,EAAE,CACxC,KAAK,WAAW;AACf,SAAO;GACL,IAAIC,qCAAe,OAAO,WAAW,KAAK;GAC1C,MAAM,OAAO,UAAU,MAAM;GAC7B,KAAK,sBAAsB,OAAO,WAAW;GAC9C;GACD;;AAIR,MAAa,iBAAiB,IAAiB,UAAiD;CAE9F,MAAM,UADW,GAAG,iBAAiB,eAAe,CAC3B,QAAQ,SAAS,KAAK,YAAY,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC;AACnF,KAAI,SAAS,WACX,QAAO,iBAAiB,QAAQ,WAA0B;KAE1D,QAAO,EAAE;;AAIb,MAAa,gBAAgB,OAA4B;AAEvD,QADa,GAAG,cAAc,0BAA0B,EAC3C,WAAW,QAAQ,WAAW,GAAG,IAAI;;AAGpD,MAAa,gBAAgB,OAAsC;CACjE,IAAIC,OAAkB,EAAE;AACxB,KAAI,GAGF,QAFgB,GAAG,iBAAiB,uBAAuB,CAChC,QAAQ,MAAM,CAAC,EAAE,WAAW,SAAS,gBAAgB,CAAC,CAC/D,KAAK,QAAQ;AAC7B,SAAO;GACL,OAAO,IAAI,YAAY,MAAM;GAC7B,KAAK,IAAI,WAAW;GACrB;GACD;AAEJ,QAAO,KAAK,SAAS,OAAO,EAAE;;AAIhC,MAAM,iBAAiB,IAAiB,QAA6B;AAEnE,QADgB,GAAG,iBAAiB,0BAA0B,CAC/C,MAAM,WAAW,OAAO,cAAc,KAAK,CAAC,YAAY,MAAM,CAAC,SAAS,IAAI,CAAC,EACxF;;AAGN,MAAa,qBAAqB,IAAiB,YAAiD;CAClG,MAAMC,gBAAqC,EAAE;CAE7C,MAAM,kBADM,cAAc,IAAI,QAAQ,EACT,iBAAiB,mCAAmC;AACjF,KAAI,iBAAiB,OACnB,MAAK,MAAM,QAAQ,gBACjB,eAAc,KAAK;EACjB,IAAIF,qCAAe,KAAK,WAAW,KAAK;EACxC,OAAO,KAAK,YAAY,MAAM;EAC9B,KAAK,sBAAsB,KAAK,WAAW;EAC5C,CAAC;AAGN,QAAO;;AAGT,MAAa,qBAAqB,OAAoC;CACpE,MAAM,gBAAgB,GAAG,iBAAiB,oBAAoB;CAC9D,MAAMG,WAA2B,EAAE;AACnC,MAAK,MAAM,gBAAgB,eAAe;EACxC,MAAM,QAAQ,aAAa,cAAc,WAAW,CAAC,WAAW;AAEhE,MAAI,OAAO;GACT,MAAM,CAAC,MAAM,GAAG,WAAW,OAAO,MAAM,IAAI;AAE5C,YAAS,KAAK;IACZ,SAAS,aAAa,cAAc,QAAQ,EAAE,WAAW,SAAS;IAClE,QAAQ,aAAa,cAAc,IAAI,CAAC,YAAY,MAAM,EAAE,MAAM,MAAM,CAAC;IACzE;IACA,SAAS,QAAQ,KAAK,IAAI;IAC3B,CAAC;;;AAGN,QAAO;;AAGT,MAAa,gBAAgB,OAA8B;AAEzD,QADgB,GAAG,iBAAiB,kCAAgC,CACrD,KAAK,QAAQ,IAAI,YAAY"}
|