UNPKG

commandzen

Version:

A command-line argument parsing library that allows for quick and easy parsing of command-line arguments.

37 lines (36 loc) 1.44 kB
export 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(/^-/, ""); } }