Improve download script
This commit is contained in:
parent
fc183b9793
commit
a0a7f6153c
30
download.js
30
download.js
|
@ -9,16 +9,38 @@ const WritableBuffer = require('./writable-buffer');
|
|||
const protocols = { http, https };
|
||||
|
||||
|
||||
module.exports = url => new Promise((res, rej) => {
|
||||
const download = async (url, count = 1) => {
|
||||
url = url.toLowerCase();
|
||||
|
||||
const stream = new WritableBuffer();
|
||||
const proto = protocols[url.match(/^https?/)[0]];
|
||||
|
||||
proto.get(url, response => {
|
||||
const response = await new Promise((res, rej) => {
|
||||
const request = proto.get(url, response => res(response));
|
||||
request.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);
|
||||
|
||||
response.on('end', () => res(stream.get()));
|
||||
return new Promise((res, rej) => {
|
||||
response.on('error', err => rej(err));
|
||||
response.on('end', () => res(stream.get()));
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = url => download(url);
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "addon-tools-raub",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "addon-tools-raub",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"adm-zip": "^0.5.9",
|
||||
|
@ -24,6 +24,14 @@
|
|||
"peerDependencies": {
|
||||
"adm-zip": "^0.5.9",
|
||||
"node-addon-api": "^5.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"adm-zip": {
|
||||
"optional": true
|
||||
},
|
||||
"node-addon-api": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"author": "Luis Blanco <luisblanco1337@gmail.com>",
|
||||
"name": "addon-tools-raub",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"description": "Helpers for Node.js addons and dependency packages",
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
|
|
Loading…
Reference in New Issue