@justjcurtis/difi
Version:
difi is a simple data manipulation, processing & cleaning utility for your command line
122 lines (112 loc) • 5.72 kB
JavaScript
cli = require('commander')
path = require('path')
const {
dProcess,
dCompare,
dSearch
} = require('./index.js')
cli
.version('1.1.1')
.description('a simple data manipulation, processing & cleaning utility.')
cli
.command('process <filepath>')
.alias('p')
.description('processes file supplied with processing flags supplied.')
.option('-b, --blank_entries', 'removes blank entries.')
.option('-d, --duplicates', 'remove duplicates.')
.option('-i, --ignore_case', 'ignores case when comparing entries to keywords.')
.option('-l, --lower', 'make file lower case.')
.option('-id, --input_delimiter <delimiter>', 'specifies input delimiter (defaults to \\n).')
.option('-od, --output_delimiter <delimiter>', 'specifies output delimiter (defaults to input delimiter).')
.option('-s, --sort', 'sorts output.')
.option('-rv, --reverse', 'reverses output (done after sort).')
.option('-rf, --replace_file', 'replaces original file with output.')
.option('-rk, --remove_keyword <keyword>', 'removes entries with specified keyword.')
.option('-rb, --remove_before <keyword>', 'removes entry before keyword.')
.option('-ra, --remove_after <keyword>', 'removes entry after keyword.')
.option('-p, --print', 'prevents saving and instead, prints output to console.')
.option('-o, --output', 'specifies output file (defaults to inputfile_difi).')
.action(function (filepath, args) {
if (args.input_delimiter == undefined) {
args.input_delimiter = '\n'
}
if (args.output_delimiter == undefined) {
args.output_delimiter = args.input_delimiter
}
if (!args.print) {
if (args.replace_file) {
args.output = filepath
} else if (args.output == undefined) {
let parsedPath = path.parse(filepath)
args.output = path.join(parsedPath.dir, parsedPath.name + "_difi" + parsedPath.ext)
}
}
dProcess(filepath, args)
})
cli
.command('compare <filepathA> <filepathB>')
.alias('c')
.description('compares two files and displays missing entries in second file.')
.option('-f, --flip', 'flips comparison tp show keys missing in the first file.')
.option('-i, --ignore_case', 'ignores case when comparing entries.')
.option('-id, --input_delimiter <delimiter>', 'specifies input delimiter (defaults to \\n).')
.option('-od, --output_delimiter <delimiter>', 'specifies output delimiter (defaults to input delimiter).')
.option('-s, --sort', 'sorts output.')
.option('-rv, --reverse', 'reverses output (done after sort).')
.option('-p, --print', 'prevents saving and instead, prints output to console.')
.option('-o, --output', 'specifies output file (defaults to inputfile_difiCompare.')
.action(function (filepathA, filepathB, args) {
if (args.input_delimiter == undefined) {
args.input_delimiter = '\n'
}
if (args.output_delimiter == undefined) {
args.output_delimiter = args.input_delimiter
}
if (args.flip) {
let _ = filepathA;
filepathA = filepathB;
filepathB = _;
}
if (!args.print) {
if (args.output == undefined) {
let parsedPath = path.parse(filepathB)
args.output = path.join(parsedPath.dir, parsedPath.name + "_difiCompare" + parsedPath.ext)
}
}
dCompare(filepathA, filepathB, args)
})
cli
.command('search <startPath> <keys>')
.alias('s')
.description('search a file or directory structure using a list of keys.')
.option('-i, --ignore_case', 'ignores case when searching for keys.')
.option('-r, --recursive', 'search recursively into subdirectories.')
.option('-k, --keys', 'allows keys to be entered directly into the terminal as the second argument as comma seperated values.')
.option('-id, --input_delimiter <delimiter>', 'specifies input delimiter (defaults to \\n).')
.option('-od, --output_delimiter <delimiter>', 'specifies output delimiter (defaults to input delimiter).')
.option('-oc, --occurances', 'list occurances of each key along with the minimum occurance for all keys.')
.option('-d --detail', 'show filepath & line number for each match.')
.option('-bl --blacklist <csvFilter>', 'blacklist filetypes to be excluded from the search in the form of comma seperated values.')
.option('-wl --whitelist <csvFilter>', 'whitelist filetypes to be included in the search in the form of comma seperated values (overrides blacklist).')
.option('-s, --sort', 'sort output by key.')
.option('-so, --sort_occurance', 'sort output by occurance, enables -oc & overrides -s.')
.option('-rv, --reverse', 'reverses output (done after sort).')
.option('-p, --print', 'prevents saving and instead, prints output to console.')
.option('-o, --output <outputPath>', 'specifies output file for search results (defaults to parentDir_of_startPath/startPathFileName_difiSearch.txt).')
.action(function (startPath, keys, args) {
if (args.input_delimiter == undefined) {
args.input_delimiter = '\n'
}
if (args.output_delimiter == undefined) {
args.output_delimiter = args.input_delimiter
}
if (!args.print) {
if (args.output == undefined) {
let parsedPath = path.parse(startPath)
args.output = path.join(parsedPath.dir, parsedPath.name + "_difiSearch.txt")
}
}
dSearch(startPath, keys, args)
})
cli.parse(process.argv)