Tool for making decorator based command line argument parsers. More info here
To use this tool you need to have "experimentalDecorators": true, "emitDecoratorMetadata": true,
either in your tsconfig.json or your command line parameters.
Add the @Arg
decorator to the class you want to use for your CLI.
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);
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,
Sometimes storing the parameters is desired, by labeling your class with
the @Config
decorator, a few things happen.
argPerfix
the envPrefix
defaults to the prefix
and then to the class name..${prefix}
. value.packagePrefix
which defaults to prefix
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,
}
Generated using TypeDoc