/clify.js

Primary LanguageTypeScriptMIT LicenseMIT

clify.js

Basic Usage

#!/usr/bin/env node
import { Clify, configure } from "clify.js";

const program = configure(program => {
  program.setVersion("1.0.0");
  program.setDescription("A simple cli program");
  program.setName("my-script");

  program.main((cmd) => {
    const input = cmd.input();

    return () => {
      Clify.log(`Input: <${input.get()}>`);
    };
  });
});

program.run();

Get help:

$ ./my-script --help
    Usage: my-script INPUT

    A simple cli program

Run it:

$ ./my-script "command input string"
    Input: <command input string>

Options

Create Option definition:

import { defineOption } from "clify.js";

const OutfileOption = defineOption({
  name: "outfile",
  char: "o",
  description: "Path to the output file",
  type: "string",
  required: true,
});

Use it in the program:

const program = configure(program => {
  program.setVersion("1.0.0");
  program.setDescription("A simple cli program");
  program.setName("my-script");

  program.main((cmd) => {
    const outfile = cmd.option(OutfileOption);

    return () => {
      Clify.log(`Outfile: <${outfile.value}>`);
    };
  });
});

Get help:

$ ./my-script --help
    Usage: my-script INPUT [...OPTIONS]

    A simple cli program

    Options:
        -o, --outfile <string>    Path to the output file

Run it:

$ ./my-script --outfile output.txt
    Outfile: <output.txt>

Commands

import { configure, defineOption } from "clify.js";

const QuietOption = defineOption({
  name: "quiet",
  char: "q",
  description: "Do not output anything",
  type: "boolean",
  default: false,
});

const program = configure(program => {
  program.setVersion("1.0.0");
  program.setDescription("A simple cli program");
  program.setName("my-script");

  program.command("cmd", (cmd) => {
    const input = cmd.input();
    const quiet = cmd.option(QuietOption);

    return () => {
      if (!quiet.value) {
        Clify.log(`Input: <${input.get()}>`);
      }
    };
  });
});

Get help:

$ ./my-script --help
    Usage: my-script COMMAND

    A simple cli program

    Commands:
        cmd

$ ./my-script cmd --help
    Usage: my-script cmd [...OPTIONS]

    Options:
        --quiet, -q    Do not output anything

Run it:

$ ./my-script cmd "command input string"
    Input: <command input string>
$ ./my-script cmd --quiet "command input string"

Nested Commands

import { configure } from "clify.js";

const program = configure(program => {
  program.setVersion("1.0.0");
  program.setDescription("A simple cli program");
  program.setName("my-script");

  const cmd = program.command("cmd", (cmd) => {
    return () => {};
  });

  cmd.command("foo", (cmd) => {
    return () => {
      Clify.log("Hi from foo!");
    };
  });
});

Get help:

$ ./my-script --help
    Usage: my-script COMMAND

    A simple cli program

    Commands:
        cmd
$ ./my-script cmd --help
    Usage: my-script cmd COMMAND

    Commands:
        foo
$ ./my-script cmd foo --help
    Usage: my-script cmd foo

Run it:

$ ./my-script cmd foo
    Hi from foo!