Skip to content

Commit 5df6428

Browse files
committed
Add piping helpers for other specs
See whatwg/fetch#1199.
1 parent 4b5b3cd commit 5df6428

File tree

1 file changed

+53
-13
lines changed

1 file changed

+53
-13
lines changed

index.bs

+53-13
Original file line numberDiff line numberDiff line change
@@ -6177,19 +6177,6 @@ returns a positive number.
61776177
JavaScript value |e|, perform !
61786178
[$ReadableStreamDefaultControllerError$](|stream|.[=ReadableStream/[[controller]]=], |e|).
61796179

6180-
<div algorithm>
6181-
To <dfn export for="ReadableStream" lt="create a proxy|creating a proxy">create a proxy</dfn> for a
6182-
{{ReadableStream}} |stream|, perform the following steps. The result will be a new
6183-
{{ReadableStream}} object which pulls its data from |stream|, while |stream| itself becomes
6184-
immediately [=ReadableStream/locked=] and [=ReadableStream/disturbed=].
6185-
6186-
1. Let |identityTransform| be the result of <a>creating an identity `TransformStream`</a>.
6187-
1. Let |promise| be ! [$ReadableStreamPipeTo$](|stream|,
6188-
|identityTransform|.[=TransformStream/[[writable]]=], false, false, false, undefined).
6189-
1. Set |promise|.\[[PromiseIsHandled]] to true.
6190-
1. Return |identityTransform|.[=TransformStream/[[readable]]=].
6191-
</div>
6192-
61936180
<h4 id="other-specs-rs-reading">Reading</h4>
61946181

61956182
The following algorithms can be used on arbitrary {{ReadableStream}} instances, including ones that
@@ -6563,6 +6550,59 @@ Streams</cite> is an example of this technique, with its `sender.createEncodedSt
65636550
Despite such endpoint pairs obeying the `readable`/`writable` property contract, it never makes
65646551
sense to pass them to {{ReadableStream/pipeThrough()}}.
65656552

6553+
<h3 id="other-specs-piping">Piping</h3>
6554+
6555+
<div algorithm="ReadableStream pipe to">
6556+
The result of a {{ReadableStream}} |readable| <dfn export for="ReadableStream" lt="pipe|pipe
6557+
to|piped to|piping to">piped to</dfn> to a {{WritableStream}} |writable|, given an optional
6558+
boolean <dfn export for="ReadableStream/pipe to"><var>preventClose</var></dfn> (default false), an
6559+
optional boolean <dfn export for="ReadableStream/pipe to"><var>preventAbort</var></dfn> (default
6560+
false), an optional boolean <dfn export for="ReadableStream/pipe to"><var>preventCancel</var></dfn>
6561+
(default false), and an optional {{AbortSignal}} <dfn export for="ReadableStream/pipe
6562+
to"><var>signal</var></dfn>, is given by performing the following steps. They will return a
6563+
{{Promise}} that fulfills when the pipe completes, or rejects with an exception if it fails.
6564+
6565+
1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false.
6566+
1. Assert: ! [$IsWritableStreamLocked$](|writable|) is false.
6567+
1. Let |signalArg| be |signal| if |signal| was given, or undefined otherwise.
6568+
1. Return ! [$ReadableStreamPipeTo$](|readable|, |writable|, |preventClose|, |preventAbort|,
6569+
|preventCancel|, |signalArg|).
6570+
6571+
<p class="note">If one doesn't care about the promise returned, referencing this concept can be a
6572+
bit awkward. The best we can suggest is "[=ReadableStream/pipe=] <var ignore>readable</var> to <var
6573+
ignore>writable</var>".</p>
6574+
</div>
6575+
6576+
<div algorithm="ReadableStream pipe through">
6577+
The result of a {{ReadableStream}} |readable| <dfn export for="ReadableStream" lt="pipe
6578+
through|piping through">piped through</dfn> a {{TransformStream}} |transform|, given an optional
6579+
boolean <dfn export for="ReadableStream/pipe through"><var>preventClose</var></dfn> (default
6580+
false), an optional boolean <dfn export for="ReadableStream/pipe
6581+
through"><var>preventAbort</var></dfn> (default false), an optional boolean <dfn export
6582+
for="ReadableStream/pipe through"><var>preventCancel</var></dfn> (default false), and an optional
6583+
{{AbortSignal}} <dfn export for="ReadableStream/pipe through"><var>signal</var></dfn>, perform the
6584+
following steps. The result will the [=readable side=] of |transform|.
6585+
6586+
1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false.
6587+
1. Assert: ! [$IsWritableStreamLocked$](|transform|.[=TransformStream/[[writable]]=]) is false.
6588+
1. Let |signalArg| be |signal| if |signal| was given, or undefined otherwise.
6589+
1. Let |promise| be ! [$ReadableStreamPipeTo$](|readable|,
6590+
|transform|.[=TransformStream/[[writable]]=], |preventClose|, |preventAbort|, |preventCancel|,
6591+
|signalArg|).
6592+
1. Set |promise|.\[[PromiseIsHandled]] to true.
6593+
1. Return |transform|.[=TransformStream/[[readable]]=].
6594+
</div>
6595+
6596+
<div algorithm>
6597+
To <dfn export for="ReadableStream" lt="create a proxy|creating a proxy">create a proxy</dfn> for a
6598+
{{ReadableStream}} |stream|, perform the following steps. The result will be a new
6599+
{{ReadableStream}} object which pulls its data from |stream|, while |stream| itself becomes
6600+
immediately [=ReadableStream/locked=] and [=ReadableStream/disturbed=].
6601+
6602+
1. Let |identityTransform| be the result of <a>creating an identity `TransformStream`</a>.
6603+
1. Return the result of |stream| [=ReadableStream/piped through=] |identityTransform|.
6604+
</div>
6605+
65666606
<h2 id="creating-examples">Examples of creating streams</h2>
65676607

65686608
<div class="non-normative">

0 commit comments

Comments
 (0)