35 lines
		
	
	
		
			951 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			951 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';
 | |
| import {getFromStream} from '../arguments/fd-options.js';
 | |
| import {iterateOnSubprocessStream} from '../io/iterate.js';
 | |
| 
 | |
| // Convert the subprocess to an async iterable
 | |
| export const createIterable = (subprocess, encoding, {
 | |
| 	from,
 | |
| 	binary: binaryOption = false,
 | |
| 	preserveNewlines = false,
 | |
| } = {}) => {
 | |
| 	const binary = binaryOption || BINARY_ENCODINGS.has(encoding);
 | |
| 	const subprocessStdout = getFromStream(subprocess, from);
 | |
| 	const onStdoutData = iterateOnSubprocessStream({
 | |
| 		subprocessStdout,
 | |
| 		subprocess,
 | |
| 		binary,
 | |
| 		shouldEncode: true,
 | |
| 		encoding,
 | |
| 		preserveNewlines,
 | |
| 	});
 | |
| 	return iterateOnStdoutData(onStdoutData, subprocessStdout, subprocess);
 | |
| };
 | |
| 
 | |
| const iterateOnStdoutData = async function * (onStdoutData, subprocessStdout, subprocess) {
 | |
| 	try {
 | |
| 		yield * onStdoutData;
 | |
| 	} finally {
 | |
| 		if (subprocessStdout.readable) {
 | |
| 			subprocessStdout.destroy();
 | |
| 		}
 | |
| 
 | |
| 		await subprocess;
 | |
| 	}
 | |
| };
 |