- From: James M Snell <notifications@github.com>
- Date: Tue, 05 Jul 2022 09:42:36 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1238@github.com>
Consuming a `ReadableStream` as either an `ArrayBuffer`, `Blob`, `FormData`, JSON, or text is a common use case. We can see this in `Body` mixin from fetch and the methods implemented by `Request` and `Response`, as well as in utilities such as Node.js' custom "stream consumers" documented here: https://nodejs.org/dist/latest-v18.x/docs/api/webstreams.html#utility-consumers The pattern is so common, it would be helpful to be able to standardize the pattern with a new type of standard reader type... Specifically something like: ``` [Exposed=(Window,Worker)] interface ReadableStreamBodyReader { constructor(ReadableStream stream); readonly attribute boolean bodyUsed; [NewObject] Promise<ArrayBuffer> arrayBuffer(); [NewObject] Promise<Blob> blob(); [NewObject] Promise<FormData> formData(); [NewObject] Promise<any> json(); [NewObject] Promise<USVString> text(); undefined releaseLock(); } ReadableStreamBodyReader includes ReadableStreamGenericReader; ``` Use example: ```js const readable = getReadableStreamSomehow(); const reader = readable.getReader({ mode: 'body' }); await reader.arrayBuffer(); // or await reader.text(); // or await reader.json(); // or await reader.formData(); // or await reader.blob(); ``` Note that the `ReadableStreamGenericReader` could but does not just include the `Body` mixin. This is because the `Body` mixin includes the `body` getter that really wouldn't make sense in this case. We *could* use it, however, if that is the preference. The key benefit of adding this is that it would standardize what is becoming a common pattern. -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1238 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/streams/issues/1238@github.com>
Received on Tuesday, 5 July 2022 16:42:50 UTC