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