node-csfd-api 3.3.0 → 4.0.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.
Files changed (79) hide show
  1. package/README.md +317 -209
  2. package/dto/movie.d.mts +4 -2
  3. package/dto/movie.d.ts +4 -2
  4. package/dto/options.d.mts +9 -0
  5. package/dto/options.d.ts +9 -0
  6. package/dto/user-ratings.d.mts +2 -2
  7. package/dto/user-ratings.d.ts +2 -2
  8. package/fetchers/fetch.polyfill.js +0 -2
  9. package/fetchers/fetch.polyfill.js.map +1 -1
  10. package/fetchers/index.js +1 -1
  11. package/fetchers/index.js.map +1 -1
  12. package/fetchers/index.mjs +1 -1
  13. package/fetchers/index.mjs.map +1 -1
  14. package/helpers/cinema.helper.js.map +1 -1
  15. package/helpers/cinema.helper.mjs.map +1 -1
  16. package/helpers/creator.helper.js.map +1 -1
  17. package/helpers/creator.helper.mjs.map +1 -1
  18. package/helpers/global.helper.js.map +1 -1
  19. package/helpers/global.helper.mjs.map +1 -1
  20. package/helpers/movie.helper.js +57 -0
  21. package/helpers/movie.helper.js.map +1 -1
  22. package/helpers/movie.helper.mjs +57 -1
  23. package/helpers/movie.helper.mjs.map +1 -1
  24. package/helpers/search-user.helper.js +0 -2
  25. package/helpers/search-user.helper.js.map +1 -1
  26. package/helpers/search.helper.js.map +1 -1
  27. package/helpers/search.helper.mjs.map +1 -1
  28. package/helpers/user-ratings.helper.js.map +1 -1
  29. package/helpers/user-ratings.helper.mjs.map +1 -1
  30. package/helpers/user-reviews.helper.js.map +1 -1
  31. package/helpers/user-reviews.helper.mjs.map +1 -1
  32. package/index.d.mts +15 -15
  33. package/index.d.ts +15 -15
  34. package/index.js +23 -16
  35. package/index.js.map +1 -1
  36. package/index.mjs +23 -16
  37. package/index.mjs.map +1 -1
  38. package/package.json +3 -3
  39. package/services/cinema.service.d.mts +2 -1
  40. package/services/cinema.service.d.ts +2 -1
  41. package/services/cinema.service.js +2 -4
  42. package/services/cinema.service.js.map +1 -1
  43. package/services/cinema.service.mjs +2 -2
  44. package/services/cinema.service.mjs.map +1 -1
  45. package/services/creator.service.d.mts +2 -1
  46. package/services/creator.service.d.ts +2 -1
  47. package/services/creator.service.js +2 -4
  48. package/services/creator.service.js.map +1 -1
  49. package/services/creator.service.mjs +2 -2
  50. package/services/creator.service.mjs.map +1 -1
  51. package/services/movie.service.d.mts +2 -1
  52. package/services/movie.service.d.ts +2 -1
  53. package/services/movie.service.js +15 -17
  54. package/services/movie.service.js.map +1 -1
  55. package/services/movie.service.mjs +16 -16
  56. package/services/movie.service.mjs.map +1 -1
  57. package/services/search.service.d.mts +2 -1
  58. package/services/search.service.d.ts +2 -1
  59. package/services/search.service.js +8 -9
  60. package/services/search.service.js.map +1 -1
  61. package/services/search.service.mjs +9 -8
  62. package/services/search.service.mjs.map +1 -1
  63. package/services/user-ratings.service.d.mts +2 -1
  64. package/services/user-ratings.service.d.ts +2 -1
  65. package/services/user-ratings.service.js +4 -6
  66. package/services/user-ratings.service.js.map +1 -1
  67. package/services/user-ratings.service.mjs +4 -4
  68. package/services/user-ratings.service.mjs.map +1 -1
  69. package/services/user-reviews.service.d.mts +2 -1
  70. package/services/user-reviews.service.d.ts +2 -1
  71. package/services/user-reviews.service.js +4 -6
  72. package/services/user-reviews.service.js.map +1 -1
  73. package/services/user-reviews.service.mjs +4 -4
  74. package/services/user-reviews.service.mjs.map +1 -1
  75. package/vars.js +17 -7
  76. package/vars.js.map +1 -1
  77. package/vars.mjs +17 -8
  78. package/vars.mjs.map +1 -1
  79. package/_virtual/rolldown_runtime.js +0 -25
@@ -1,18 +1,16 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
2
1
  const require_index = require('../fetchers/index.js');
3
2
  const require_vars = require('../vars.js');
4
3
  const require_global_helper = require('../helpers/global.helper.js');
5
4
  const require_user_reviews_helper = require('../helpers/user-reviews.helper.js');
6
5
  let node_html_parser = require("node-html-parser");
7
- node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
8
6
 
9
7
  //#region src/services/user-reviews.service.ts
10
8
  var UserReviewsScraper = class {
11
- async userReviews(user, config, optionsRequest) {
9
+ async userReviews(user, config, options) {
12
10
  let allReviews = [];
13
11
  const pageToFetch = config?.page || 1;
14
- const url = require_vars.userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0);
15
- const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...optionsRequest }));
12
+ const url = require_vars.userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
13
+ const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
16
14
  const reviews = items.querySelectorAll(".user-reviews .article");
17
15
  const pagesNode = items.querySelector(".pagination");
18
16
  const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
@@ -22,7 +20,7 @@ var UserReviewsScraper = class {
22
20
  console.log("Fetching all pages", pages);
23
21
  for (let i = 2; i <= pages; i++) {
24
22
  console.log("Fetching page", i, "out of", pages, "...");
25
- const reviews$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userReviewsUrl(user, i), { ...optionsRequest })).querySelectorAll(".user-reviews .article");
23
+ const reviews$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userReviewsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".user-reviews .article");
26
24
  allReviews = [...allReviews, ...this.getPage(config, reviews$1)];
27
25
  if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
28
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user-reviews.service.js","names":["allReviews: CSFDUserReviews[]","userReviewsUrl","fetchPage","reviews","sleep","films: CSFDUserReviews[]","getUserReviewType","getUserReviewId","getUserReviewTitle","getUserReviewYear","getUserReviewUrl","getUserReviewColorRating","getUserReviewDate","getUserReviewRating","getUserReviewText","getUserReviewPoster"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserReviews[]> {\n let allReviews: CSFDUserReviews[] = [];\n const pageToFetch = config?.page || 1;\n const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined);\n const response = await fetchPage(url, { ...optionsRequest });\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allReviews = this.getPage(config, reviews);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userReviewsUrl(user, i);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n allReviews = [...allReviews, ...this.getPage(config, reviews)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allReviews;\n }\n\n return allReviews;\n }\n\n private getPage(config: CSFDUserReviewsConfig, reviews: HTMLElement[]) {\n const films: CSFDUserReviews[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of reviews) {\n const type = getUserReviewType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserReviews(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserReviews(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserReviews(el));\n }\n }\n return films;\n }\n\n private buildUserReviews(el: HTMLElement): CSFDUserReviews {\n return {\n id: getUserReviewId(el),\n title: getUserReviewTitle(el),\n year: getUserReviewYear(el),\n type: getUserReviewType(el),\n url: getUserReviewUrl(el),\n colorRating: getUserReviewColorRating(el) as CSFDColorRating,\n userDate: getUserReviewDate(el),\n userRating: getUserReviewRating(el) as CSFDStars,\n text: getUserReviewText(el),\n poster: getUserReviewPoster(el)\n };\n }\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,IAAIA,aAAgC,EAAE;EACtC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAMC,4BAAe,MAAM,cAAc,IAAI,cAAc,OAAU;EAE3E,MAAM,oCADW,MAAMC,wBAAU,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAC/B;EAC7B,MAAM,UAAU,MAAM,iBAAiB,yBAAyB;EAGhE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,eAAa,KAAK,QAAQ,QAAQ,QAAQ;AAE1C,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,wCAHW,MAAMD,wBADXD,4BAAe,MAAM,EAAE,EACG,EAAE,GAAG,gBAAgB,CAAC,CAE/B,CACP,iBAAiB,yBAAyB;AAChE,iBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,QAAQ,QAAQE,UAAQ,CAAC;AAG9D,QAAI,OAAO,cACT,OAAMC,4BAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA+B,SAAwB;EACrE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,SAAS;GACxB,MAAM,OAAOC,8CAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAIC,4CAAgB,GAAG;GACvB,OAAOC,+CAAmB,GAAG;GAC7B,MAAMC,8CAAkB,GAAG;GAC3B,MAAMH,8CAAkB,GAAG;GAC3B,KAAKI,6CAAiB,GAAG;GACzB,aAAaC,qDAAyB,GAAG;GACzC,UAAUC,8CAAkB,GAAG;GAC/B,YAAYC,gDAAoB,GAAG;GACnC,MAAMC,8CAAkB,GAAG;GAC3B,QAAQC,gDAAoB,GAAG;GAChC"}
1
+ {"version":3,"file":"user-reviews.service.js","names":["allReviews: CSFDUserReviews[]","userReviewsUrl","fetchPage","reviews","sleep","films: CSFDUserReviews[]","getUserReviewType","getUserReviewId","getUserReviewTitle","getUserReviewYear","getUserReviewUrl","getUserReviewColorRating","getUserReviewDate","getUserReviewRating","getUserReviewText","getUserReviewPoster"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { CSFDOptions } from '../types';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n let allReviews: CSFDUserReviews[] = [];\n const pageToFetch = config?.page || 1;\n const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allReviews = this.getPage(config, reviews);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userReviewsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n allReviews = [...allReviews, ...this.getPage(config, reviews)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allReviews;\n }\n\n return allReviews;\n }\n\n private getPage(config: CSFDUserReviewsConfig, reviews: HTMLElement[]) {\n const films: CSFDUserReviews[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of reviews) {\n const type = getUserReviewType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserReviews(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserReviews(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserReviews(el));\n }\n }\n return films;\n }\n\n private buildUserReviews(el: HTMLElement): CSFDUserReviews {\n return {\n id: getUserReviewId(el),\n title: getUserReviewTitle(el),\n year: getUserReviewYear(el),\n type: getUserReviewType(el),\n url: getUserReviewUrl(el),\n colorRating: getUserReviewColorRating(el) as CSFDColorRating,\n userDate: getUserReviewDate(el),\n userRating: getUserReviewRating(el) as CSFDStars,\n text: getUserReviewText(el),\n poster: getUserReviewPoster(el)\n };\n }\n}\n"],"mappings":";;;;;;;AAoBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAIA,aAAgC,EAAE;EACtC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAMC,4BAAe,MAAM,cAAc,IAAI,cAAc,QAAW,EAAE,UAAU,SAAS,UAAU,CAAC;EAE5G,MAAM,oCADW,MAAMC,wBAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,UAAU,MAAM,iBAAiB,yBAAyB;EAGhE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,eAAa,KAAK,QAAQ,QAAQ,QAAQ;AAE1C,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,wCAHW,MAAMD,wBADXD,4BAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACP,iBAAiB,yBAAyB;AAChE,iBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,QAAQ,QAAQE,UAAQ,CAAC;AAG9D,QAAI,OAAO,cACT,OAAMC,4BAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA+B,SAAwB;EACrE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,SAAS;GACxB,MAAM,OAAOC,8CAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAIC,4CAAgB,GAAG;GACvB,OAAOC,+CAAmB,GAAG;GAC7B,MAAMC,8CAAkB,GAAG;GAC3B,MAAMH,8CAAkB,GAAG;GAC3B,KAAKI,6CAAiB,GAAG;GACzB,aAAaC,qDAAyB,GAAG;GACzC,UAAUC,8CAAkB,GAAG;GAC/B,YAAYC,gDAAoB,GAAG;GACnC,MAAMC,8CAAkB,GAAG;GAC3B,QAAQC,gDAAoB,GAAG;GAChC"}
@@ -6,11 +6,11 @@ import { parse } from "node-html-parser";
6
6
 
7
7
  //#region src/services/user-reviews.service.ts
8
8
  var UserReviewsScraper = class {
9
- async userReviews(user, config, optionsRequest) {
9
+ async userReviews(user, config, options) {
10
10
  let allReviews = [];
11
11
  const pageToFetch = config?.page || 1;
12
- const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0);
13
- const items = parse(await fetchPage(url, { ...optionsRequest }));
12
+ const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
13
+ const items = parse(await fetchPage(url, { ...options?.request }));
14
14
  const reviews = items.querySelectorAll(".user-reviews .article");
15
15
  const pagesNode = items.querySelector(".pagination");
16
16
  const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
@@ -20,7 +20,7 @@ var UserReviewsScraper = class {
20
20
  console.log("Fetching all pages", pages);
21
21
  for (let i = 2; i <= pages; i++) {
22
22
  console.log("Fetching page", i, "out of", pages, "...");
23
- const reviews$1 = parse(await fetchPage(userReviewsUrl(user, i), { ...optionsRequest })).querySelectorAll(".user-reviews .article");
23
+ const reviews$1 = parse(await fetchPage(userReviewsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".user-reviews .article");
24
24
  allReviews = [...allReviews, ...this.getPage(config, reviews$1)];
25
25
  if (config.allPagesDelay) await sleep(config.allPagesDelay);
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user-reviews.service.mjs","names":["allReviews: CSFDUserReviews[]","reviews","films: CSFDUserReviews[]"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserReviews[]> {\n let allReviews: CSFDUserReviews[] = [];\n const pageToFetch = config?.page || 1;\n const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined);\n const response = await fetchPage(url, { ...optionsRequest });\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allReviews = this.getPage(config, reviews);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userReviewsUrl(user, i);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n allReviews = [...allReviews, ...this.getPage(config, reviews)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allReviews;\n }\n\n return allReviews;\n }\n\n private getPage(config: CSFDUserReviewsConfig, reviews: HTMLElement[]) {\n const films: CSFDUserReviews[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of reviews) {\n const type = getUserReviewType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserReviews(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserReviews(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserReviews(el));\n }\n }\n return films;\n }\n\n private buildUserReviews(el: HTMLElement): CSFDUserReviews {\n return {\n id: getUserReviewId(el),\n title: getUserReviewTitle(el),\n year: getUserReviewYear(el),\n type: getUserReviewType(el),\n url: getUserReviewUrl(el),\n colorRating: getUserReviewColorRating(el) as CSFDColorRating,\n userDate: getUserReviewDate(el),\n userRating: getUserReviewRating(el) as CSFDStars,\n text: getUserReviewText(el),\n poster: getUserReviewPoster(el)\n };\n }\n}\n"],"mappings":";;;;;;;AAmBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,IAAIA,aAAgC,EAAE;EACtC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAM,eAAe,MAAM,cAAc,IAAI,cAAc,OAAU;EAE3E,MAAM,QAAQ,MADG,MAAM,UAAU,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAC/B;EAC7B,MAAM,UAAU,MAAM,iBAAiB,yBAAyB;EAGhE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,eAAa,KAAK,QAAQ,QAAQ,QAAQ;AAE1C,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,YADQ,MAFG,MAAM,UADX,eAAe,MAAM,EAAE,EACG,EAAE,GAAG,gBAAgB,CAAC,CAE/B,CACP,iBAAiB,yBAAyB;AAChE,iBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,QAAQ,QAAQA,UAAQ,CAAC;AAG9D,QAAI,OAAO,cACT,OAAM,MAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA+B,SAAwB;EACrE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,SAAS;GACxB,MAAM,OAAO,kBAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAI,gBAAgB,GAAG;GACvB,OAAO,mBAAmB,GAAG;GAC7B,MAAM,kBAAkB,GAAG;GAC3B,MAAM,kBAAkB,GAAG;GAC3B,KAAK,iBAAiB,GAAG;GACzB,aAAa,yBAAyB,GAAG;GACzC,UAAU,kBAAkB,GAAG;GAC/B,YAAY,oBAAoB,GAAG;GACnC,MAAM,kBAAkB,GAAG;GAC3B,QAAQ,oBAAoB,GAAG;GAChC"}
1
+ {"version":3,"file":"user-reviews.service.mjs","names":["allReviews: CSFDUserReviews[]","reviews","films: CSFDUserReviews[]"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { CSFDOptions } from '../types';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n let allReviews: CSFDUserReviews[] = [];\n const pageToFetch = config?.page || 1;\n const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allReviews = this.getPage(config, reviews);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userReviewsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n allReviews = [...allReviews, ...this.getPage(config, reviews)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allReviews;\n }\n\n return allReviews;\n }\n\n private getPage(config: CSFDUserReviewsConfig, reviews: HTMLElement[]) {\n const films: CSFDUserReviews[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of reviews) {\n const type = getUserReviewType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserReviews(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserReviews(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserReviews(el));\n }\n }\n return films;\n }\n\n private buildUserReviews(el: HTMLElement): CSFDUserReviews {\n return {\n id: getUserReviewId(el),\n title: getUserReviewTitle(el),\n year: getUserReviewYear(el),\n type: getUserReviewType(el),\n url: getUserReviewUrl(el),\n colorRating: getUserReviewColorRating(el) as CSFDColorRating,\n userDate: getUserReviewDate(el),\n userRating: getUserReviewRating(el) as CSFDStars,\n text: getUserReviewText(el),\n poster: getUserReviewPoster(el)\n };\n }\n}\n"],"mappings":";;;;;;;AAoBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAIA,aAAgC,EAAE;EACtC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAM,eAAe,MAAM,cAAc,IAAI,cAAc,QAAW,EAAE,UAAU,SAAS,UAAU,CAAC;EAE5G,MAAM,QAAQ,MADG,MAAM,UAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,UAAU,MAAM,iBAAiB,yBAAyB;EAGhE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,eAAa,KAAK,QAAQ,QAAQ,QAAQ;AAE1C,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,YADQ,MAFG,MAAM,UADX,eAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACP,iBAAiB,yBAAyB;AAChE,iBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,QAAQ,QAAQA,UAAQ,CAAC;AAG9D,QAAI,OAAO,cACT,OAAM,MAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA+B,SAAwB;EACrE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,SAAS;GACxB,MAAM,OAAO,kBAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAI,gBAAgB,GAAG;GACvB,OAAO,mBAAmB,GAAG;GAC7B,MAAM,kBAAkB,GAAG;GAC3B,MAAM,kBAAkB,GAAG;GAC3B,KAAK,iBAAiB,GAAG;GACzB,aAAa,yBAAyB,GAAG;GACzC,UAAU,kBAAkB,GAAG;GAC/B,YAAY,oBAAoB,GAAG;GACnC,MAAM,kBAAkB,GAAG;GAC3B,QAAQ,oBAAoB,GAAG;GAChC"}
package/vars.js CHANGED
@@ -1,17 +1,27 @@
1
1
 
2
2
  //#region src/vars.ts
3
- const userRatingsUrl = (user, page) => `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/hodnoceni/${page ? "?page=" + page : ""}`;
4
- const movieUrl = (movie) => `https://www.csfd.cz/film/${encodeURIComponent(movie)}/prehled/`;
5
- const creatorUrl = (creator) => `https://www.csfd.cz/tvurce/${encodeURIComponent(creator)}`;
6
- const cinemasUrl = (district, period) => {
7
- return `https://www.csfd.cz/kino/?period=${period}&district=${district}`;
3
+ const LANGUAGE_DOMAIN_MAP = {
4
+ cs: "https://www.csfd.cz",
5
+ en: "https://www.filmbooster.com",
6
+ sk: "https://www.csfd.sk"
8
7
  };
9
- const searchUrl = (text) => `https://www.csfd.cz/hledat/?q=${encodeURIComponent(text)}`;
10
- const userReviewsUrl = (user, page) => `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/recenze/${page ? "?page=" + page : ""}`;
8
+ let BASE_URL = LANGUAGE_DOMAIN_MAP.cs;
9
+ const getUrlByLanguage = (language) => {
10
+ if (language && language in LANGUAGE_DOMAIN_MAP) return LANGUAGE_DOMAIN_MAP[language];
11
+ return BASE_URL;
12
+ };
13
+ const userUrl = (user, options) => `${getUrlByLanguage(options?.language)}/uzivatel/${encodeURIComponent(user)}`;
14
+ const userRatingsUrl = (user, page, options = {}) => `${userUrl(user, options)}/hodnoceni/${page ? "?page=" + page : ""}`;
15
+ const userReviewsUrl = (user, page, options = {}) => `${userUrl(user, options)}/recenze/${page ? "?page=" + page : ""}`;
16
+ const movieUrl = (movie, options) => `${getUrlByLanguage(options?.language)}/film/${encodeURIComponent(movie)}/prehled/`;
17
+ const creatorUrl = (creator, options) => `${getUrlByLanguage(options?.language)}/tvurce/${encodeURIComponent(creator)}`;
18
+ const cinemasUrl = (district, period, options) => `${getUrlByLanguage(options?.language)}/kino/?period=${period}&district=${district}`;
19
+ const searchUrl = (text, options) => `${getUrlByLanguage(options?.language)}/hledat/?q=${encodeURIComponent(text)}`;
11
20
 
12
21
  //#endregion
13
22
  exports.cinemasUrl = cinemasUrl;
14
23
  exports.creatorUrl = creatorUrl;
24
+ exports.getUrlByLanguage = getUrlByLanguage;
15
25
  exports.movieUrl = movieUrl;
16
26
  exports.searchUrl = searchUrl;
17
27
  exports.userRatingsUrl = userRatingsUrl;
package/vars.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vars.js","names":[],"sources":["../src/vars.ts"],"sourcesContent":["import { CSFDCinemaPeriod } from './dto/cinema';\n\nexport const userRatingsUrl = (user: string | number, page?: number): string =>\n `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/hodnoceni/${\n page ? '?page=' + page : ''\n }`;\n\nexport const movieUrl = (movie: number): string =>\n `https://www.csfd.cz/film/${encodeURIComponent(movie)}/prehled/`;\n\nexport const creatorUrl = (creator: number | string): string =>\n `https://www.csfd.cz/tvurce/${encodeURIComponent(creator)}`;\n\nexport const cinemasUrl = (district: number | string, period: CSFDCinemaPeriod): string => {\n return `https://www.csfd.cz/kino/?period=${period}&district=${district}`;\n};\n\nexport const searchUrl = (text: string): string =>\n `https://www.csfd.cz/hledat/?q=${encodeURIComponent(text)}`;\n\nexport const userReviewsUrl = (user: string | number, page?: number): string =>\n `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/recenze/${page ? '?page=' + page : ''}`;\n"],"mappings":";;AAEA,MAAa,kBAAkB,MAAuB,SACpD,gCAAgC,mBAAmB,KAAK,CAAC,aACvD,OAAO,WAAW,OAAO;AAG7B,MAAa,YAAY,UACvB,4BAA4B,mBAAmB,MAAM,CAAC;AAExD,MAAa,cAAc,YACzB,8BAA8B,mBAAmB,QAAQ;AAE3D,MAAa,cAAc,UAA2B,WAAqC;AACzF,QAAO,oCAAoC,OAAO,YAAY;;AAGhE,MAAa,aAAa,SACxB,iCAAiC,mBAAmB,KAAK;AAE3D,MAAa,kBAAkB,MAAuB,SACpD,gCAAgC,mBAAmB,KAAK,CAAC,WAAW,OAAO,WAAW,OAAO"}
1
+ {"version":3,"file":"vars.js","names":["LANGUAGE_DOMAIN_MAP: Record<CSFDLanguage, string>"],"sources":["../src/vars.ts"],"sourcesContent":["import { CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDLanguage } from './types';\n\ntype Options = {\n language?: CSFDLanguage;\n};\n\n// Language to domain mapping\nconst LANGUAGE_DOMAIN_MAP: Record<CSFDLanguage, string> = {\n cs: 'https://www.csfd.cz',\n en: 'https://www.filmbooster.com',\n sk: 'https://www.csfd.sk',\n};\n\nlet BASE_URL = LANGUAGE_DOMAIN_MAP.cs;\n\nexport const getBaseUrl = (): string => BASE_URL;\nexport const setBaseUrl = (language: CSFDLanguage): void => {\n BASE_URL = getUrlByLanguage(language);\n};\n\nexport const getUrlByLanguage = (language?: CSFDLanguage): string => {\n if (language && language in LANGUAGE_DOMAIN_MAP) {\n return LANGUAGE_DOMAIN_MAP[language];\n }\n return BASE_URL;\n};\n\n// User URLs\nexport const userUrl = (user: string | number, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/uzivatel/${encodeURIComponent(user)}`;\n\nexport const userRatingsUrl = (user: string | number, page?: number, options: Options = {}): string =>\n `${userUrl(user, options)}/hodnoceni/${page ? '?page=' + page : ''}`;\nexport const userReviewsUrl = (user: string | number, page?: number, options: Options = {}): string =>\n `${userUrl(user, options)}/recenze/${page ? '?page=' + page : ''}`;\n\n// Movie URLs\nexport const movieUrl = (movie: number, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/film/${encodeURIComponent(movie)}/prehled/`;\n// Creator URLs\nexport const creatorUrl = (creator: number | string, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/tvurce/${encodeURIComponent(creator)}`;\n\n// Cinema URLs\nexport const cinemasUrl = (district: number | string, period: CSFDCinemaPeriod, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/kino/?period=${period}&district=${district}`;\n\n// Search URLs\nexport const searchUrl = (text: string, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/hledat/?q=${encodeURIComponent(text)}`;"],"mappings":";;AAQA,MAAMA,sBAAoD;CACxD,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,IAAI,WAAW,oBAAoB;AAOnC,MAAa,oBAAoB,aAAoC;AACnE,KAAI,YAAY,YAAY,oBAC1B,QAAO,oBAAoB;AAE7B,QAAO;;AAIT,MAAa,WAAW,MAAuB,YAC7C,GAAG,iBAAiB,SAAS,SAAS,CAAC,YAAY,mBAAmB,KAAK;AAE7E,MAAa,kBAAkB,MAAuB,MAAe,UAAmB,EAAE,KACxF,GAAG,QAAQ,MAAM,QAAQ,CAAC,aAAa,OAAO,WAAW,OAAO;AAClE,MAAa,kBAAkB,MAAuB,MAAe,UAAmB,EAAE,KACxF,GAAG,QAAQ,MAAM,QAAQ,CAAC,WAAW,OAAO,WAAW,OAAO;AAGhE,MAAa,YAAY,OAAe,YACtC,GAAG,iBAAiB,SAAS,SAAS,CAAC,QAAQ,mBAAmB,MAAM,CAAC;AAE3E,MAAa,cAAc,SAA0B,YACnD,GAAG,iBAAiB,SAAS,SAAS,CAAC,UAAU,mBAAmB,QAAQ;AAG9E,MAAa,cAAc,UAA2B,QAA0B,YAC9E,GAAG,iBAAiB,SAAS,SAAS,CAAC,gBAAgB,OAAO,YAAY;AAG5E,MAAa,aAAa,MAAc,YACtC,GAAG,iBAAiB,SAAS,SAAS,CAAC,aAAa,mBAAmB,KAAK"}
package/vars.mjs CHANGED
@@ -1,13 +1,22 @@
1
1
  //#region src/vars.ts
2
- const userRatingsUrl = (user, page) => `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/hodnoceni/${page ? "?page=" + page : ""}`;
3
- const movieUrl = (movie) => `https://www.csfd.cz/film/${encodeURIComponent(movie)}/prehled/`;
4
- const creatorUrl = (creator) => `https://www.csfd.cz/tvurce/${encodeURIComponent(creator)}`;
5
- const cinemasUrl = (district, period) => {
6
- return `https://www.csfd.cz/kino/?period=${period}&district=${district}`;
2
+ const LANGUAGE_DOMAIN_MAP = {
3
+ cs: "https://www.csfd.cz",
4
+ en: "https://www.filmbooster.com",
5
+ sk: "https://www.csfd.sk"
7
6
  };
8
- const searchUrl = (text) => `https://www.csfd.cz/hledat/?q=${encodeURIComponent(text)}`;
9
- const userReviewsUrl = (user, page) => `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/recenze/${page ? "?page=" + page : ""}`;
7
+ let BASE_URL = LANGUAGE_DOMAIN_MAP.cs;
8
+ const getUrlByLanguage = (language) => {
9
+ if (language && language in LANGUAGE_DOMAIN_MAP) return LANGUAGE_DOMAIN_MAP[language];
10
+ return BASE_URL;
11
+ };
12
+ const userUrl = (user, options) => `${getUrlByLanguage(options?.language)}/uzivatel/${encodeURIComponent(user)}`;
13
+ const userRatingsUrl = (user, page, options = {}) => `${userUrl(user, options)}/hodnoceni/${page ? "?page=" + page : ""}`;
14
+ const userReviewsUrl = (user, page, options = {}) => `${userUrl(user, options)}/recenze/${page ? "?page=" + page : ""}`;
15
+ const movieUrl = (movie, options) => `${getUrlByLanguage(options?.language)}/film/${encodeURIComponent(movie)}/prehled/`;
16
+ const creatorUrl = (creator, options) => `${getUrlByLanguage(options?.language)}/tvurce/${encodeURIComponent(creator)}`;
17
+ const cinemasUrl = (district, period, options) => `${getUrlByLanguage(options?.language)}/kino/?period=${period}&district=${district}`;
18
+ const searchUrl = (text, options) => `${getUrlByLanguage(options?.language)}/hledat/?q=${encodeURIComponent(text)}`;
10
19
 
11
20
  //#endregion
12
- export { cinemasUrl, creatorUrl, movieUrl, searchUrl, userRatingsUrl, userReviewsUrl };
21
+ export { cinemasUrl, creatorUrl, getUrlByLanguage, movieUrl, searchUrl, userRatingsUrl, userReviewsUrl };
13
22
  //# sourceMappingURL=vars.mjs.map
package/vars.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vars.mjs","names":[],"sources":["../src/vars.ts"],"sourcesContent":["import { CSFDCinemaPeriod } from './dto/cinema';\n\nexport const userRatingsUrl = (user: string | number, page?: number): string =>\n `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/hodnoceni/${\n page ? '?page=' + page : ''\n }`;\n\nexport const movieUrl = (movie: number): string =>\n `https://www.csfd.cz/film/${encodeURIComponent(movie)}/prehled/`;\n\nexport const creatorUrl = (creator: number | string): string =>\n `https://www.csfd.cz/tvurce/${encodeURIComponent(creator)}`;\n\nexport const cinemasUrl = (district: number | string, period: CSFDCinemaPeriod): string => {\n return `https://www.csfd.cz/kino/?period=${period}&district=${district}`;\n};\n\nexport const searchUrl = (text: string): string =>\n `https://www.csfd.cz/hledat/?q=${encodeURIComponent(text)}`;\n\nexport const userReviewsUrl = (user: string | number, page?: number): string =>\n `https://www.csfd.cz/uzivatel/${encodeURIComponent(user)}/recenze/${page ? '?page=' + page : ''}`;\n"],"mappings":";AAEA,MAAa,kBAAkB,MAAuB,SACpD,gCAAgC,mBAAmB,KAAK,CAAC,aACvD,OAAO,WAAW,OAAO;AAG7B,MAAa,YAAY,UACvB,4BAA4B,mBAAmB,MAAM,CAAC;AAExD,MAAa,cAAc,YACzB,8BAA8B,mBAAmB,QAAQ;AAE3D,MAAa,cAAc,UAA2B,WAAqC;AACzF,QAAO,oCAAoC,OAAO,YAAY;;AAGhE,MAAa,aAAa,SACxB,iCAAiC,mBAAmB,KAAK;AAE3D,MAAa,kBAAkB,MAAuB,SACpD,gCAAgC,mBAAmB,KAAK,CAAC,WAAW,OAAO,WAAW,OAAO"}
1
+ {"version":3,"file":"vars.mjs","names":["LANGUAGE_DOMAIN_MAP: Record<CSFDLanguage, string>"],"sources":["../src/vars.ts"],"sourcesContent":["import { CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDLanguage } from './types';\n\ntype Options = {\n language?: CSFDLanguage;\n};\n\n// Language to domain mapping\nconst LANGUAGE_DOMAIN_MAP: Record<CSFDLanguage, string> = {\n cs: 'https://www.csfd.cz',\n en: 'https://www.filmbooster.com',\n sk: 'https://www.csfd.sk',\n};\n\nlet BASE_URL = LANGUAGE_DOMAIN_MAP.cs;\n\nexport const getBaseUrl = (): string => BASE_URL;\nexport const setBaseUrl = (language: CSFDLanguage): void => {\n BASE_URL = getUrlByLanguage(language);\n};\n\nexport const getUrlByLanguage = (language?: CSFDLanguage): string => {\n if (language && language in LANGUAGE_DOMAIN_MAP) {\n return LANGUAGE_DOMAIN_MAP[language];\n }\n return BASE_URL;\n};\n\n// User URLs\nexport const userUrl = (user: string | number, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/uzivatel/${encodeURIComponent(user)}`;\n\nexport const userRatingsUrl = (user: string | number, page?: number, options: Options = {}): string =>\n `${userUrl(user, options)}/hodnoceni/${page ? '?page=' + page : ''}`;\nexport const userReviewsUrl = (user: string | number, page?: number, options: Options = {}): string =>\n `${userUrl(user, options)}/recenze/${page ? '?page=' + page : ''}`;\n\n// Movie URLs\nexport const movieUrl = (movie: number, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/film/${encodeURIComponent(movie)}/prehled/`;\n// Creator URLs\nexport const creatorUrl = (creator: number | string, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/tvurce/${encodeURIComponent(creator)}`;\n\n// Cinema URLs\nexport const cinemasUrl = (district: number | string, period: CSFDCinemaPeriod, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/kino/?period=${period}&district=${district}`;\n\n// Search URLs\nexport const searchUrl = (text: string, options: Options): string =>\n `${getUrlByLanguage(options?.language)}/hledat/?q=${encodeURIComponent(text)}`;"],"mappings":";AAQA,MAAMA,sBAAoD;CACxD,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,IAAI,WAAW,oBAAoB;AAOnC,MAAa,oBAAoB,aAAoC;AACnE,KAAI,YAAY,YAAY,oBAC1B,QAAO,oBAAoB;AAE7B,QAAO;;AAIT,MAAa,WAAW,MAAuB,YAC7C,GAAG,iBAAiB,SAAS,SAAS,CAAC,YAAY,mBAAmB,KAAK;AAE7E,MAAa,kBAAkB,MAAuB,MAAe,UAAmB,EAAE,KACxF,GAAG,QAAQ,MAAM,QAAQ,CAAC,aAAa,OAAO,WAAW,OAAO;AAClE,MAAa,kBAAkB,MAAuB,MAAe,UAAmB,EAAE,KACxF,GAAG,QAAQ,MAAM,QAAQ,CAAC,WAAW,OAAO,WAAW,OAAO;AAGhE,MAAa,YAAY,OAAe,YACtC,GAAG,iBAAiB,SAAS,SAAS,CAAC,QAAQ,mBAAmB,MAAM,CAAC;AAE3E,MAAa,cAAc,SAA0B,YACnD,GAAG,iBAAiB,SAAS,SAAS,CAAC,UAAU,mBAAmB,QAAQ;AAG9E,MAAa,cAAc,UAA2B,QAA0B,YAC9E,GAAG,iBAAiB,SAAS,SAAS,CAAC,gBAAgB,OAAO,YAAY;AAG5E,MAAa,aAAa,MAAc,YACtC,GAAG,iBAAiB,SAAS,SAAS,CAAC,aAAa,mBAAmB,KAAK"}
@@ -1,25 +0,0 @@
1
- //#region rolldown:runtime
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
- key = keys[i];
11
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
- get: ((k) => from[k]).bind(null, key),
13
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
- });
15
- }
16
- return to;
17
- };
18
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
- value: mod,
20
- enumerable: true
21
- }) : target, mod));
22
-
23
- //#endregion
24
-
25
- exports.__toESM = __toESM;