Skip to content

Conversation

foolip
Copy link
Member

@foolip foolip commented Oct 2, 2025

Fixes #1861.

  • At least two implementers are interested (and none opposed):
  • Tests are written and can be reviewed and commented upon at:
  • Implementation bugs are filed:
    • Chromium: …
    • Gecko: …
    • WebKit: …
    • Deno (not for CORS changes): …
  • MDN issue is filed: …
  • The top of this comment includes a clear commit message to use.

(See WHATWG Working Mode: Changes for more details.)


Preview | Diff


<li><p>Let <var>stream</var> be <a>this</a>'s <a for=Body>body</a>'s <a for=body>stream</a>.

<li><p>Let <var>decoder</var> be a new {{TextDecoderStream}} object.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This and the next step would need improving if there's interest in this method.

The constructor steps for TextDecoderStream aren't implicitly run by just saying "new object", but what I'm after is an UTF-8 decoder with the default settings.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MattiasBuelens or @ricea might have thoughts, but ideally we don't use public API for internal algorithms.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably expose an algorithm to create a TextDecoderStream from other specifications, like we do for Streams.


<li><p>Let <var>decoder</var> be a new {{TextDecoderStream}} object.

<li><p>Return the result of piping <var>stream</var> through <var>decoder</var>.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here "pipe through" would need to link to something. I'm not sure if there are other APIs that internally do something similar that I could copy?

Copy link

@MattiasBuelens MattiasBuelens Oct 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should be able to use the pipe through algorithm exposed for other specifications. [=piping through=] should work. 😉


<li><p>Let <var>stream</var> be <a>this</a>'s <a for=Body>body</a>'s <a for=body>stream</a>.

<li><p>Let <var>decoder</var> be a new {{TextDecoderStream}} object.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MattiasBuelens or @ricea might have thoughts, but ideally we don't use public API for internal algorithms.

</div>

<div algorithm>
<p>The <dfn method for=Body><code>textStream()</code></dfn> method steps are:</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think for the null case it'd be nicer to return an empty stream, similar to what text() does.

Another thing that's not entirely clear to me is whether piping ends up making the underlying stream unusable so that you can't invoke text() after textStream() for instance. (That's a property we want.)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I didn't realize what text() does if this.body is null. I agree an empty stream would be better, code that doesn't consider this case would likely just work.

I thought this should behave like when you try to use both blob() and bytes(), or indeed call one of those twice. That throws a TypeError in the first step of https://fetch.spec.whatwg.org/#concept-body-consume-body.

Since it's not possible to call text() twice, should it really be possible to call text() after textStream()?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should not be possible.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good, that should be easy to achieve, even though the current spec text doesn't make clear what happens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Convenience method to stream a response as text
3 participants