Standard coding style.
This commit is contained in:
parent
a2f5f1cb0e
commit
b1ee4bdc09
@ -1,54 +1,54 @@
|
||||
'use strict';
|
||||
'use strict'
|
||||
|
||||
//====================================================================
|
||||
// ===================================================================
|
||||
|
||||
var promisify = require('bluebird').promisify;
|
||||
var promisify = require('bluebird').promisify
|
||||
|
||||
var readFile = promisify(require('fs').readFile);
|
||||
var writeFile = promisify(require('fs').writeFile);
|
||||
var readFile = promisify(require('fs').readFile)
|
||||
var writeFile = promisify(require('fs').writeFile)
|
||||
|
||||
var assign = require('lodash.assign');
|
||||
var l33t = require('l33teral');
|
||||
var mkdirp = promisify(require('mkdirp'));
|
||||
var xdgBasedir = require('xdg-basedir');
|
||||
var assign = require('lodash.assign')
|
||||
var l33t = require('l33teral')
|
||||
var mkdirp = promisify(require('mkdirp'))
|
||||
var xdgBasedir = require('xdg-basedir')
|
||||
|
||||
//====================================================================
|
||||
// ===================================================================
|
||||
|
||||
var configPath = xdgBasedir.config +'/xo-cli';
|
||||
var configFile = configPath +'/config.json';
|
||||
var configPath = xdgBasedir.config + '/xo-cli'
|
||||
var configFile = configPath + '/config.json'
|
||||
|
||||
//====================================================================
|
||||
// ===================================================================
|
||||
|
||||
var load = exports.load = function () {
|
||||
return readFile(configFile).then(JSON.parse).catch(function () {
|
||||
return {};
|
||||
});
|
||||
};
|
||||
return {}
|
||||
})
|
||||
}
|
||||
|
||||
exports.get = function (path) {
|
||||
return load().then(function (config) {
|
||||
return l33t(config).tap(path);
|
||||
});
|
||||
};
|
||||
return l33t(config).tap(path)
|
||||
})
|
||||
}
|
||||
|
||||
var save = exports.save = function (config) {
|
||||
return mkdirp(configPath).then(function () {
|
||||
return writeFile(configFile, JSON.stringify(config));
|
||||
});
|
||||
};
|
||||
return writeFile(configFile, JSON.stringify(config))
|
||||
})
|
||||
}
|
||||
|
||||
exports.set = function (data) {
|
||||
return load().then(function (config) {
|
||||
return save(assign(config, data));
|
||||
});
|
||||
};
|
||||
return save(assign(config, data))
|
||||
})
|
||||
}
|
||||
|
||||
exports.unset = function (paths) {
|
||||
return load().then(function (config) {
|
||||
var l33tConfig = l33t(config);
|
||||
[].concat(paths).forEach(function (path) {
|
||||
l33tConfig.purge(path, true);
|
||||
});
|
||||
return save(config);
|
||||
});
|
||||
};
|
||||
var l33tConfig = l33t(config)
|
||||
;[].concat(paths).forEach(function (path) {
|
||||
l33tConfig.purge(path, true)
|
||||
})
|
||||
return save(config)
|
||||
})
|
||||
}
|
||||
|
@ -1,114 +1,109 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict';
|
||||
'use strict'
|
||||
|
||||
//====================================================================
|
||||
var Bluebird = require('bluebird')
|
||||
Bluebird.longStackTraces()
|
||||
var promisify = Bluebird.promisify
|
||||
|
||||
var Bluebird = require('bluebird');
|
||||
Bluebird.longStackTraces();
|
||||
var promisify = Bluebird.promisify;
|
||||
var createReadStream = require('fs').createReadStream
|
||||
var createWriteStream = require('fs').createWriteStream
|
||||
var resolveUrl = require('url').resolve
|
||||
var stat = promisify(require('fs').stat)
|
||||
|
||||
var createReadStream = require('fs').createReadStream;
|
||||
var createWriteStream = require('fs').createWriteStream;
|
||||
var resolveUrl = require('url').resolve;
|
||||
var stat = promisify(require('fs').stat);
|
||||
var chalk = require('chalk')
|
||||
var eventToPromise = require('event-to-promise')
|
||||
var filter = require('lodash.filter')
|
||||
var forEach = require('lodash.foreach')
|
||||
var getKeys = require('lodash.keys')
|
||||
var got = require('got')
|
||||
var humanFormat = require('human-format')
|
||||
var isObject = require('lodash.isobject')
|
||||
var multiline = require('multiline')
|
||||
var nicePipe = require('nice-pipe')
|
||||
var pairs = require('lodash.pairs')
|
||||
var prettyMs = require('pretty-ms')
|
||||
var progressStream = require('progress-stream')
|
||||
var sent = promisify(require('sent'))
|
||||
var Xo = require('xo-lib')
|
||||
|
||||
var chalk = require('chalk');
|
||||
var eventToPromise = require('event-to-promise');
|
||||
var filter = require('lodash.filter');
|
||||
var forEach = require('lodash.foreach');
|
||||
var getKeys = require('lodash.keys');
|
||||
var got = require('got');
|
||||
var humanFormat = require('human-format');
|
||||
var isObject = require('lodash.isobject');
|
||||
var multiline = require('multiline');
|
||||
var nicePipe = require('nice-pipe');
|
||||
var pairs = require('lodash.pairs');
|
||||
var prettyMs = require('pretty-ms');
|
||||
var progressStream = require('progress-stream');
|
||||
var sent = promisify(require('sent'));
|
||||
var Xo = require('xo-lib');
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
var config = require('./config')
|
||||
|
||||
var config = require('./config');
|
||||
// ===================================================================
|
||||
|
||||
//====================================================================
|
||||
|
||||
function connect() {
|
||||
function connect () {
|
||||
return config.load().bind({}).then(function (config) {
|
||||
if (!config.server)
|
||||
{
|
||||
throw 'no server to connect to!';
|
||||
if (!config.server) {
|
||||
throw new Error('no server to connect to!')
|
||||
}
|
||||
|
||||
if (!config.token)
|
||||
{
|
||||
throw 'no token available';
|
||||
if (!config.token) {
|
||||
throw new Error('no token available')
|
||||
}
|
||||
|
||||
var xo = new Xo(config.server);
|
||||
var xo = new Xo(config.server)
|
||||
|
||||
return xo.call('session.signInWithToken', {
|
||||
token: config.token,
|
||||
}).return(xo);
|
||||
});
|
||||
token: config.token
|
||||
}).return(xo)
|
||||
})
|
||||
}
|
||||
|
||||
function parseParameters (args) {
|
||||
var params = {};
|
||||
var params = {}
|
||||
forEach(args, function (arg) {
|
||||
var matches;
|
||||
var matches
|
||||
if (!(matches = arg.match(PARAM_RE))) {
|
||||
throw 'invalid arg: '+arg;
|
||||
throw new Error('invalid arg: ' + arg)
|
||||
}
|
||||
var name = matches[1];
|
||||
var value = matches[2];
|
||||
var name = matches[1]
|
||||
var value = matches[2]
|
||||
|
||||
if (name === '@') {
|
||||
params['@'] = value;
|
||||
return;
|
||||
params['@'] = value
|
||||
return
|
||||
}
|
||||
|
||||
if (value === 'true') {
|
||||
value = true;
|
||||
}
|
||||
else if (value === 'false') {
|
||||
value = false;
|
||||
value = true
|
||||
} else if (value === 'false') {
|
||||
value = false
|
||||
}
|
||||
|
||||
params[name] = value;
|
||||
});
|
||||
params[name] = value
|
||||
})
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
function printProgress(progress) {
|
||||
function printProgress (progress) {
|
||||
if (progress.length) {
|
||||
console.warn('%s% of %s @ %s/s - ETA %s',
|
||||
Math.round(progress.percentage),
|
||||
humanFormat(progress.length),
|
||||
humanFormat(progress.speed),
|
||||
prettyMs(progress.eta * 1e3)
|
||||
);
|
||||
)
|
||||
} else {
|
||||
console.warn('%s @ %s/s',
|
||||
humanFormat(progress.transferred),
|
||||
humanFormat(progress.speed)
|
||||
);
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function wrap(val) {
|
||||
return function wrappedValue() {
|
||||
return val;
|
||||
};
|
||||
function wrap (val) {
|
||||
return function wrappedValue () {
|
||||
return val
|
||||
}
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
// ===================================================================
|
||||
|
||||
var help = wrap((function (pkg) {
|
||||
return multiline.stripIndent(function () {/*
|
||||
return multiline.stripIndent(function () { /*
|
||||
Usage:
|
||||
|
||||
$name --register [<XO-Server URL>] [<username>] [<password>]
|
||||
@ -126,124 +121,122 @@ var help = wrap((function (pkg) {
|
||||
$name v$version
|
||||
*/}).replace(/<([^>]+)>|\$(\w+)/g, function (_, arg, key) {
|
||||
if (arg) {
|
||||
return '<'+ chalk.yellow(arg) +'>';
|
||||
return '<' + chalk.yellow(arg) + '>'
|
||||
}
|
||||
|
||||
if ('name' === key) {
|
||||
return chalk.bold(pkg[key]);
|
||||
if (key === 'name') {
|
||||
return chalk.bold(pkg[key])
|
||||
}
|
||||
|
||||
return pkg[key];
|
||||
});
|
||||
})(require('./package')));
|
||||
return pkg[key]
|
||||
})
|
||||
})(require('./package')))
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
function main(args) {
|
||||
if (!args || !args.length || '-h' === args[0]) {
|
||||
return help();
|
||||
function main (args) {
|
||||
if (!args || !args.length || args[0] === '-h') {
|
||||
return help()
|
||||
}
|
||||
|
||||
var fnName = args[0].replace(/^--|-\w/g, function (match) {
|
||||
if (match === '--')
|
||||
{
|
||||
return '';
|
||||
if (match === '--') {
|
||||
return ''
|
||||
}
|
||||
|
||||
return match[1].toUpperCase();
|
||||
});
|
||||
return match[1].toUpperCase()
|
||||
})
|
||||
if (fnName in exports) {
|
||||
return exports[fnName](args.slice(1));
|
||||
return exports[fnName](args.slice(1))
|
||||
}
|
||||
|
||||
return exports.call(args);
|
||||
return exports.call(args)
|
||||
}
|
||||
exports = module.exports = main;
|
||||
exports = module.exports = main
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
exports.help = help;
|
||||
exports.help = help
|
||||
|
||||
function register(args) {
|
||||
var xo;
|
||||
function register (args) {
|
||||
var xo
|
||||
return Bluebird.try(function () {
|
||||
xo = new Xo(args[0]);
|
||||
xo = new Xo(args[0])
|
||||
|
||||
return xo.call('session.signInWithPassword', {
|
||||
email: args[1],
|
||||
password: args[2],
|
||||
});
|
||||
password: args[2]
|
||||
})
|
||||
}).then(function (user) {
|
||||
console.log('Successfully logged with', user.email);
|
||||
console.log('Successfully logged with', user.email)
|
||||
|
||||
return xo.call('token.create');
|
||||
return xo.call('token.create')
|
||||
}).then(function (token) {
|
||||
return config.set({
|
||||
server: xo._url,
|
||||
token: token,
|
||||
});
|
||||
});
|
||||
token: token
|
||||
})
|
||||
})
|
||||
}
|
||||
exports.register = register;
|
||||
exports.register = register
|
||||
|
||||
function unregister() {
|
||||
function unregister () {
|
||||
return config.unset([
|
||||
'server',
|
||||
'token',
|
||||
]);
|
||||
'token'
|
||||
])
|
||||
}
|
||||
exports.unregister = unregister;
|
||||
exports.unregister = unregister
|
||||
|
||||
function listCommands(args) {
|
||||
return connect().then(function getMethodsInfo(xo) {
|
||||
return xo.call('system.getMethodsInfo');
|
||||
}).then(function formatMethodsInfo(methods) {
|
||||
if (args.indexOf('--json') !== -1)
|
||||
{
|
||||
return methods;
|
||||
function listCommands (args) {
|
||||
return connect().then(function getMethodsInfo (xo) {
|
||||
return xo.call('system.getMethodsInfo')
|
||||
}).then(function formatMethodsInfo (methods) {
|
||||
if (args.indexOf('--json') !== -1) {
|
||||
return methods
|
||||
}
|
||||
|
||||
methods = pairs(methods);
|
||||
methods = pairs(methods)
|
||||
methods.sort(function (a, b) {
|
||||
a = a[0];
|
||||
b = b[0];
|
||||
a = a[0]
|
||||
b = b[0]
|
||||
if (a < b) {
|
||||
return -1;
|
||||
return -1
|
||||
}
|
||||
return +(a > b);
|
||||
});
|
||||
return +(a > b)
|
||||
})
|
||||
|
||||
var str = [];
|
||||
var str = []
|
||||
forEach(methods, function (method) {
|
||||
var name = method[0];
|
||||
var info = method[1];
|
||||
str.push(chalk.bold.blue(name));
|
||||
var name = method[0]
|
||||
var info = method[1]
|
||||
str.push(chalk.bold.blue(name))
|
||||
forEach(info.params || [], function (info, name) {
|
||||
str.push(' ');
|
||||
str.push(' ')
|
||||
if (info.optional) {
|
||||
str.push('[');
|
||||
str.push('[')
|
||||
}
|
||||
str.push(name, '=<', info.type || 'unknown', '>');
|
||||
str.push(name, '=<', info.type || 'unknown', '>')
|
||||
if (info.optional) {
|
||||
str.push(']');
|
||||
str.push(']')
|
||||
}
|
||||
});
|
||||
str.push('\n');
|
||||
})
|
||||
str.push('\n')
|
||||
if (info.description) {
|
||||
str.push(' ', info.description, '\n');
|
||||
str.push(' ', info.description, '\n')
|
||||
}
|
||||
});
|
||||
return str.join('');
|
||||
});
|
||||
})
|
||||
return str.join('')
|
||||
})
|
||||
}
|
||||
exports.listCommands = listCommands;
|
||||
exports.listCommands = listCommands
|
||||
|
||||
function listObjects(args) {
|
||||
function listObjects (args) {
|
||||
var sieve = args.length
|
||||
? parseParameters(args)
|
||||
: null
|
||||
|
||||
return connect().then(function getXoObjects(xo) {
|
||||
return connect().then(function getXoObjects (xo) {
|
||||
return xo.call('xo.getAllObjects')
|
||||
}).then(function filterObjects (objects) {
|
||||
return filter(objects, sieve)
|
||||
@ -251,72 +244,72 @@ function listObjects(args) {
|
||||
}
|
||||
exports.listObjects = listObjects
|
||||
|
||||
var PARAM_RE = /^([^=]+)=(.*)$/;
|
||||
function call(args) {
|
||||
var PARAM_RE = /^([^=]+)=(.*)$/
|
||||
function call (args) {
|
||||
if (!args.length) {
|
||||
throw 'missing command name';
|
||||
throw new Error('missing command name')
|
||||
}
|
||||
|
||||
var method = args.shift();
|
||||
var params = parseParameters(args);
|
||||
var method = args.shift()
|
||||
var params = parseParameters(args)
|
||||
|
||||
var file = params['@'];
|
||||
delete params['@'];
|
||||
var file = params['@']
|
||||
delete params['@']
|
||||
|
||||
var baseUrl;
|
||||
var baseUrl
|
||||
return connect().then(function (xo) {
|
||||
baseUrl = xo._url;
|
||||
return xo.call(method, params);
|
||||
}).then(function handleResult(result) {
|
||||
var keys, key, url;
|
||||
if ((
|
||||
baseUrl = xo._url
|
||||
return xo.call(method, params)
|
||||
}).then(function handleResult (result) {
|
||||
var keys, key, url
|
||||
if (
|
||||
isObject(result) &&
|
||||
(keys = getKeys(result)).length === 1
|
||||
)) {
|
||||
key = keys[0];
|
||||
) {
|
||||
key = keys[0]
|
||||
|
||||
if (key === '$getFrom') {
|
||||
url = resolveUrl(baseUrl, result[key]);
|
||||
var output = createWriteStream(file);
|
||||
url = resolveUrl(baseUrl, result[key])
|
||||
var output = createWriteStream(file)
|
||||
|
||||
return eventToPromise(nicePipe([
|
||||
got(url),
|
||||
progressStream({ time: 1e3 }, printProgress),
|
||||
output,
|
||||
]), 'finish');
|
||||
output
|
||||
]), 'finish')
|
||||
}
|
||||
|
||||
if (key === '$sendTo') {
|
||||
url = resolveUrl(baseUrl, result[key]);
|
||||
url = resolveUrl(baseUrl, result[key])
|
||||
|
||||
return stat(file).then(function (stats) {
|
||||
var length = stats.size;
|
||||
var length = stats.size
|
||||
|
||||
var input = nicePipe([
|
||||
createReadStream(file),
|
||||
progressStream({
|
||||
length: length,
|
||||
time: 1e3,
|
||||
}, printProgress),
|
||||
]);
|
||||
time: 1e3
|
||||
}, printProgress)
|
||||
])
|
||||
|
||||
return sent(url, input, {
|
||||
headers: {
|
||||
'content-length': length,
|
||||
'content-length': length
|
||||
},
|
||||
method: 'POST'
|
||||
}).get(0);
|
||||
});
|
||||
}).get(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
});
|
||||
return result
|
||||
})
|
||||
}
|
||||
exports.call = call;
|
||||
exports.call = call
|
||||
|
||||
//====================================================================
|
||||
// ===================================================================
|
||||
|
||||
if (!module.parent) {
|
||||
require('exec-promise')(exports);
|
||||
require('exec-promise')(exports)
|
||||
}
|
||||
|
@ -45,5 +45,12 @@
|
||||
"sent": "^1.1.0",
|
||||
"xdg-basedir": "^1.0.0",
|
||||
"xo-lib": "^0.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"standard": "^5.3.1"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "standard",
|
||||
"posttest": "npm run lint"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user