Files
js-scripts/components/component-args.js
2025-04-04 17:19:07 +08:00

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;
}