UNPKG

2.49 kBJavaScriptView Raw
1var fs = require('fs-extra');
2var path = require('path');
3var extract = require('extract-zip');
4var inquirer = require('inquirer');
5var shell = require('shelljs');
6var Login = require('../util/login');
7var Domo = require('ryuu-client-beta');
8var log = require('../util/log');
9var evoke = require('../util/evoke');
10var constants = require('../util/constants');
11
12module.exports = function(program){
13 program
14 .command('download')
15 .description('download a Custom App design')
16 .option('-i, --design-id <id>', 'design id')
17 .option('-d, --design-version <design-version>', 'design version')
18 .action(function(args){
19 var login = Login.getMostRecentLogin();
20 Login.verifyLogin(login);
21
22 var domo = new Domo(login.instance, login.refreshToken, constants.CLIENT_ID);
23
24 var prompts = [];
25
26 if (!args.designId) {
27 prompts.push({
28 type: 'input',
29 message: 'design id',
30 name: 'designId'
31 });
32 }
33
34 if (!args.designVersion) {
35 prompts.push({
36 type: 'input',
37 message: 'version',
38 name: 'version',
39 default: 'latest'
40 });
41 }
42 inquirer.prompt(prompts, function(answers){
43 answers.designId = args.designId || answers.designId;
44 answers.version = args.designVersion || answers.version;
45
46 domo.download(answers.designId, answers.version).then(function(req) {
47 req.on('response', function(response){
48 if (response.statusCode === 200) {
49 var regexp = /filename="(.*)"/;
50 var name = response.headers['content-disposition'].match(regexp)[1] || 'domoapp';
51 } else {
52 log.fail('Design not found. Make sure you have the correct design id.');
53 }
54
55 var writeStream = fs.createWriteStream('./'+name+'.zip', {flags: 'w+', mode: 0o666});
56 req.pipe(writeStream);
57
58 writeStream.on('finish', function(){
59 var source = path.resolve('./'+name+'.zip');
60 var target = path.resolve('./'+name);
61
62 extract(source, {dir: target}, function(err, results) {
63 if (!err){
64 shell.chmod('-R', 'u+w', target);
65 fs.remove(source);
66 process.exit();
67 }
68 });
69 });
70 });
71 })
72 .catch(evoke(log.clientRequestFailed, 'Unable to download design ' + answers.designId));
73 });
74
75 });
76}