@timhall/cli

Composable CLI utilities

Usage no npm install needed!

<script type="module">
  import timhallCli from 'https://cdn.skypack.dev/@timhall/cli';
</script>

README

@timhall/cli

cli({ name, version, subcommands })

Prepare help, version, and run for commands.

import { cli, commands, run } from '@timhall/cli';
import { name, version } from '../../package.json';

const subcommands = commands({
  init: { run: argv => { /* ... */ }, description: '...' }
  commit: { load: () => import('./example-commit'), description: '...' },
  // ...
});

const example = cli({ name, version, subcommands });

run(name, async () => {
  const argv = process.argv.slice(2);
  await example.run(argv);
});
> example --help
example v(version)

Usage: example <command>

Commands:
  - init    ...
  - commit  ...

example help <command>  Help on <command>
example -v / --version  Show current version

> example -v
(version)

> example help init
(calls init.run with ['--help'])

> example int
ERROR Unknown command "int", did you mean "init"?

Available commands are "init" and "commit".
Try "example help" for more information.

> example commit -m "Add cli"
(calls commit.default with ['-m', 'Add cli'])

commands(subcommands)

Load and run subcommand functions

Example:

// ./example-commit
export default async function commit(argv: string[]) {
  // ...
}
import { commands } from '@timhall/cli';

const subcommands = commands({
  init: {
    run(argv: string[]) {
      // Define command directly
    },
    description: 'Initialize a new repository'
  },
  commit: {
    // Only load and run commit command if called
    load: () => import('./example-commit'),
    description: 'Commit change to repository'
  }
});

console.log(subcommands.list);
// {
//   init: 'Initialize a new repository',
//   commit: 'Commit change to repository'
// }

async function main() {
  await subcommands.run(['commit', '-m', 'Added cli']);

  // 1. Load ./example-commit
  // 2. Run with ['-m', 'Added cli']
}

run([title], fn)

Run the given function with proper process management and error handling.