'use strict'; const https = require('https'); const http = require('http'); const unzipper = require('unzipper'); const { bin, platform } = require('.'); const protocols = { http, https }; const onError = msg => { console.error(msg); process.exit(-1); }; const install = (url, count = 1) => { const proto = protocols[url.match(/^https?/)[0]]; const request = proto.get(url, response => { // Handle redirects if ([301, 302, 303, 307].includes(response.statusCode)) { if (count < 5) { return install(response.headers.location, count + 1); } console.log(url); return onError('Error: Too many redirects.'); } // Handle bad status if (response.statusCode !== 200) { console.log(url); return onError(`Response status was ${response.statusCode}`); } response.on('error', err => onError(err.message)); const extractor = unzipper.Extract({ path: bin }); extractor.on('error', err => onError(err.message)); response.pipe(extractor); }); request.on('error', err => onError(err.message)); }; module.exports = folder => { const url = `${folder}/${platform}.zip`; install(url); };