Improve download script

This commit is contained in:
Luis Blanco 2022-09-28 22:37:31 +04:00
parent fc183b9793
commit a0a7f6153c
3 changed files with 41 additions and 11 deletions

View File

@ -9,16 +9,38 @@ const WritableBuffer = require('./writable-buffer');
const protocols = { http, https }; const protocols = { http, https };
module.exports = url => new Promise((res, rej) => { const download = async (url, count = 1) => {
url = url.toLowerCase(); url = url.toLowerCase();
const stream = new WritableBuffer(); const stream = new WritableBuffer();
const proto = protocols[url.match(/^https?/)[0]]; const proto = protocols[url.match(/^https?/)[0]];
proto.get(url, response => { const response = await new Promise((res, rej) => {
response.pipe(stream); const request = proto.get(url, response => res(response));
request.on('error', err => rej(err));
response.on('end', () => res(stream.get()));
response.on('error', err => rej(err));
}); });
});
// Handle redirects
if ([301, 302, 303, 307].includes(response.statusCode)) {
if (count < 5) {
return download(response.headers.location, count + 1);
}
console.log(url);
throw new Error('Error: Too many redirects.');
}
// Handle bad status
if (response.statusCode !== 200) {
console.log(url);
throw new Error(`Response status was ${response.statusCode}`);
}
response.pipe(stream);
return new Promise((res, rej) => {
response.on('error', err => rej(err));
response.on('end', () => res(stream.get()));
});
};
module.exports = url => download(url);

12
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "addon-tools-raub", "name": "addon-tools-raub",
"version": "6.0.0", "version": "6.0.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "addon-tools-raub", "name": "addon-tools-raub",
"version": "6.0.0", "version": "6.0.1",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"adm-zip": "^0.5.9", "adm-zip": "^0.5.9",
@ -24,6 +24,14 @@
"peerDependencies": { "peerDependencies": {
"adm-zip": "^0.5.9", "adm-zip": "^0.5.9",
"node-addon-api": "^5.0.0" "node-addon-api": "^5.0.0"
},
"peerDependenciesMeta": {
"adm-zip": {
"optional": true
},
"node-addon-api": {
"optional": true
}
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {

View File

@ -1,7 +1,7 @@
{ {
"author": "Luis Blanco <luisblanco1337@gmail.com>", "author": "Luis Blanco <luisblanco1337@gmail.com>",
"name": "addon-tools-raub", "name": "addon-tools-raub",
"version": "6.0.0", "version": "6.0.1",
"description": "Helpers for Node.js addons and dependency packages", "description": "Helpers for Node.js addons and dependency packages",
"license": "MIT", "license": "MIT",
"main": "index.js", "main": "index.js",