CLI API

Just like FuseBox, the CLI API is easy to use and works with 0 configuration!
Your code could look like this:

const { Sparky, CLI } = require("fuse-box");
CLI();

Sparky.task("clean:all", () => {});

Now if you run this command:

node fuse --help

your console will print this:

Usage: fuse <task> [options]

Tasks:
  clean:all

Options:
  --help, -h  Show help                                                [boolean]

Task Description

Since we want users to know, what a task does, we can provide a taskDescription.
There are multiple ways to define them:

// Define taskDescriptions in the initialization
CLI({
    taskDescriptions: {
        "clean:all": "This task will clean some things!"
    }
})

// Define taskDescription after initialization
CLI().addTaskDescription("clean:all", "This task will clean some things!");
// or
CLI().addTaskDescriptions({
    "clean:all": "This task will clean some things!"
})

This will make the console output look like this:

Usage: fuse <task> [options]

Tasks:
  clean:all  This task will clean some things!

Options:
  --help, -h  Show help                                                [boolean]

Options

With yargs, we provide an powerful option parser!
For defining options, you can use the yargs schema for options. See here

Here some ways to define options:

CLI({
    options: {
        "alert": { type: "boolean", default: false }
    }
})
// ..
CLI().addOption("alert", { type: "boolean", default: false });
// or
CLI().addOptions({
    "alert": { type: "boolean", default: false }
})

Parsing options

Every call of CLI(), returns an new instance.
And every CLI instance, has an "options" property, which holds all parsed
options.
Here a simple example of parsing/using an option:

const { options } = CLI().addOption("alert", {
    type: "boolean",
    default: false
});

if (options.alert) { console.log("ALLEEERRT!"); }

Its that simple!

node fuse --alert // This makes options.alert to be true
node fuse // This makes options.alert false, because default

CLI API

You can use CLI in a fluent style, since every method returns its own instance.
Example:

CLI()
    .addOption(name: String, option: Object)
    .addOptions(options: Object)
    .addTaskDescription(name: String, desc: String)
    .addTaskDescriptions(descriptions: Object)
    .showHelp(exitProcess: Boolean = false)
    .parse(arguments: Array<string>)
    .shutDown();

CLI API - Functions

Name Description
addOption(name: String, option: Object) Adds a single option
addOptions(options: Object) Adds multiple options
addTaskDescription(name: String, desc: String) Adds a task description
addTaskDescriptions(descriptions: Object) Adds multiple task descriptions
showHelp(exitProcess: Boolean = false) Displays the help
parse(arguments: Array<string>) Parse a given array of arguments
shutDown() Stop the CLI

CLI API - Properties

Name Description
tasks An object with the registered tasks
options An object with the parsed options
$yargs reference to yargs (If you like to hack some things)