angular-ide
Version:
Provides a seamless integration with the Angular IDE from the command-line for developers looking for an enhanced development experience with Angular.
87 lines (62 loc) • 1.86 kB
JavaScript
const fs = require('fs');
const path = require('path');
const Rx = require('rxjs');
const ProgressBar = require('./progress-bar');
const chalk = require('chalk');
const url = require('url');
const { DownloaderHelper } = require('node-downloader-helper');
const IDE_COMPRESSED_FILE = 'angular_ide';
function urlBuilder(osType, arch) {
const ideURLBase = 'https://www.genuitec.com/products/webclipse/download/angularide';
const downloadURL = url.parse(ideURLBase);
let osArch = null;
switch (osType) {
case 'Linux':
if (arch === 'x64') {
osArch = 'linux.gtk.x86_64';
} else {
osArch = 'linux.gtk.x86';
}
break;
case 'Darwin':
osArch = 'macosx.cocoa.x86_64';
break;
case 'Windows_NT':
if (arch === 'x64') {
osArch = 'win32.win32.x86_64';
} else {
osArch = 'win32.win32.x86';
}
break;
default:
}
downloadURL.query = { os: osArch };
return url.format(downloadURL);
}
module.exports = function (osType, arch) {
const SIMULTANEOUS_DOWNLOADS = 3;
const fStat = Rx.Observable.bindNodeCallback(fs.stat);
const downloadOptions = {
url: urlBuilder(osType, arch),
path: path.resolve(IDE_COMPRESSED_FILE),
range: SIMULTANEOUS_DOWNLOADS,
};
return Rx.Observable.create((obs) => {
const bar = new ProgressBar('Downloading...:bar :completed%');
const dl = new DownloaderHelper(downloadOptions.url, process.cwd(), {
fileName: IDE_COMPRESSED_FILE,
override: true,
});
dl.on('download', () => bar.update(0, 100));
dl.on('error', (e) => console.log(e));
dl.on('progress', (stats) => {
bar.update(stats.progress, 100);
});
dl.on('end', () => {
bar.complete();
obs.next(downloadOptions.path);
obs.complete();
});
dl.resume();
});
};