42 lines
		
	
	
		
			891 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			891 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
const alias = ['stdin', 'stdout', 'stderr'];
 | 
						|
 | 
						|
const hasAlias = opts => alias.some(x => Boolean(opts[x]));
 | 
						|
 | 
						|
module.exports = opts => {
 | 
						|
	if (!opts) {
 | 
						|
		return null;
 | 
						|
	}
 | 
						|
 | 
						|
	if (opts.stdio && hasAlias(opts)) {
 | 
						|
		throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`);
 | 
						|
	}
 | 
						|
 | 
						|
	if (typeof opts.stdio === 'string') {
 | 
						|
		return opts.stdio;
 | 
						|
	}
 | 
						|
 | 
						|
	const stdio = opts.stdio || [];
 | 
						|
 | 
						|
	if (!Array.isArray(stdio)) {
 | 
						|
		throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
 | 
						|
	}
 | 
						|
 | 
						|
	const result = [];
 | 
						|
	const len = Math.max(stdio.length, alias.length);
 | 
						|
 | 
						|
	for (let i = 0; i < len; i++) {
 | 
						|
		let value = null;
 | 
						|
 | 
						|
		if (stdio[i] !== undefined) {
 | 
						|
			value = stdio[i];
 | 
						|
		} else if (opts[alias[i]] !== undefined) {
 | 
						|
			value = opts[alias[i]];
 | 
						|
		}
 | 
						|
 | 
						|
		result[i] = value;
 | 
						|
	}
 | 
						|
 | 
						|
	return result;
 | 
						|
};
 |