Add desiredSize accessor to WritableStreamDefaultWriter

Returns 1 when writable (default high water mark), 0 when closed,
and null when errored, matching the spec behavior for streams
without a custom queuing strategy.
This commit is contained in:
Pierre Tachoire
2026-03-02 14:41:03 +01:00
parent c1c0a7d494
commit c121dbbd67
2 changed files with 18 additions and 0 deletions

View File

@@ -50,6 +50,14 @@
} }
</script> </script>
<script id=writable_stream_writer_desired_size>
{
const ws = new WritableStream();
const writer = ws.getWriter();
testing.expectEqual(1, writer.desiredSize);
}
</script>
<script id=text_encoder_stream_encoding> <script id=text_encoder_stream_encoding>
{ {
const tes = new TextEncoderStream(); const tes = new TextEncoderStream();

View File

@@ -79,6 +79,15 @@ pub fn getClosed(self: *WritableStreamDefaultWriter, page: *Page) !js.Promise {
return page.js.local.?.resolvePromise(.{}); return page.js.local.?.resolvePromise(.{});
} }
pub fn getDesiredSize(self: *const WritableStreamDefaultWriter) ?i32 {
const stream = self._stream orelse return null;
return switch (stream._state) {
.writable => 1,
.closed => 0,
.errored => null,
};
}
pub fn getReady(self: *WritableStreamDefaultWriter, page: *Page) !js.Promise { pub fn getReady(self: *WritableStreamDefaultWriter, page: *Page) !js.Promise {
_ = self; _ = self;
return page.js.local.?.resolvePromise(.{}); return page.js.local.?.resolvePromise(.{});
@@ -98,4 +107,5 @@ pub const JsApi = struct {
pub const releaseLock = bridge.function(WritableStreamDefaultWriter.releaseLock, .{}); pub const releaseLock = bridge.function(WritableStreamDefaultWriter.releaseLock, .{});
pub const closed = bridge.accessor(WritableStreamDefaultWriter.getClosed, null, .{}); pub const closed = bridge.accessor(WritableStreamDefaultWriter.getClosed, null, .{});
pub const ready = bridge.accessor(WritableStreamDefaultWriter.getReady, null, .{}); pub const ready = bridge.accessor(WritableStreamDefaultWriter.getReady, null, .{});
pub const desiredSize = bridge.accessor(WritableStreamDefaultWriter.getDesiredSize, null, .{});
}; };