1234567891011121314151617181920212223242526272829303132333435363738 |
- '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
- };
|