36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
|
module.exports = (sargs) => {
|
||
|
let props = {}
|
||
|
let lones = []
|
||
|
|
||
|
const convertIfApplicable = (value) => (isNaN(value) ? (value.toString().toLowerCase() === 'true' ? true : (value.toString().toLowerCase() === 'false' ? false : value)) : Number(value))
|
||
|
const removeStartHyphens = (value) => value.replace(/^\-+/g, '')
|
||
|
|
||
|
for (let i = 0; i < sargs.length; i++) {
|
||
|
const equalsIndex = sargs[i].indexOf('=')
|
||
|
const isNextRefProp = sargs[i].charAt(0) === '-' && sargs.length - 1 >= i + 1 && sargs[i + 1].indexOf('=') === -1 && sargs[i + 1].charAt(0) !== '-'
|
||
|
const argName = equalsIndex === -1 ? removeStartHyphens(sargs[i]) : removeStartHyphens(sargs[i].slice(0, equalsIndex))
|
||
|
|
||
|
if (equalsIndex !== -1) {
|
||
|
props[argName] = convertIfApplicable(sargs[i].slice(equalsIndex + 1))
|
||
|
}
|
||
|
else if (isNextRefProp) {
|
||
|
props[argName] = convertIfApplicable(sargs[i + 1])
|
||
|
i++
|
||
|
} else if (sargs[i].charAt(0) === '-') {
|
||
|
if (sargs[i].charAt(1) === '-') {
|
||
|
props[argName] = true
|
||
|
}
|
||
|
else {
|
||
|
for (let b = 0; b < argName.length; b++) {
|
||
|
props[argName.charAt(b)] = true
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
lones.push(convertIfApplicable(argName))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Object.assign(props, {
|
||
|
'_': lones
|
||
|
})
|
||
|
}
|