41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
module.exports = parse;
|
|
|
|
// Inspired a bit by
|
|
// https://github.com/eveningkid/args-parser/blob/master/parse.js
|
|
|
|
function parse(argv) {
|
|
argv = process.argv.slice(2);
|
|
let output = {};
|
|
|
|
argv.forEach((arg) => {
|
|
// We'll treat `--long` flags and flags without dash prefixes the same,
|
|
// so just discard double-dash prefixes
|
|
if (arg.startsWith('--')) { arg = arg.substring(2); }
|
|
|
|
// Handle grouped short flags (eg `ps -aux`)
|
|
// (Let's not let grouped ones have values) //... FIXME, maybe?
|
|
if (arg.startsWith('-')) {
|
|
if (arg.length < 2) {
|
|
// It's not grouped; just remove the '-' and treat it like the rest, later
|
|
arg = arg.substring(1);
|
|
} else {
|
|
arg = arg.substring(1);
|
|
let ungrouped = arg.split('');
|
|
ungrouped.forEach(a => output[a] = true);
|
|
return;
|
|
}
|
|
}
|
|
|
|
let split = arg.split('=')
|
|
if (split.length > 2) { throw new Error(`Too many '=' in argument ${arg}`); }
|
|
if (split.length === 2) {
|
|
let [key, value] = split;
|
|
output[key] = value;
|
|
return;
|
|
}
|
|
|
|
output[arg] = true;
|
|
});
|
|
|
|
return output;
|
|
} |