Skip to content

Instantly share code, notes, and snippets.

@isurfer21
Created July 28, 2022 17:05
Show Gist options
  • Save isurfer21/dc4d097d7585f9eb0f8f09aaabe9e0f3 to your computer and use it in GitHub Desktop.
Save isurfer21/dc4d097d7585f9eb0f8f09aaabe9e0f3 to your computer and use it in GitHub Desktop.
Minimalistic embeddable argument parser in node.js without any dependencies
#!/usr/bin/env node
const APP_NAME = 'CliApp';
const APP_VER = '1.0.0';
class CliArgParser {
constructor() {
this.argv = process.argv.slice(2);
this.args = this.map();
}
kv(arg, weed) {
let key = arg.substr(0, arg.indexOf(weed)).trim().replace(/^-+/, '');
let value = arg.substr(arg.indexOf(weed) + 1, arg.length).trim();
let pair = {};
pair[key] = value;
return pair;
}
map() {
let map = { _: [] };
for (let i = 0; i < this.argv.length; i++) {
let arg = this.argv[i];
if (arg[0] == '-') {
let pair = {};
if (arg.indexOf('=') >= 0) {
pair = this.kv(arg, '=');
} else if (arg.indexOf('=') >= 0) {
pair = this.kv(arg, ':');
} else {
let key = arg.trim().replace(/^-+/, '');
if (!!key) {
pair[key] = true;
}
}
map = { ...pair, ...map };
} else {
map._.push(arg);
}
}
return map;
}
}
const cli = new CliArgParser();
// console.log(cli.argv, '|', cli.args);
if ('h' in cli.args || 'help' in cli.args) {
console.log(`${APP_NAME}
Syntax:
cliapp -h
cliapp -v
Options:
-h --help Show help menu
-v --version Show version
`);
} else if ('v' in cli.args || 'version' in cli.args) {
console.log(`Version ${APP_VER}`);
} else {
console.log(`App initiated`);
// Put your code here
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment