From 5df64282f34d3cb5baabf2a6ea237d727e6ce897 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 19 Mar 2021 13:51:23 -0400 Subject: [PATCH 1/2] Add piping helpers for other specs See https://github.com/whatwg/fetch/pull/1199. --- index.bs | 66 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/index.bs b/index.bs index 318a053c7..c1fd08733 100644 --- a/index.bs +++ b/index.bs @@ -6177,19 +6177,6 @@ returns a positive number. JavaScript value |e|, perform ! [$ReadableStreamDefaultControllerError$](|stream|.[=ReadableStream/[[controller]]=], |e|). -
- To create a proxy for a - {{ReadableStream}} |stream|, perform the following steps. The result will be a new - {{ReadableStream}} object which pulls its data from |stream|, while |stream| itself becomes - immediately [=ReadableStream/locked=] and [=ReadableStream/disturbed=]. - - 1. Let |identityTransform| be the result of creating an identity `TransformStream`. - 1. Let |promise| be ! [$ReadableStreamPipeTo$](|stream|, - |identityTransform|.[=TransformStream/[[writable]]=], false, false, false, undefined). - 1. Set |promise|.\[[PromiseIsHandled]] to true. - 1. Return |identityTransform|.[=TransformStream/[[readable]]=]. -
-

Reading

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

Piping

+ +
+ The result of a {{ReadableStream}} |readable| piped to to a {{WritableStream}} |writable|, given an optional + boolean preventClose (default false), an + optional boolean preventAbort (default + false), an optional boolean preventCancel + (default false), and an optional {{AbortSignal}} signal, is given by performing the following steps. They will return a + {{Promise}} that fulfills when the pipe completes, or rejects with an exception if it fails. + + 1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false. + 1. Assert: ! [$IsWritableStreamLocked$](|writable|) is false. + 1. Let |signalArg| be |signal| if |signal| was given, or undefined otherwise. + 1. Return ! [$ReadableStreamPipeTo$](|readable|, |writable|, |preventClose|, |preventAbort|, + |preventCancel|, |signalArg|). + +

If one doesn't care about the promise returned, referencing this concept can be a + bit awkward. The best we can suggest is "[=ReadableStream/pipe=] readable to writable".

+
+ +
+ The result of a {{ReadableStream}} |readable| piped through a {{TransformStream}} |transform|, given an optional + boolean preventClose (default + false), an optional boolean preventAbort (default false), an optional boolean preventCancel (default false), and an optional + {{AbortSignal}} signal, perform the + following steps. The result will the [=readable side=] of |transform|. + + 1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false. + 1. Assert: ! [$IsWritableStreamLocked$](|transform|.[=TransformStream/[[writable]]=]) is false. + 1. Let |signalArg| be |signal| if |signal| was given, or undefined otherwise. + 1. Let |promise| be ! [$ReadableStreamPipeTo$](|readable|, + |transform|.[=TransformStream/[[writable]]=], |preventClose|, |preventAbort|, |preventCancel|, + |signalArg|). + 1. Set |promise|.\[[PromiseIsHandled]] to true. + 1. Return |transform|.[=TransformStream/[[readable]]=]. +
+ +
+ To create a proxy for a + {{ReadableStream}} |stream|, perform the following steps. The result will be a new + {{ReadableStream}} object which pulls its data from |stream|, while |stream| itself becomes + immediately [=ReadableStream/locked=] and [=ReadableStream/disturbed=]. + + 1. Let |identityTransform| be the result of creating an identity `TransformStream`. + 1. Return the result of |stream| [=ReadableStream/piped through=] |identityTransform|. +
+

Examples of creating streams

From 9caffa34d13511cd701bae7f5b5ddfb9306335f8 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 5 Apr 2021 17:04:00 -0400 Subject: [PATCH 2/2] Fix review comments --- index.bs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/index.bs b/index.bs index c1fd08733..e9fd0cda1 100644 --- a/index.bs +++ b/index.bs @@ -6554,13 +6554,15 @@ sense to pass them to {{ReadableStream/pipeThrough()}}.
The result of a {{ReadableStream}} |readable| piped to to a {{WritableStream}} |writable|, given an optional - boolean preventClose (default false), an - optional boolean preventAbort (default - false), an optional boolean preventCancel - (default false), and an optional {{AbortSignal}} signal, is given by performing the following steps. They will return a - {{Promise}} that fulfills when the pipe completes, or rejects with an exception if it fails. + to|piped to|piping to">piped to a {{WritableStream}} |writable|, given an optional boolean + preventClose + (default false), an optional boolean preventAbort (default false), an optional boolean preventCancel (default + false), and an optional {{AbortSignal}} signal, is given by performing the following steps. + They will return a {{Promise}} that fulfills when the pipe completes, or rejects with an exception + if it fails. 1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false. 1. Assert: ! [$IsWritableStreamLocked$](|writable|) is false. @@ -6575,13 +6577,15 @@ sense to pass them to {{ReadableStream/pipeThrough()}}.
The result of a {{ReadableStream}} |readable| piped through a {{TransformStream}} |transform|, given an optional - boolean preventClose (default - false), an optional boolean preventAbort (default false), an optional boolean preventCancel (default false), and an optional - {{AbortSignal}} signal, perform the - following steps. The result will the [=readable side=] of |transform|. + through|piped through|piping through">piped through a {{TransformStream}} |transform|, given + an optional boolean preventClose (default false), an optional boolean preventAbort + (default false), an optional boolean preventCancel (default false), and an + optional {{AbortSignal}} signal, is given by performing the following steps. The result will be + the [=readable side=] of |transform|. 1. Assert: ! [$IsReadableStreamLocked$](|readable|) is false. 1. Assert: ! [$IsWritableStreamLocked$](|transform|.[=TransformStream/[[writable]]=]) is false.