Standard coding style.

This commit is contained in:
Julien Fontanet 2015-10-27 12:27:57 +01:00
parent a2f5f1cb0e
commit b1ee4bdc09
3 changed files with 190 additions and 190 deletions

View File

@ -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 readFile = promisify(require('fs').readFile)
var writeFile = promisify(require('fs').writeFile); var writeFile = promisify(require('fs').writeFile)
var assign = require('lodash.assign'); var assign = require('lodash.assign')
var l33t = require('l33teral'); var l33t = require('l33teral')
var mkdirp = promisify(require('mkdirp')); var mkdirp = promisify(require('mkdirp'))
var xdgBasedir = require('xdg-basedir'); var xdgBasedir = require('xdg-basedir')
//==================================================================== // ===================================================================
var configPath = xdgBasedir.config +'/xo-cli'; var configPath = xdgBasedir.config + '/xo-cli'
var configFile = configPath +'/config.json'; var configFile = configPath + '/config.json'
//==================================================================== // ===================================================================
var load = exports.load = function () { var load = exports.load = function () {
return readFile(configFile).then(JSON.parse).catch(function () { return readFile(configFile).then(JSON.parse).catch(function () {
return {}; return {}
}); })
}; }
exports.get = function (path) { exports.get = function (path) {
return load().then(function (config) { return load().then(function (config) {
return l33t(config).tap(path); return l33t(config).tap(path)
}); })
}; }
var save = exports.save = function (config) { var save = exports.save = function (config) {
return mkdirp(configPath).then(function () { return mkdirp(configPath).then(function () {
return writeFile(configFile, JSON.stringify(config)); return writeFile(configFile, JSON.stringify(config))
}); })
}; }
exports.set = function (data) { exports.set = function (data) {
return load().then(function (config) { return load().then(function (config) {
return save(assign(config, data)); return save(assign(config, data))
}); })
}; }
exports.unset = function (paths) { exports.unset = function (paths) {
return load().then(function (config) { return load().then(function (config) {
var l33tConfig = l33t(config); var l33tConfig = l33t(config)
[].concat(paths).forEach(function (path) { ;[].concat(paths).forEach(function (path) {
l33tConfig.purge(path, true); l33tConfig.purge(path, true)
}); })
return save(config); return save(config)
}); })
}; }

View File

@ -1,114 +1,109 @@
#!/usr/bin/env node #!/usr/bin/env node
'use strict'; 'use strict'
//==================================================================== var Bluebird = require('bluebird')
Bluebird.longStackTraces()
var promisify = Bluebird.promisify
var Bluebird = require('bluebird'); var createReadStream = require('fs').createReadStream
Bluebird.longStackTraces(); var createWriteStream = require('fs').createWriteStream
var promisify = Bluebird.promisify; var resolveUrl = require('url').resolve
var stat = promisify(require('fs').stat)
var createReadStream = require('fs').createReadStream; var chalk = require('chalk')
var createWriteStream = require('fs').createWriteStream; var eventToPromise = require('event-to-promise')
var resolveUrl = require('url').resolve; var filter = require('lodash.filter')
var stat = promisify(require('fs').stat); 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) { return config.load().bind({}).then(function (config) {
if (!config.server) if (!config.server) {
{ throw new Error('no server to connect to!')
throw 'no server to connect to!';
} }
if (!config.token) if (!config.token) {
{ throw new Error('no token available')
throw 'no token available';
} }
var xo = new Xo(config.server); var xo = new Xo(config.server)
return xo.call('session.signInWithToken', { return xo.call('session.signInWithToken', {
token: config.token, token: config.token
}).return(xo); }).return(xo)
}); })
} }
function parseParameters (args) { function parseParameters (args) {
var params = {}; var params = {}
forEach(args, function (arg) { forEach(args, function (arg) {
var matches; var matches
if (!(matches = arg.match(PARAM_RE))) { if (!(matches = arg.match(PARAM_RE))) {
throw 'invalid arg: '+arg; throw new Error('invalid arg: ' + arg)
} }
var name = matches[1]; var name = matches[1]
var value = matches[2]; var value = matches[2]
if (name === '@') { if (name === '@') {
params['@'] = value; params['@'] = value
return; return
} }
if (value === 'true') { if (value === 'true') {
value = true; value = true
} } else if (value === 'false') {
else if (value === 'false') { value = false
value = false;
} }
params[name] = value; params[name] = value
}); })
return params return params
} }
function printProgress(progress) { function printProgress (progress) {
if (progress.length) { if (progress.length) {
console.warn('%s% of %s @ %s/s - ETA %s', console.warn('%s% of %s @ %s/s - ETA %s',
Math.round(progress.percentage), Math.round(progress.percentage),
humanFormat(progress.length), humanFormat(progress.length),
humanFormat(progress.speed), humanFormat(progress.speed),
prettyMs(progress.eta * 1e3) prettyMs(progress.eta * 1e3)
); )
} else { } else {
console.warn('%s @ %s/s', console.warn('%s @ %s/s',
humanFormat(progress.transferred), humanFormat(progress.transferred),
humanFormat(progress.speed) humanFormat(progress.speed)
); )
} }
} }
function wrap(val) { function wrap (val) {
return function wrappedValue() { return function wrappedValue () {
return val; return val
}; }
} }
//==================================================================== // ===================================================================
var help = wrap((function (pkg) { var help = wrap((function (pkg) {
return multiline.stripIndent(function () {/* return multiline.stripIndent(function () { /*
Usage: Usage:
$name --register [<XO-Server URL>] [<username>] [<password>] $name --register [<XO-Server URL>] [<username>] [<password>]
@ -126,124 +121,122 @@ var help = wrap((function (pkg) {
$name v$version $name v$version
*/}).replace(/<([^>]+)>|\$(\w+)/g, function (_, arg, key) { */}).replace(/<([^>]+)>|\$(\w+)/g, function (_, arg, key) {
if (arg) { if (arg) {
return '<'+ chalk.yellow(arg) +'>'; return '<' + chalk.yellow(arg) + '>'
} }
if ('name' === key) { if (key === 'name') {
return chalk.bold(pkg[key]); return chalk.bold(pkg[key])
} }
return pkg[key]; return pkg[key]
}); })
})(require('./package'))); })(require('./package')))
//-------------------------------------------------------------------- // -------------------------------------------------------------------
function main(args) { function main (args) {
if (!args || !args.length || '-h' === args[0]) { if (!args || !args.length || args[0] === '-h') {
return help(); return help()
} }
var fnName = args[0].replace(/^--|-\w/g, function (match) { var fnName = args[0].replace(/^--|-\w/g, function (match) {
if (match === '--') if (match === '--') {
{ return ''
return '';
} }
return match[1].toUpperCase(); return match[1].toUpperCase()
}); })
if (fnName in exports) { 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) { function register (args) {
var xo; var xo
return Bluebird.try(function () { return Bluebird.try(function () {
xo = new Xo(args[0]); xo = new Xo(args[0])
return xo.call('session.signInWithPassword', { return xo.call('session.signInWithPassword', {
email: args[1], email: args[1],
password: args[2], password: args[2]
}); })
}).then(function (user) { }).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) { }).then(function (token) {
return config.set({ return config.set({
server: xo._url, server: xo._url,
token: token, token: token
}); })
}); })
} }
exports.register = register; exports.register = register
function unregister() { function unregister () {
return config.unset([ return config.unset([
'server', 'server',
'token', 'token'
]); ])
} }
exports.unregister = unregister; exports.unregister = unregister
function listCommands(args) { function listCommands (args) {
return connect().then(function getMethodsInfo(xo) { return connect().then(function getMethodsInfo (xo) {
return xo.call('system.getMethodsInfo'); return xo.call('system.getMethodsInfo')
}).then(function formatMethodsInfo(methods) { }).then(function formatMethodsInfo (methods) {
if (args.indexOf('--json') !== -1) if (args.indexOf('--json') !== -1) {
{ return methods
return methods;
} }
methods = pairs(methods); methods = pairs(methods)
methods.sort(function (a, b) { methods.sort(function (a, b) {
a = a[0]; a = a[0]
b = b[0]; b = b[0]
if (a < b) { if (a < b) {
return -1; return -1
} }
return +(a > b); return +(a > b)
}); })
var str = []; var str = []
forEach(methods, function (method) { forEach(methods, function (method) {
var name = method[0]; var name = method[0]
var info = method[1]; var info = method[1]
str.push(chalk.bold.blue(name)); str.push(chalk.bold.blue(name))
forEach(info.params || [], function (info, name) { forEach(info.params || [], function (info, name) {
str.push(' '); str.push(' ')
if (info.optional) { if (info.optional) {
str.push('['); str.push('[')
} }
str.push(name, '=<', info.type || 'unknown', '>'); str.push(name, '=<', info.type || 'unknown', '>')
if (info.optional) { if (info.optional) {
str.push(']'); str.push(']')
} }
}); })
str.push('\n'); str.push('\n')
if (info.description) { 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 var sieve = args.length
? parseParameters(args) ? parseParameters(args)
: null : null
return connect().then(function getXoObjects(xo) { return connect().then(function getXoObjects (xo) {
return xo.call('xo.getAllObjects') return xo.call('xo.getAllObjects')
}).then(function filterObjects (objects) { }).then(function filterObjects (objects) {
return filter(objects, sieve) return filter(objects, sieve)
@ -251,72 +244,72 @@ function listObjects(args) {
} }
exports.listObjects = listObjects exports.listObjects = listObjects
var PARAM_RE = /^([^=]+)=(.*)$/; var PARAM_RE = /^([^=]+)=(.*)$/
function call(args) { function call (args) {
if (!args.length) { if (!args.length) {
throw 'missing command name'; throw new Error('missing command name')
} }
var method = args.shift(); var method = args.shift()
var params = parseParameters(args); var params = parseParameters(args)
var file = params['@']; var file = params['@']
delete params['@']; delete params['@']
var baseUrl; var baseUrl
return connect().then(function (xo) { return connect().then(function (xo) {
baseUrl = xo._url; baseUrl = xo._url
return xo.call(method, params); return xo.call(method, params)
}).then(function handleResult(result) { }).then(function handleResult (result) {
var keys, key, url; var keys, key, url
if (( if (
isObject(result) && isObject(result) &&
(keys = getKeys(result)).length === 1 (keys = getKeys(result)).length === 1
)) { ) {
key = keys[0]; key = keys[0]
if (key === '$getFrom') { if (key === '$getFrom') {
url = resolveUrl(baseUrl, result[key]); url = resolveUrl(baseUrl, result[key])
var output = createWriteStream(file); var output = createWriteStream(file)
return eventToPromise(nicePipe([ return eventToPromise(nicePipe([
got(url), got(url),
progressStream({ time: 1e3 }, printProgress), progressStream({ time: 1e3 }, printProgress),
output, output
]), 'finish'); ]), 'finish')
} }
if (key === '$sendTo') { if (key === '$sendTo') {
url = resolveUrl(baseUrl, result[key]); url = resolveUrl(baseUrl, result[key])
return stat(file).then(function (stats) { return stat(file).then(function (stats) {
var length = stats.size; var length = stats.size
var input = nicePipe([ var input = nicePipe([
createReadStream(file), createReadStream(file),
progressStream({ progressStream({
length: length, length: length,
time: 1e3, time: 1e3
}, printProgress), }, printProgress)
]); ])
return sent(url, input, { return sent(url, input, {
headers: { headers: {
'content-length': length, 'content-length': length
}, },
method: 'POST' method: 'POST'
}).get(0); }).get(0)
}); })
} }
} }
return result; return result
}); })
} }
exports.call = call; exports.call = call
//==================================================================== // ===================================================================
if (!module.parent) { if (!module.parent) {
require('exec-promise')(exports); require('exec-promise')(exports)
} }

View File

@ -45,5 +45,12 @@
"sent": "^1.1.0", "sent": "^1.1.0",
"xdg-basedir": "^1.0.0", "xdg-basedir": "^1.0.0",
"xo-lib": "^0.2.0" "xo-lib": "^0.2.0"
},
"devDependencies": {
"standard": "^5.3.1"
},
"scripts": {
"lint": "standard",
"posttest": "npm run lint"
} }
} }