| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // @ts-nocheck
- /**
- * A polyfill for `ReadableStream.protototype[Symbol.asyncIterator]`,
- * aligning as closely as possible to the specification.
- *
- * from https://gist.github.com/MattiasBuelens/496fc1d37adb50a733edd43853f2f60e
- *
- * @see https://streams.spec.whatwg.org/#rs-asynciterator
- * @see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#async_iteration
- */
- ReadableStream.prototype.values ??= function ({ preventCancel = false } = {}) {
- const reader = this.getReader()
- return {
- async next() {
- try {
- const result = await reader.read()
- if (result.done) {
- reader.releaseLock()
- }
- return result
- } catch (e) {
- reader.releaseLock()
- throw e
- }
- },
- async return(value) {
- if (!preventCancel) {
- const cancelPromise = reader.cancel(value)
- reader.releaseLock()
- await cancelPromise
- } else {
- reader.releaseLock()
- }
- return { done: true, value }
- },
- [Symbol.asyncIterator]() {
- return this
- },
- }
- }
- ReadableStream.prototype[Symbol.asyncIterator] ??=
- ReadableStream.prototype.values
|