82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
var parseARGS = (kvKeys) => {
|
|
return exports.parse($ARGS, kvKeys);
|
|
};
|
|
|
|
var parse = (args, kvKeys) => {
|
|
var newArgs = [];
|
|
var keyValueMap = {};
|
|
var keyFlagMap = {};
|
|
|
|
keyValueMap.vals = () => {
|
|
var ret = [];
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var v = keyValueMap[arguments[i]];
|
|
if (v) { v.forEach((x) => { ret.push(x) } ); }
|
|
}
|
|
return ret;
|
|
};
|
|
keyValueMap.val = () => {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var v = keyValueMap[arguments[i]] && keyValueMap[arguments[i]][0];
|
|
if (v) { return v; }
|
|
}
|
|
return null;
|
|
};
|
|
keyFlagMap.flg = () => {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var v = keyFlagMap[arguments[i]];
|
|
if (v) { return true; }
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var kvKeyMap = {}; (kvKeys || []).forEach((k) => { kvKeyMap[k] = 1; });
|
|
for (var i = 0; i < args.length; i++) {
|
|
var arg = args[i];
|
|
var key = null;
|
|
if (arg.startsWith('--')) {
|
|
key = arg.substring(2);
|
|
} else if (arg.startsWith('-')) {
|
|
key = arg.substring(1);
|
|
if (key.length > 1) {
|
|
for (var x = 0; x < key.length; x++) {
|
|
var k = key.substring(x, 1);
|
|
kvKeyMap[k] = 1;
|
|
keyFlagMap[k] = 1;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
if ((key != null) && ((i + 1) < args.length) || kvKeyMap[key]) {
|
|
if (kvKeyMap[key]) {
|
|
keyFlagMap[key] = 1;
|
|
} else {
|
|
keyValueMap[key] = keyValueMap[key] || [];
|
|
keyValueMap[key].push(args[++i]);
|
|
}
|
|
} else {
|
|
newArgs.push(arg);
|
|
}
|
|
}
|
|
return {
|
|
args: newArgs,
|
|
flags: keyFlagMap,
|
|
values: keyValueMap
|
|
};
|
|
};
|
|
|
|
var parseDefARGs = (kvKeys) => {
|
|
var args = parseARGS(kvKeys);
|
|
var newArgs = args.args;
|
|
newArgs.flg = args.flags.flg;
|
|
newArgs.val = args.values.val;
|
|
newArgs.vals = args.values.vals;
|
|
return newArgs;
|
|
};
|
|
|
|
|
|
if (typeof exports == 'object') {
|
|
exports.parse = parse;
|
|
exports.parseARGS = parseARGS;
|
|
exports.parseDefARGs = parseDefARGs;
|
|
} |