This repository has been archived by the owner on Apr 6, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
cloudappx.js
executable file
·121 lines (109 loc) · 2.78 KB
/
cloudappx.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#! /usr/bin/env node
var program = require('commander');
var archiver = require('archiver');
var fs = require('fs');
var request = require('request');
var path = require('path');
var Q = require('q');
var domain = process.env.CLOUDAPPX_SERVER || 'https://90f18825.ngrok.io';
function debugmsg(msg) {
if (program && program.verbose) {
console.log(msg);
}
}
function isValidFile (dir) {
if (!fs.existsSync(dir) || !fs.lstatSync(dir).isFile() || path.extname(dir) !== '.zip') {
return false;
}
return true;
}
function isValidDir(dir) {
if (!fs.existsSync(dir) || !fs.lstatSync(dir).isDirectory()) {
return false;
}
return true;
}
function main() {
program
.version('0.0.1')
.usage('<input app directory>')
.option('-z, --zipped', 'Run on zipped file')
.option('-v, --verbose', 'Print debug info')
.parse(process.argv);
if (!program.args.length) {
program.help();
} else {
var dir = program.args[0];
cloudappx(dir);
}
}
function cloudappx(dir) {
return zip(dir).then(uploadFile).then(getResult);
}
function zip(dir) {
var deferred = Q.defer();
if (isValidDir(dir)) {
var outfile = dir + '.zip';
var output = fs.createWriteStream(outfile);
var archive = archiver('zip');
output.on('close', function() {
debugmsg(archive.pointer() + ' total byes');
debugmsg('archiver has been finalized and the output file descriptor has closed.');
deferred.resolve(outfile);
});
archive.on('error', function(err) {
deferred.reject(err);
throw err;
});
archive.pipe(output);
archive.directory(dir, path.basename(dir));
archive.finalize();
} else if (isValidFile(dir)) {
debugmsg(dir);
deferred.resolve(dir);
} else {
debugmsg('invalid input');
deferred.reject();
}
return deferred.promise;
}
function uploadFile(file) {
var deferred = Q.defer();
debugmsg('uploading file');
var req = request.post(domain + '/v1/upload', function (err, resp, body) {
if (err) {
debugmsg('Error!');
} else {
debugmsg('URL: ' + body);
deferred.resolve({url: body, file: file});
}
});
var form = req.form();
form.append('xml', fs.createReadStream(file));
return deferred.promise;
}
function getResult(dirs) {
var url = dirs.url;
var file = dirs.file;
var tempsplit = file.split('.');
tempsplit.pop();
var filename = tempsplit.join('.') + '.appx';
var deferred = Q.defer();
var req = request.get(domain + '/' + url)
.on('response', function(res) {
//var filename = 'package.appx';
res.pipe(fs.createWriteStream(filename));
deferred.resolve();
});
return deferred.promise;
}
if (!module.parent) {
main();
} else {
module.exports = {
uploadFile: uploadFile,
getResult: getResult,
cloudappx: cloudappx,
zip: zip
};
}