[whatwg/streams] Add WritableStreamDefaultController.releaseBackpressure() (PR #1190)

This adds a new `releaseBackpressure()` method *(name to be decided)* to `WritableStreamDefaultController`, allowing a `WritableStream` with HWM = 0 to resolve the pending `writer.ready` promise manually.

This also integrates with `TransformStream`s: when `pull()` is called on the readable side, the transform stream calls `releaseBackpressure()` on its writable side. This allows piping through `TransformStream`s with HWM = 0 on *both* their readable and writable side, enabling "unbuffered" transformations:
```javascript
const rs = new ReadableStream({
  start(c) {
    c.enqueue("a");
    c.enqueue("b");
    c.enqueue("c");
    c.close();
  }
});

const upperCaseTransform = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  }
}, { highWaterMark: 0 }, { highWaterMark: 0 });

const ws = new WritableStream({
  write(chunk) {
    console.log(chunk);
  }
});

await rs.pipeThrough(upperCaseTransform).pipeTo(ws);
```
Previously, the above snippet would stall.

Fixes #1158.

To do:
* [ ] Write spec text
* [ ] Write more tests
* [ ] Bikeshed on the method name

---

- [ ] At least two implementers are interested (and none opposed):
   * …
   * …
- [ ] [Tests](https://github.com/web-platform-tests/wpt) are written and can be reviewed and commented upon at:
   * …
- [ ] [Implementation bugs](https://github.com/whatwg/meta/blob/main/MAINTAINERS.md#handling-pull-requests) are filed:
   * Chrome: …
   * Firefox: …
   * Safari: …

(See [WHATWG Working Mode: Changes](https://whatwg.org/working-mode#changes) for more details.)

You can view, comment on, or merge this pull request online at:

  https://github.com/whatwg/streams/pull/1190


-- Commit Summary --

  * Add WritableStreamDefaultController.releaseBackpressure()
  * Use releaseBackpressure() in TransformStream pull() algorithm
  * Roll WPT

-- File Changes --

    M reference-implementation/lib/WritableStreamDefaultController-impl.js (8)
    M reference-implementation/lib/WritableStreamDefaultController.webidl (1)
    M reference-implementation/lib/abstract-ops/transform-streams.js (7)
    M reference-implementation/lib/abstract-ops/writable-streams.js (20)
    M reference-implementation/web-platform-tests (2)

-- Patch Links --

https://github.com/whatwg/streams/pull/1190.patch

https://github.com/whatwg/streams/pull/1190.diff


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/pull/1190

Received on Thursday, 25 November 2021 00:24:20 UTC