38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable;
 | |
| /**
 | |
|  * 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
 | |
|  */
 | |
| 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.js.map
 |