Package Exports
- sywac
- sywac/api
- sywac/types/boolean
- sywac/types/type
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sywac) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
So you want a CLI...
A better CLI framework, made for the ES2015 era.
Visit https://sywac.io for detailed documentation. NOTE! The docs site is still under construction.
Feature Highlights
- Single package install
- Asynchronous parsing, validation, and command execution
- Type-based argument parsing
- Plug in your own types or override/extend the built-in ones
- Support for simple CLIs or complex nested command trees
- First-class support for positional arguments, with or without commands
- Flexible auto-generated help content
- Support for ANSI styles/colors (we recommend chalk)
- Define styles/colors inline or decorate content with style hooks
- Coherent API
- Parse strings as easily as
process.argv - Supports concurrent parsing, safe for chatbots or other server-side apps
Quick Start Guide
First install sywac from npm:
$ npm install --save sywacThen create a cli.js file with code similar to this:
#!/usr/bin/env node
const cli = require('sywac')
.positional('<string>', { paramsDesc: 'A required string argument' })
.boolean('-b, --bool', { desc: 'A boolean option' })
.number('-n, --num <number>', { desc: 'A number option' })
.help('-h, --help')
.version('-v, --version')
.showHelpByDefault()
.outputSettings({ maxWidth: 75 })
module.exports = cli
async function main () {
const argv = await cli.parseAndExit()
console.log(JSON.stringify(argv, null, 2))
}
if (require.main === module) main()Make the cli.js file executable:
$ chmod +x cli.jsAnd set up cli.js as the "bin" field in package.json:
{
"name": "example",
"version": "0.1.0",
"bin": "cli.js"
}Tip:
You can use
npm init sywacto easily set up the above and add sywac to your project.
Then test it out. Without any arguments, it will print the help text.
$ ./cli.js
Usage: cli <string> [options]
Arguments:
<string> A required string argument [required] [string]
Options:
-b, --bool A boolean option [boolean]
-n, --num <number> A number option [number]
-h, --help Show help [commands: help] [boolean]
-v, --version Show version number [commands: version] [boolean]Let's try passing some arguments:
$ ./cli.js hello -b -n 42
{
"_": [],
"string": "hello",
"b": true,
"bool": true,
"n": 42,
"num": 42,
"h": false,
"help": false,
"v": false,
"version": false
}What happens if we pass flags without a string argument?
$ ./cli.js --bool
Usage: cli <string> [options]
Arguments:
<string> A required string argument [required] [string]
Options:
-b, --bool A boolean option [boolean]
-n, --num <number> A number option [number]
-h, --help Show help [commands: help] [boolean]
-v, --version Show version number [commands: version] [boolean]
Missing required argument: stringValidation failed and sywac printed the help text with an error message. Let's check the exit code of that last run:
$ echo $?
1This is a good sign that our CLI will play well with others.
API
For details on the full API, go to http://sywac.io
License
MIT
