ramda-cli
Version:
A command-line tool for processing JSON with Ramda and LiveScript
109 lines (108 loc) • 5.89 kB
JavaScript
// Generated by LiveScript 1.6.0
(function(){
var minimist, camelize, ref$, map, split, matchStr, pipe, replace, fromPairs, ifElse, identity, OUTPUT_TYPES, INPUT_TYPES, formatEnumList, HELP, parseAliases, wrapInParens, startsWith, wrapFunction, wrapNumberLookup, parseRawImport, parseImports, parse, help, out$ = typeof exports != 'undefined' && exports || this;
minimist = require('minimist');
camelize = require('camelize');
ref$ = require('ramda'), map = ref$.map, split = ref$.split, matchStr = ref$.match, pipe = ref$.pipe, replace = ref$.replace, fromPairs = ref$.fromPairs, ifElse = ref$.ifElse, identity = ref$.identity;
OUTPUT_TYPES = ['json', 'pretty', 'raw', 'csv', 'tsv', 'table'];
INPUT_TYPES = ['json', 'raw', 'csv', 'tsv'];
formatEnumList = compose$(function(it){
return it.join(', ');
}, (function(it){
return 'one of: ' + it;
}));
HELP = "Usage: ramda [options] [function] ...\n\n -I, --interactive run interactively in browser\n -f, --file read a function from a js/ls file instead of args; useful for\n larger scripts\n -c, --compact compact output for JSON and tables\n -s, --slurp read JSON objects from stdin as one big list\n -S, --unslurp unwraps a list before output so that each item is formatted and\n printed separately\n -t, --transduce use pipeline as a transducer to transform stdin\n -P, --json-path parse stream with JSONPath expression\n -i, --input-type read input from stdin as (" + formatEnumList(INPUT_TYPES) + ")\n -o, --output-type format output sent to stdout (" + formatEnumList(OUTPUT_TYPES) + ")\n -p, --pretty pretty-printed output with colors, alias to -o pretty\n -D, --pretty-depth set how deep objects are pretty printed\n -r, --raw-input alias for --input-type raw\n -R, --raw-output alias for --output-type raw\n -n, --no-stdin don't read input from stdin\n --[no-]headers csv/tsv has a header row\n --csv-delimiter custom csv delimiter character\n --js use javascript instead of livescript\n --import import a module from npm\n -C, --configure edit config in $EDITOR\n -v, --verbose print debugging information (use -vv for even more)\n --version print version\n -h, --help displays help\n\nIf multiple functions are given as strings, they are composed into a\npipeline in order from left to right, similarly to R.pipe.\n\nExamples:\n\n curl -Ls http://bit.do/countries-json | ramda 'take 5' 'pluck \\name' --pretty\n curl -Ls http://bit.do/countries-json | ramda 'find where-eq code: \\FI'\n curl -Ls http://bit.do/countries-json | ramda --js 'filter(c => test(/land$/, c.name))'\n seq 10 | ramda --raw-input --slurp 'map parse-int' sum\n date +%s | ramda -r --import moment:m 'm.unix'\n\n\nREADME: https://github.com/raine/ramda-cli";
parseAliases = pipe(matchStr(/-[a-z], --[a-z\-]+/ig), map(compose$(replace(/\B-/g, ''), split(', '))), fromPairs);
wrapInParens = function(str){
return "(" + str + ")";
};
startsWith = function(str){
return function(it){
return (it != null ? it.indexOf(str) : void 8) === 0;
};
};
wrapFunction = ifElse(startsWith('->'), wrapInParens, identity);
wrapNumberLookup = ifElse(function(it){
return it.match(/^.\d+$/);
}, wrapInParens, identity);
parseRawImport = function(str){
var ref$, packageSpec, alias;
ref$ = str.split(':'), packageSpec = ref$[0], alias = ref$[1];
return {
packageSpec: packageSpec,
alias: alias
};
};
parseImports = function(argvImport){
var importsRawArr;
importsRawArr = typeof argvImport === 'string' ? [argvImport] : argvImport;
return importsRawArr.map(parseRawImport);
};
out$.parse = parse = function(argv){
var opts, ref$;
argv = map(compose$(wrapFunction, wrapNumberLookup), argv.slice(2));
opts = camelize(minimist(argv, {
string: ['file', 'input-type', 'output-type', 'json-path', 'csv-delimiter'],
boolean: ['compact', 'slurp', 'unslurp', 'pretty', 'verbose', 'version', 'raw-input', 'raw-output', 'configure', 'no-stdin', 'js', 'transduce', 'headers', 'interactive'],
alias: parseAliases(HELP),
'default': {
stdin: true,
headers: true,
'csv-delimiter': ',',
'import': [],
'input-type': 'json',
'output-type': 'json'
}
}));
opts._ = opts[''];
delete opts[''];
if (opts.rawInput) {
opts.inputType = 'raw';
}
if (opts.rawOutput) {
opts.outputType = 'raw';
}
if (opts.pretty) {
opts.outputType = 'pretty';
}
if (opts.outputType != null && !in$(opts.outputType, OUTPUT_TYPES)) {
throw new Error("Output type should be " + formatEnumList(OUTPUT_TYPES));
}
if (opts.inputType != null && !in$(opts.inputType, INPUT_TYPES)) {
throw new Error("Input type should be " + formatEnumList(INPUT_TYPES));
}
if (in$('-vv', argv)) {
opts.veryVerbose = true;
}
if (in$('-n', argv)) {
opts.stdin = false;
}
opts['import'] = parseImports(opts['import']);
if ((ref$ = opts.inputType) === 'csv' || ref$ === 'tsv') {
opts.slurp = true;
}
if ((ref$ = opts.outputType) === 'csv' || ref$ === 'tsv') {
opts.unslurp = true;
}
return opts;
};
out$.help = help = function(){
return HELP;
};
function compose$() {
var functions = arguments;
return function() {
var i, result;
result = functions[0].apply(this, arguments);
for (i = 1; i < functions.length; ++i) {
result = functions[i](result);
}
return result;
};
}
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
}).call(this);