diff --git a/src/browser/streams/ReadableStream.zig b/src/browser/streams/ReadableStream.zig index a25fd635..a33459d6 100644 --- a/src/browser/streams/ReadableStream.zig +++ b/src/browser/streams/ReadableStream.zig @@ -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" }); diff --git a/src/browser/streams/ReadableStreamDefaultController.zig b/src/browser/streams/ReadableStreamDefaultController.zig index 4cd10c7a..ed1ca9a9 100644 --- a/src/browser/streams/ReadableStreamDefaultController.zig +++ b/src/browser/streams/ReadableStreamDefaultController.zig @@ -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. } diff --git a/src/browser/streams/ReadableStreamDefaultReader.zig b/src/browser/streams/ReadableStreamDefaultReader.zig index 307dd75e..1646a855 100644 --- a/src/browser/streams/ReadableStreamDefaultReader.zig +++ b/src/browser/streams/ReadableStreamDefaultReader.zig @@ -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 {