This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.

39 lines
738 B
JavaScript
Raw Normal View History

2021-04-02 02:24:13 +03:00
'use strict';
const SPACES_REGEXP = / +/g;
const joinCommand = (file, args = []) => {
if (!Array.isArray(args)) {
return file;
}
return [file, ...args].join(' ');
};
// Allow spaces to be escaped by a backslash if not meant as a delimiter
const handleEscaping = (tokens, token, index) => {
if (index === 0) {
return [token];
}
const previousToken = tokens[tokens.length - 1];
if (previousToken.endsWith('\\')) {
return [...tokens.slice(0, -1), `${previousToken.slice(0, -1)} ${token}`];
}
return [...tokens, token];
};
// Handle `execa.command()`
const parseCommand = command => {
return command
.trim()
.split(SPACES_REGEXP)
.reduce(handleEscaping, []);
};
module.exports = {
joinCommand,
parseCommand
};