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 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)
|
||||||
});
|
})
|
||||||
};
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user