; | |
const SPACES_REGEXP = / +/g; | |
const joinCommand = (file, args = []) => { | |
if (!Array.isArray(args)) { | |
return file; | |
} | |
return [file, ...args].join(' '); | |
}; | |
// Handle `execa.command()` | |
const parseCommand = command => { | |
const tokens = []; | |
for (const token of command.trim().split(SPACES_REGEXP)) { | |
// Allow spaces to be escaped by a backslash if not meant as a delimiter | |
const previousToken = tokens[tokens.length - 1]; | |
if (previousToken && previousToken.endsWith('\\')) { | |
// Merge previous token with current one | |
tokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`; | |
} else { | |
tokens.push(token); | |
} | |
} | |
return tokens; | |
}; | |
module.exports = { | |
joinCommand, | |
parseCommand | |
}; | |