UNPKG

1.16 kBJavaScriptView Raw
1const aliases = ['stdin', 'stdout', 'stderr'];
2
3const hasAlias = options => aliases.some(alias => options[alias] !== undefined);
4
5export const normalizeStdio = options => {
6 if (!options) {
7 return;
8 }
9
10 const {stdio} = options;
11
12 if (stdio === undefined) {
13 return aliases.map(alias => options[alias]);
14 }
15
16 if (hasAlias(options)) {
17 throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`);
18 }
19
20 if (typeof stdio === 'string') {
21 return stdio;
22 }
23
24 if (!Array.isArray(stdio)) {
25 throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
26 }
27
28 const length = Math.max(stdio.length, aliases.length);
29 return Array.from({length}, (value, index) => stdio[index]);
30};
31
32// `ipc` is pushed unless it is already present
33export const normalizeStdioNode = options => {
34 const stdio = normalizeStdio(options);
35
36 if (stdio === 'ipc') {
37 return 'ipc';
38 }
39
40 if (stdio === undefined || typeof stdio === 'string') {
41 return [stdio, stdio, stdio, 'ipc'];
42 }
43
44 if (stdio.includes('ipc')) {
45 return stdio;
46 }
47
48 return [...stdio, 'ipc'];
49};