ts-arg
v1.0.3
Published
Decorator based argument parsing for typescript
Downloads
25
Readme
TS-Arg
Tool for making decorator based command line argument parsers. More info here
Installation
To use this tool you need to have "experimentalDecorators": true, "emitDecoratorMetadata": true,
either in your tsconfig.json or your command line parameters.
Usage
Add the @Arg
decorator to the class you want to use for your CLI.
Example
See a full example in ./example
import {Arg, configure} from "ts-arg";
class MyOptions {
@Arg('do you want it to be chatty')
verbose:boolean;
@Arg({short:'T', description:'What is your T'})
tbone:string;
@Arg("A number of things");
count:number;
}
const opts = configure(new MyOptions);
Configuration
If it doesn't quite do what you want checkout the possible options.
long?: string
short?: string,
description?: string,
required?: boolean,
default?: boolean,
type?: 'Boolean' | 'String' | 'Number' | 'Int' | 'JSON' | '[]' | any,
converter?: Converter,
itemType?: 'Boolean' | 'String' | 'Number' | 'Int' | 'JSON' | any,
Application Style
Sometimes storing the parameters is desired, by labeling your class with
the @Config
decorator, a few things happen.
- All commands are prefixed with the "argPrefix" value which defaults to the "prefix" value which itself defaults to className.
- ENV parameters are enabled allowing ENV properties to be read with the correct prefix. Similar to the
argPerfix
theenvPrefix
defaults to theprefix
and then to the class name. - A configuration file is looked for, by default a JSON file (parser is specfiable). The rcFile variable
is defaulted to the
.${prefix}
. value. - A property named
packagePrefix
which defaults toprefix
is read from the current project's package.json and attempts to set the current project.
Example:
#!/usr/bin/env node
import {configure, Config, Arg} from 'ts-arg';
@Config("myapp")
class MyOptions {
@Arg("verbosity on/off")
verbose:boolean;
@Arg({description:"Paths to look for", default:true})
paths:string[]
@Arg()
name:string;
}
console.table(configure(new MyOption));
Then options can be provided via cli:
$ ./bin/myapp.js --myapp-name=stuff -v ./path/to/thing.
or they can be combined with ENV
$ MY_APP_VERSBOSE=1 ./bin/myapp.js --myapp-name=stuff ./path/to/thing.
and it could be combined with package.json
{
"name": "my-super-app",
"myapp": {
"name": "stuff"
}
}
Or a dot file .myapprc
{
"paths": ["./src","./test"],
"verbose": true,
}