Skip to content

Commit

Permalink
fix(core): add quotes around string to command
Browse files Browse the repository at this point in the history
  • Loading branch information
xiongemi committed May 20, 2024
1 parent 1255603 commit 33452d3
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 5 deletions.
4 changes: 0 additions & 4 deletions packages/nx/bin/init-local.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,6 @@ export function rewriteTargetsAndProjects(args: string[]) {
return newArgs;
}

function wrapIntoQuotesIfNeeded(arg: string) {
return arg.indexOf(':') > -1 ? `"${arg}"` : arg;
}

function isKnownCommand(command: string) {
const commands = [
...Object.keys(
Expand Down
50 changes: 50 additions & 0 deletions packages/nx/src/executors/run-commands/run-commands.impl.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,56 @@ describe('Run Commands', () => {
)
).toEqual('echo "hello world"');
});

it('should interpolate provided values with spaces', () => {
expect(
interpolateArgsIntoCommand(
'echo',
{
unknownOptions: { hello: 'test 123' },
parsedArgs: { hello: 'test 123' },
} as any,
true
)
).toEqual('echo --hello="test 123"'); // should wrap in quotes

expect(
interpolateArgsIntoCommand(
'echo',
{
unknownOptions: { hello: '"test 123"' },
parsedArgs: { hello: '"test 123"' },
} as any,
true
)
).toEqual('echo --hello="test 123"'); // should leave double quotes

expect(
interpolateArgsIntoCommand(
'echo',
{
unknownOptions: { hello: "'test 123'" },
parsedArgs: { hello: "'test 123'" },
} as any,
true
)
).toEqual("echo --hello='test 123'"); // should leave single quote

expect(
interpolateArgsIntoCommand(
'echo',
{
__unparsed__: [
'--hello=test 123',
'hello world',
'"random config"',
'456',
],
} as any,
true
)
).toEqual(`echo --hello="test 123" "hello world" "random config" 456`); // should wrap aroound __unparsed__ args with key value
});
});

describe('--color', () => {
Expand Down
23 changes: 22 additions & 1 deletion packages/nx/src/executors/run-commands/run-commands.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,7 @@ export function interpolateArgsIntoCommand(
opts.parsedArgs[k] === opts.unknownOptions[k]
)
.map((k) => `--${k}=${opts.unknownOptions[k]}`)
.map((arg) => wrapArgIntoQuotesIfNeeded(arg))
.join(' ');
}
if (opts.args) {
Expand All @@ -505,7 +506,9 @@ export function interpolateArgsIntoCommand(
opts.unparsedCommandArgs
);
if (filterdParsedOptions.length > 0) {
args += ` ${filterdParsedOptions.join(' ')}`;
args += ` ${filterdParsedOptions
.map((arg) => wrapArgIntoQuotesIfNeeded(arg))
.join(' ')}`;
}
}
return `${command}${args}`;
Expand Down Expand Up @@ -627,3 +630,21 @@ function registerProcessListener() {
// will store results to the cache and will terminate this process
});
}

function wrapArgIntoQuotesIfNeeded(arg: string): string {
if (arg.includes('=')) {
const [key, value] = arg.split('=');
if (
key.startsWith('--') &&
value.includes(' ') &&
!(value[0] === "'" || value[0] === '"')
) {
return `${key}="${value}"`;
}
return arg;
} else if (arg.includes(' ') && !(arg[0] === "'" || arg[0] === '"')) {
return `"${arg}"`;
} else {
return arg;
}
}

0 comments on commit 33452d3

Please sign in to comment.