# command-line-application

> A helpful wrapper around command-line-args and command-line-usage

Latest version **0.10.1** (published 2020-06-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install command-line-application
pnpm add command-line-application
yarn add command-line-application
bun add command-line-application
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.10.1 |
| Published | 2020-06-05 |
| First published | 2019-06-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 44.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Author | Andrew Lisowski |
| Maintainers | alisowski |

## Links

- npm: https://www.npmjs.com/package/command-line-application
- Repository: https://github.com/hipstersmoothie/command-line-application
- Homepage: https://github.com/hipstersmoothie/command-line-application#readme
- Issues: https://github.com/hipstersmoothie/command-line-application/issues
- npm.io page: https://npm.io/package/command-line-application

## Dependencies (8)

- [chalk](https://npm.io/package/chalk.md) ^2.4.1
- [meant](https://npm.io/package/meant.md) ^1.0.1
- [tslib](https://npm.io/package/tslib.md) 1.10.0
- [remove-markdown](https://npm.io/package/remove-markdown.md) ^0.3.0
- [command-line-args](https://npm.io/package/command-line-args.md) ^5.1.1
- [command-line-usage](https://npm.io/package/command-line-usage.md) ^6.0.0
- [@types/command-line-args](https://npm.io/package/@types/command-line-args.md) ^5.0.0
- [@types/command-line-usage](https://npm.io/package/@types/command-line-usage.md) ^5.0.1

## Recent versions

- 0.10.1 (latest) — 2020-06-05
- 0.10.0 — 2020-06-05
- 0.9.6 — 2020-01-15
- 0.9.5 — 2019-10-22
- 0.9.4 — 2019-10-22
- 0.9.3 — 2019-10-17
- 0.9.2 — 2019-10-17
- 0.9.1 — 2019-10-05
- 0.9.0 — 2019-10-05
- 0.8.1 — 2019-09-03
- 0.8.0 — 2019-09-02
- 0.7.0 — 2019-08-27
- 0.6.1 — 2019-08-25
- 0.6.0 — 2019-08-16
- 0.5.2 — 2019-07-28
- … 14 more at https://npm.io/package/command-line-application/versions

## README

# command-line-application

[![CircleCI](https://img.shields.io/circleci/project/github/hipstersmoothie/command-line-application/master.svg?style=for-the-badge)](https://circleci.com/gh/hipstersmoothie/command-line-application) [![npm](https://img.shields.io/npm/v/command-line-application.svg?style=for-the-badge)](https://www.npmjs.com/package/command-line-application) [![npm](https://img.shields.io/npm/dt/command-line-application.svg?style=for-the-badge)](https://www.npmjs.com/package/command-line-application)

A helpful wrapper around [command-line-args](https://www.npmjs.com/package/command-line-args) and [command-line-usage](https://www.npmjs.com/package/command-line-usage).

- Easily define single or multi-command CLI application
- Adds required options
- Suggests possible fixes for typos in flags or sub-commands
- Built in `--help` flag
- Add documentation footers to commands
- Automatically add color to command types
- Type checked!

## Related Libraries

- [command-line-docs](https://github.com/hipstersmoothie/command-line-docs) - Generate documentation for your `command-line-application` commands

## Installation

```sh
yarn add command-line-application
# or
npm i --save command-line-application
```

## Usage

### A simple single command app

```ts
import { app, Command } from 'command-line-application';

const echo: Command = {
  name: 'echo',
  description: 'Print a string to the terminal',
  examples: ['echo foo', 'echo "Intense message"'],
  require: ['value'],
  options: [
    {
      name: 'value',
      type: String,
      defaultOption: true,
      description: 'The value to print'
    }
  ]
};

const args = app(echo);

// $ echo foo
console.log(args);
// output: { value: "foo" }
```

### Complex examples

```ts
import app, { Command } from 'command-line-application';

const echo: Command = {
  examples: [{ example: 'echo foo', desc: 'The default use case' }],
  ...
};
```

### Multi Command

You can even nest multi-commands!

```ts
import app, { Command } from 'command-line-application';

const test: Command = { ... };
const lint: Command = { ... };
const scripts: MultiCommand = {
  name: 'scripts',
  descriptions: 'my tools',
  commands: [test, lint]
};

const args = app(scripts);

// $ scripts test --fix
console.log(args);
// output: { _command: 'test', fix: true }
```

### Footers

Add additional docs to your commands with Footers.

```ts
const echo: Command = {
  name: 'echo',
  description: 'Print a string to the terminal',
  examples: ['echo foo', 'echo "Intense message"'],
  options: [
    {
      name: 'value',
      type: String,
      defaultOption: true,
      description: 'The value to print'
    }
  ],
  footer: 'Only run this if you really need to',
  // or
  footer: {
    header: 'Additional Info',
    content: 'Only run this if you really need to'
  },
  // or
  footer: [
    {
      header: 'Additional Info',
      content: 'Only run this if you really need to'
    }
  ]
};
```

### Code in footers

To display code in a footer set `code` to true.

```ts
const echo: Command = {
  name: 'echo',
  description: 'Print a string to the terminal',
  examples: ['echo foo', 'echo "Intense message"'],
  options: [
    {
      name: 'value',
      type: String,
      defaultOption: true,
      description: 'The value to print'
    }
  ],
  footer: {
    header: 'Additional Info',
    code: true,
    content: 'function foo (){\n  return 1;\n}'
  }
};
```

### Require One or Another

To require on of multiple flags simply make on of the items in the required array an array of `n` options.

```ts
const echo: Command = {
  name: 'one-or-another',
  description: "Errors if one of the flags isn't provided",
  examples: ['one-or-another --a', 'one-or-another --b'],
  required: [['a', 'b']],
  options: [
    {
      name: 'a',
      type: Boolean,
      description: 'One options'
    },
    {
      name: 'b',
      type: Boolean,
      description: 'another option'
    }
  ]
};
```

## Options

### argv

Provide `argv` manually.

```ts
const args = app(echo, { argv: ['--help'] });
```

### showHelp

Whether to show the help dialog. Defaults to `true`

```ts
const args = app(echo, { showHelp: false });
```

### camelCase

Whether to camelCase the parsed options. Defaults to `true`

```ts
const args = app(echo, { camelCase: false });
```

### error

Configure how `command-line-application` reports errors.

- exit - (default) print error message and exit process
- throw - throw error message
- object - return the error message on an object with key `error`

---
_Source: https://npm.io/package/command-line-application · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
