/**
|
* @module object-to-spawn-args
|
*/
|
|
/**
|
* @param {object} - an object specifying the command-line options to set
|
* @param [options] {object}
|
* @param [options.quote] {boolean} - enquote the option values
|
* @param [options.optionEqualsValue] {boolean} - use `--option=value` notation
|
*/
|
function toSpawnArgs (object, options) {
|
options = Object.assign({
|
optionEqualsValueList: [],
|
optionEqualsValueExclusions: [],
|
}, options)
|
const output = []
|
|
for (const prop in object) {
|
const value = object[prop]
|
if (value !== undefined) {
|
const dash = prop.length === 1 ? '-' : '--'
|
if ((options.optionEqualsValue && !options.optionEqualsValueExclusions.includes(prop)) || options.optionEqualsValueList.includes(prop)) {
|
if (value === true) {
|
output.push(dash + prop)
|
} else {
|
if (Array.isArray(value)) {
|
output.push(dash + prop + '=' + quote(value.join(','), options.quote))
|
} else {
|
output.push(dash + prop + '=' + quote(value, options.quote))
|
}
|
}
|
} else {
|
output.push(dash + prop)
|
if (value !== true) {
|
if (Array.isArray(value)) {
|
value.forEach(function (item) {
|
output.push(quote(item, options.quote))
|
})
|
} else {
|
output.push(quote(value, options.quote))
|
}
|
}
|
}
|
}
|
}
|
return output
|
}
|
|
function quote (value, toQuote) {
|
return toQuote ? '"' + value + '"' : value
|
}
|
|
module.exports = toSpawnArgs
|