mwoffliner 1.13.0 → 1.14.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 (149) hide show
  1. package/README.md +9 -3
  2. package/lib/Downloader.d.ts +34 -30
  3. package/lib/Downloader.js +292 -230
  4. package/lib/Downloader.js.map +1 -1
  5. package/lib/Dump.js +5 -2
  6. package/lib/Dump.js.map +1 -1
  7. package/lib/MediaWiki.d.ts +62 -29
  8. package/lib/MediaWiki.js +240 -85
  9. package/lib/MediaWiki.js.map +1 -1
  10. package/lib/RedisStore.d.ts +13 -13
  11. package/lib/RedisStore.js +66 -53
  12. package/lib/RedisStore.js.map +1 -1
  13. package/lib/S3.d.ts +11 -4
  14. package/lib/S3.js +88 -54
  15. package/lib/S3.js.map +1 -1
  16. package/lib/Templates.d.ts +3 -2
  17. package/lib/Templates.js +6 -13
  18. package/lib/Templates.js.map +1 -1
  19. package/lib/cli.js +3 -8
  20. package/lib/cli.js.map +1 -1
  21. package/lib/config.d.ts +7 -2
  22. package/lib/config.js +15 -7
  23. package/lib/config.js.map +1 -1
  24. package/lib/mwoffliner.lib.js +79 -64
  25. package/lib/mwoffliner.lib.js.map +1 -1
  26. package/lib/parameterList.d.ts +3 -3
  27. package/lib/parameterList.js +29 -28
  28. package/lib/parameterList.js.map +1 -1
  29. package/lib/renderers/abstract.renderer.d.ts +93 -0
  30. package/lib/renderers/abstract.renderer.js +601 -0
  31. package/lib/renderers/abstract.renderer.js.map +1 -0
  32. package/lib/renderers/abstractDesktop.render.d.ts +11 -0
  33. package/lib/renderers/abstractDesktop.render.js +47 -0
  34. package/lib/renderers/abstractDesktop.render.js.map +1 -0
  35. package/lib/renderers/abstractMobile.render.d.ts +12 -0
  36. package/lib/renderers/abstractMobile.render.js +45 -0
  37. package/lib/renderers/abstractMobile.render.js.map +1 -0
  38. package/lib/renderers/renderer.builder.d.ts +7 -0
  39. package/lib/renderers/renderer.builder.js +95 -0
  40. package/lib/renderers/renderer.builder.js.map +1 -0
  41. package/lib/renderers/rest-api.renderer.d.ts +7 -0
  42. package/lib/renderers/rest-api.renderer.js +60 -0
  43. package/lib/renderers/rest-api.renderer.js.map +1 -0
  44. package/lib/renderers/visual-editor.renderer.d.ts +7 -0
  45. package/lib/renderers/visual-editor.renderer.js +73 -0
  46. package/lib/renderers/visual-editor.renderer.js.map +1 -0
  47. package/lib/renderers/wikimedia-desktop.renderer.d.ts +4 -0
  48. package/lib/renderers/wikimedia-desktop.renderer.js +7 -0
  49. package/lib/renderers/wikimedia-desktop.renderer.js.map +1 -0
  50. package/lib/renderers/wikimedia-mobile.renderer.d.ts +18 -0
  51. package/lib/renderers/wikimedia-mobile.renderer.js +229 -0
  52. package/lib/renderers/wikimedia-mobile.renderer.js.map +1 -0
  53. package/lib/sanitize-argument.d.ts +3 -0
  54. package/lib/sanitize-argument.js +45 -5
  55. package/lib/sanitize-argument.js.map +1 -1
  56. package/lib/util/articleListMainPage.d.ts +1 -1
  57. package/lib/util/articleListMainPage.js +3 -3
  58. package/lib/util/articleListMainPage.js.map +1 -1
  59. package/lib/util/builders/url/api.director.d.ts +14 -0
  60. package/lib/util/builders/url/api.director.js +53 -0
  61. package/lib/util/builders/url/api.director.js.map +1 -0
  62. package/lib/util/builders/url/base.director.d.ts +13 -0
  63. package/lib/util/builders/url/base.director.js +45 -0
  64. package/lib/util/builders/url/base.director.js.map +1 -0
  65. package/lib/util/builders/url/basic.director.d.ts +13 -0
  66. package/lib/util/builders/url/basic.director.js +22 -0
  67. package/lib/util/builders/url/basic.director.js.map +1 -0
  68. package/lib/util/builders/url/desktop.director.d.ts +8 -0
  69. package/lib/util/builders/url/desktop.director.js +14 -0
  70. package/lib/util/builders/url/desktop.director.js.map +1 -0
  71. package/lib/util/builders/url/mobile.director.d.ts +8 -0
  72. package/lib/util/builders/url/mobile.director.js +14 -0
  73. package/lib/util/builders/url/mobile.director.js.map +1 -0
  74. package/lib/util/builders/url/rest-api.director.d.ts +8 -0
  75. package/lib/util/builders/url/rest-api.director.js +17 -0
  76. package/lib/util/builders/url/rest-api.director.js.map +1 -0
  77. package/lib/util/builders/url/url.builder.d.ts +39 -0
  78. package/lib/util/builders/url/url.builder.js +68 -0
  79. package/lib/util/builders/url/url.builder.js.map +1 -0
  80. package/lib/util/builders/url/visual-editor.director.d.ts +9 -0
  81. package/lib/util/builders/url/visual-editor.director.js +17 -0
  82. package/lib/util/builders/url/visual-editor.director.js.map +1 -0
  83. package/lib/util/builders/url/web.director.d.ts +8 -0
  84. package/lib/util/builders/url/web.director.js +17 -0
  85. package/lib/util/builders/url/web.director.js.map +1 -0
  86. package/lib/util/categories.d.ts +3 -3
  87. package/lib/util/categories.js +10 -9
  88. package/lib/util/categories.js.map +1 -1
  89. package/lib/util/const.d.ts +4 -2
  90. package/lib/util/const.js +8 -2
  91. package/lib/util/const.js.map +1 -1
  92. package/lib/util/dump.d.ts +3 -4
  93. package/lib/util/dump.js +29 -19
  94. package/lib/util/dump.js.map +1 -1
  95. package/lib/util/index.d.ts +0 -1
  96. package/lib/util/index.js +0 -1
  97. package/lib/util/index.js.map +1 -1
  98. package/lib/util/metaData.js +16 -3
  99. package/lib/util/metaData.js.map +1 -1
  100. package/lib/util/misc.d.ts +14 -5
  101. package/lib/util/misc.js +43 -80
  102. package/lib/util/misc.js.map +1 -1
  103. package/lib/util/mw-api.d.ts +14 -2
  104. package/lib/util/mw-api.js +58 -4
  105. package/lib/util/mw-api.js.map +1 -1
  106. package/lib/util/rewriteUrls.d.ts +2 -3
  107. package/lib/util/rewriteUrls.js +15 -13
  108. package/lib/util/rewriteUrls.js.map +1 -1
  109. package/lib/util/saveArticles.d.ts +2 -18
  110. package/lib/util/saveArticles.js +115 -620
  111. package/lib/util/saveArticles.js.map +1 -1
  112. package/lib/util/url.helper.d.ts +7 -0
  113. package/lib/util/url.helper.js +30 -0
  114. package/lib/util/url.helper.js.map +1 -0
  115. package/lib/version.d.ts +1 -0
  116. package/lib/version.js +2 -0
  117. package/lib/version.js.map +1 -0
  118. package/package.json +10 -8
  119. package/res/templates/pageWikimediaDesktop.html +24 -0
  120. package/res/templates/pageWikimediaMobile.html +24 -0
  121. package/res/wm_mobile_override_script.js +15 -0
  122. package/res/wm_mobile_override_style.css +20 -0
  123. package/translation/ar.json +11 -0
  124. package/translation/dag.json +9 -0
  125. package/translation/de.json +11 -0
  126. package/translation/ha.json +11 -0
  127. package/translation/hi.json +10 -0
  128. package/translation/id.json +10 -0
  129. package/translation/ig.json +11 -0
  130. package/translation/kaa.json +10 -0
  131. package/translation/ko.json +10 -0
  132. package/translation/lb.json +8 -0
  133. package/translation/nb.json +10 -0
  134. package/translation/or.json +10 -0
  135. package/translation/pt-br.json +11 -0
  136. package/translation/pt.json +10 -0
  137. package/translation/sq.json +10 -0
  138. package/translation/sw.json +10 -0
  139. package/translation/te.json +10 -0
  140. package/translation/tn.json +10 -0
  141. package/translation/tr.json +10 -0
  142. package/translation/zh-hans.json +10 -0
  143. package/lib/util/articleRenderers.d.ts +0 -4
  144. package/lib/util/articleRenderers.js +0 -182
  145. package/lib/util/articleRenderers.js.map +0 -1
  146. package/lib/util/redirects.d.ts +0 -3
  147. package/lib/util/redirects.js +0 -16
  148. package/lib/util/redirects.js.map +0 -1
  149. package/res/templates/page.html +0 -31
package/README.md CHANGED
@@ -12,14 +12,19 @@ any recent MediaWiki.
12
12
  Read [CONTRIBUTING.md](./CONTRIBUTING.md) to know more about
13
13
  MWoffliner development.
14
14
 
15
+ User Help is available in the for a a
16
+ [FAQ](https://github.com/openzim/mwoffliner/wiki/Frequently-Asked-Questions).
17
+
15
18
  [![NPM](https://nodei.co/npm/mwoffliner.png)](https://www.npmjs.com/package/mwoffliner)
16
19
 
17
20
  [![npm](https://img.shields.io/npm/v/mwoffliner.svg)](https://www.npmjs.com/package/mwoffliner)
18
- [![Docker](https://ghcr-badge.deta.dev/openzim/mwoffliner/latest_tag?label=container)](https://ghcr.io/openzim/mwoffliner)
21
+ [![node](https://img.shields.io/node/v/mwoffliner.svg)](https://www.npmjs.com/package/mwoffliner)
22
+ [![Docker](https://ghcr-badge.egpl.dev/openzim/mwoffliner/latest_tag?label=container)](https://ghcr.io/openzim/mwoffliner)
19
23
  [![Build Status](https://github.com/openzim/mwoffliner/workflows/CI/badge.svg?query=branch%3Amain)](https://github.com/openzim/mwoffliner/actions/workflows/ci.yml?query=branch%3Amain)
20
24
  [![codecov](https://codecov.io/gh/openzim/mwoffliner/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/mwoffliner)
21
25
  [![CodeFactor](https://www.codefactor.io/repository/github/openzim/mwoffliner/badge)](https://www.codefactor.io/repository/github/openzim/mwoffliner)
22
26
  [![License](https://img.shields.io/npm/l/mwoffliner.svg)](LICENSE)
27
+ [![Join Slack](https://img.shields.io/badge/Join%20us%20on%20Slack%20%23mwoffliner-2EB67D)](https://slack.kiwix.org)
23
28
 
24
29
  ## Features
25
30
 
@@ -78,9 +83,10 @@ this:
78
83
  ## API
79
84
 
80
85
  MWoffliner provides also an API and therefore can be used as a NodeJS
81
- library. Here a stub example:
86
+ library. Here a stub example that could go in your index.mjs file:
82
87
  ```javascript
83
- const mwoffliner = require('mwoffliner');
88
+ import * as mwoffliner from 'mwoffliner';
89
+
84
90
  const parameters = {
85
91
  mwUrl: "https://es.wikipedia.org",
86
92
  adminEmail: "foo@bar.net",
@@ -1,11 +1,9 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import type { BackoffStrategy } from 'backoff';
3
- import { AxiosRequestConfig } from 'axios';
3
+ import { AxiosRequestConfig, AxiosResponse } from 'axios';
4
4
  import S3 from './S3.js';
5
5
  import { Dump } from './Dump.js';
6
- import MediaWiki from './MediaWiki.js';
7
6
  interface DownloaderOpts {
8
- mw: MediaWiki;
9
7
  uaString: string;
10
8
  speed: number;
11
9
  reqTimeout: number;
@@ -13,6 +11,8 @@ interface DownloaderOpts {
13
11
  s3?: S3;
14
12
  webp: boolean;
15
13
  backoffOptions?: BackoffOptions;
14
+ mwWikiPath?: string;
15
+ insecure?: boolean;
16
16
  }
17
17
  interface BackoffOptions {
18
18
  strategy: BackoffStrategy;
@@ -20,66 +20,70 @@ interface BackoffOptions {
20
20
  retryIf: (error?: any) => boolean;
21
21
  backoffHandler: (number: number, delay: number, error?: any) => void;
22
22
  }
23
- export interface MWCapabilities {
24
- apiAvailable: boolean;
25
- veApiAvailable: boolean;
26
- coordinatesAvailable: boolean;
27
- desktopRestApiAvailable: boolean;
28
- mobileRestApiAvailable: boolean;
29
- }
30
- export declare const defaultStreamRequestOptions: AxiosRequestConfig;
23
+ /**
24
+ * Downloader is a class providing content retrieval functionalities for both Mediawiki and S3 remote instances.
25
+ */
31
26
  declare class Downloader {
32
- readonly mw: MediaWiki;
33
27
  loginCookie: string;
34
28
  readonly speed: number;
35
- baseUrl: string;
36
- baseUrlForMainPage: string;
37
29
  cssDependenceUrls: KVS<boolean>;
38
30
  readonly webp: boolean;
39
31
  readonly requestTimeout: number;
32
+ readonly basicRequestOptions: AxiosRequestConfig;
33
+ readonly arrayBufferRequestOptions: AxiosRequestConfig;
34
+ readonly jsonRequestOptions: AxiosRequestConfig;
35
+ readonly streamRequestOptions: AxiosRequestConfig;
36
+ wikimediaMobileJsDependenciesList: string[];
37
+ wikimediaMobileStyleDependenciesList: string[];
40
38
  private readonly uaString;
41
39
  private activeRequests;
42
40
  private maxActiveRequests;
43
- private readonly urlPartCache;
44
41
  private readonly backoffOptions;
45
42
  private readonly optimisationCacheUrl;
46
43
  private s3;
47
- private mwCapabilities;
48
- arrayBufferRequestOptions: AxiosRequestConfig;
49
- jsonRequestOptions: AxiosRequestConfig;
50
- streamRequestOptions: AxiosRequestConfig;
51
- constructor({ mw, uaString, speed, reqTimeout, optimisationCacheUrl, s3, webp, backoffOptions }: DownloaderOpts);
52
- serializeUrl(url: string): string;
53
- deserializeUrl(url: string): string;
54
- setBaseUrls(): Promise<void>;
55
- checkApiAvailabilty(url: string): Promise<boolean>;
56
- checkCapabilities(testArticleId?: string): Promise<void>;
44
+ private apiUrlDirector;
45
+ private articleUrlDirector;
46
+ private mainPageUrlDirector;
47
+ private readonly insecure;
48
+ constructor({ uaString, speed, reqTimeout, optimisationCacheUrl, s3, webp, backoffOptions, insecure }: DownloaderOpts);
49
+ private getUrlDirector;
50
+ setUrlsDirectors(mainPageRenderer: any, articlesRenderer: any): void;
51
+ getArticleUrl(articleId: string): string;
52
+ getMainPageUrl(articleId: string): string;
57
53
  removeEtagWeakPrefix(etag: string): string;
58
- query(query: string): KVS<any>;
54
+ query(): KVS<any>;
59
55
  getArticleDetailsIds(articleIds: string[], shouldGetThumbnail?: boolean): Promise<QueryMwRet>;
60
56
  getArticleDetailsNS(ns: number, gapcontinue?: string): Promise<{
61
57
  gapContinue: string;
62
58
  articleDetails: QueryMwRet;
63
59
  }>;
64
- getArticle(articleId: string, dump: Dump, articleDetailXId: RKVS<ArticleDetail>, articleDetail?: ArticleDetail): Promise<RenderedArticle[]>;
60
+ getArticle(webp: boolean, _moduleDependencies: any, articleId: string, articleDetailXId: RKVS<ArticleDetail>, articleRenderer: any, articleUrl: any, dump: Dump, articleDetail?: ArticleDetail, isMainPage?: boolean): Promise<any>;
65
61
  getJSON<T>(_url: string): Promise<T>;
66
- downloadContent(_url: string, retry?: boolean): Promise<{
62
+ request<T = any, R extends AxiosResponse<T> = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
63
+ downloadContent(_url: string, kind: DonwloadKind, retry?: boolean): Promise<{
67
64
  content: Buffer | string;
68
- responseHeaders: any;
65
+ contentType: string;
66
+ setCookie: string | null;
69
67
  }>;
70
68
  canGetUrl(url: string): Promise<boolean>;
71
- private getArticleUrl;
72
69
  private static handleMWWarningsAndErrors;
73
70
  private getArticleQueryOpts;
74
71
  private setArticleSubCategories;
75
72
  private claimRequest;
76
73
  private releaseRequest;
77
74
  private getJSONCb;
75
+ private getImageMimeType;
78
76
  private getCompressedBody;
79
77
  private getContentCb;
80
78
  private downloadImage;
81
79
  private errHandler;
82
80
  private getSubCategories;
83
81
  private backoffCall;
82
+ getModuleDependencies(title: string): Promise<{
83
+ jsConfigVars: string;
84
+ jsDependenciesList: string[];
85
+ styleDependenciesList: string[];
86
+ }>;
87
+ private streamToBuffer;
84
88
  }
85
89
  export default Downloader;