35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * Most browsers don't yet have async iterable support for ReadableStream, | ||
|  |  * and Node has a very different way of reading bytes from its "ReadableStream". | ||
|  |  * | ||
|  |  * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
 | ||
|  |  */ | ||
|  | export function ReadableStreamToAsyncIterable(stream) { | ||
|  |     if (stream[Symbol.asyncIterator]) | ||
|  |         return stream; | ||
|  |     const reader = stream.getReader(); | ||
|  |     return { | ||
|  |         async next() { | ||
|  |             try { | ||
|  |                 const result = await reader.read(); | ||
|  |                 if (result?.done) | ||
|  |                     reader.releaseLock(); // release lock when stream becomes closed
 | ||
|  |                 return result; | ||
|  |             } | ||
|  |             catch (e) { | ||
|  |                 reader.releaseLock(); // release lock when stream becomes errored
 | ||
|  |                 throw e; | ||
|  |             } | ||
|  |         }, | ||
|  |         async return() { | ||
|  |             const cancelPromise = reader.cancel(); | ||
|  |             reader.releaseLock(); | ||
|  |             await cancelPromise; | ||
|  |             return { done: true, value: undefined }; | ||
|  |         }, | ||
|  |         [Symbol.asyncIterator]() { | ||
|  |             return this; | ||
|  |         }, | ||
|  |     }; | ||
|  | } | ||
|  | //# sourceMappingURL=stream-utils.mjs.map
 |