commandzen
Version:
A command-line argument parsing library that allows for quick and easy parsing of command-line arguments.
41 lines (40 loc) • 1.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OptionParser = void 0;
class OptionParser {
constructor() {
}
static parse(flag) {
const { shortName, longName } = this.extractShortAndLongNames(flag);
const { key, required } = this.extractKeyAndRequired(flag);
return { shortName, longName, key, required };
}
static extractShortAndLongNames(flag) {
const flagPattern = /(-\w+)|(--[\w-]+)/g;
const flagMatches = [...flag.matchAll(flagPattern)];
return flagMatches.reduce((acc, [, short, long]) => ({
shortName: short ? short : acc.shortName,
longName: long ? long : acc.longName,
}), { shortName: "", longName: "" });
}
static extractKeyAndRequired(flag) {
const keyPattern = /<(\w+)>|\[(\w+)\]/;
const keyMatch = flag.match(keyPattern);
const required = keyMatch ? !!keyMatch[1] : false;
const key = this.extractKey(flag);
return { key, required };
}
static extractKey(flag) {
const longName = this.extractShortAndLongNames(flag).longName;
const shortName = this.extractShortAndLongNames(flag).shortName;
return longName
? longName
.replace(/^--/, "")
.replace(/-/g, " ")
.split(" ")
.map((word, i) => i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))
.join("")
: shortName?.replace(/^-/, "");
}
}
exports.OptionParser = OptionParser;