Improve download script
This commit is contained in:
parent
fc183b9793
commit
a0a7f6153c
38
download.js
38
download.js
|
@ -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);
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue