@magic/cli
Version:
declarative command line interfaces with aliasing, commands and environment sanitization
55 lines (47 loc) • 1.28 kB
JavaScript
import log from '@magic/log'
import is from '@magic/types'
export const parseCommands = (props = {}) => {
const { commands = [], pure = false } = props
const { argv } = process
const runAll = argv.includes('all')
const cmds = Object.fromEntries(
commands
.map((tasks = []) => {
let key
let idx = -1
if (is.string(tasks)) {
if (argv.includes(tasks)) {
idx = argv.indexOf(tasks)
key = tasks
} else if (runAll) {
key = tasks
}
} else if (is.array(tasks)) {
if (runAll) {
key = tasks[0]
} else {
const idxArray = tasks
.filter(task => argv.includes(task))
.map(task => argv.indexOf(task))
idx = idxArray[0]
key = tasks[0]
}
} else {
log.error(
'E_UNEXPECTED_TASK',
`@magic/cli: got unexpected task type: ${typeof tasks}, can handle strings or arrays`,
)
}
if (idx > -1) {
if (!pure) {
argv[idx] = key
}
return [key, true]
} else if (runAll) {
return [key, true]
}
})
.filter(a => a),
)
return cmds
}