-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathpackages.js
72 lines (57 loc) · 2.08 KB
/
packages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';
var http = require('http'),
https = require('https'),
nodeUrl = require('url'),
fs = require('fs');
// clear packages folder
deleteFolderRecursiveSync('packages');
// create packages folder
fs.mkdirSync('packages');
module.exports.downloadPackages = downloadPackages;
module.exports.downloadFile = downloadFile;
module.exports.deleteFolderRecursiveSync = deleteFolderRecursiveSync;
function downloadPackages(packages, cb, i){
i = i || 0;
var baseUrl = 'https://packages.nodee.io/' +(packages.accessKey ? packages.accessKey+'/' : '')+ 'latest/';
var fileStream = fs.createWriteStream('packages/' + packages[i] + '.package');
var url = baseUrl + packages[i] + '.package';
downloadFile(url, fileStream, function(err){
if(err) throw err;
var fileStream = fs.createWriteStream('packages/' + packages[i] + '.package.json');
var url = baseUrl + packages[i] + '.package.json';
downloadFile(url, fileStream, function(err){
if(err) throw err;
i++;
if(i < packages.length) downloadPackages(packages, cb, i);
else cb();
});
});
}
function downloadFile(url, fileStream, cb){ // cb(err)
var agent = http;
if(url.substring(0,5)==='https') agent = https;
var requestOpts = nodeUrl.parse(url);
// fake browser headers
requestOpts.headers = {};
agent.get(requestOpts, function(res){
if([301,302].indexOf(res.statusCode) > -1 && res.headers.location){
// follow redirect
return downloadFile(res.headers.location, fileStream, cb);
}
res.pipe(fileStream);
res.on('end', cb);
});
}
function deleteFolderRecursiveSync(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file, index){
var curPath = path + "/" + file;
if(fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursiveSync(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
}