TypeError when Stream is locked

This commit is contained in:
Muki Kiboigo
2025-09-03 08:12:37 -07:00
parent 4fd365b520
commit b5021bd9fa
3 changed files with 23 additions and 9 deletions

View File

@@ -75,7 +75,15 @@ pub fn constructor(underlying: ?UnderlyingSource, strategy: ?QueueingStrategy, p
return stream;
}
pub fn _cancel(self: *const ReadableStream, page: *Page) Env.Promise {
pub fn get_locked(self: *const ReadableStream) bool {
return self.locked;
}
pub fn _cancel(self: *const ReadableStream, page: *Page) !Env.Promise {
if (self.locked) {
return error.TypeError;
}
const resolver = Env.PromiseResolver{
.js_context = page.main_context,
.resolver = self.cancel_resolver.castToPromiseResolver(),
@@ -84,21 +92,28 @@ pub fn _cancel(self: *const ReadableStream, page: *Page) Env.Promise {
return resolver.promise();
}
pub fn get_locked(self: *const ReadableStream) bool {
return self.locked;
}
const GetReaderOptions = struct {
// Mode must equal 'byob' or be undefined. RangeError otherwise.
mode: ?[]const u8 = null,
};
pub fn _getReader(self: *ReadableStream, _options: ?GetReaderOptions, page: *Page) ReadableStreamDefaultReader {
pub fn _getReader(self: *ReadableStream, _options: ?GetReaderOptions, page: *Page) !ReadableStreamDefaultReader {
if (self.locked) {
return error.TypeError;
}
const options = _options orelse GetReaderOptions{};
_ = options;
return ReadableStreamDefaultReader.constructor(self, page);
}
// TODO: pipeThrough (requires TransformStream)
// TODO: pipeTo (requires WritableStream)
// TODO: tee
const testing = @import("../../testing.zig");
test "streams: ReadableStream" {
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .url = "https://lightpanda.io" });

View File

@@ -54,5 +54,4 @@ pub fn _enqueue(self: *ReadableStreamDefaultController, chunk: []const u8, page:
pub fn _error(self: *ReadableStreamDefaultController, err: Env.JsObject) void {
self.stream.state = .{ .errored = err };
// set to error.
}

View File

@@ -47,8 +47,8 @@ pub fn get_closed(self: *const ReadableStreamDefaultReader) Env.Promise {
return self.closed_resolver.promise();
}
pub fn _cancel(self: *ReadableStreamDefaultReader, page: *Page) Env.Promise {
return self.stream._cancel(page);
pub fn _cancel(self: *ReadableStreamDefaultReader, page: *Page) !Env.Promise {
return try self.stream._cancel(page);
}
pub const ReadableStreamReadResult = struct {