(stream: any)
| 523 | * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490 |
| 524 | */ |
| 525 | export function readableStreamAsyncIterable<T>(stream: any): AsyncIterableIterator<T> { |
| 526 | if (stream[Symbol.asyncIterator]) return stream; |
| 527 | |
| 528 | const reader = stream.getReader(); |
| 529 | return { |
| 530 | async next() { |
| 531 | try { |
| 532 | const result = await reader.read(); |
| 533 | if (result?.done) reader.releaseLock(); // release lock when stream becomes closed |
| 534 | return result; |
| 535 | } catch (e) { |
| 536 | reader.releaseLock(); // release lock when stream becomes errored |
| 537 | throw e; |
| 538 | } |
| 539 | }, |
| 540 | async return() { |
| 541 | const cancelPromise = reader.cancel(); |
| 542 | reader.releaseLock(); |
| 543 | await cancelPromise; |
| 544 | return {done: true, value: undefined}; |
| 545 | }, |
| 546 | [Symbol.asyncIterator]() { |
| 547 | return this; |
| 548 | }, |
| 549 | }; |
| 550 | } |
no outgoing calls
no test coverage detected