-
Notifications
You must be signed in to change notification settings - Fork 8
/
README.hbs
107 lines (79 loc) · 4.37 KB
/
README.hbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
[![view on npm](https://badgen.net/npm/v/command-line-commands)](https://www.npmjs.org/package/command-line-commands)
[![npm module downloads](https://badgen.net/npm/dt/command-line-commands)](https://www.npmjs.org/package/command-line-commands)
[![Gihub repo dependents](https://badgen.net/github/dependents-repo/75lb/command-line-commands)](https:/75lb/command-line-commands/network/dependents?dependent_type=REPOSITORY)
[![Gihub package dependents](https://badgen.net/github/dependents-pkg/75lb/command-line-commands)](https:/75lb/command-line-commands/network/dependents?dependent_type=PACKAGE)
[![Node.js CI](https:/75lb/command-line-commands/actions/workflows/node.js.yml/badge.svg)](https:/75lb/command-line-commands/actions/workflows/node.js.yml)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https:/feross/standard)
# command-line-commands
A lightweight module to help build a git-like command interface for your app.
Its job is to extract the command (the first argument, unless it's an option), check it's valid and either return it or throw. From there, you can parse the remaining args using your preferred option parser (e.g. [command-line-args](https:/75lb/command-line-args), [minimist](https:/substack/minimist) etc.).
## Synopsis
Create a list of valid commands (`null` represents "no command"). Supply it to `commandLineCommands()`, receiving back an object with two properties: `command` (the supplied command) and `argv` (the remainder of the command line args):
```js
const commandLineCommands = require('command-line-commands')
const validCommands = [ null, 'clean', 'update', 'install' ]
const { command, argv } = commandLineCommands(validCommands)
/* print the command and remaining command-line args */
console.log('command: %s', command)
console.log('argv: %s', JSON.stringify(argv))
```
We'll assume the above script is installed as `example`. Since the `validCommands` list includes `null`, running it without a command is valid:
```
$ example
command: null
argv: []
```
Running `example` with no command and one option:
```
$ example --verbose
command: null
argv: ["--verbose"]
```
Running `example` with both a command and an option:
```
$ example install --save something
command: install
argv: ["--save","something"]
```
Running `example` without a valid command will cause `commandLineCommands()` to throw.
From here, you can make a decision how to proceed based on the `command` and `argv` received. For example, if no command (`null`) was passed, you could parse the remaining `argv` for general options (in this case using [command-line-args](https:/75lb/command-line-args)):
```js
if (command === null) {
const commandLineArgs = require('command-line-args')
const optionDefinitions = [
{ name: 'version', type: Boolean }
]
// pass in the `argv` returned by `commandLineCommands()`
const options = commandLineArgs(optionDefinitions, { argv })
if (options.version) {
console.log('version 1.0.1')
}
}
```
The same example, using [minimist](https:/substack/minimist):
```js
if (command === null) {
const minimist = require('minimist')
// pass in the `argv` returned by `commandLineCommands()``
const options = minimist(argv)
if (options.version) {
console.log('version 1.0.1')
}
}
```
## More examples
Both examples use [command-line-args](https:/75lb/command-line-args) for option-parsing.
- [Simple](https:/75lb/command-line-commands/blob/master/example/simple.js): A basic app with a couple of commands.
- [Advanced](https:/75lb/command-line-commands/blob/master/example/advanced/git.js): A more complete example, implementing part of the git command interface.
## Usage guides
Usage guides can be generated by [command-line-usage](https:/75lb/command-line-usage). Here is a simple example ([code](https:/75lb/command-line-commands/blob/master/example/usage.js)):
![usage](https://raw.githubusercontent.com/75lb/command-line-commands/master/example/screens/command-list.png)
# API Reference
{{#module name="command-line-commands"}}
{{>body~}}
{{>member-index~}}
{{>separator~}}
{{>members~}}
{{/module}}
* * *
© 2015-25 Lloyd Brookes \<[email protected]\>. Documented by [jsdoc-to-markdown](https:/jsdoc2md/jsdoc-to-markdown).