GRACEY
A declarative CLI building tool that just makes sense. Named after my sweetheart.
Features
Motivation
There are many CLI tools out there, but they all have restrictions, be some or many.
I want an API that is easy to use, easy to understand and easy to read.
No more guessing what all the commands do. Let's go through it together.
API
The concept of this package is that 'what you write is what you get'. The sequence of your commands matters and you know how your users will interact with the CLI.
All commands that return this
are chainable, which is a nice feeling.
Our examples will build the @angular/cli
tool with the following commands:
ng generate component --flat folder/componentname// orng g c -f folder/componentnameng init --flat
class Program
or class Alias
The class to your program. Instanciate this once and start the chain of commands.
There is no constructor, so chain away!
In this class, the abstraction is multiples and singles. You can change each into eachother. Action is the last thing that happens before the command node is reset.
command()
option()
action()
commands()
options()
actions()
parse()
options?: {}
Gracey().command(name: string)
// want a command?.command'generate', 'g'// want a sub command?.command'generate', 'g'.command'component', 'c'
Gracey().option()
// declaring 1 space in the process.argv per option.command'generate', 'g'.command'component', 'c'.option'-f', '--flat','Flattens the folder',// declaring 1 space in the process.argv per options (allows -fcd).command'generate', 'g'.command'component', 'c'.options'flags',
Gracey().action()
.command'generate', 'g'.command'component', 'c'.options'flags',// access all the things in Program.actions
TODO:
Have typescript intellisense all the stuff you've already put in and available in the program.options output, for example.