UNPKG

1.54 kBJavaScriptView Raw
1const chalk = require('chalk')
2const fillMissingArgs = el => ({ ...el, args: el.args || '' })
3const buildRow = ({ name, short, args, desc }) => `${chalk.yellow('--' + name)} [${chalk.magenta('-' + short)}] ${args} ${desc}`
4const equalPad = param => (line, index, arr) => ({ ...line, [param]: line[param].padEnd(Math.max.apply(null, arr.map(el => el[param].length))) })
5const a = [
6 {
7 name: 'help',
8 short: 'h',
9 desc: 'shows this message'
10 },
11 {
12 name: 'version',
13 short: 'v',
14 desc: 'shows version'
15 },
16 { name: 'dataPath',
17 short: 'd',
18 args: '<path>',
19 desc: 'reads data from another folder'
20 },
21 { name: 'getPath',
22 short: 'g',
23 desc: 'shows default data folder path'
24 },
25 {
26 name: 'config',
27 short: 'c',
28 args: '<path>',
29 unsupported: true
30 },
31 {
32 name: 'runningWithSudoIsDangerous',
33 short: 'runningWithSudoIsDangerous',
34 hidden: true
35 }
36]
37
38module.exports = {
39 getArgs: () => {
40 const args = require('minimist')(process.argv.slice(2))
41 let newArgs = {}
42 a.forEach(arg => {
43 if (args[arg.name] != null) newArgs[arg.name] = args[arg.name]
44 if (args[arg.short] != null) newArgs[arg.name] = args[arg.short]
45 if (newArgs[arg.name] != null && arg.args && typeof newArgs[arg.name] !== 'string') delete newArgs[arg.name]
46 })
47 return newArgs
48 },
49 getHelp: () => a
50 .filter(a => !a.unsupported)
51 .filter(a => !a.hidden)
52 .map(equalPad('name'))
53 .map(fillMissingArgs)
54 .map(equalPad('args'))
55 .map(buildRow)
56 .join('\n ')
57}