diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-12-01 08:56:10 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-01 08:56:10 -0700 |
commit | e6e708e46c51f3154a81ed99cd35c3d5569930f9 (patch) | |
tree | 57a0fdd4c0a5911b62b5af02d09d5a2d9de77ed9 /ext/web/06_streams.js | |
parent | 687ae870d1e4e856b7ceee0a5511138459c68cb1 (diff) |
refactor: use resourceForReadableStream for fetch (#20217)
Switch `ext/fetch` over to `resourceForReadableStream` to simplify and
unify implementation with `ext/serve`. This allows us to work in Rust
with resources only.
Two additional changes made to `resourceForReadableStream` were
required:
- Add an optional length to `resourceForReadableStream` which translates
to `size_hint`
- Fix a bug where writing to a closed stream that was full would panic
Diffstat (limited to 'ext/web/06_streams.js')
-rw-r--r-- | ext/web/06_streams.js | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js index 4f472984d..9fc15d1ad 100644 --- a/ext/web/06_streams.js +++ b/ext/web/06_streams.js @@ -12,6 +12,7 @@ const { op_arraybuffer_was_detached, op_transfer_arraybuffer, op_readable_stream_resource_allocate, + op_readable_stream_resource_allocate_sized, op_readable_stream_resource_get_sink, op_readable_stream_resource_write_error, op_readable_stream_resource_write_buf, @@ -863,13 +864,16 @@ function readableStreamReadFn(reader, sink) { * read operations, and those read operations will be fed by the output of the * ReadableStream source. * @param {ReadableStream<Uint8Array>} stream + * @param {number | undefined} length * @returns {number} */ -function resourceForReadableStream(stream) { +function resourceForReadableStream(stream, length) { const reader = acquireReadableStreamDefaultReader(stream); // Allocate the resource - const rid = op_readable_stream_resource_allocate(); + const rid = typeof length == "number" + ? op_readable_stream_resource_allocate_sized(length) + : op_readable_stream_resource_allocate(); // Close the Reader we get from the ReadableStream when the resource is closed, ignoring any errors PromisePrototypeCatch( |