@@ -1,7 +1,6 @@
1var fs = require('fs');
1var fs = require('fs');
2var package = require('./package.json');
2var package = require('./package.json');
3−var URL = require('url').URL;
3+var request = require('request');
4−var https = require('https');
5var zlib = require('zlib');
4var zlib = require('zlib');
@@ -28,67 +27,27 @@ module.exports = function(destinationPath, callback)
29function download(destinationPath, url, callback)
28function download(destinationPath, url, callback)
31− requestWithRedirects(url, 10,
30+ // set up handler for request failure
32− function(error) {
31+ function reportDownloadFailure(error)
33− exitFailure(url, 'I ran into trouble while fetching ' + url + '\n\n' + error);
32+ {
36− if (response.statusCode == 404)
38− exitFailure(url, 'I got a "404 Not Found" trying to download from the following URL:\n'
40− + '\n\nThis may mean you are trying to install on an unsupported platform. (e.g. some 32-bit systems?)'
44− response.on('error', function() {
45− exitFailure(url, 'Something went wrong while receiving the following URL:\n\n' + url);
33+ exitFailure(url,'Something went wrong while fetching the following URL:\n\n' + url + '\n\nIt is saying:\n\n' + error);
36+ // set up decompression pipe
48− var gunzip = zlib.createGunzip().on('error', function(error) {
37+ var gunzip = zlib.createGunzip().on('error', function(error) {
49− exitFailure(url, 'I ran into trouble decompressing the downloaded binary. It is saying:\n\n' + error);
38+ exitFailure(url, 'I ran into trouble decompressing the downloaded binary. It is saying:\n\n' + error);
51− var write = fs.createWriteStream(destinationPath, {
54− }).on('finish', callback).on('error', function(error) {
55− exitFailure(url, 'I had some trouble writing file to disk. It is saying:\n\n' + error);
58− response.pipe(gunzip).pipe(write);
68−function requestWithRedirects(url, maxRedirects, failure, success)
70− var req = https.request(url);
72− req.on('response', function(response) {
73− // Check for redirects
75− var redirectUrl = new URL(response.headers['location'], new URL(url).origin).href;
77− if (typeof redirectUrl === 'string' && response.statusCode >= 300 && response.statusCode < 400)
79− return (maxRedirects <= 0)
80− ? failure(new Error('followed 10 redirects and gave up'))
81− : requestWithRedirects(redirectUrl, maxRedirects - 1, failure, success);
85− return success(response);
89− req.on('error', failure);
41+ // set up file write pipe
42+ var write = fs.createWriteStream(destinationPath, {
45+ }).on('finish', callback).on('error', function(error) {
46+ exitFailure(url, 'I had some trouble writing file to disk. It is saying:\n\n' + error);
91− req.end();
49+ // put it all together
50+ request(url).on('error', reportDownloadFailure).pipe(gunzip).pipe(write);