args-any
Version:
Utility lib for parsing command options
51 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.option = exports.optionParser = exports.create = exports.hasPrefix = exports.isKey = exports.empty = void 0;
const lodash_1 = require("lodash");
const operator_parser_1 = require("./operator.parser");
const prefixless_key_parser_1 = require("./prefixless-key.parser");
exports.empty = Object.freeze({
key: "",
operator: operator_parser_1.operator.default,
toString: () => "",
value: ""
});
const defaultFlags = ["h", "debug"];
const isKey = (arg) => (arg && arg.startsWith(prefixless_key_parser_1.optionMarker)) || false;
exports.isKey = isKey;
const hasPrefix = (arg, prefix) => (0, exports.isKey)(arg) && (0, lodash_1.trimStart)(arg, prefixless_key_parser_1.optionMarker).startsWith(`${prefix}${prefixless_key_parser_1.prefixSeparator}`);
exports.hasPrefix = hasPrefix;
const isFlag = (key, flags) => {
const flagKeys = flags || defaultFlags;
return flagKeys.find((x) => x === (0, prefixless_key_parser_1.parsePrefixlessKey)(key)) !== undefined;
};
const create = (fields) => {
const option = { ...exports.empty, ...fields };
option.toString = () => option.value;
return option;
};
exports.create = create;
const optionParser = (key, args, settings) => {
const index = args.indexOf(key) + 1;
const [first, second] = [...args].slice(index);
const flags = settings && settings.flags;
let op = "";
let value;
if (!isFlag(key, flags) && first && !(0, exports.isKey)(first) && second && !(0, exports.isKey)(second) && operator_parser_1.operator.has(first)) {
op = first;
value = second;
}
else if (!isFlag(key, flags) && first && !(0, exports.isKey)(first)) {
value = first;
}
return (0, exports.create)({ key: (0, prefixless_key_parser_1.parsePrefixlessKey)(key, settings), operator: operator_parser_1.operator.parse(op), value });
};
exports.optionParser = optionParser;
exports.option = {
create: exports.create,
empty: exports.empty,
parse: exports.optionParser,
hasPrefix: exports.hasPrefix,
isKey: exports.isKey
};
//# sourceMappingURL=option.parser.js.map