23 lines
		
	
	
		
			1015 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
		
			1015 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Sets `$.sync` and `$.s`
 | |
| export const setScriptSync = (boundExeca, createNested, boundOptions) => {
 | |
| 	boundExeca.sync = createNested(mapScriptSync, boundOptions);
 | |
| 	boundExeca.s = boundExeca.sync;
 | |
| };
 | |
| 
 | |
| // Main logic for `$`
 | |
| export const mapScriptAsync = ({options}) => getScriptOptions(options);
 | |
| 
 | |
| // Main logic for `$.sync`
 | |
| const mapScriptSync = ({options}) => ({...getScriptOptions(options), isSync: true});
 | |
| 
 | |
| // `$` is like `execa` but with script-friendly options: `{stdin: 'inherit', preferLocal: true}`
 | |
| const getScriptOptions = options => ({options: {...getScriptStdinOption(options), ...options}});
 | |
| 
 | |
| const getScriptStdinOption = ({input, inputFile, stdio}) => input === undefined && inputFile === undefined && stdio === undefined
 | |
| 	? {stdin: 'inherit'}
 | |
| 	: {};
 | |
| 
 | |
| // When using $(...).pipe(...), most script-friendly options should apply to both commands.
 | |
| // However, some options (like `stdin: 'inherit'`) would create issues with piping, i.e. cannot be deep.
 | |
| export const deepScriptOptions = {preferLocal: true};
 |