Created
July 28, 2022 17:05
-
-
Save isurfer21/dc4d097d7585f9eb0f8f09aaabe9e0f3 to your computer and use it in GitHub Desktop.
Minimalistic embeddable argument parser in node.js without any dependencies
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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