This document defines several functions for parsing command line arguments: parse_cmd_args parses arguments according to a specified scheme, die exits with an error, normalize_cli_key normalizes keys, and show_help displays help. parse_cmd_args takes arguments, parses them according to the scheme, and returns an object of parsed values and defaults. It handles boolean, missing, and unknown arguments.
This document defines several functions for parsing command line arguments: parse_cmd_args parses arguments according to a specified scheme, die exits with an error, normalize_cli_key normalizes keys, and show_help displays help. parse_cmd_args takes arguments, parses them according to the scheme, and returns an object of parsed values and defaults. It handles boolean, missing, and unknown arguments.
This document defines several functions for parsing command line arguments: parse_cmd_args parses arguments according to a specified scheme, die exits with an error, normalize_cli_key normalizes keys, and show_help displays help. parse_cmd_args takes arguments, parses them according to the scheme, and returns an object of parsed values and defaults. It handles boolean, missing, and unknown arguments.
function normalize_cli_key(cli_key) { return cli_key.replace(/^-*/, ''); }
function show_help(scheme, description, epilog) {
if (description) console.log(description); console.log('Options:'); for (var k in scheme) { if (scheme[k].hasOwnProperty('hidden')) { continue; } let metavar = ''; if (scheme[k].hasOwnProperty('metavar')) metavar = ' ' + scheme[k]['metavar']; console.log(' ' + k + metavar); if (scheme[k].hasOwnProperty('default')) { console.log(' Default: "' + scheme[k]['default'] + '"'); } console.log(' ' + scheme[k]['help']); console.log(); } if (epilog) console.log(epilog); }
function parse_cmd_args(cmd_args, scheme, description=null, epilog=null) {
var result = {}; for (var arg_key in scheme) { var arg_info = scheme[arg_key]; if (arg_info.hasOwnProperty('default')) result[normalize_cli_key(arg_key)] = arg_info['default']; if (arg_info.hasOwnProperty('boolean')) result[normalize_cli_key(arg_key)] = false; } cmd_args = cmd_args.slice(2); var i = 0; while(i < cmd_args.length) { var arg_key = cmd_args[i]; if (arg_key == '--help' || arg_key == '-h') { show_help(scheme, description, epilog); process.exit(0); } i += 1; if (!scheme.hasOwnProperty(arg_key)) { die(`unknown argument: ${arg_key}`); } var arg_info = scheme[arg_key]; var normalized_key = normalize_cli_key(arg_key); if (arg_info['boolean']) { result[normalized_key] = true; continue; } if (i >= cmd_args.length) { die(`no CLI value for key: ${arg_key}`); } var arg_value = cmd_args[i]; i += 1; result[normalized_key] = arg_value; } return result; }