savant-cli
Version:
Savant Solutions API client
62 lines (55 loc) • 1.66 kB
JavaScript
;
var Client = require('../client')
, utils = require('../utils')
, async = require('async')
, path = require('path')
, fs = require('fs')
, mkdirp = require('mkdirp')
, colors = require('cli-color');
function done(err) {
if (err) {
console.error(err);
process.exit(1);
}
process.exit(0);
}
module.exports = exports = function(opts) {
var dir = process.cwd();
Client.getClient(function(err, cli) {
if (err) return done(err);
function _pull(tree, cb) {
if (tree.files) {
async.each(tree.files, _pull, cb);
} else {
var file = path.join(dir, 'site', tree.relPath)
, parent = path.dirname(file);
mkdirp(parent, function(err) {
if (err) return cb(err);
var request = cli.request('get', 'site/file/' + tree.relPath);
request({ encoding: null }, function(err, res, body) {
if (err) return cb(err);
if (res.statusCode != 200) {
// Report failure and skip
console.error('%s %s %s',
colors.red('✘'),
tree.relPath,
colors.blackBright(res.statusCode));
return cb();
}
fs.writeFile(file, body, function(err) {
if (err) return cb(err);
console.log('%s %s', colors.green('✔'), tree.relPath);
cb();
});
});
});
}
}
cli.get('/site', {}, function(err, res, body) {
if (err) return done(err);
if (res.statusCode != 200)
return done(new Error(body.error));
_pull(body, done);
});
});
};