mwoffliner 1.17.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +355 -62
- package/docs/functional_architecture.md +34 -38
- package/extensions/wiktionary_fr.js +18 -17
- package/jest.config.cjs +2 -2
- package/lib/DOMUtils.js +0 -1
- package/lib/DOMUtils.js.map +1 -1
- package/lib/Downloader.d.ts +39 -31
- package/lib/Downloader.js +418 -349
- package/lib/Downloader.js.map +1 -1
- package/lib/Dump.d.ts +24 -10
- package/lib/Dump.js +95 -50
- package/lib/Dump.js.map +1 -1
- package/lib/Gadgets.d.ts +2 -1
- package/lib/Gadgets.js +7 -5
- package/lib/Gadgets.js.map +1 -1
- package/lib/Logger.d.ts +6 -6
- package/lib/Logger.js +33 -33
- package/lib/Logger.js.map +1 -1
- package/lib/MediaWiki.d.ts +14 -31
- package/lib/MediaWiki.js +119 -172
- package/lib/MediaWiki.js.map +1 -1
- package/lib/RedisStore.d.ts +3 -3
- package/lib/RedisStore.js +21 -23
- package/lib/RedisStore.js.map +1 -1
- package/lib/S3.js +1 -1
- package/lib/S3.js.map +1 -1
- package/lib/Templates.d.ts +3 -10
- package/lib/Templates.js +5 -14
- package/lib/Templates.js.map +1 -1
- package/lib/cli.js +7 -6
- package/lib/cli.js.map +1 -1
- package/lib/config.d.ts +10 -16
- package/lib/config.js +33 -55
- package/lib/config.js.map +1 -1
- package/lib/error.manager.d.ts +2 -2
- package/lib/error.manager.js +42 -49
- package/lib/error.manager.js.map +1 -1
- package/lib/i18n.d.ts +2 -0
- package/lib/i18n.js +53 -0
- package/lib/i18n.js.map +1 -0
- package/lib/mutex.d.ts +2 -1
- package/lib/mutex.js +2 -1
- package/lib/mutex.js.map +1 -1
- package/lib/mwoffliner.lib.js +370 -222
- package/lib/mwoffliner.lib.js.map +1 -1
- package/lib/parameterList.d.ts +20 -8
- package/lib/parameterList.js +30 -18
- package/lib/parameterList.js.map +1 -1
- package/lib/renderers/abstract.renderer.d.ts +48 -55
- package/lib/renderers/abstract.renderer.js +377 -98
- package/lib/renderers/abstract.renderer.js.map +1 -1
- package/lib/renderers/action-parse.renderer.d.ts +22 -3
- package/lib/renderers/action-parse.renderer.js +123 -81
- package/lib/renderers/action-parse.renderer.js.map +1 -1
- package/lib/renderers/renderer.builder.js +6 -69
- package/lib/renderers/renderer.builder.js.map +1 -1
- package/lib/renderers/rendering.context.d.ts +2 -3
- package/lib/renderers/rendering.context.js +6 -14
- package/lib/renderers/rendering.context.js.map +1 -1
- package/lib/sanitize-argument.d.ts +7 -4
- package/lib/sanitize-argument.js +99 -41
- package/lib/sanitize-argument.js.map +1 -1
- package/lib/util/FileManager.d.ts +36 -0
- package/lib/util/FileManager.js +246 -0
- package/lib/util/FileManager.js.map +1 -0
- package/lib/util/RedisKvs.js +4 -4
- package/lib/util/RedisKvs.js.map +1 -1
- package/lib/util/RedisQueue.js +1 -1
- package/lib/util/RedisQueue.js.map +1 -1
- package/lib/util/builders/url/action-parse.director.d.ts +2 -2
- package/lib/util/builders/url/action-parse.director.js +7 -7
- package/lib/util/builders/url/action-parse.director.js.map +1 -1
- package/lib/util/builders/url/api.director.d.ts +2 -4
- package/lib/util/builders/url/api.director.js +10 -17
- package/lib/util/builders/url/api.director.js.map +1 -1
- package/lib/util/builders/url/base.director.d.ts +0 -4
- package/lib/util/builders/url/base.director.js +0 -25
- package/lib/util/builders/url/base.director.js.map +1 -1
- package/lib/util/builders/url/basic.director.d.ts +1 -1
- package/lib/util/builders/url/basic.director.js +1 -1
- package/lib/util/builders/url/web.director.d.ts +1 -1
- package/lib/util/builders/url/web.director.js +2 -2
- package/lib/util/builders/url/web.director.js.map +1 -1
- package/lib/util/categories.d.ts +5 -5
- package/lib/util/categories.js +175 -174
- package/lib/util/categories.js.map +1 -1
- package/lib/util/const.d.ts +4 -8
- package/lib/util/const.js +9 -17
- package/lib/util/const.js.map +1 -1
- package/lib/util/customCssJs.d.ts +6 -0
- package/lib/util/customCssJs.js +70 -0
- package/lib/util/customCssJs.js.map +1 -0
- package/lib/util/dump.d.ts +15 -4
- package/lib/util/dump.js +282 -86
- package/lib/util/dump.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/metaData.js.map +1 -1
- package/lib/util/misc.d.ts +23 -13
- package/lib/util/misc.js +90 -59
- package/lib/util/misc.js.map +1 -1
- package/lib/util/mw-api.d.ts +7 -5
- package/lib/util/mw-api.js +167 -221
- package/lib/util/mw-api.js.map +1 -1
- package/lib/util/pageListMainPage.d.ts +3 -0
- package/lib/util/pageListMainPage.js +10 -0
- package/lib/util/pageListMainPage.js.map +1 -0
- package/lib/util/pages.d.ts +30 -0
- package/lib/util/pages.js +146 -0
- package/lib/util/pages.js.map +1 -0
- package/lib/util/rewriteUrls.d.ts +2 -2
- package/lib/util/rewriteUrls.js +33 -31
- package/lib/util/rewriteUrls.js.map +1 -1
- package/lib/util/savePages.d.ts +8 -0
- package/lib/util/savePages.js +182 -0
- package/lib/util/savePages.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/offliner-definition.json +178 -90
- package/package.json +50 -49
- package/res/page_list_home.js +20 -0
- package/res/{article_not_found.svg → page_not_found.svg} +1 -1
- package/res/script.js +30 -45
- package/res/style.css +52 -68
- package/res/templates/download_error_placeholder.html +7 -8
- package/res/templates/javaScript.html +19 -0
- package/res/templates/pageFallback.html +9 -7
- package/res/templates/pageVector2022.html +9 -7
- package/res/templates/pageVectorLegacy.html +9 -7
- package/res/templates/{article_list_home.html → page_list_home.html} +1 -2
- package/translation/ar.json +21 -21
- package/translation/bn.json +1 -1
- package/translation/de.json +46 -19
- package/translation/en.json +54 -21
- package/translation/es.json +17 -19
- package/translation/fi.json +23 -3
- package/translation/fr.json +57 -21
- package/translation/he.json +8 -6
- package/translation/ia.json +19 -19
- package/translation/id.json +13 -13
- package/translation/it.json +13 -8
- package/translation/ko.json +55 -3
- package/translation/lb.json +5 -2
- package/translation/mk.json +5 -5
- package/translation/nl.json +57 -22
- package/translation/or.json +2 -2
- package/translation/pt.json +2 -2
- package/translation/qqq.json +55 -22
- package/translation/ru.json +2 -2
- package/translation/sc.json +2 -2
- package/translation/sk.json +62 -0
- package/translation/sl.json +54 -21
- package/translation/sv.json +20 -19
- package/translation/sw.json +45 -2
- package/translation/zh-hans.json +56 -22
- package/translation/zh-hant.json +26 -19
- package/lib/renderers/abstractDesktop.render.d.ts +0 -12
- package/lib/renderers/abstractDesktop.render.js +0 -67
- package/lib/renderers/abstractDesktop.render.js.map +0 -1
- package/lib/renderers/abstractMobile.render.d.ts +0 -12
- package/lib/renderers/abstractMobile.render.js +0 -54
- package/lib/renderers/abstractMobile.render.js.map +0 -1
- package/lib/renderers/rest-api.renderer.d.ts +0 -7
- package/lib/renderers/rest-api.renderer.js +0 -68
- package/lib/renderers/rest-api.renderer.js.map +0 -1
- package/lib/renderers/visual-editor.renderer.d.ts +0 -7
- package/lib/renderers/visual-editor.renderer.js +0 -76
- package/lib/renderers/visual-editor.renderer.js.map +0 -1
- package/lib/renderers/wikimedia-desktop.renderer.d.ts +0 -4
- package/lib/renderers/wikimedia-desktop.renderer.js +0 -7
- package/lib/renderers/wikimedia-desktop.renderer.js.map +0 -1
- package/lib/renderers/wikimedia-mobile.renderer.d.ts +0 -19
- package/lib/renderers/wikimedia-mobile.renderer.js +0 -243
- package/lib/renderers/wikimedia-mobile.renderer.js.map +0 -1
- package/lib/util/articleListMainPage.d.ts +0 -3
- package/lib/util/articleListMainPage.js +0 -10
- package/lib/util/articleListMainPage.js.map +0 -1
- package/lib/util/articles.d.ts +0 -26
- package/lib/util/articles.js +0 -102
- package/lib/util/articles.js.map +0 -1
- package/lib/util/builders/url/desktop.director.d.ts +0 -8
- package/lib/util/builders/url/desktop.director.js +0 -15
- package/lib/util/builders/url/desktop.director.js.map +0 -1
- package/lib/util/builders/url/mobile.director.d.ts +0 -8
- package/lib/util/builders/url/mobile.director.js +0 -15
- package/lib/util/builders/url/mobile.director.js.map +0 -1
- package/lib/util/builders/url/rest-api.director.d.ts +0 -8
- package/lib/util/builders/url/rest-api.director.js +0 -18
- package/lib/util/builders/url/rest-api.director.js.map +0 -1
- package/lib/util/builders/url/visual-editor.director.d.ts +0 -9
- package/lib/util/builders/url/visual-editor.director.js +0 -18
- package/lib/util/builders/url/visual-editor.director.js.map +0 -1
- package/lib/util/saveArticles.d.ts +0 -8
- package/lib/util/saveArticles.js +0 -411
- package/lib/util/saveArticles.js.map +0 -1
- package/res/article_list_home.js +0 -24
- package/res/content.parsoid.css +0 -196
- package/res/inserted_style.css +0 -45
- package/res/templates/categories.html +0 -11
- package/res/templates/lead_section_wrapper.html +0 -6
- package/res/templates/pageWikimediaDesktop.html +0 -24
- package/res/templates/pageWikimediaMobile.html +0 -24
- package/res/templates/section_wrapper.html +0 -5
- package/res/templates/subcategories.html +0 -23
- package/res/templates/subpages.html +0 -17
- package/res/templates/subsection_wrapper.html +0 -5
- package/res/webpHandler.js +0 -165
- package/res/wm_mobile_override_script.js +0 -15
- package/res/wm_mobile_override_style.css +0 -20
- package/translation/br.json +0 -8
- package/translation/dag.json +0 -9
- package/translation/es-formal.json +0 -29
- package/translation/ha.json +0 -10
- package/translation/hi.json +0 -9
- package/translation/ig.json +0 -10
- package/translation/kaa.json +0 -9
- package/translation/nb.json +0 -9
- package/translation/nqo.json +0 -8
- package/translation/pt-br.json +0 -10
- package/translation/ro.json +0 -9
- package/translation/scn.json +0 -8
- package/translation/sq.json +0 -9
- package/translation/te.json +0 -9
- package/translation/tn.json +0 -9
- package/translation/tr.json +0 -10
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import * as logger from '../Logger.js';
|
|
2
|
+
import Downloader from '../Downloader.js';
|
|
3
|
+
import RedisStore from '../RedisStore.js';
|
|
4
|
+
import { StringItem } from '@openzim/libzim';
|
|
5
|
+
import pmap from 'p-map';
|
|
6
|
+
import { parseRetryAfterHeader } from './misc.js';
|
|
7
|
+
import { FILES_DOWNLOAD_FAILURE_MINIMUM_FOR_CHECK, FILES_DOWNLOAD_FAILURE_TRESHOLD_PER_TEN_THOUSAND, MAX_FILE_DOWNLOAD_RETRIES } from './const.js';
|
|
8
|
+
import urlHelper from './url.helper.js';
|
|
9
|
+
import { fileAddMutex, fileDownloadMutex, zimCreatorMutex } from '../mutex.js';
|
|
10
|
+
import RedisQueue from './RedisQueue.js';
|
|
11
|
+
const MAXIMUM_FILE_DOWNLOAD_DELAY = 20000;
|
|
12
|
+
class FileManager {
|
|
13
|
+
static instance;
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!FileManager.instance) {
|
|
16
|
+
FileManager.instance = new FileManager();
|
|
17
|
+
}
|
|
18
|
+
return FileManager.instance;
|
|
19
|
+
}
|
|
20
|
+
hosts = new Map();
|
|
21
|
+
get filesToDownloadXPath() {
|
|
22
|
+
return RedisStore.filesStore;
|
|
23
|
+
}
|
|
24
|
+
constructor() { }
|
|
25
|
+
/**
|
|
26
|
+
* Reset internal state for a new dump cycle.
|
|
27
|
+
*/
|
|
28
|
+
reset() {
|
|
29
|
+
this.hosts = new Map();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Add a single file to download. Checks dedup via filesToDownloadXPath.
|
|
33
|
+
* On first add: writes to both filesToDownloadXPath and host queue.
|
|
34
|
+
* On resolution upgrade: updates filesToDownloadXPath only (queue already has the path).
|
|
35
|
+
*
|
|
36
|
+
* This method is typically called multiple times when the file is an image and the scraper detects
|
|
37
|
+
* a second use of an image already seen but with a higher resolution. Could be that we call this
|
|
38
|
+
* method twice with different urls / data for other usage in the future.
|
|
39
|
+
*/
|
|
40
|
+
async addFileToProcess(path, detail) {
|
|
41
|
+
await fileAddMutex.runExclusive(async () => this._addFileToProcess(path, detail));
|
|
42
|
+
}
|
|
43
|
+
async _addFileToProcess(path, detail) {
|
|
44
|
+
const existing = await this.filesToDownloadXPath.get(path);
|
|
45
|
+
if (existing) {
|
|
46
|
+
const isHigherRes = existing.width < (detail.width || 10e6) || existing.mult < (detail.mult || 1);
|
|
47
|
+
if (!isHigherRes)
|
|
48
|
+
return;
|
|
49
|
+
// Resolution upgrade: update store only, queue already has this path
|
|
50
|
+
await this.filesToDownloadXPath.set(path, detail);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// New file: add to both store and host queue
|
|
54
|
+
await this.filesToDownloadXPath.set(path, detail);
|
|
55
|
+
await this.pushToHostQueue(path, detail);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Batch version of addFileToProcess. Uses getMany for efficiency.
|
|
59
|
+
*/
|
|
60
|
+
async addManyFilesToProcess(files) {
|
|
61
|
+
await fileAddMutex.runExclusive(async () => this._addManyFilesToProcess(files));
|
|
62
|
+
}
|
|
63
|
+
async _addManyFilesToProcess(files) {
|
|
64
|
+
const paths = Object.keys(files);
|
|
65
|
+
if (!paths.length)
|
|
66
|
+
return;
|
|
67
|
+
const existingVals = await this.filesToDownloadXPath.getMany(paths);
|
|
68
|
+
const toSet = {};
|
|
69
|
+
for (const [path, detail] of Object.entries(files)) {
|
|
70
|
+
const existing = existingVals[path];
|
|
71
|
+
if (existing) {
|
|
72
|
+
const isHigherRes = existing.width < (detail.width || 10e6) || existing.mult < (detail.mult || 1);
|
|
73
|
+
if (!isHigherRes)
|
|
74
|
+
continue;
|
|
75
|
+
toSet[path] = detail; // upgrade only, no queue push
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
toSet[path] = detail;
|
|
79
|
+
await this.pushToHostQueue(path, detail);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (Object.keys(toSet).length) {
|
|
83
|
+
await this.filesToDownloadXPath.setMany(toSet);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async pushToHostQueue(path, detail) {
|
|
87
|
+
const hostname = new URL(urlHelper.deserializeUrl(detail.url)).hostname;
|
|
88
|
+
if (!this.hosts.has(hostname)) {
|
|
89
|
+
const queue = new RedisQueue(RedisStore.client, `${hostname}-files`);
|
|
90
|
+
await queue.flush();
|
|
91
|
+
RedisStore.filesQueues.push(queue);
|
|
92
|
+
this.hosts.set(hostname, {
|
|
93
|
+
queue,
|
|
94
|
+
requestInterval: 30,
|
|
95
|
+
downloadSuccess: 0,
|
|
96
|
+
downloadFailure: 0,
|
|
97
|
+
downloadsComplete: false,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
await this.hosts.get(hostname).queue.push({
|
|
101
|
+
path,
|
|
102
|
+
downloadAttempts: 0,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Start download workers. Queues are already populated via addFileToProcess/addManyFilesToProcess.
|
|
107
|
+
*/
|
|
108
|
+
async startDownloading(zimCreator, dump) {
|
|
109
|
+
const filesTotal = await this.filesToDownloadXPath.len();
|
|
110
|
+
let prevPercentProgress;
|
|
111
|
+
const hosts = this.hosts;
|
|
112
|
+
const filesToDownloadXPath = this.filesToDownloadXPath;
|
|
113
|
+
async function getNextFileToDownload() {
|
|
114
|
+
const startPolling = Date.now();
|
|
115
|
+
while (true) {
|
|
116
|
+
if (startPolling + 1000 * 60 * 60 < Date.now()) {
|
|
117
|
+
logger.warn('No file to download for more than 1 hour, exiting the loop');
|
|
118
|
+
for (const hostData of hosts.values()) {
|
|
119
|
+
if (hostData.downloadsComplete)
|
|
120
|
+
continue;
|
|
121
|
+
while (await hostData.queue.pop()) {
|
|
122
|
+
dump.status.files.fail += 1;
|
|
123
|
+
if (dump.status.files.fail > FILES_DOWNLOAD_FAILURE_MINIMUM_FOR_CHECK &&
|
|
124
|
+
(dump.status.files.fail * 10000) / filesTotal > FILES_DOWNLOAD_FAILURE_TRESHOLD_PER_TEN_THOUSAND) {
|
|
125
|
+
throw new Error(`Too many files failed to download: [${dump.status.files.fail}/${filesTotal}]`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const hostValues = Array.from(hosts.values());
|
|
132
|
+
const completedHosts = hostValues.reduce((buf, host) => {
|
|
133
|
+
return host.downloadsComplete ? buf + 1 : buf;
|
|
134
|
+
}, 0);
|
|
135
|
+
if (completedHosts === hostValues.length)
|
|
136
|
+
return null;
|
|
137
|
+
for (const [hostname, hostData] of hosts.entries()) {
|
|
138
|
+
if (hostData.downloadsComplete ||
|
|
139
|
+
(hostData.notBeforeDate && hostData.notBeforeDate > Date.now()) ||
|
|
140
|
+
(hostData.lastRequestDate && hostData.lastRequestDate + hostData.requestInterval > Date.now())) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const fileToDownload = await hostData.queue.pop();
|
|
144
|
+
if (!fileToDownload) {
|
|
145
|
+
hostData.downloadsComplete = true;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
hostData.lastRequestDate = Date.now();
|
|
149
|
+
return { fileToDownload, hostData, hostname };
|
|
150
|
+
}
|
|
151
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function workerDownloadFile(fileToDownload, hostname, hostData, workerId) {
|
|
155
|
+
if ((dump.status.files.success + dump.status.files.fail) % (10 * Downloader.workers) === 0) {
|
|
156
|
+
const percentProgress = (((dump.status.files.success + dump.status.files.fail) / filesTotal) * 100).toFixed(1);
|
|
157
|
+
if (percentProgress !== prevPercentProgress) {
|
|
158
|
+
prevPercentProgress = percentProgress;
|
|
159
|
+
logger.info(`Progress downloading files [${dump.status.files.success + dump.status.files.fail}/${filesTotal}] [${percentProgress}%]`);
|
|
160
|
+
}
|
|
161
|
+
if (filesTotal > 0 &&
|
|
162
|
+
dump.status.files.fail > FILES_DOWNLOAD_FAILURE_MINIMUM_FOR_CHECK &&
|
|
163
|
+
(dump.status.files.fail * 10000) / filesTotal > FILES_DOWNLOAD_FAILURE_TRESHOLD_PER_TEN_THOUSAND) {
|
|
164
|
+
throw new Error(`Too many files failed to download: [${dump.status.files.fail}/${filesTotal}]`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
fileToDownload.downloadAttempts += 1;
|
|
168
|
+
// Read latest details from filesToDownloadXPath (resolution may have been upgraded since queuing)
|
|
169
|
+
const latestDetail = await filesToDownloadXPath.get(fileToDownload.path);
|
|
170
|
+
if (!latestDetail) {
|
|
171
|
+
logger.warn(`File details missing in RedisStore for path [${fileToDownload.path}], unable to download`);
|
|
172
|
+
dump.status.files.fail += 1;
|
|
173
|
+
hostData.downloadFailure += 1;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const downloadUrl = latestDetail.url;
|
|
177
|
+
const downloadKind = latestDetail.kind;
|
|
178
|
+
const downloadWidth = latestDetail.width;
|
|
179
|
+
logger.debug(`Worker ${workerId} downloading ${urlHelper.deserializeUrl(downloadUrl)} (${downloadKind})`);
|
|
180
|
+
await Downloader.downloadContent(downloadUrl, downloadKind, false, downloadWidth)
|
|
181
|
+
.then(async (resp) => {
|
|
182
|
+
if (resp && resp.content && resp.contentType) {
|
|
183
|
+
const item = new StringItem(fileToDownload.path, resp.contentType, null, { FRONT_ARTICLE: 0 }, resp.content);
|
|
184
|
+
await zimCreatorMutex.runExclusive(() => zimCreator.addItem(item));
|
|
185
|
+
dump.status.files.success += 1;
|
|
186
|
+
hostData.downloadSuccess += 1;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
throw new Error(`Bad response received: ${JSON.stringify(resp)}`);
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
.catch(async (err) => {
|
|
193
|
+
const isRetriableTransportError = !!(err?.response || err?.code);
|
|
194
|
+
if (!isRetriableTransportError) {
|
|
195
|
+
logger.warn(`Error processing file [${urlHelper.deserializeUrl(downloadUrl)}], skipping without retry`, err);
|
|
196
|
+
dump.status.files.fail += 1;
|
|
197
|
+
hostData.downloadFailure += 1;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (fileToDownload.downloadAttempts > MAX_FILE_DOWNLOAD_RETRIES || (err.response && err.response.status === 404)) {
|
|
201
|
+
logger.warn(`Error downloading file [${urlHelper.deserializeUrl(downloadUrl)}] [status=${err.response?.status}], skipping`);
|
|
202
|
+
dump.status.files.fail += 1;
|
|
203
|
+
hostData.downloadFailure += 1;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
if (err.response) {
|
|
207
|
+
const retryAfterHeader = err.response.headers['retry-after']?.toString();
|
|
208
|
+
if (retryAfterHeader) {
|
|
209
|
+
const retryDate = parseRetryAfterHeader(retryAfterHeader);
|
|
210
|
+
if (retryDate) {
|
|
211
|
+
if (retryDate > Date.now() + MAXIMUM_FILE_DOWNLOAD_DELAY) {
|
|
212
|
+
logger.info(`Received a [Retry-After=${retryAfterHeader}] on ${hostname} but this is too far away, ignoring`);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
hostData.notBeforeDate = retryDate;
|
|
216
|
+
logger.info(`Received a [Retry-After=${retryAfterHeader}], pausing down ${hostname} until ${hostData.notBeforeDate}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
logger.warn(`Received a [Retry-After=${retryAfterHeader}] from ${hostname} but failed to interpret it`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (err.response && [429, 503, 524].includes(err.response.status) && !urlHelper.deserializeUrl(downloadUrl).match(/^https?:\/\/upload\.wikimedia\.org\/.*\/thumb\//)) {
|
|
225
|
+
hostData.requestInterval = Math.min(MAXIMUM_FILE_DOWNLOAD_DELAY, hostData.requestInterval * 1.2);
|
|
226
|
+
logger.info(`Received a [status=${err.response.status}], slowing down ${hostname} to ${hostData.requestInterval}ms interval`);
|
|
227
|
+
}
|
|
228
|
+
await hostData.queue.push(fileToDownload);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
await pmap(Array.from({ length: Downloader.workers }, (_, i) => i), async (workerId) => {
|
|
233
|
+
while (true) {
|
|
234
|
+
const nextFileData = await fileDownloadMutex.runExclusive(getNextFileToDownload);
|
|
235
|
+
if (!nextFileData)
|
|
236
|
+
break;
|
|
237
|
+
const { fileToDownload, hostname, hostData } = nextFileData;
|
|
238
|
+
await workerDownloadFile(fileToDownload, hostname, hostData, workerId);
|
|
239
|
+
}
|
|
240
|
+
}, { concurrency: Downloader.workers });
|
|
241
|
+
logger.info(`Done with downloading ${filesTotal} files: ${dump.status.files.success} success, ${dump.status.files.fail} fail: `, JSON.stringify(Object.fromEntries([...hosts].map(([hostname, hostData]) => [hostname, { success: hostData.downloadSuccess, fail: hostData.downloadFailure }])), null, '\t'));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const fm = FileManager.getInstance();
|
|
245
|
+
export default fm;
|
|
246
|
+
//# sourceMappingURL=FileManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileManager.js","sourceRoot":"","sources":["../../src/util/FileManager.ts"],"names":[],"mappings":"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"}
|
package/lib/util/RedisKvs.js
CHANGED
|
@@ -24,7 +24,7 @@ export default class RedisKvs {
|
|
|
24
24
|
return result;
|
|
25
25
|
}
|
|
26
26
|
exists(prop) {
|
|
27
|
-
return this.redisClient.hExists(this.dbName, prop);
|
|
27
|
+
return this.redisClient.hExists(this.dbName, prop).then((v) => v === 1);
|
|
28
28
|
}
|
|
29
29
|
async existsMany(prop, blocking = false) {
|
|
30
30
|
// array of keys
|
|
@@ -132,13 +132,13 @@ export default class RedisKvs {
|
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
async scan(scanCursor) {
|
|
135
|
-
const { cursor,
|
|
135
|
+
const { cursor, entries } = await this.redisClient.hScan(this.dbName, String(scanCursor));
|
|
136
136
|
const items = {};
|
|
137
|
-
for (const { field, value } of
|
|
137
|
+
for (const { field, value } of entries) {
|
|
138
138
|
items[field] = this.hydrateObject(value);
|
|
139
139
|
}
|
|
140
140
|
return {
|
|
141
|
-
cursor,
|
|
141
|
+
cursor: Number(cursor),
|
|
142
142
|
items,
|
|
143
143
|
};
|
|
144
144
|
}
|
package/lib/util/RedisKvs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisKvs.js","sourceRoot":"","sources":["../../src/util/RedisKvs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,QAAQ;IACnB,WAAW,CAAiB;IACnB,MAAM,CAAQ;IACd,cAAc,CAAW;IACzB,YAAY,CAAW;IAExC,YAAY,WAA4B,EAAE,MAAc,EAAE,UAAwB;QAChF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAC7C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,IAAY;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"RedisKvs.js","sourceRoot":"","sources":["../../src/util/RedisKvs.ts"],"names":[],"mappings":"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"}
|
package/lib/util/RedisQueue.js
CHANGED
|
@@ -19,7 +19,7 @@ export default class RedisQueue {
|
|
|
19
19
|
return this.redisClient.lPush(this.dbName, this.dehydrateObject(val));
|
|
20
20
|
}
|
|
21
21
|
len() {
|
|
22
|
-
return this.redisClient.
|
|
22
|
+
return this.redisClient.lLen(this.dbName);
|
|
23
23
|
}
|
|
24
24
|
flush() {
|
|
25
25
|
return this.redisClient.del(this.dbName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisQueue.js","sourceRoot":"","sources":["../../src/util/RedisQueue.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,WAAW,CAAiB;IACnB,MAAM,CAAQ;IACd,cAAc,CAAW;IACzB,YAAY,CAAW;IAExC,YAAY,WAA4B,EAAE,MAAc,EAAE,UAAwB;QAChF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAC7C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"RedisQueue.js","sourceRoot":"","sources":["../../src/util/RedisQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,6 @@ export default class ActionParseURLDirector {
|
|
|
5
5
|
baseDomain: string;
|
|
6
6
|
skin: string;
|
|
7
7
|
variant?: string;
|
|
8
|
-
constructor(baseDomain: string, skin: string
|
|
9
|
-
|
|
8
|
+
constructor(baseDomain: string, skin: string);
|
|
9
|
+
buildPageUrl(pageTitle: PageTitle, pageUrlOpts?: PageUrlOpts): string;
|
|
10
10
|
}
|
|
@@ -7,26 +7,26 @@ export default class ActionParseURLDirector {
|
|
|
7
7
|
baseDomain;
|
|
8
8
|
skin;
|
|
9
9
|
variant;
|
|
10
|
-
constructor(baseDomain, skin
|
|
10
|
+
constructor(baseDomain, skin) {
|
|
11
11
|
this.baseDomain = baseDomain;
|
|
12
12
|
this.skin = skin;
|
|
13
|
-
this.variant = variant;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
const { sectionId } =
|
|
14
|
+
buildPageUrl(pageTitle, pageUrlOpts = {}) {
|
|
15
|
+
const { sectionId, langVar, oldid } = pageUrlOpts;
|
|
17
16
|
return urlBuilder
|
|
18
17
|
.setDomain(this.baseDomain)
|
|
19
18
|
.setQueryParams({
|
|
20
19
|
action: 'parse',
|
|
21
20
|
format: 'json',
|
|
22
|
-
prop: 'modules|jsconfigvars|headhtml|text|displaytitle|subtitle',
|
|
21
|
+
prop: 'modules|jsconfigvars|headhtml|text|displaytitle|subtitle|categorieshtml',
|
|
23
22
|
usearticle: '1',
|
|
24
23
|
disabletoc: '1',
|
|
25
24
|
disableeditsection: '1',
|
|
26
25
|
disablelimitreport: '1',
|
|
27
|
-
page:
|
|
26
|
+
page: oldid ? undefined : pageTitle,
|
|
27
|
+
oldid: oldid ? String(oldid) : undefined,
|
|
28
28
|
useskin: this.skin,
|
|
29
|
-
variant:
|
|
29
|
+
variant: langVar || undefined,
|
|
30
30
|
redirects: '1',
|
|
31
31
|
formatversion: '2',
|
|
32
32
|
section: sectionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-parse.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/action-parse.director.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,UAAU,CAAQ;IAClB,IAAI,CAAQ;IACZ,OAAO,CAAS;IAEhB,YAAY,UAAkB,EAAE,IAAY
|
|
1
|
+
{"version":3,"file":"action-parse.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/action-parse.director.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,UAAU,CAAQ;IAClB,IAAI,CAAQ;IACZ,OAAO,CAAS;IAEhB,YAAY,UAAkB,EAAE,IAAY;QAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,YAAY,CAAC,SAAoB,EAAE,cAA2B,EAAE;QAC9D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,CAAA;QACjD,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,cAAc,CACb;YACE,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,yEAAyE;YAC/E,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,kBAAkB,EAAE,GAAG;YACvB,kBAAkB,EAAE,GAAG;YACvB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACxC,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,IAAI,SAAS;YAC7B,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,GAAG;YAClB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SAC/B,EACD,GAAG,EACH,IAAI,CACL;aACA,KAAK,EAAE,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
export default class ApiURLDirector {
|
|
5
5
|
private baseDomain;
|
|
6
6
|
constructor(baseDomain: string);
|
|
7
|
-
buildSubCategoriesURL(articleId: string, continueStr?: string): string;
|
|
8
7
|
buildQueryURL<T extends Record<string, any>>(queryParams: T): string;
|
|
8
|
+
buildCategoryMembersURL(pageTitle: PageTitle, continueStr?: string): string;
|
|
9
9
|
buildSiteInfoURL(): string;
|
|
10
|
-
|
|
11
|
-
buildLogEventsQuery(letype: string, articleId: string): string;
|
|
12
|
-
buildArticleApiURL(articleId: string): string;
|
|
10
|
+
buildLogEventsQuery(letype: string, pageTitle: PageTitle): string;
|
|
13
11
|
}
|
|
@@ -8,25 +8,27 @@ export default class ApiURLDirector {
|
|
|
8
8
|
constructor(baseDomain) {
|
|
9
9
|
this.baseDomain = baseDomain;
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
buildQueryURL(queryParams) {
|
|
12
|
+
return urlBuilder.setDomain(this.baseDomain).setQueryParams(queryParams, '?', true).build();
|
|
13
|
+
}
|
|
14
|
+
buildCategoryMembersURL(pageTitle, continueStr = '') {
|
|
12
15
|
return urlBuilder
|
|
13
16
|
.setDomain(this.baseDomain)
|
|
14
17
|
.setQueryParams({
|
|
15
18
|
action: 'query',
|
|
16
19
|
list: 'categorymembers',
|
|
17
|
-
cmtype: 'subcat',
|
|
20
|
+
cmtype: 'subcat|page|file',
|
|
21
|
+
cmprop: 'title|sortkeyprefix|type',
|
|
22
|
+
cmsort: 'sortkey',
|
|
18
23
|
cmlimit: 'max',
|
|
19
24
|
format: 'json',
|
|
20
25
|
formatversion: '2',
|
|
21
|
-
cmtitle:
|
|
26
|
+
cmtitle: pageTitle,
|
|
22
27
|
cmcontinue: continueStr,
|
|
23
28
|
maxlag: config.defaults.maxlag,
|
|
24
29
|
})
|
|
25
30
|
.build();
|
|
26
31
|
}
|
|
27
|
-
buildQueryURL(queryParams) {
|
|
28
|
-
return urlBuilder.setDomain(this.baseDomain).setQueryParams(queryParams, '?', true).build();
|
|
29
|
-
}
|
|
30
32
|
buildSiteInfoURL() {
|
|
31
33
|
return urlBuilder
|
|
32
34
|
.setDomain(this.baseDomain)
|
|
@@ -46,19 +48,10 @@ export default class ApiURLDirector {
|
|
|
46
48
|
})
|
|
47
49
|
.build();
|
|
48
50
|
}
|
|
49
|
-
|
|
50
|
-
return urlBuilder.setDomain(this.baseDomain).setQueryParams({ action: 'visualeditor', mobileformat: 'html', format: 'json', paction: 'parse', formatversion: '2' }).build(true);
|
|
51
|
-
}
|
|
52
|
-
buildLogEventsQuery(letype, articleId) {
|
|
53
|
-
return urlBuilder
|
|
54
|
-
.setDomain(this.baseDomain)
|
|
55
|
-
.setQueryParams({ action: 'query', list: 'logevents', letype: letype, letitle: articleId, format: 'json', maxlag: config.defaults.maxlag })
|
|
56
|
-
.build();
|
|
57
|
-
}
|
|
58
|
-
buildArticleApiURL(articleId) {
|
|
51
|
+
buildLogEventsQuery(letype, pageTitle) {
|
|
59
52
|
return urlBuilder
|
|
60
53
|
.setDomain(this.baseDomain)
|
|
61
|
-
.setQueryParams({ action: '
|
|
54
|
+
.setQueryParams({ action: 'query', list: 'logevents', letype: letype, letitle: pageTitle, format: 'json', maxlag: config.defaults.maxlag })
|
|
62
55
|
.build();
|
|
63
56
|
}
|
|
64
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/api.director.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACzB,UAAU,CAAQ;IAE1B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"api.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/api.director.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACzB,UAAU,CAAQ;IAE1B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,aAAa,CAAgC,WAAc;QACzD,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;IAC7F,CAAC;IAED,uBAAuB,CAAC,SAAoB,EAAE,WAAW,GAAG,EAAE;QAC5D,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,cAAc,CAAC;YACd,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,0BAA0B;YAClC,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,GAAG;YAClB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,WAAW;YACvB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SAC/B,CAAC;aACD,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,gBAAgB;QACd,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,cAAc,CAAC;YACd,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB;YAC5B,MAAM,EAAE,sDAAsD;YAC9D,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,GAAG;YACnB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,aAAa;YACrB,aAAa,EAAE,GAAG;YAClB,aAAa,EAAE,GAAG;YAClB,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,GAAG;YAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SAC/B,CAAC;aACD,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,SAAoB;QACtD,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC1I,KAAK,EAAE,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -5,9 +5,5 @@ export default class BaseURLDirector {
|
|
|
5
5
|
private baseDomain;
|
|
6
6
|
constructor(baseDomain: string);
|
|
7
7
|
buildURL(path: string): URL;
|
|
8
|
-
buildWikimediaDesktopApiUrl(): URL;
|
|
9
|
-
buildWikimediaMobileApiUrl(): URL;
|
|
10
8
|
buildModuleURL(path?: string): string;
|
|
11
|
-
buildMobileModuleURL(path?: string): string;
|
|
12
|
-
buildRestApiUrl(path?: string): URL;
|
|
13
9
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import urlBuilder from './url.builder.js';
|
|
2
|
-
import { WIKIMEDIA_REST_API_PATH } from '../../const.js';
|
|
3
2
|
/**
|
|
4
3
|
* Interface to build URLs based on base URL
|
|
5
4
|
*/
|
|
@@ -11,35 +10,11 @@ export default class BaseURLDirector {
|
|
|
11
10
|
buildURL(path) {
|
|
12
11
|
return urlBuilder.setDomain(this.baseDomain).setPath(path).build(true);
|
|
13
12
|
}
|
|
14
|
-
buildWikimediaDesktopApiUrl() {
|
|
15
|
-
return urlBuilder
|
|
16
|
-
.setDomain(this.baseDomain)
|
|
17
|
-
.setPath(WIKIMEDIA_REST_API_PATH + 'page/html')
|
|
18
|
-
.build(true, '/');
|
|
19
|
-
}
|
|
20
|
-
buildWikimediaMobileApiUrl() {
|
|
21
|
-
return urlBuilder
|
|
22
|
-
.setDomain(this.baseDomain)
|
|
23
|
-
.setPath(WIKIMEDIA_REST_API_PATH + 'page/mobile-html')
|
|
24
|
-
.build(true, '/');
|
|
25
|
-
}
|
|
26
13
|
buildModuleURL(path) {
|
|
27
14
|
return urlBuilder
|
|
28
15
|
.setDomain(this.baseDomain)
|
|
29
16
|
.setPath(path ?? '/w/load.php')
|
|
30
17
|
.build(false, '?');
|
|
31
18
|
}
|
|
32
|
-
buildMobileModuleURL(path) {
|
|
33
|
-
return urlBuilder
|
|
34
|
-
.setDomain(this.baseDomain)
|
|
35
|
-
.setPath(path ?? '/api/rest_v1/page/mobile-html-offline-resources')
|
|
36
|
-
.build(false, '/');
|
|
37
|
-
}
|
|
38
|
-
buildRestApiUrl(path) {
|
|
39
|
-
return urlBuilder
|
|
40
|
-
.setDomain(this.baseDomain)
|
|
41
|
-
.setPath(path ?? '/w/rest.php')
|
|
42
|
-
.build(true, '/');
|
|
43
|
-
}
|
|
44
19
|
}
|
|
45
20
|
//# sourceMappingURL=base.director.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/base.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"base.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/base.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAC1B,UAAU,CAAQ;IAE1B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAC1G,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACxE,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC;aAC9B,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtB,CAAC;CACF"}
|
|
@@ -3,7 +3,7 @@ type DownloaderBaseUrlConditions = Array<{
|
|
|
3
3
|
value: string;
|
|
4
4
|
}>;
|
|
5
5
|
/**
|
|
6
|
-
* Build base URL for specific wiki. Example of the output: 'https://en.wikipedia.org' or 'https://de.wikivoyage.org
|
|
6
|
+
* Build base URL for specific wiki. Example of the output: 'https://en.wikipedia.org' or 'https://de.wikivoyage.org'
|
|
7
7
|
*/
|
|
8
8
|
declare class BasicURLDirector {
|
|
9
9
|
buildMediawikiBaseURL(domain: string): URL;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import urlBuilder from './url.builder.js';
|
|
2
2
|
/**
|
|
3
|
-
* Build base URL for specific wiki. Example of the output: 'https://en.wikipedia.org' or 'https://de.wikivoyage.org
|
|
3
|
+
* Build base URL for specific wiki. Example of the output: 'https://en.wikipedia.org' or 'https://de.wikivoyage.org'
|
|
4
4
|
*/
|
|
5
5
|
class BasicURLDirector {
|
|
6
6
|
buildMediawikiBaseURL(domain) {
|
|
@@ -7,10 +7,10 @@ export default class WebURLDirector {
|
|
|
7
7
|
constructor(baseDomain) {
|
|
8
8
|
this.baseDomain = baseDomain;
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
buildPageRawURL(pageTitle) {
|
|
11
11
|
return urlBuilder
|
|
12
12
|
.setDomain(this.baseDomain)
|
|
13
|
-
.setQueryParams({ title: encodeURIComponent(
|
|
13
|
+
.setQueryParams({ title: encodeURIComponent(pageTitle), action: 'raw' })
|
|
14
14
|
.build();
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/web.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"web.director.js","sourceRoot":"","sources":["../../../../src/util/builders/url/web.director.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,UAAU,CAAQ;IAElB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,OAAO,UAAU;aACd,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1B,cAAc,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;aACvE,KAAK,EAAE,CAAA;IACZ,CAAC;CACF"}
|
package/lib/util/categories.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
|
|
5
|
-
}>;
|
|
1
|
+
import { Dump } from '../Dump.js';
|
|
2
|
+
export declare function buildCategoryMemberList(type: 'subcats' | 'pages' | 'files', categoryMembers: Array<CategoryMember>, categoryinfo: CategoryInfo, pageDetail: PageDetail, doc: Document, dump: Dump, numericSorting: boolean, page: number, isLastPage: boolean, pagePath: string): HTMLElement;
|
|
3
|
+
export declare function buildCategoryTypeItems(type: 'subcats' | 'pages' | 'files', categoryinfo: CategoryInfo, categoryMembers: GroupedCategoryMembers, pagePath: ZimPath, pageDetail: PageDetail, doc: Document, dump: Dump, numericSorting: boolean, moduleDependencies: {
|
|
4
|
+
styleDependenciesList: string[];
|
|
5
|
+
}, pageTitle: PageTitle, categoryContent: HTMLElement, pageItems: Array<RenderSingleOutput>): Promise<void>;
|