node-csfd-api 5.4.0 → 5.5.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/bin/{export-ratings.mjs → export-ratings.js} +1 -1
  2. package/bin/{mcp-server.mjs → mcp-server.js} +2 -2
  3. package/bin/{server.mjs → server.js} +2 -2
  4. package/{cli.mjs → cli.js} +3 -3
  5. package/dto/{cinema.d.mts → cinema.d.cts} +2 -2
  6. package/dto/{creator.d.mts → creator.d.cts} +2 -2
  7. package/dto/{global.d.mts → global.d.cts} +1 -1
  8. package/dto/{movie.d.mts → movie.d.cts} +2 -2
  9. package/dto/{options.d.mts → options.d.cts} +1 -1
  10. package/dto/{search.d.mts → search.d.cts} +3 -3
  11. package/dto/{user-ratings.d.mts → user-ratings.d.cts} +2 -2
  12. package/dto/{user-reviews.d.mts → user-reviews.d.cts} +2 -2
  13. package/fetchers/{fetch.polyfill.mjs → fetch.polyfill.cjs} +3 -4
  14. package/fetchers/fetch.polyfill.cjs.map +1 -0
  15. package/fetchers/fetch.polyfill.js +2 -3
  16. package/fetchers/fetch.polyfill.js.map +1 -1
  17. package/fetchers/{index.mjs → index.cjs} +4 -4
  18. package/fetchers/index.cjs.map +1 -0
  19. package/fetchers/index.js +3 -3
  20. package/fetchers/index.js.map +1 -1
  21. package/helpers/{cinema.helper.mjs → cinema.helper.cjs} +9 -5
  22. package/helpers/cinema.helper.cjs.map +1 -0
  23. package/helpers/cinema.helper.js +4 -8
  24. package/helpers/cinema.helper.js.map +1 -1
  25. package/helpers/{creator.helper.mjs → creator.helper.cjs} +11 -7
  26. package/helpers/creator.helper.cjs.map +1 -0
  27. package/helpers/creator.helper.js +6 -10
  28. package/helpers/creator.helper.js.map +1 -1
  29. package/helpers/{global.helper.mjs → global.helper.cjs} +10 -2
  30. package/helpers/{global.helper.mjs.map → global.helper.cjs.map} +1 -1
  31. package/helpers/global.helper.js +1 -9
  32. package/helpers/{movie.helper.mjs → movie.helper.cjs} +36 -13
  33. package/helpers/movie.helper.cjs.map +1 -0
  34. package/helpers/movie.helper.js +12 -35
  35. package/helpers/movie.helper.js.map +1 -1
  36. package/helpers/{search-creator.helper.mjs → search-creator.helper.cjs} +6 -4
  37. package/helpers/search-creator.helper.cjs.map +1 -0
  38. package/helpers/search-creator.helper.js +3 -5
  39. package/helpers/search-creator.helper.js.map +1 -1
  40. package/helpers/{search-user.helper.mjs → search-user.helper.cjs} +9 -6
  41. package/helpers/search-user.helper.cjs.map +1 -0
  42. package/helpers/search-user.helper.js +5 -8
  43. package/helpers/search-user.helper.js.map +1 -1
  44. package/helpers/{search.helper.mjs → search.helper.cjs} +14 -7
  45. package/helpers/search.helper.cjs.map +1 -0
  46. package/helpers/search.helper.js +6 -13
  47. package/helpers/search.helper.js.map +1 -1
  48. package/helpers/{user-ratings.helper.mjs → user-ratings.helper.cjs} +14 -7
  49. package/helpers/user-ratings.helper.cjs.map +1 -0
  50. package/helpers/user-ratings.helper.js +6 -13
  51. package/helpers/user-ratings.helper.js.map +1 -1
  52. package/helpers/{user-reviews.helper.mjs → user-reviews.helper.cjs} +16 -7
  53. package/helpers/user-reviews.helper.cjs.map +1 -0
  54. package/helpers/user-reviews.helper.js +6 -15
  55. package/helpers/user-reviews.helper.js.map +1 -1
  56. package/{index.mjs → index.cjs} +16 -13
  57. package/index.cjs.map +1 -0
  58. package/{index.d.mts → index.d.cts} +15 -15
  59. package/index.js +13 -14
  60. package/index.js.map +1 -1
  61. package/{package.mjs → package.js} +1 -1
  62. package/package.json +13 -7
  63. package/services/cinema.service.cjs +31 -0
  64. package/services/cinema.service.cjs.map +1 -0
  65. package/services/{cinema.service.d.mts → cinema.service.d.cts} +3 -3
  66. package/services/cinema.service.js +11 -11
  67. package/services/cinema.service.js.map +1 -1
  68. package/services/creator.service.cjs +32 -0
  69. package/services/creator.service.cjs.map +1 -0
  70. package/services/{creator.service.d.mts → creator.service.d.cts} +3 -3
  71. package/services/creator.service.js +11 -11
  72. package/services/creator.service.js.map +1 -1
  73. package/services/movie.service.cjs +61 -0
  74. package/services/movie.service.cjs.map +1 -0
  75. package/services/{movie.service.d.mts → movie.service.d.cts} +3 -3
  76. package/services/movie.service.js +33 -33
  77. package/services/movie.service.js.map +1 -1
  78. package/services/search.service.cjs +75 -0
  79. package/services/search.service.cjs.map +1 -0
  80. package/services/{search.service.d.mts → search.service.d.cts} +3 -3
  81. package/services/search.service.js +29 -29
  82. package/services/search.service.js.map +1 -1
  83. package/services/{user-ratings.service.mjs → user-ratings.service.cjs} +19 -19
  84. package/services/user-ratings.service.cjs.map +1 -0
  85. package/services/{user-ratings.service.d.mts → user-ratings.service.d.cts} +3 -3
  86. package/services/user-ratings.service.js +18 -18
  87. package/services/user-ratings.service.js.map +1 -1
  88. package/services/{user-reviews.service.mjs → user-reviews.service.cjs} +21 -21
  89. package/services/user-reviews.service.cjs.map +1 -0
  90. package/services/{user-reviews.service.d.mts → user-reviews.service.d.cts} +3 -3
  91. package/services/user-reviews.service.js +20 -20
  92. package/services/user-reviews.service.js.map +1 -1
  93. package/src/fetchers/{fetch.polyfill.mjs → fetch.polyfill.js} +1 -3
  94. package/src/fetchers/{index.mjs → index.js} +1 -1
  95. package/src/helpers/{cinema.helper.mjs → cinema.helper.js} +1 -1
  96. package/src/helpers/{creator.helper.mjs → creator.helper.js} +1 -1
  97. package/src/helpers/{movie.helper.mjs → movie.helper.js} +1 -1
  98. package/src/helpers/{search-creator.helper.mjs → search-creator.helper.js} +1 -1
  99. package/src/helpers/{search-user.helper.mjs → search-user.helper.js} +1 -1
  100. package/src/helpers/{search.helper.mjs → search.helper.js} +1 -1
  101. package/src/helpers/{user-ratings.helper.mjs → user-ratings.helper.js} +1 -1
  102. package/src/helpers/{user-reviews.helper.mjs → user-reviews.helper.js} +1 -1
  103. package/src/{index.mjs → index.js} +7 -6
  104. package/src/services/{cinema.service.mjs → cinema.service.js} +3 -3
  105. package/src/services/{creator.service.mjs → creator.service.js} +3 -3
  106. package/src/services/{movie.service.mjs → movie.service.js} +3 -3
  107. package/src/services/{search.service.mjs → search.service.js} +6 -6
  108. package/src/services/{user-ratings.service.mjs → user-ratings.service.js} +4 -4
  109. package/src/services/{user-reviews.service.mjs → user-reviews.service.js} +4 -4
  110. package/{vars.mjs → vars.cjs} +8 -2
  111. package/{vars.mjs.map → vars.cjs.map} +1 -1
  112. package/vars.js +1 -7
  113. package/fetchers/fetch.polyfill.mjs.map +0 -1
  114. package/fetchers/index.mjs.map +0 -1
  115. package/helpers/cinema.helper.mjs.map +0 -1
  116. package/helpers/creator.helper.mjs.map +0 -1
  117. package/helpers/movie.helper.mjs.map +0 -1
  118. package/helpers/search-creator.helper.mjs.map +0 -1
  119. package/helpers/search-user.helper.mjs.map +0 -1
  120. package/helpers/search.helper.mjs.map +0 -1
  121. package/helpers/user-ratings.helper.mjs.map +0 -1
  122. package/helpers/user-reviews.helper.mjs.map +0 -1
  123. package/index.mjs.map +0 -1
  124. package/services/cinema.service.mjs +0 -31
  125. package/services/cinema.service.mjs.map +0 -1
  126. package/services/creator.service.mjs +0 -32
  127. package/services/creator.service.mjs.map +0 -1
  128. package/services/movie.service.mjs +0 -61
  129. package/services/movie.service.mjs.map +0 -1
  130. package/services/search.service.mjs +0 -75
  131. package/services/search.service.mjs.map +0 -1
  132. package/services/user-ratings.service.mjs.map +0 -1
  133. package/services/user-reviews.service.mjs.map +0 -1
  134. /package/src/helpers/{global.helper.mjs → global.helper.js} +0 -0
  135. /package/src/{vars.mjs → vars.js} +0 -0
@@ -1,24 +1,24 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_cinema_helper = require("../helpers/cinema.helper.js");
4
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { cinemasUrl } from "../vars.js";
3
+ import { getCinemaCoords, getCinemaId, getCinemaUrl, getGroupedFilmsByDate, parseCinema } from "../helpers/cinema.helper.js";
4
+ import { parse } from "node-html-parser";
5
5
  //#region src/services/cinema.service.ts
6
6
  var CinemaScraper = class {
7
7
  async cinemas(district = 1, period = "today", options) {
8
- const contentNode = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.cinemasUrl(district, period, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--cinemas section[id*=\"cinema-\"]");
8
+ const contentNode = parse(await fetchPage(cinemasUrl(district, period, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--cinemas section[id*=\"cinema-\"]");
9
9
  return this.buildCinemas(contentNode);
10
10
  }
11
11
  buildCinemas(contentNode) {
12
12
  const cinemas = [];
13
13
  contentNode.forEach((x) => {
14
- const cinemaInfo = require_cinema_helper.parseCinema(x);
14
+ const cinemaInfo = parseCinema(x);
15
15
  const cinema = {
16
- id: require_cinema_helper.getCinemaId(x),
16
+ id: getCinemaId(x),
17
17
  name: cinemaInfo?.name,
18
18
  city: cinemaInfo?.city,
19
- url: require_cinema_helper.getCinemaUrl(x),
20
- coords: require_cinema_helper.getCinemaCoords(x),
21
- screenings: require_cinema_helper.getGroupedFilmsByDate(x)
19
+ url: getCinemaUrl(x),
20
+ coords: getCinemaCoords(x),
21
+ screenings: getGroupedFilmsByDate(x)
22
22
  };
23
23
  cinemas.push(cinema);
24
24
  });
@@ -26,6 +26,6 @@ var CinemaScraper = class {
26
26
  }
27
27
  };
28
28
  //#endregion
29
- exports.CinemaScraper = CinemaScraper;
29
+ export { CinemaScraper };
30
30
 
31
31
  //# sourceMappingURL=cinema.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","parseCinema","getCinemaId","getCinemaUrl","getCinemaCoords","getGroupedFilmsByDate"],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,eAAA,GAAA,iBAAA,OAHW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,aAAqB,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAaC,sBAAAA,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAIC,sBAAAA,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAKC,sBAAAA,aAAa,EAAE;IACpB,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,YAAYC,sBAAAA,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
1
+ {"version":3,"file":"cinema.service.js","names":[],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,cAFc,MADH,MAAM,UADX,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,aAAqB,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAI,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAK,aAAa,EAAE;IACpB,QAAQ,gBAAgB,EAAE;IAC1B,YAAY,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
@@ -0,0 +1,32 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_creator_helper = require("../helpers/creator.helper.cjs");
4
+ let node_html_parser = require("node-html-parser");
5
+ //#region src/services/creator.service.ts
6
+ var CreatorScraper = class {
7
+ async creator(creatorId, options) {
8
+ const id = Number(creatorId);
9
+ if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
10
+ const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id, { language: options?.language }), { ...options?.request }));
11
+ const asideNode = creatorHtml.querySelector(".creator-about");
12
+ const filmsNode = creatorHtml.querySelector(".creator-filmography");
13
+ return this.buildCreator(+creatorId, asideNode, filmsNode);
14
+ }
15
+ buildCreator(id, asideEl, filmsNode) {
16
+ const birthdayInfo = require_creator_helper.getCreatorBirthdayInfo(asideEl);
17
+ return {
18
+ id,
19
+ name: require_creator_helper.getCreatorName(asideEl),
20
+ birthday: birthdayInfo?.birthday,
21
+ birthplace: birthdayInfo?.birthPlace,
22
+ photo: require_creator_helper.getCreatorPhoto(asideEl),
23
+ age: birthdayInfo?.age || null,
24
+ bio: require_creator_helper.getCreatorBio(asideEl),
25
+ films: require_creator_helper.getCreatorFilms(filmsNode)
26
+ };
27
+ }
28
+ };
29
+ //#endregion
30
+ exports.CreatorScraper = CreatorScraper;
31
+
32
+ //# sourceMappingURL=creator.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator.service.cjs","names":["fetchPage","creatorUrl","getCreatorBirthdayInfo","getCreatorName","getCreatorPhoto","getCreatorBio","getCreatorFilms"],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,eAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAeC,uBAAAA,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAMC,uBAAAA,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAOC,uBAAAA,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAKC,uBAAAA,cAAc,QAAQ;GAC3B,OAAOC,uBAAAA,gBAAgB,UAAU;GAClC"}
@@ -1,5 +1,5 @@
1
- import { CSFDCreator } from "../dto/creator.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDCreator } from "../dto/creator.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/creator.service.d.ts
5
5
  declare class CreatorScraper {
@@ -8,4 +8,4 @@ declare class CreatorScraper {
8
8
  }
9
9
  //#endregion
10
10
  export { CreatorScraper };
11
- //# sourceMappingURL=creator.service.d.mts.map
11
+ //# sourceMappingURL=creator.service.d.cts.map
@@ -1,32 +1,32 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_creator_helper = require("../helpers/creator.helper.js");
4
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { creatorUrl } from "../vars.js";
3
+ import { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from "../helpers/creator.helper.js";
4
+ import { parse } from "node-html-parser";
5
5
  //#region src/services/creator.service.ts
6
6
  var CreatorScraper = class {
7
7
  async creator(creatorId, options) {
8
8
  const id = Number(creatorId);
9
9
  if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
10
- const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id, { language: options?.language }), { ...options?.request }));
10
+ const creatorHtml = parse(await fetchPage(creatorUrl(id, { language: options?.language }), { ...options?.request }));
11
11
  const asideNode = creatorHtml.querySelector(".creator-about");
12
12
  const filmsNode = creatorHtml.querySelector(".creator-filmography");
13
13
  return this.buildCreator(+creatorId, asideNode, filmsNode);
14
14
  }
15
15
  buildCreator(id, asideEl, filmsNode) {
16
- const birthdayInfo = require_creator_helper.getCreatorBirthdayInfo(asideEl);
16
+ const birthdayInfo = getCreatorBirthdayInfo(asideEl);
17
17
  return {
18
18
  id,
19
- name: require_creator_helper.getCreatorName(asideEl),
19
+ name: getCreatorName(asideEl),
20
20
  birthday: birthdayInfo?.birthday,
21
21
  birthplace: birthdayInfo?.birthPlace,
22
- photo: require_creator_helper.getCreatorPhoto(asideEl),
22
+ photo: getCreatorPhoto(asideEl),
23
23
  age: birthdayInfo?.age || null,
24
- bio: require_creator_helper.getCreatorBio(asideEl),
25
- films: require_creator_helper.getCreatorFilms(filmsNode)
24
+ bio: getCreatorBio(asideEl),
25
+ films: getCreatorFilms(filmsNode)
26
26
  };
27
27
  }
28
28
  };
29
29
  //#endregion
30
- exports.CreatorScraper = CreatorScraper;
30
+ export { CreatorScraper };
31
31
 
32
32
  //# sourceMappingURL=creator.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorBirthdayInfo","getCreatorName","getCreatorPhoto","getCreatorBio","getCreatorFilms"],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,eAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAeC,uBAAAA,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAMC,uBAAAA,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAOC,uBAAAA,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAKC,uBAAAA,cAAc,QAAQ;GAC3B,OAAOC,uBAAAA,gBAAgB,UAAU;GAClC"}
1
+ {"version":3,"file":"creator.service.js","names":[],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAe,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
@@ -0,0 +1,61 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_movie_helper = require("../helpers/movie.helper.cjs");
4
+ let node_html_parser = require("node-html-parser");
5
+ //#region src/services/movie.service.ts
6
+ var MovieScraper = class {
7
+ async movie(movieId, options) {
8
+ const id = Number(movieId);
9
+ if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
10
+ const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
11
+ const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
12
+ const asideNode = movieHtml.querySelector(".aside-movie-profile");
13
+ const movieNode = movieHtml.querySelector(".main-movie-profile");
14
+ const jsonLdString = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
15
+ let jsonLd = null;
16
+ try {
17
+ jsonLd = JSON.parse(jsonLdString);
18
+ } catch (e) {
19
+ console.error("node-csfd-api: Error parsing JSON-LD", e);
20
+ }
21
+ return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
22
+ }
23
+ buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
24
+ const type = require_movie_helper.getMovieType(el);
25
+ const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
26
+ const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
27
+ return {
28
+ id: movieId,
29
+ title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
30
+ year: require_movie_helper.getMovieYear(jsonLd),
31
+ duration: require_movie_helper.getMovieDuration(jsonLd, el),
32
+ descriptions: require_movie_helper.getMovieDescriptions(el),
33
+ genres: require_movie_helper.getMovieGenres(el),
34
+ type,
35
+ url: require_vars.movieUrl(movieId, { language: options?.language }),
36
+ origins: require_movie_helper.getMovieOrigins(el),
37
+ colorRating: require_movie_helper.getMovieColorRating(pageClasses),
38
+ rating: require_movie_helper.getMovieRating(asideEl),
39
+ ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
40
+ titlesOther: require_movie_helper.getMovieTitlesOther(el),
41
+ poster: require_movie_helper.getMoviePoster(el),
42
+ photo: require_movie_helper.getMovieRandomPhoto(el),
43
+ trivia: require_movie_helper.getMovieTrivia(el),
44
+ creators: require_movie_helper.getMovieCreators(el, options),
45
+ vod: require_movie_helper.getMovieVods(asideEl),
46
+ tags: require_movie_helper.getMovieTags(asideEl),
47
+ premieres: require_movie_helper.getMoviePremieres(asideEl),
48
+ related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
49
+ similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
50
+ seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
51
+ episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
52
+ parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
53
+ episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
54
+ seasonName
55
+ };
56
+ }
57
+ };
58
+ //#endregion
59
+ exports.MovieScraper = MovieScraper;
60
+
61
+ //# sourceMappingURL=movie.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movie.service.cjs","names":["fetchPage","movieUrl","getMovieType","getSeriesAndSeasonTitle","detectSeasonOrEpisodeListType","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieCreators","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies","getSeasonsOrEpisodes","getSeasonOrEpisodeParent","getEpisodeCode"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: movieId must be a valid number');\n }\n const url = movieUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const movieHtml = parse(response);\n\n const pageClasses = movieHtml.querySelector('.page-content').classNames.split(' ');\n const asideNode = movieHtml.querySelector('.aside-movie-profile');\n const movieNode = movieHtml.querySelector('.main-movie-profile');\n const jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,aAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,qBAAAA,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,GAAG;GAI5E,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,UAAUC,qBAAAA,iBAAiB,QAAQ,GAAG;GACtC,cAAcC,qBAAAA,qBAAqB,GAAG;GACtC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B;GACA,KAAKR,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qBAAAA,gBAAgB,GAAG;GAC5B,aAAaC,qBAAAA,oBAAoB,YAAY;GAC7C,QAAQC,qBAAAA,eAAe,QAAQ;GAC/B,aAAaC,qBAAAA,oBAAoB,QAAQ;GACzC,aAAaC,qBAAAA,oBAAoB,GAAG;GACpC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,OAAOC,qBAAAA,oBAAoB,GAAG;GAC9B,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,UAAUC,qBAAAA,iBAAiB,IAAI,QAAQ;GACvC,KAAKC,qBAAAA,aAAa,QAAQ;GAC1B,MAAMC,qBAAAA,aAAa,QAAQ;GAC3B,WAAWC,qBAAAA,kBAAkB,QAAQ;GACrC,SAASC,qBAAAA,kBAAkB,SAAS,cAAc;GAClD,SAASA,qBAAAA,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,GAAG,GAAG;GACvD;GACD"}
@@ -1,5 +1,5 @@
1
- import { CSFDMovie } from "../dto/movie.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDMovie } from "../dto/movie.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/movie.service.d.ts
5
5
  declare class MovieScraper {
@@ -8,4 +8,4 @@ declare class MovieScraper {
8
8
  }
9
9
  //#endregion
10
10
  export { MovieScraper };
11
- //# sourceMappingURL=movie.service.d.mts.map
11
+ //# sourceMappingURL=movie.service.d.cts.map
@@ -1,13 +1,13 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_movie_helper = require("../helpers/movie.helper.js");
4
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { movieUrl } from "../vars.js";
3
+ import { detectSeasonOrEpisodeListType, getEpisodeCode, getMovieBoxMovies, getMovieColorRating, getMovieCreators, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear, getSeasonOrEpisodeParent, getSeasonsOrEpisodes, getSeriesAndSeasonTitle } from "../helpers/movie.helper.js";
4
+ import { parse } from "node-html-parser";
5
5
  //#region src/services/movie.service.ts
6
6
  var MovieScraper = class {
7
7
  async movie(movieId, options) {
8
8
  const id = Number(movieId);
9
9
  if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
10
- const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
10
+ const movieHtml = parse(await fetchPage(movieUrl(id, { language: options?.language }), { ...options?.request }));
11
11
  const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
12
12
  const asideNode = movieHtml.querySelector(".aside-movie-profile");
13
13
  const movieNode = movieHtml.querySelector(".main-movie-profile");
@@ -21,41 +21,41 @@ var MovieScraper = class {
21
21
  return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
22
22
  }
23
23
  buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
24
- const type = require_movie_helper.getMovieType(el);
25
- const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
26
- const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
24
+ const type = getMovieType(el);
25
+ const { seriesName = null, seasonName = null } = type === "season" ? getSeriesAndSeasonTitle(el) : {};
26
+ const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);
27
27
  return {
28
28
  id: movieId,
29
- title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
30
- year: require_movie_helper.getMovieYear(jsonLd),
31
- duration: require_movie_helper.getMovieDuration(jsonLd, el),
32
- descriptions: require_movie_helper.getMovieDescriptions(el),
33
- genres: require_movie_helper.getMovieGenres(el),
29
+ title: type === "season" && seriesName ? seriesName : getMovieTitle(el),
30
+ year: getMovieYear(jsonLd),
31
+ duration: getMovieDuration(jsonLd, el),
32
+ descriptions: getMovieDescriptions(el),
33
+ genres: getMovieGenres(el),
34
34
  type,
35
- url: require_vars.movieUrl(movieId, { language: options?.language }),
36
- origins: require_movie_helper.getMovieOrigins(el),
37
- colorRating: require_movie_helper.getMovieColorRating(pageClasses),
38
- rating: require_movie_helper.getMovieRating(asideEl),
39
- ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
40
- titlesOther: require_movie_helper.getMovieTitlesOther(el),
41
- poster: require_movie_helper.getMoviePoster(el),
42
- photo: require_movie_helper.getMovieRandomPhoto(el),
43
- trivia: require_movie_helper.getMovieTrivia(el),
44
- creators: require_movie_helper.getMovieCreators(el, options),
45
- vod: require_movie_helper.getMovieVods(asideEl),
46
- tags: require_movie_helper.getMovieTags(asideEl),
47
- premieres: require_movie_helper.getMoviePremieres(asideEl),
48
- related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
49
- similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
50
- seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
51
- episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
52
- parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
53
- episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
35
+ url: movieUrl(movieId, { language: options?.language }),
36
+ origins: getMovieOrigins(el),
37
+ colorRating: getMovieColorRating(pageClasses),
38
+ rating: getMovieRating(asideEl),
39
+ ratingCount: getMovieRatingCount(asideEl),
40
+ titlesOther: getMovieTitlesOther(el),
41
+ poster: getMoviePoster(el),
42
+ photo: getMovieRandomPhoto(el),
43
+ trivia: getMovieTrivia(el),
44
+ creators: getMovieCreators(el, options),
45
+ vod: getMovieVods(asideEl),
46
+ tags: getMovieTags(asideEl),
47
+ premieres: getMoviePremieres(asideEl),
48
+ related: getMovieBoxMovies(asideEl, "Související"),
49
+ similar: getMovieBoxMovies(asideEl, "Podobné"),
50
+ seasons: seasonOrEpisodeListType === "seasons" ? getSeasonsOrEpisodes(el) : null,
51
+ episodes: seasonOrEpisodeListType === "episodes" ? getSeasonsOrEpisodes(el) : null,
52
+ parent: type === "season" || type === "episode" ? getSeasonOrEpisodeParent(el) : null,
53
+ episodeCode: type === "episode" ? getEpisodeCode(el) : null,
54
54
  seasonName
55
55
  };
56
56
  }
57
57
  };
58
58
  //#endregion
59
- exports.MovieScraper = MovieScraper;
59
+ export { MovieScraper };
60
60
 
61
61
  //# sourceMappingURL=movie.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieType","getSeriesAndSeasonTitle","detectSeasonOrEpisodeListType","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieCreators","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies","getSeasonsOrEpisodes","getSeasonOrEpisodeParent","getEpisodeCode"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: movieId must be a valid number');\n }\n const url = movieUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const movieHtml = parse(response);\n\n const pageClasses = movieHtml.querySelector('.page-content').classNames.split(' ');\n const asideNode = movieHtml.querySelector('.aside-movie-profile');\n const movieNode = movieHtml.querySelector('.main-movie-profile');\n const jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,aAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,qBAAAA,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,GAAG;GAI5E,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,UAAUC,qBAAAA,iBAAiB,QAAQ,GAAG;GACtC,cAAcC,qBAAAA,qBAAqB,GAAG;GACtC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B;GACA,KAAKR,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qBAAAA,gBAAgB,GAAG;GAC5B,aAAaC,qBAAAA,oBAAoB,YAAY;GAC7C,QAAQC,qBAAAA,eAAe,QAAQ;GAC/B,aAAaC,qBAAAA,oBAAoB,QAAQ;GACzC,aAAaC,qBAAAA,oBAAoB,GAAG;GACpC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,OAAOC,qBAAAA,oBAAoB,GAAG;GAC9B,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,UAAUC,qBAAAA,iBAAiB,IAAI,QAAQ;GACvC,KAAKC,qBAAAA,aAAa,QAAQ;GAC1B,MAAMC,qBAAAA,aAAa,QAAQ;GAC3B,WAAWC,qBAAAA,kBAAkB,QAAQ;GACrC,SAASC,qBAAAA,kBAAkB,SAAS,cAAc;GAClD,SAASA,qBAAAA,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,GAAG,GAAG;GACvD;GACD"}
1
+ {"version":3,"file":"movie.service.js","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: movieId must be a valid number');\n }\n const url = movieUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const movieHtml = parse(response);\n\n const pageClasses = movieHtml.querySelector('.page-content').classNames.split(' ');\n const asideNode = movieHtml.querySelector('.aside-movie-profile');\n const movieNode = movieHtml.querySelector('.main-movie-profile');\n const jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,YAAY,MAFD,MAAM,UADX,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAO,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAW,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0B,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAa,cAAc,GAAG;GAI5E,MAAM,aAAa,OAAO;GAC1B,UAAU,iBAAiB,QAAQ,GAAG;GACtC,cAAc,qBAAqB,GAAG;GACtC,QAAQ,eAAe,GAAG;GAC1B;GACA,KAAK,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAAS,gBAAgB,GAAG;GAC5B,aAAa,oBAAoB,YAAY;GAC7C,QAAQ,eAAe,QAAQ;GAC/B,aAAa,oBAAoB,QAAQ;GACzC,aAAa,oBAAoB,GAAG;GACpC,QAAQ,eAAe,GAAG;GAC1B,OAAO,oBAAoB,GAAG;GAC9B,QAAQ,eAAe,GAAG;GAC1B,UAAU,iBAAiB,IAAI,QAAQ;GACvC,KAAK,aAAa,QAAQ;GAC1B,MAAM,aAAa,QAAQ;GAC3B,WAAW,kBAAkB,QAAQ;GACrC,SAAS,kBAAkB,SAAS,cAAc;GAClD,SAAS,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAY,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAa,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAY,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAY,eAAe,GAAG,GAAG;GACvD;GACD"}
@@ -0,0 +1,75 @@
1
+ const require_index = require("../fetchers/index.cjs");
2
+ const require_vars = require("../vars.cjs");
3
+ const require_global_helper = require("../helpers/global.helper.cjs");
4
+ const require_search_creator_helper = require("../helpers/search-creator.helper.cjs");
5
+ const require_search_user_helper = require("../helpers/search-user.helper.cjs");
6
+ const require_search_helper = require("../helpers/search.helper.cjs");
7
+ let node_html_parser = require("node-html-parser");
8
+ //#region src/services/search.service.ts
9
+ var SearchScraper = class {
10
+ async search(text, options) {
11
+ const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
12
+ const moviesNode = html.querySelectorAll(".main-movies article");
13
+ const usersNode = html.querySelectorAll(".main-users article");
14
+ const tvSeriesNode = html.querySelectorAll(".main-series article");
15
+ const creatorsNode = html.querySelectorAll(".main-authors article");
16
+ return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
17
+ }
18
+ parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
19
+ const baseUrl = require_vars.getUrlByLanguage(language);
20
+ const movies = [];
21
+ const users = [];
22
+ const tvSeries = [];
23
+ const creators = [];
24
+ const movieMapper = (m) => {
25
+ const url = require_search_helper.getSearchUrl(m);
26
+ return {
27
+ id: require_global_helper.parseIdFromUrl(url),
28
+ title: require_search_helper.getSearchTitle(m),
29
+ year: require_search_helper.getSearchYear(m),
30
+ url: `${baseUrl}${url}`,
31
+ type: require_search_helper.getSearchType(m),
32
+ colorRating: require_search_helper.getSearchColorRating(m),
33
+ poster: require_search_helper.getSearchPoster(m),
34
+ origins: require_search_helper.getSearchOrigins(m),
35
+ creators: {
36
+ directors: require_search_helper.parseSearchPeople(m, "directors"),
37
+ actors: require_search_helper.parseSearchPeople(m, "actors")
38
+ }
39
+ };
40
+ };
41
+ const userMapper = (m) => {
42
+ const url = require_search_user_helper.getUserUrl(m);
43
+ return {
44
+ id: require_global_helper.parseIdFromUrl(url),
45
+ user: require_search_user_helper.getUser(m),
46
+ userRealName: require_search_user_helper.getUserRealName(m),
47
+ avatar: require_search_user_helper.getAvatar(m),
48
+ url: `${baseUrl}${url}`
49
+ };
50
+ };
51
+ const creatorMapper = (m) => {
52
+ const url = require_search_creator_helper.getCreatorUrl(m);
53
+ return {
54
+ id: require_global_helper.parseIdFromUrl(url),
55
+ name: require_search_creator_helper.getCreatorName(m),
56
+ image: require_search_creator_helper.getCreatorImage(m),
57
+ url: `${baseUrl}${url}`
58
+ };
59
+ };
60
+ movies.push(...moviesNode.map(movieMapper));
61
+ users.push(...usersNode.map(userMapper));
62
+ tvSeries.push(...tvSeriesNode.map(movieMapper));
63
+ creators.push(...creatorsNode.map(creatorMapper));
64
+ return {
65
+ movies,
66
+ users,
67
+ tvSeries,
68
+ creators
69
+ };
70
+ }
71
+ };
72
+ //#endregion
73
+ exports.SearchScraper = SearchScraper;
74
+
75
+ //# sourceMappingURL=search.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.service.cjs","names":["fetchPage","searchUrl","getUrlByLanguage","getSearchUrl","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","getUser","getUserRealName","getAvatar","getCreatorUrl","getCreatorName","getCreatorImage"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const url = searchUrl(text, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const html = parse(response);\n const moviesNode = html.querySelectorAll('.main-movies article');\n const usersNode = html.querySelectorAll('.main-users article');\n const tvSeriesNode = html.querySelectorAll('.main-series article');\n const creatorsNode = html.querySelectorAll('.main-authors article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n creatorsNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const baseUrl = getUrlByLanguage(language);\n\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const creators: CSFDSearchCreator[] = [];\n\n const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n const url = getSearchUrl(m);\n return {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n };\n\n const userMapper = (m: HTMLElement): CSFDSearchUser => {\n const url = getUserUrl(m);\n return {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n };\n\n const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n const url = getCreatorUrl(m);\n return {\n id: parseIdFromUrl(url),\n name: getCreatorName(m),\n image: getCreatorImage(m),\n url: `${baseUrl}${url}`\n };\n };\n\n movies.push(...moviesNode.map(movieMapper));\n users.push(...usersNode.map(userMapper));\n tvSeries.push(...tvSeriesNode.map(movieMapper));\n creators.push(...creatorsNode.map(creatorMapper));\n\n const search: CSFDSearch = {\n movies,\n users,\n tvSeries,\n creators\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,QAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,EAAE;AAC3B,UAAO;IACL,IAAIC,sBAAAA,eAAe,IAAI;IACvB,OAAOC,sBAAAA,eAAe,EAAE;IACxB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,aAAaC,sBAAAA,qBAAqB,EAAE;IACpC,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,SAASC,sBAAAA,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,YAAY;KAC5C,QAAQA,sBAAAA,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,EAAE;AACzB,UAAO;IACL,IAAIR,sBAAAA,eAAe,IAAI;IACvB,MAAMS,2BAAAA,QAAQ,EAAE;IAChB,cAAcC,2BAAAA,gBAAgB,EAAE;IAChC,QAAQC,2BAAAA,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,EAAE;AAC5B,UAAO;IACL,IAAIZ,sBAAAA,eAAe,IAAI;IACvB,MAAMa,8BAAAA,eAAe,EAAE;IACvB,OAAOC,8BAAAA,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
@@ -1,5 +1,5 @@
1
- import { CSFDSearch } from "../dto/search.mjs";
2
- import { CSFDOptions } from "../dto/options.mjs";
1
+ import { CSFDSearch } from "../dto/search.cjs";
2
+ import { CSFDOptions } from "../dto/options.cjs";
3
3
 
4
4
  //#region src/services/search.service.d.ts
5
5
  declare class SearchScraper {
@@ -8,4 +8,4 @@ declare class SearchScraper {
8
8
  }
9
9
  //#endregion
10
10
  export { SearchScraper };
11
- //# sourceMappingURL=search.service.d.mts.map
11
+ //# sourceMappingURL=search.service.d.cts.map
@@ -1,14 +1,14 @@
1
- const require_index = require("../fetchers/index.js");
2
- const require_vars = require("../vars.js");
3
- const require_global_helper = require("../helpers/global.helper.js");
4
- const require_search_creator_helper = require("../helpers/search-creator.helper.js");
5
- const require_search_user_helper = require("../helpers/search-user.helper.js");
6
- const require_search_helper = require("../helpers/search.helper.js");
7
- let node_html_parser = require("node-html-parser");
1
+ import { fetchPage } from "../fetchers/index.js";
2
+ import { getUrlByLanguage, searchUrl } from "../vars.js";
3
+ import { parseIdFromUrl } from "../helpers/global.helper.js";
4
+ import { getCreatorImage, getCreatorName, getCreatorUrl } from "../helpers/search-creator.helper.js";
5
+ import { getAvatar, getUser, getUserRealName, getUserUrl } from "../helpers/search-user.helper.js";
6
+ import { getSearchColorRating, getSearchOrigins, getSearchPoster, getSearchTitle, getSearchType, getSearchUrl, getSearchYear, parseSearchPeople } from "../helpers/search.helper.js";
7
+ import { parse } from "node-html-parser";
8
8
  //#region src/services/search.service.ts
9
9
  var SearchScraper = class {
10
10
  async search(text, options) {
11
- const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
11
+ const html = parse(await fetchPage(searchUrl(text, { language: options?.language }), { ...options?.request }));
12
12
  const moviesNode = html.querySelectorAll(".main-movies article");
13
13
  const usersNode = html.querySelectorAll(".main-users article");
14
14
  const tvSeriesNode = html.querySelectorAll(".main-series article");
@@ -16,44 +16,44 @@ var SearchScraper = class {
16
16
  return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
17
17
  }
18
18
  parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
19
- const baseUrl = require_vars.getUrlByLanguage(language);
19
+ const baseUrl = getUrlByLanguage(language);
20
20
  const movies = [];
21
21
  const users = [];
22
22
  const tvSeries = [];
23
23
  const creators = [];
24
24
  const movieMapper = (m) => {
25
- const url = require_search_helper.getSearchUrl(m);
25
+ const url = getSearchUrl(m);
26
26
  return {
27
- id: require_global_helper.parseIdFromUrl(url),
28
- title: require_search_helper.getSearchTitle(m),
29
- year: require_search_helper.getSearchYear(m),
27
+ id: parseIdFromUrl(url),
28
+ title: getSearchTitle(m),
29
+ year: getSearchYear(m),
30
30
  url: `${baseUrl}${url}`,
31
- type: require_search_helper.getSearchType(m),
32
- colorRating: require_search_helper.getSearchColorRating(m),
33
- poster: require_search_helper.getSearchPoster(m),
34
- origins: require_search_helper.getSearchOrigins(m),
31
+ type: getSearchType(m),
32
+ colorRating: getSearchColorRating(m),
33
+ poster: getSearchPoster(m),
34
+ origins: getSearchOrigins(m),
35
35
  creators: {
36
- directors: require_search_helper.parseSearchPeople(m, "directors"),
37
- actors: require_search_helper.parseSearchPeople(m, "actors")
36
+ directors: parseSearchPeople(m, "directors"),
37
+ actors: parseSearchPeople(m, "actors")
38
38
  }
39
39
  };
40
40
  };
41
41
  const userMapper = (m) => {
42
- const url = require_search_user_helper.getUserUrl(m);
42
+ const url = getUserUrl(m);
43
43
  return {
44
- id: require_global_helper.parseIdFromUrl(url),
45
- user: require_search_user_helper.getUser(m),
46
- userRealName: require_search_user_helper.getUserRealName(m),
47
- avatar: require_search_user_helper.getAvatar(m),
44
+ id: parseIdFromUrl(url),
45
+ user: getUser(m),
46
+ userRealName: getUserRealName(m),
47
+ avatar: getAvatar(m),
48
48
  url: `${baseUrl}${url}`
49
49
  };
50
50
  };
51
51
  const creatorMapper = (m) => {
52
- const url = require_search_creator_helper.getCreatorUrl(m);
52
+ const url = getCreatorUrl(m);
53
53
  return {
54
- id: require_global_helper.parseIdFromUrl(url),
55
- name: require_search_creator_helper.getCreatorName(m),
56
- image: require_search_creator_helper.getCreatorImage(m),
54
+ id: parseIdFromUrl(url),
55
+ name: getCreatorName(m),
56
+ image: getCreatorImage(m),
57
57
  url: `${baseUrl}${url}`
58
58
  };
59
59
  };
@@ -70,6 +70,6 @@ var SearchScraper = class {
70
70
  }
71
71
  };
72
72
  //#endregion
73
- exports.SearchScraper = SearchScraper;
73
+ export { SearchScraper };
74
74
 
75
75
  //# sourceMappingURL=search.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.service.js","names":["fetchPage","searchUrl","getUrlByLanguage","getSearchUrl","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","getUser","getUserRealName","getAvatar","getCreatorUrl","getCreatorName","getCreatorImage"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const url = searchUrl(text, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const html = parse(response);\n const moviesNode = html.querySelectorAll('.main-movies article');\n const usersNode = html.querySelectorAll('.main-users article');\n const tvSeriesNode = html.querySelectorAll('.main-series article');\n const creatorsNode = html.querySelectorAll('.main-authors article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n creatorsNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const baseUrl = getUrlByLanguage(language);\n\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const creators: CSFDSearchCreator[] = [];\n\n const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n const url = getSearchUrl(m);\n return {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n };\n\n const userMapper = (m: HTMLElement): CSFDSearchUser => {\n const url = getUserUrl(m);\n return {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n };\n\n const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n const url = getCreatorUrl(m);\n return {\n id: parseIdFromUrl(url),\n name: getCreatorName(m),\n image: getCreatorImage(m),\n url: `${baseUrl}${url}`\n };\n };\n\n movies.push(...moviesNode.map(movieMapper));\n users.push(...usersNode.map(userMapper));\n tvSeries.push(...tvSeriesNode.map(movieMapper));\n creators.push(...creatorsNode.map(creatorMapper));\n\n const search: CSFDSearch = {\n movies,\n users,\n tvSeries,\n creators\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,QAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,EAAE;AAC3B,UAAO;IACL,IAAIC,sBAAAA,eAAe,IAAI;IACvB,OAAOC,sBAAAA,eAAe,EAAE;IACxB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,aAAaC,sBAAAA,qBAAqB,EAAE;IACpC,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,SAASC,sBAAAA,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,YAAY;KAC5C,QAAQA,sBAAAA,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,EAAE;AACzB,UAAO;IACL,IAAIR,sBAAAA,eAAe,IAAI;IACvB,MAAMS,2BAAAA,QAAQ,EAAE;IAChB,cAAcC,2BAAAA,gBAAgB,EAAE;IAChC,QAAQC,2BAAAA,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,EAAE;AAC5B,UAAO;IACL,IAAIZ,sBAAAA,eAAe,IAAI;IACvB,MAAMa,8BAAAA,eAAe,EAAE;IACvB,OAAOC,8BAAAA,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
1
+ {"version":3,"file":"search.service.js","names":[],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const url = searchUrl(text, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const html = parse(response);\n const moviesNode = html.querySelectorAll('.main-movies article');\n const usersNode = html.querySelectorAll('.main-users article');\n const tvSeriesNode = html.querySelectorAll('.main-series article');\n const creatorsNode = html.querySelectorAll('.main-authors article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n creatorsNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const baseUrl = getUrlByLanguage(language);\n\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const creators: CSFDSearchCreator[] = [];\n\n const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n const url = getSearchUrl(m);\n return {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n };\n\n const userMapper = (m: HTMLElement): CSFDSearchUser => {\n const url = getUserUrl(m);\n return {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n };\n\n const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n const url = getCreatorUrl(m);\n return {\n id: parseIdFromUrl(url),\n name: getCreatorName(m),\n image: getCreatorImage(m),\n url: `${baseUrl}${url}`\n };\n };\n\n movies.push(...moviesNode.map(movieMapper));\n users.push(...usersNode.map(userMapper));\n tvSeries.push(...tvSeriesNode.map(movieMapper));\n creators.push(...creatorsNode.map(creatorMapper));\n\n const search: CSFDSearch = {\n movies,\n users,\n tvSeries,\n creators\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,OAAO,MAFI,MAAM,UADX,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAU,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAM,aAAa,EAAE;AAC3B,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,OAAO,eAAe,EAAE;IACxB,MAAM,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAM,cAAc,EAAE;IACtB,aAAa,qBAAqB,EAAE;IACpC,QAAQ,gBAAgB,EAAE;IAC1B,SAAS,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAW,kBAAkB,GAAG,YAAY;KAC5C,QAAQ,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAM,WAAW,EAAE;AACzB,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,QAAQ,EAAE;IAChB,cAAc,gBAAgB,EAAE;IAChC,QAAQ,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAM,cAAc,EAAE;AAC5B,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,eAAe,EAAE;IACvB,OAAO,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}