node-csfd-api 3.0.0-next.9 → 3.1.0-next.1
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/README.md +89 -44
- 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 +71 -0
- package/dto/movie.d.ts +71 -0
- package/dto/search.d.mts +32 -0
- package/dto/search.d.ts +32 -0
- package/dto/user-ratings.d.mts +23 -0
- package/dto/user-ratings.d.ts +23 -0
- package/fetchers/fetch.polyfill.js +10 -0
- 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/index.js +24 -0
- package/fetchers/index.js.map +1 -0
- package/fetchers/index.mjs +24 -0
- package/fetchers/index.mjs.map +1 -0
- package/helpers/cinema.helper.js +84 -0
- 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 +73 -0
- 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 +50 -0
- 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 +162 -0
- 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 +29 -0
- 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 -0
- 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 +52 -0
- 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 +30 -0
- package/index.d.ts +30 -0
- package/index.js +42 -0
- package/index.js.map +1 -0
- package/index.mjs +41 -0
- package/index.mjs.map +1 -0
- package/package.json +15 -28
- package/services/cinema.service.d.mts +11 -0
- package/services/cinema.service.d.ts +11 -0
- package/services/cinema.service.js +35 -0
- 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 +11 -0
- package/services/creator.service.js +35 -0
- 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 +11 -0
- package/services/movie.service.js +62 -0
- 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 +10 -0
- package/services/search.service.js +81 -0
- 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 +12 -0
- package/services/user-ratings.service.js +66 -0
- 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/{cjs/vars.js → vars.js} +13 -7
- package/vars.js.map +1 -0
- package/vars.mjs +12 -0
- package/vars.mjs.map +1 -0
- package/cjs/fetchers/index.js +0 -41
- package/cjs/helpers/creator.helper.js +0 -86
- package/cjs/helpers/global.helper.js +0 -64
- package/cjs/helpers/movie.helper.js +0 -248
- package/cjs/helpers/search-user.helper.js +0 -22
- package/cjs/helpers/search.helper.js +0 -60
- package/cjs/helpers/user-ratings.helper.js +0 -60
- package/cjs/index.js +0 -50
- package/cjs/services/creator.service.js +0 -43
- package/cjs/services/movie.service.js +0 -69
- package/cjs/services/search.service.js +0 -91
- package/cjs/services/user-ratings.service.js +0 -95
- package/esm/fetchers/index.js +0 -37
- package/esm/helpers/creator.helper.js +0 -73
- package/esm/helpers/global.helper.js +0 -56
- package/esm/helpers/movie.helper.js +0 -223
- package/esm/helpers/search-user.helper.js +0 -15
- package/esm/helpers/search.helper.js +0 -49
- package/esm/helpers/user-ratings.helper.js +0 -47
- package/esm/index.js +0 -46
- package/esm/services/creator.service.js +0 -39
- package/esm/services/movie.service.js +0 -65
- package/esm/services/search.service.js +0 -87
- package/esm/services/user-ratings.service.js +0 -91
- package/esm/vars.js +0 -4
- package/types/fetchers/index.d.ts +0 -1
- package/types/helpers/creator.helper.d.ts +0 -17
- package/types/helpers/global.helper.d.ts +0 -7
- package/types/helpers/movie.helper.d.ts +0 -25
- package/types/helpers/search-user.helper.d.ts +0 -5
- package/types/helpers/search.helper.d.ts +0 -11
- package/types/helpers/user-ratings.helper.d.ts +0 -13
- package/types/index.d.ts +0 -20
- package/types/index.ts +0 -22
- package/types/interfaces/creator.interface.d.ts +0 -12
- package/types/interfaces/global.d.ts +0 -22
- package/types/interfaces/movie.interface.d.ts +0 -66
- package/types/interfaces/search.interface.d.ts +0 -27
- package/types/interfaces/user-ratings.interface.d.ts +0 -18
- package/types/services/creator.service.d.ts +0 -6
- package/types/services/movie.service.d.ts +0 -6
- package/types/services/search.service.d.ts +0 -5
- package/types/services/user-ratings.service.d.ts +0 -7
- package/types/vars.d.ts +0 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { parseIdFromUrl } from "./global.helper.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/helpers/user-ratings.helper.ts
|
|
4
|
+
const getUserRatingId = (el) => {
|
|
5
|
+
const url = el.querySelector("td.name .film-title-name").attributes.href;
|
|
6
|
+
return parseIdFromUrl(url);
|
|
7
|
+
};
|
|
8
|
+
const getUserRating = (el) => {
|
|
9
|
+
const ratingText = el.querySelector("td.star-rating-only .stars").classNames.split(" ").pop();
|
|
10
|
+
return ratingText.includes("stars-") ? +ratingText.split("-").pop() : 0;
|
|
11
|
+
};
|
|
12
|
+
const getUserRatingType = (el) => {
|
|
13
|
+
const typeText = el.querySelectorAll("td.name .film-title-info .info");
|
|
14
|
+
return typeText.length > 1 ? typeText[1].text.slice(1, -1) : "film";
|
|
15
|
+
};
|
|
16
|
+
const getUserRatingTitle = (el) => {
|
|
17
|
+
return el.querySelector("td.name .film-title-name").text;
|
|
18
|
+
};
|
|
19
|
+
const getUserRatingYear = (el) => {
|
|
20
|
+
return +el.querySelectorAll("td.name .film-title-info .info")[0]?.text.slice(1, -1) || null;
|
|
21
|
+
};
|
|
22
|
+
const getUserRatingColorRating = (el) => {
|
|
23
|
+
return parseColor(el.querySelector("td.name .icon").classNames.split(" ").pop());
|
|
24
|
+
};
|
|
25
|
+
const getUserRatingDate = (el) => {
|
|
26
|
+
return el.querySelector("td.date-only").text.trim();
|
|
27
|
+
};
|
|
28
|
+
const getUserRatingUrl = (el) => {
|
|
29
|
+
return `https://www.csfd.cz${el.querySelector("td.name .film-title-name").attributes.href}`;
|
|
30
|
+
};
|
|
31
|
+
const parseColor = (quality) => {
|
|
32
|
+
switch (quality) {
|
|
33
|
+
case "lightgrey": return "unknown";
|
|
34
|
+
case "red": return "good";
|
|
35
|
+
case "blue": return "average";
|
|
36
|
+
case "grey": return "bad";
|
|
37
|
+
default: return "unknown";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const sleep = (ms) => new Promise((res) => setTimeout(res, ms));
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { getUserRating, getUserRatingColorRating, getUserRatingDate, getUserRatingId, getUserRatingTitle, getUserRatingType, getUserRatingUrl, getUserRatingYear, sleep };
|
|
44
|
+
//# sourceMappingURL=user-ratings.helper.mjs.map
|
|
@@ -0,0 +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 { Colors } from '../dto/user-ratings';\nimport { 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 (typeText.length > 1 ? typeText[1].text.slice(1, -1) : 'film') as CSFDFilmTypes;\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.slice(1, -1) || null;\n};\n\nexport const getUserRatingColorRating = (el: HTMLElement): CSFDColorRating => {\n const color = parseColor(el.querySelector('td.name .icon').classNames.split(' ').pop() as Colors);\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\nconst 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\n// Sleep in loop\nexport const sleep = (ms: number) => new Promise((res) => setTimeout(res, ms));\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,QAAQ,SAAS,SAAS,IAAI,SAAS,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG;;AAGhE,MAAa,sBAAsB,OAA4B;AAC7D,QAAO,GAAG,cAAc,2BAA2B,CAAC;;AAGtD,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,CAAC,GAAG,iBAAiB,iCAAiC,CAAC,IAAI,KAAK,MAAM,GAAG,GAAG,IAAI;;AAGzF,MAAa,4BAA4B,OAAqC;AAE5E,QADc,WAAW,GAAG,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI,CAAC,KAAK,CAAW;;AAInG,MAAa,qBAAqB,OAA4B;AAC5D,QAAO,GAAG,cAAc,eAAe,CAAC,KAAK,MAAM;;AAGrD,MAAa,oBAAoB,OAA4B;AAE3D,QAAO,sBADK,GAAG,cAAc,2BAA2B,CAAC,WAAW;;AAItE,MAAM,cAAc,YAAqC;AACvD,SAAQ,SAAR;EACE,KAAK,YACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAKb,MAAa,SAAS,OAAe,IAAI,SAAS,QAAQ,WAAW,KAAK,GAAG,CAAC"}
|
package/index.d.mts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CSFDColorRating, CSFDFilmTypes, CSFDScreening, CSFDStars } from "./dto/global.mjs";
|
|
2
|
+
import { CSFDBoxContent, CSFDCreatorGroups, CSFDCreators, CSFDGenres, CSFDMovie, CSFDMovieCreator, CSFDMovieListItem, CSFDPremiere, CSFDTitlesOther, CSFDVod, CSFDVodService } from "./dto/movie.mjs";
|
|
3
|
+
import { CSFDCinema, CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie, CSFDCinemaPeriod } from "./dto/cinema.mjs";
|
|
4
|
+
import { CSFDCreator, CSFDCreatorScreening } from "./dto/creator.mjs";
|
|
5
|
+
import { CSFDSearch, CSFDSearchCreator, CSFDSearchCreators, CSFDSearchMovie, CSFDSearchUser } from "./dto/search.mjs";
|
|
6
|
+
import { CSFDUserRatingConfig, CSFDUserRatings, Colors } from "./dto/user-ratings.mjs";
|
|
7
|
+
import { CinemaScraper } from "./services/cinema.service.mjs";
|
|
8
|
+
import { CreatorScraper } from "./services/creator.service.mjs";
|
|
9
|
+
import { MovieScraper } from "./services/movie.service.mjs";
|
|
10
|
+
import { SearchScraper } from "./services/search.service.mjs";
|
|
11
|
+
import { UserRatingsScraper } from "./services/user-ratings.service.mjs";
|
|
12
|
+
|
|
13
|
+
//#region src/index.d.ts
|
|
14
|
+
declare class Csfd {
|
|
15
|
+
private userRatingsService;
|
|
16
|
+
private movieService;
|
|
17
|
+
private creatorService;
|
|
18
|
+
private searchService;
|
|
19
|
+
private cinemaService;
|
|
20
|
+
constructor(userRatingsService: UserRatingsScraper, movieService: MovieScraper, creatorService: CreatorScraper, searchService: SearchScraper, cinemaService: CinemaScraper);
|
|
21
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
22
|
+
movie(movie: number): Promise<CSFDMovie>;
|
|
23
|
+
creator(creator: number): Promise<CSFDCreator>;
|
|
24
|
+
search(text: string): Promise<CSFDSearch>;
|
|
25
|
+
cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
26
|
+
}
|
|
27
|
+
declare const csfd: Csfd;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CSFDBoxContent, CSFDCinema, CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie, CSFDCinemaPeriod, CSFDColorRating, CSFDCreator, CSFDCreatorGroups, CSFDCreatorScreening, CSFDCreators, CSFDFilmTypes, CSFDGenres, CSFDMovie, CSFDMovieCreator, CSFDMovieListItem, CSFDPremiere, CSFDScreening, CSFDSearch, CSFDSearchCreator, CSFDSearchCreators, CSFDSearchMovie, CSFDSearchUser, CSFDStars, CSFDTitlesOther, CSFDUserRatingConfig, CSFDUserRatings, CSFDVod, CSFDVodService, Colors, Csfd, csfd };
|
|
30
|
+
//# sourceMappingURL=index.d.mts.map
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CSFDColorRating, CSFDFilmTypes, CSFDScreening, CSFDStars } from "./dto/global.js";
|
|
2
|
+
import { CSFDBoxContent, CSFDCreatorGroups, CSFDCreators, CSFDGenres, CSFDMovie, CSFDMovieCreator, CSFDMovieListItem, CSFDPremiere, CSFDTitlesOther, CSFDVod, CSFDVodService } from "./dto/movie.js";
|
|
3
|
+
import { CSFDCinema, CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie, CSFDCinemaPeriod } from "./dto/cinema.js";
|
|
4
|
+
import { CSFDCreator, CSFDCreatorScreening } from "./dto/creator.js";
|
|
5
|
+
import { CSFDSearch, CSFDSearchCreator, CSFDSearchCreators, CSFDSearchMovie, CSFDSearchUser } from "./dto/search.js";
|
|
6
|
+
import { CSFDUserRatingConfig, CSFDUserRatings, Colors } from "./dto/user-ratings.js";
|
|
7
|
+
import { CinemaScraper } from "./services/cinema.service.js";
|
|
8
|
+
import { CreatorScraper } from "./services/creator.service.js";
|
|
9
|
+
import { MovieScraper } from "./services/movie.service.js";
|
|
10
|
+
import { SearchScraper } from "./services/search.service.js";
|
|
11
|
+
import { UserRatingsScraper } from "./services/user-ratings.service.js";
|
|
12
|
+
|
|
13
|
+
//#region src/index.d.ts
|
|
14
|
+
declare class Csfd {
|
|
15
|
+
private userRatingsService;
|
|
16
|
+
private movieService;
|
|
17
|
+
private creatorService;
|
|
18
|
+
private searchService;
|
|
19
|
+
private cinemaService;
|
|
20
|
+
constructor(userRatingsService: UserRatingsScraper, movieService: MovieScraper, creatorService: CreatorScraper, searchService: SearchScraper, cinemaService: CinemaScraper);
|
|
21
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
22
|
+
movie(movie: number): Promise<CSFDMovie>;
|
|
23
|
+
creator(creator: number): Promise<CSFDCreator>;
|
|
24
|
+
search(text: string): Promise<CSFDSearch>;
|
|
25
|
+
cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
26
|
+
}
|
|
27
|
+
declare const csfd: Csfd;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CSFDBoxContent, CSFDCinema, CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie, CSFDCinemaPeriod, CSFDColorRating, CSFDCreator, CSFDCreatorGroups, CSFDCreatorScreening, CSFDCreators, CSFDFilmTypes, CSFDGenres, CSFDMovie, CSFDMovieCreator, CSFDMovieListItem, CSFDPremiere, CSFDScreening, CSFDSearch, CSFDSearchCreator, CSFDSearchCreators, CSFDSearchMovie, CSFDSearchUser, CSFDStars, CSFDTitlesOther, CSFDUserRatingConfig, CSFDUserRatings, CSFDVod, CSFDVodService, Colors, Csfd, csfd };
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const require_cinema_service = require('./services/cinema.service.js');
|
|
2
|
+
const require_creator_service = require('./services/creator.service.js');
|
|
3
|
+
const require_movie_service = require('./services/movie.service.js');
|
|
4
|
+
const require_search_service = require('./services/search.service.js');
|
|
5
|
+
const require_user_ratings_service = require('./services/user-ratings.service.js');
|
|
6
|
+
|
|
7
|
+
//#region src/index.ts
|
|
8
|
+
var Csfd = class {
|
|
9
|
+
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService) {
|
|
10
|
+
this.userRatingsService = userRatingsService;
|
|
11
|
+
this.movieService = movieService;
|
|
12
|
+
this.creatorService = creatorService;
|
|
13
|
+
this.searchService = searchService;
|
|
14
|
+
this.cinemaService = cinemaService;
|
|
15
|
+
}
|
|
16
|
+
async userRatings(user, config) {
|
|
17
|
+
return this.userRatingsService.userRatings(user, config);
|
|
18
|
+
}
|
|
19
|
+
async movie(movie) {
|
|
20
|
+
return this.movieService.movie(+movie);
|
|
21
|
+
}
|
|
22
|
+
async creator(creator) {
|
|
23
|
+
return this.creatorService.creator(+creator);
|
|
24
|
+
}
|
|
25
|
+
async search(text) {
|
|
26
|
+
return this.searchService.search(text);
|
|
27
|
+
}
|
|
28
|
+
async cinema(district, period) {
|
|
29
|
+
return this.cinemaService.cinemas(+district, period);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const movieScraper = new require_movie_service.MovieScraper();
|
|
33
|
+
const userRatingsScraper = new require_user_ratings_service.UserRatingsScraper();
|
|
34
|
+
const cinemaScraper = new require_cinema_service.CinemaScraper();
|
|
35
|
+
const creatorScraper = new require_creator_service.CreatorScraper();
|
|
36
|
+
const searchScraper = new require_search_service.SearchScraper();
|
|
37
|
+
const csfd = new Csfd(userRatingsScraper, movieScraper, creatorScraper, searchScraper, cinemaScraper);
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
exports.Csfd = Csfd;
|
|
41
|
+
exports.csfd = csfd;
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper","MovieScraper","UserRatingsScraper","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 { 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';\n\nexport class Csfd {\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper\n ) { }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n return this.userRatingsService.userRatings(user, config);\n }\n\n public async movie(movie: number): Promise<CSFDMovie> {\n return this.movieService.movie(+movie);\n }\n\n public async creator(creator: number): Promise<CSFDCreator> {\n return this.creatorService.creator(+creator);\n }\n\n public async search(text: string): Promise<CSFDSearch> {\n return this.searchService.search(text);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]> {\n return this.cinemaService.cinemas(+district, period);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;CAChB,YACE,AAAQA,oBACR,AAAQC,cACR,AAAQC,gBACR,AAAQC,eACR,AAAQC,eACR;EALQ;EACA;EACA;EACA;EACA;;CAGV,MAAa,YACX,MACA,QAC4B;AAC5B,SAAO,KAAK,mBAAmB,YAAY,MAAM,OAAO;;CAG1D,MAAa,MAAM,OAAmC;AACpD,SAAO,KAAK,aAAa,MAAM,CAAC,MAAM;;CAGxC,MAAa,QAAQ,SAAuC;AAC1D,SAAO,KAAK,eAAe,QAAQ,CAAC,QAAQ;;CAG9C,MAAa,OAAO,MAAmC;AACrD,SAAO,KAAK,cAAc,OAAO,KAAK;;CAGxC,MAAa,OAAO,UAA2B,QAAiD;AAC9F,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,OAAO;;;AAIxD,MAAM,eAAe,IAAIC,oCAAc;AACvC,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,cACA,gBACA,eACA,cACD"}
|
package/index.mjs
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CinemaScraper } from "./services/cinema.service.mjs";
|
|
2
|
+
import { CreatorScraper } from "./services/creator.service.mjs";
|
|
3
|
+
import { MovieScraper } from "./services/movie.service.mjs";
|
|
4
|
+
import { SearchScraper } from "./services/search.service.mjs";
|
|
5
|
+
import { UserRatingsScraper } from "./services/user-ratings.service.mjs";
|
|
6
|
+
|
|
7
|
+
//#region src/index.ts
|
|
8
|
+
var Csfd = class {
|
|
9
|
+
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService) {
|
|
10
|
+
this.userRatingsService = userRatingsService;
|
|
11
|
+
this.movieService = movieService;
|
|
12
|
+
this.creatorService = creatorService;
|
|
13
|
+
this.searchService = searchService;
|
|
14
|
+
this.cinemaService = cinemaService;
|
|
15
|
+
}
|
|
16
|
+
async userRatings(user, config) {
|
|
17
|
+
return this.userRatingsService.userRatings(user, config);
|
|
18
|
+
}
|
|
19
|
+
async movie(movie) {
|
|
20
|
+
return this.movieService.movie(+movie);
|
|
21
|
+
}
|
|
22
|
+
async creator(creator) {
|
|
23
|
+
return this.creatorService.creator(+creator);
|
|
24
|
+
}
|
|
25
|
+
async search(text) {
|
|
26
|
+
return this.searchService.search(text);
|
|
27
|
+
}
|
|
28
|
+
async cinema(district, period) {
|
|
29
|
+
return this.cinemaService.cinemas(+district, period);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const movieScraper = new MovieScraper();
|
|
33
|
+
const userRatingsScraper = new UserRatingsScraper();
|
|
34
|
+
const cinemaScraper = new CinemaScraper();
|
|
35
|
+
const creatorScraper = new CreatorScraper();
|
|
36
|
+
const searchScraper = new SearchScraper();
|
|
37
|
+
const csfd = new Csfd(userRatingsScraper, movieScraper, creatorScraper, searchScraper, cinemaScraper);
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { Csfd, csfd };
|
|
41
|
+
//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper"],"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 { 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';\n\nexport class Csfd {\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper\n ) { }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n return this.userRatingsService.userRatings(user, config);\n }\n\n public async movie(movie: number): Promise<CSFDMovie> {\n return this.movieService.movie(+movie);\n }\n\n public async creator(creator: number): Promise<CSFDCreator> {\n return this.creatorService.creator(+creator);\n }\n\n public async search(text: string): Promise<CSFDSearch> {\n return this.searchService.search(text);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]> {\n return this.cinemaService.cinemas(+district, period);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;CAChB,YACE,AAAQA,oBACR,AAAQC,cACR,AAAQC,gBACR,AAAQC,eACR,AAAQC,eACR;EALQ;EACA;EACA;EACA;EACA;;CAGV,MAAa,YACX,MACA,QAC4B;AAC5B,SAAO,KAAK,mBAAmB,YAAY,MAAM,OAAO;;CAG1D,MAAa,MAAM,OAAmC;AACpD,SAAO,KAAK,aAAa,MAAM,CAAC,MAAM;;CAGxC,MAAa,QAAQ,SAAuC;AAC1D,SAAO,KAAK,eAAe,QAAQ,CAAC,QAAQ;;CAG9C,MAAa,OAAO,MAAmC;AACrD,SAAO,KAAK,cAAc,OAAO,KAAK;;CAGxC,MAAa,OAAO,UAA2B,QAAiD;AAC9F,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,OAAO;;;AAIxD,MAAM,eAAe,IAAI,cAAc;AACvC,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,cACA,gBACA,eACA,cACD"}
|
package/package.json
CHANGED
|
@@ -1,36 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-csfd-api",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0-next.1",
|
|
4
4
|
"description": "ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)",
|
|
5
|
-
"main": "./cjs/index.js",
|
|
6
5
|
"author": "BART! <bart@bartweb.cz>",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"start": "tsc -w",
|
|
9
|
-
"prebuild": "rimraf dist",
|
|
10
|
-
"build": "tsc && tsc -p tsconfig-cjs.json && yarn barrels",
|
|
11
|
-
"barrels": "barrelsby -c barrels.json",
|
|
12
|
-
"postbuild": "npm-prepare-dist -s postinstall -s prepare && yarn delete:unused-folders && yarn fix-paths ",
|
|
13
|
-
"tsc": "tsc",
|
|
14
|
-
"demo": "ts-node demo",
|
|
15
|
-
"lint": "eslint ./src/**/**/* --fix",
|
|
16
|
-
"test": "jest",
|
|
17
|
-
"fix-paths": "yarn json -I -f ./dist/package.json -e \"this.module='./esm/index.js';this.main='./cjs/index.js';this.types='./types/index.ts'\"",
|
|
18
|
-
"delete:unused-folders": "rimraf ./dist/esm/interfaces ./dist/cjs/interfaces",
|
|
19
|
-
"publish:next": "yarn && yarn build && yarn test --coverage true && cd dist && npm publish --tag next",
|
|
20
|
-
"postversion": "git push && git push --follow-tags",
|
|
21
|
-
"release:beta": "npm version preminor --preid=beta -m \"chore(update): prelease %s β\"",
|
|
22
|
-
"prerelease:beta": "npm version prerelease --preid=beta -m \"chore(update): prelease %s β\"",
|
|
23
|
-
"release:patch": "git checkout master && npm version patch -m \"chore(update): patch release %s 🐛\"",
|
|
24
|
-
"release:minor": "git checkout master && npm version minor -m \"chore(update): release %s 🚀\"",
|
|
25
|
-
"release:major": "git checkout master && npm version major -m \"chore(update): major release %s 💥\""
|
|
26
|
-
},
|
|
27
6
|
"publishConfig": {
|
|
28
7
|
"access": "public",
|
|
29
8
|
"registry": "https://registry.npmjs.org"
|
|
30
9
|
},
|
|
31
10
|
"dependencies": {
|
|
32
|
-
"cross-fetch": "^
|
|
33
|
-
"node-html-parser": "^
|
|
11
|
+
"cross-fetch": "^4.1.0",
|
|
12
|
+
"node-html-parser": "^7.0.1"
|
|
34
13
|
},
|
|
35
14
|
"repository": {
|
|
36
15
|
"url": "git+https://github.com/bartholomej/node-csfd-api.git",
|
|
@@ -54,9 +33,17 @@
|
|
|
54
33
|
"api"
|
|
55
34
|
],
|
|
56
35
|
"engines": {
|
|
57
|
-
"node": ">=
|
|
36
|
+
"node": ">= 18"
|
|
58
37
|
},
|
|
59
38
|
"license": "MIT",
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
|
|
39
|
+
"main": "./index.js",
|
|
40
|
+
"module": "./index.mjs",
|
|
41
|
+
"types": "./index.d.ts",
|
|
42
|
+
"exports": {
|
|
43
|
+
".": {
|
|
44
|
+
"import": "./index.mjs",
|
|
45
|
+
"require": "./index.js"
|
|
46
|
+
},
|
|
47
|
+
"./package.json": "./package.json"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDCinema, CSFDCinemaPeriod } from "../dto/cinema.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/cinema.service.d.ts
|
|
4
|
+
declare class CinemaScraper {
|
|
5
|
+
private cinema;
|
|
6
|
+
cinemas(district?: number, period?: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
7
|
+
private buildCinemas;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { CinemaScraper };
|
|
11
|
+
//# sourceMappingURL=cinema.service.d.mts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDCinema, CSFDCinemaPeriod } from "../dto/cinema.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/cinema.service.d.ts
|
|
4
|
+
declare class CinemaScraper {
|
|
5
|
+
private cinema;
|
|
6
|
+
cinemas(district?: number, period?: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
7
|
+
private buildCinemas;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { CinemaScraper };
|
|
11
|
+
//# sourceMappingURL=cinema.service.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_index = require('../fetchers/index.js');
|
|
3
|
+
const require_vars = require('../vars.js');
|
|
4
|
+
const require_cinema_helper = require('../helpers/cinema.helper.js');
|
|
5
|
+
let node_html_parser = require("node-html-parser");
|
|
6
|
+
node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
7
|
+
|
|
8
|
+
//#region src/services/cinema.service.ts
|
|
9
|
+
var CinemaScraper = class {
|
|
10
|
+
async cinemas(district = 1, period = "today") {
|
|
11
|
+
const contentNode = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.cinemasUrl(district, period))).querySelectorAll("#snippet--cinemas section.box");
|
|
12
|
+
this.buildCinemas(contentNode);
|
|
13
|
+
return this.cinema;
|
|
14
|
+
}
|
|
15
|
+
buildCinemas(contentNode) {
|
|
16
|
+
const cinemas = [];
|
|
17
|
+
contentNode.forEach((x) => {
|
|
18
|
+
const cinemaInfo = require_cinema_helper.parseCinema(x);
|
|
19
|
+
const cinema = {
|
|
20
|
+
id: require_cinema_helper.getCinemaId(x),
|
|
21
|
+
name: cinemaInfo?.name,
|
|
22
|
+
city: cinemaInfo?.city,
|
|
23
|
+
url: require_cinema_helper.getCinemaUrl(x),
|
|
24
|
+
coords: require_cinema_helper.getCinemaCoords(x),
|
|
25
|
+
screenings: require_cinema_helper.getGroupedFilmsByDate(x)
|
|
26
|
+
};
|
|
27
|
+
cinemas.push(cinema);
|
|
28
|
+
});
|
|
29
|
+
this.cinema = cinemas;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
exports.CinemaScraper = CinemaScraper;
|
|
35
|
+
//# sourceMappingURL=cinema.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","cinemas: CSFDCinema[]","parseCinema","cinema: CSFDCinema","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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today'\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url);\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SACJ;EAMvB,MAAM,0CAJW,MAAMA,wBADXC,wBAAW,UAAU,OAAO,CACH,CAEF,CAEH,iBAAiB,gCAAgC;AAEjF,OAAK,aAAa,YAAY;AAC9B,SAAO,KAAK;;CAGd,AAAQ,aAAa,aAA4B;EAC/C,MAAMC,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAaC,kCAAY,EAAE;GACjC,MAAMC,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,OAAK,SAAS"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { fetchPage } from "../fetchers/index.mjs";
|
|
2
|
+
import { cinemasUrl } from "../vars.mjs";
|
|
3
|
+
import { getCinemaCoords, getCinemaId, getCinemaUrl, getGroupedFilmsByDate, parseCinema } from "../helpers/cinema.helper.mjs";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
|
+
|
|
6
|
+
//#region src/services/cinema.service.ts
|
|
7
|
+
var CinemaScraper = class {
|
|
8
|
+
async cinemas(district = 1, period = "today") {
|
|
9
|
+
const contentNode = parse(await fetchPage(cinemasUrl(district, period))).querySelectorAll("#snippet--cinemas section.box");
|
|
10
|
+
this.buildCinemas(contentNode);
|
|
11
|
+
return this.cinema;
|
|
12
|
+
}
|
|
13
|
+
buildCinemas(contentNode) {
|
|
14
|
+
const cinemas = [];
|
|
15
|
+
contentNode.forEach((x) => {
|
|
16
|
+
const cinemaInfo = parseCinema(x);
|
|
17
|
+
const cinema = {
|
|
18
|
+
id: getCinemaId(x),
|
|
19
|
+
name: cinemaInfo?.name,
|
|
20
|
+
city: cinemaInfo?.city,
|
|
21
|
+
url: getCinemaUrl(x),
|
|
22
|
+
coords: getCinemaCoords(x),
|
|
23
|
+
screenings: getGroupedFilmsByDate(x)
|
|
24
|
+
};
|
|
25
|
+
cinemas.push(cinema);
|
|
26
|
+
});
|
|
27
|
+
this.cinema = cinemas;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { CinemaScraper };
|
|
33
|
+
//# sourceMappingURL=cinema.service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cinema.service.mjs","names":["cinemas: CSFDCinema[]","cinema: CSFDCinema"],"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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today'\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url);\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SACJ;EAMvB,MAAM,cAFc,MAFH,MAAM,UADX,WAAW,UAAU,OAAO,CACH,CAEF,CAEH,iBAAiB,gCAAgC;AAEjF,OAAK,aAAa,YAAY;AAC9B,SAAO,KAAK;;CAGd,AAAQ,aAAa,aAA4B;EAC/C,MAAMA,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAMC,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,OAAK,SAAS"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDCreator } from "../dto/creator.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/creator.service.d.ts
|
|
4
|
+
declare class CreatorScraper {
|
|
5
|
+
private person;
|
|
6
|
+
creator(creatorId: number): Promise<CSFDCreator>;
|
|
7
|
+
private buildCreator;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { CreatorScraper };
|
|
11
|
+
//# sourceMappingURL=creator.service.d.mts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDCreator } from "../dto/creator.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/creator.service.d.ts
|
|
4
|
+
declare class CreatorScraper {
|
|
5
|
+
private person;
|
|
6
|
+
creator(creatorId: number): Promise<CSFDCreator>;
|
|
7
|
+
private buildCreator;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { CreatorScraper };
|
|
11
|
+
//# sourceMappingURL=creator.service.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_index = require('../fetchers/index.js');
|
|
3
|
+
const require_vars = require('../vars.js');
|
|
4
|
+
const require_creator_helper = require('../helpers/creator.helper.js');
|
|
5
|
+
let node_html_parser = require("node-html-parser");
|
|
6
|
+
node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
7
|
+
|
|
8
|
+
//#region src/services/creator.service.ts
|
|
9
|
+
var CreatorScraper = class {
|
|
10
|
+
async creator(creatorId) {
|
|
11
|
+
const id = Number(creatorId);
|
|
12
|
+
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
13
|
+
const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id)));
|
|
14
|
+
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
15
|
+
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
16
|
+
this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
17
|
+
return this.person;
|
|
18
|
+
}
|
|
19
|
+
buildCreator(id, asideEl, filmsNode) {
|
|
20
|
+
this.person = {
|
|
21
|
+
id,
|
|
22
|
+
name: require_creator_helper.getCreatorName(asideEl),
|
|
23
|
+
birthday: require_creator_helper.getCreatorBirthdayInfo(asideEl)?.birthday,
|
|
24
|
+
birthplace: require_creator_helper.getCreatorBirthdayInfo(asideEl)?.birthPlace,
|
|
25
|
+
photo: require_creator_helper.getCreatorPhoto(asideEl),
|
|
26
|
+
age: require_creator_helper.getCreatorBirthdayInfo(asideEl)?.age || null,
|
|
27
|
+
bio: require_creator_helper.getCreatorBio(asideEl),
|
|
28
|
+
films: require_creator_helper.getCreatorFilms(filmsNode)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
exports.CreatorScraper = CreatorScraper;
|
|
35
|
+
//# sourceMappingURL=creator.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorName","getCreatorBirthdayInfo","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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number): 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);\n const response = await fetchPage(url);\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,WAAyC;EAC5D,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,0CAFW,MAAMA,wBADXC,wBAAW,GAAG,CACW,CAEF;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,OAAK,aAAa,CAAC,WAAW,WAAW,UAAU;AACnD,SAAO,KAAK;;CAGd,AAAQ,aAAa,IAAY,SAAsB,WAAwB;AAC7E,OAAK,SAAS;GACZ;GACA,MAAMC,sCAAe,QAAQ;GAC7B,UAAUC,8CAAuB,QAAQ,EAAE;GAC3C,YAAYA,8CAAuB,QAAQ,EAAE;GAC7C,OAAOC,uCAAgB,QAAQ;GAC/B,KAAKD,8CAAuB,QAAQ,EAAE,OAAO;GAC7C,KAAKE,qCAAc,QAAQ;GAC3B,OAAOC,uCAAgB,UAAU;GAClC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { fetchPage } from "../fetchers/index.mjs";
|
|
2
|
+
import { creatorUrl } from "../vars.mjs";
|
|
3
|
+
import { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from "../helpers/creator.helper.mjs";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
|
+
|
|
6
|
+
//#region src/services/creator.service.ts
|
|
7
|
+
var CreatorScraper = class {
|
|
8
|
+
async creator(creatorId) {
|
|
9
|
+
const id = Number(creatorId);
|
|
10
|
+
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
11
|
+
const creatorHtml = parse(await fetchPage(creatorUrl(id)));
|
|
12
|
+
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
13
|
+
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
14
|
+
this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
15
|
+
return this.person;
|
|
16
|
+
}
|
|
17
|
+
buildCreator(id, asideEl, filmsNode) {
|
|
18
|
+
this.person = {
|
|
19
|
+
id,
|
|
20
|
+
name: getCreatorName(asideEl),
|
|
21
|
+
birthday: getCreatorBirthdayInfo(asideEl)?.birthday,
|
|
22
|
+
birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,
|
|
23
|
+
photo: getCreatorPhoto(asideEl),
|
|
24
|
+
age: getCreatorBirthdayInfo(asideEl)?.age || null,
|
|
25
|
+
bio: getCreatorBio(asideEl),
|
|
26
|
+
films: getCreatorFilms(filmsNode)
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { CreatorScraper };
|
|
33
|
+
//# sourceMappingURL=creator.service.mjs.map
|
|
@@ -0,0 +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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number): 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);\n const response = await fetchPage(url);\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,WAAyC;EAC5D,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,GAAG,CACW,CAEF;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,OAAK,aAAa,CAAC,WAAW,WAAW,UAAU;AACnD,SAAO,KAAK;;CAGd,AAAQ,aAAa,IAAY,SAAsB,WAAwB;AAC7E,OAAK,SAAS;GACZ;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,uBAAuB,QAAQ,EAAE;GAC3C,YAAY,uBAAuB,QAAQ,EAAE;GAC7C,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,uBAAuB,QAAQ,EAAE,OAAO;GAC7C,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDMovie } from "../dto/movie.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/movie.service.d.ts
|
|
4
|
+
declare class MovieScraper {
|
|
5
|
+
private film;
|
|
6
|
+
movie(movieId: number): Promise<CSFDMovie>;
|
|
7
|
+
private buildMovie;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { MovieScraper };
|
|
11
|
+
//# sourceMappingURL=movie.service.d.mts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSFDMovie } from "../dto/movie.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/movie.service.d.ts
|
|
4
|
+
declare class MovieScraper {
|
|
5
|
+
private film;
|
|
6
|
+
movie(movieId: number): Promise<CSFDMovie>;
|
|
7
|
+
private buildMovie;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { MovieScraper };
|
|
11
|
+
//# sourceMappingURL=movie.service.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_index = require('../fetchers/index.js');
|
|
3
|
+
const require_vars = require('../vars.js');
|
|
4
|
+
const require_movie_helper = require('../helpers/movie.helper.js');
|
|
5
|
+
let node_html_parser = require("node-html-parser");
|
|
6
|
+
node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
7
|
+
|
|
8
|
+
//#region src/services/movie.service.ts
|
|
9
|
+
var MovieScraper = class {
|
|
10
|
+
async movie(movieId) {
|
|
11
|
+
const id = Number(movieId);
|
|
12
|
+
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
13
|
+
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id)));
|
|
14
|
+
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
15
|
+
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
16
|
+
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
17
|
+
const jsonLd = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
18
|
+
this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);
|
|
19
|
+
return this.film;
|
|
20
|
+
}
|
|
21
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd) {
|
|
22
|
+
this.film = {
|
|
23
|
+
id: movieId,
|
|
24
|
+
title: require_movie_helper.getMovieTitle(el),
|
|
25
|
+
year: require_movie_helper.getMovieYear(jsonLd),
|
|
26
|
+
duration: require_movie_helper.getMovieDuration(jsonLd, el),
|
|
27
|
+
descriptions: require_movie_helper.getMovieDescriptions(el),
|
|
28
|
+
genres: require_movie_helper.getMovieGenres(el),
|
|
29
|
+
type: require_movie_helper.getMovieType(el),
|
|
30
|
+
url: require_vars.movieUrl(movieId),
|
|
31
|
+
origins: require_movie_helper.getMovieOrigins(el),
|
|
32
|
+
colorRating: require_movie_helper.getMovieColorRating(pageClasses),
|
|
33
|
+
rating: require_movie_helper.getMovieRating(asideEl),
|
|
34
|
+
ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
|
|
35
|
+
titlesOther: require_movie_helper.getMovieTitlesOther(el),
|
|
36
|
+
poster: require_movie_helper.getMoviePoster(el),
|
|
37
|
+
photo: require_movie_helper.getMovieRandomPhoto(el),
|
|
38
|
+
trivia: require_movie_helper.getMovieTrivia(el),
|
|
39
|
+
creators: {
|
|
40
|
+
directors: require_movie_helper.getMovieGroup(el, "Režie"),
|
|
41
|
+
writers: require_movie_helper.getMovieGroup(el, "Scénář"),
|
|
42
|
+
cinematography: require_movie_helper.getMovieGroup(el, "Kamera"),
|
|
43
|
+
music: require_movie_helper.getMovieGroup(el, "Hudba"),
|
|
44
|
+
actors: require_movie_helper.getMovieGroup(el, "Hrají"),
|
|
45
|
+
basedOn: require_movie_helper.getMovieGroup(el, "Předloha"),
|
|
46
|
+
producers: require_movie_helper.getMovieGroup(el, "Produkce"),
|
|
47
|
+
filmEditing: require_movie_helper.getMovieGroup(el, "Střih"),
|
|
48
|
+
costumeDesign: require_movie_helper.getMovieGroup(el, "Kostýmy"),
|
|
49
|
+
productionDesign: require_movie_helper.getMovieGroup(el, "Scénografie")
|
|
50
|
+
},
|
|
51
|
+
vod: require_movie_helper.getMovieVods(asideEl),
|
|
52
|
+
tags: require_movie_helper.getMovieTags(asideEl),
|
|
53
|
+
premieres: require_movie_helper.getMoviePremieres(asideEl),
|
|
54
|
+
related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
|
|
55
|
+
similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné")
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
exports.MovieScraper = MovieScraper;
|
|
62
|
+
//# sourceMappingURL=movie.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieType","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieGroup","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\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} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n private film: CSFDMovie;\n\n public async movie(movieId: number): 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);\n const response = await fetchPage(url);\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 jsonLd = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);\n return this.film;\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: string\n ) {\n this.film = {\n id: movieId,\n title: getMovieTitle(el),\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type: getMovieType(el) as CSFDFilmTypes,\n url: movieUrl(movieId),\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: {\n directors: getMovieGroup(el, 'Režie'),\n writers: getMovieGroup(el, 'Scénář'),\n cinematography: getMovieGroup(el, 'Kamera'),\n music: getMovieGroup(el, 'Hudba'),\n actors: getMovieGroup(el, 'Hrají'),\n basedOn: getMovieGroup(el, 'Předloha'),\n producers: getMovieGroup(el, 'Produkce'),\n filmEditing: getMovieGroup(el, 'Střih'),\n costumeDesign: getMovieGroup(el, 'Kostýmy'),\n productionDesign: getMovieGroup(el, 'Scénografie')\n },\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné')\n };\n }\n}\n"],"mappings":";;;;;;;;AA2BA,IAAa,eAAb,MAA0B;CAGxB,MAAa,MAAM,SAAqC;EACtD,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,wCAFW,MAAMA,wBADXC,sBAAS,GAAG,CACa,CAEJ;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,SAAS,UAAU,cAAc,uCAAqC,CAAC;AAC7E,OAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,OAAO;AACpE,SAAO,KAAK;;CAGd,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA;AACA,OAAK,OAAO;GACV,IAAI;GACJ,OAAOC,mCAAc,GAAG;GACxB,MAAMC,kCAAa,OAAO;GAC1B,UAAUC,sCAAiB,QAAQ,GAAG;GACtC,cAAcC,0CAAqB,GAAG;GACtC,QAAQC,oCAAe,GAAG;GAC1B,MAAMC,kCAAa,GAAG;GACtB,KAAKN,sBAAS,QAAQ;GACtB,SAASO,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,UAAU;IACR,WAAWC,mCAAc,IAAI,QAAQ;IACrC,SAASA,mCAAc,IAAI,SAAS;IACpC,gBAAgBA,mCAAc,IAAI,SAAS;IAC3C,OAAOA,mCAAc,IAAI,QAAQ;IACjC,QAAQA,mCAAc,IAAI,QAAQ;IAClC,SAASA,mCAAc,IAAI,WAAW;IACtC,WAAWA,mCAAc,IAAI,WAAW;IACxC,aAAaA,mCAAc,IAAI,QAAQ;IACvC,eAAeA,mCAAc,IAAI,UAAU;IAC3C,kBAAkBA,mCAAc,IAAI,cAAc;IACnD;GACD,KAAKC,kCAAa,QAAQ;GAC1B,MAAMC,kCAAa,QAAQ;GAC3B,WAAWC,uCAAkB,QAAQ;GACrC,SAASC,uCAAkB,SAAS,cAAc;GAClD,SAASA,uCAAkB,SAAS,UAAU;GAC/C"}
|