Skip to content

Commit 472c065

Browse files
authored
Fix passing undefined options (#712)
1 parent ed8b2ce commit 472c065

File tree

2 files changed

+51
-26
lines changed

2 files changed

+51
-26
lines changed

index.js

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,8 @@ const handleArguments = (rawFile, rawArgs, rawOptions = {}) => {
4949

5050
const {command: file, args, options: initialOptions} = crossSpawn._parse(filePath, rawArgs, rawOptions);
5151

52-
const options = {
53-
maxBuffer: DEFAULT_MAX_BUFFER,
54-
buffer: true,
55-
stripFinalNewline: true,
56-
extendEnv: true,
57-
preferLocal: false,
58-
localDir: initialOptions.cwd || process.cwd(),
59-
execPath: process.execPath,
60-
encoding: 'utf8',
61-
reject: true,
62-
cleanup: true,
63-
all: false,
64-
windowsHide: true,
65-
verbose: verboseDefault,
66-
killSignal: 'SIGTERM',
67-
...initialOptions,
68-
shell: normalizeFileUrl(initialOptions.shell),
69-
};
70-
52+
const options = addDefaultOptions(initialOptions);
53+
options.shell = normalizeFileUrl(options.shell);
7154
options.env = getEnv(options);
7255

7356
if (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {
@@ -80,6 +63,42 @@ const handleArguments = (rawFile, rawArgs, rawOptions = {}) => {
8063
return {file, args, command, escapedCommand, options};
8164
};
8265

66+
const addDefaultOptions = ({
67+
maxBuffer = DEFAULT_MAX_BUFFER,
68+
buffer = true,
69+
stripFinalNewline = true,
70+
extendEnv = true,
71+
preferLocal = false,
72+
cwd = process.cwd(),
73+
localDir = cwd,
74+
execPath = process.execPath,
75+
encoding = 'utf8',
76+
reject = true,
77+
cleanup = true,
78+
all = false,
79+
windowsHide = true,
80+
verbose = verboseDefault,
81+
killSignal = 'SIGTERM',
82+
...options
83+
}) => ({
84+
...options,
85+
maxBuffer,
86+
buffer,
87+
stripFinalNewline,
88+
extendEnv,
89+
preferLocal,
90+
cwd,
91+
localDir,
92+
execPath,
93+
encoding,
94+
reject,
95+
cleanup,
96+
all,
97+
windowsHide,
98+
verbose,
99+
killSignal,
100+
});
101+
83102
const handleOutput = (options, value) => {
84103
if (value === undefined || value === null) {
85104
return;

test/test.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,26 @@ test('skip throwing when using reject option in sync mode', t => {
7676

7777
const testStripFinalNewline = async (t, index, stripFinalNewline, execaCommand) => {
7878
const {stdio} = await execaCommand('noop-fd.js', [`${index}`, 'foobar\n'], {...fullStdio, stripFinalNewline});
79-
t.is(stdio[index], `foobar${stripFinalNewline ? '' : '\n'}`);
79+
t.is(stdio[index], `foobar${stripFinalNewline === false ? '\n' : ''}`);
8080
};
8181

82-
test('stripFinalNewline: true with stdout', testStripFinalNewline, 1, undefined, execa);
82+
test('stripFinalNewline: undefined with stdout', testStripFinalNewline, 1, undefined, execa);
83+
test('stripFinalNewline: true with stdout', testStripFinalNewline, 1, true, execa);
8384
test('stripFinalNewline: false with stdout', testStripFinalNewline, 1, false, execa);
84-
test('stripFinalNewline: true with stderr', testStripFinalNewline, 2, undefined, execa);
85+
test('stripFinalNewline: undefined with stderr', testStripFinalNewline, 2, undefined, execa);
86+
test('stripFinalNewline: true with stderr', testStripFinalNewline, 2, true, execa);
8587
test('stripFinalNewline: false with stderr', testStripFinalNewline, 2, false, execa);
86-
test('stripFinalNewline: true with stdio[*]', testStripFinalNewline, 3, undefined, execa);
88+
test('stripFinalNewline: undefined with stdio[*]', testStripFinalNewline, 3, undefined, execa);
89+
test('stripFinalNewline: true with stdio[*]', testStripFinalNewline, 3, true, execa);
8790
test('stripFinalNewline: false with stdio[*]', testStripFinalNewline, 3, false, execa);
88-
test('stripFinalNewline: true with stdout - sync', testStripFinalNewline, 1, undefined, execaSync);
91+
test('stripFinalNewline: undefined with stdout - sync', testStripFinalNewline, 1, undefined, execaSync);
92+
test('stripFinalNewline: true with stdout - sync', testStripFinalNewline, 1, true, execaSync);
8993
test('stripFinalNewline: false with stdout - sync', testStripFinalNewline, 1, false, execaSync);
90-
test('stripFinalNewline: true with stderr - sync', testStripFinalNewline, 2, undefined, execaSync);
94+
test('stripFinalNewline: undefined with stderr - sync', testStripFinalNewline, 2, undefined, execaSync);
95+
test('stripFinalNewline: true with stderr - sync', testStripFinalNewline, 2, true, execaSync);
9196
test('stripFinalNewline: false with stderr - sync', testStripFinalNewline, 2, false, execaSync);
92-
test('stripFinalNewline: true with stdio[*] - sync', testStripFinalNewline, 3, undefined, execaSync);
97+
test('stripFinalNewline: undefined with stdio[*] - sync', testStripFinalNewline, 3, undefined, execaSync);
98+
test('stripFinalNewline: true with stdio[*] - sync', testStripFinalNewline, 3, true, execaSync);
9399
test('stripFinalNewline: false with stdio[*] - sync', testStripFinalNewline, 3, false, execaSync);
94100

95101
test('stripFinalNewline is not used in objectMode', async t => {

0 commit comments

Comments
 (0)