Rewrite ReadableStream.pipeTo() using the public API #99
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Following up on #98, this re-implements
ReadableStream.pipeTo()
(and by extension.pipeThrough()
) to use the public API ofReadableStream
andWritableStream
, rather than using internal abstract ops.This opens the possibility to call
readable.pipeTo(writable)
with a nativeWritableStream
. Because we no longer use abstract ops to interact with theWritableStream
, any implementation with a compliantgetWriter()
method should do. Note that this isn't possible yet, because we still need to loosen the brand checks (e.g.IsWritableStream()
).Unfortunately we have to accept a few more WPT test failures:
pipeTo()
releases its reader lock while there is still a pendingread()
request. The public API (reader.releaseLock()
) guards against this and throws an error, but the internalReadableStreamGenericReaderRelease
abstract op doesn't actually check this. See Reject pending reads when releasing reader whatwg/streams#1168 for the proposed fix in the specification. For now, I've added a modified unit test that also enqueues a chunk in order to unblock theread()
.I'm still investigating what's going on here, and if we can fix the polyfill or add a modified test with slightly tweaked expectations.I've added modified tests.