/
nested.js
54 lines (51 loc) · 1.41 KB
/
nested.js
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
const argv = require('yargs/yargs')(process.argv.slice(2)).command(
'math',
'math description',
yargs =>
yargs
.command(
'add <a> <b>',
'add description',
yargs =>
yargs
.positional('a', {
describe: 'addend "a"',
type: 'number',
default: 0,
})
.positional('b', {
describe: 'addend "b"',
type: 'number',
default: 0,
}),
argv => {
const {a, b} = argv;
console.log(`${a} + ${b} = ${a + b}`);
}
)
.command(
'sum <numbers..>',
'sum description',
yargs =>
yargs
.positional('numbers', {
describe: 'numbers to sum',
type: 'array',
default: [],
})
.check(argv =>
isArrayOfNumbers(argv.numbers)
? true
: 'Positional argument "numbers" must only contain numbers'
),
argv => {
const sum = argv.numbers.reduce((a, b) => a + b, 0);
console.log(`The sum of numbers is ${sum}`);
}
)
).argv;
console.log(argv);
function isArrayOfNumbers(arr) {
return Array.isArray(arr) && arr.every(n => typeof n === 'number');
}
// NOTE: ".argv" and ".parse()" should only be used at top level, not inside builder functions.