@@ -75,7 +75,15 @@ pub fn constructor(underlying: ?UnderlyingSource, strategy: ?QueueingStrategy, p
7575 return stream ;
7676}
7777
78- pub fn _cancel (self : * const ReadableStream , page : * Page ) Env.Promise {
78+ pub fn get_locked (self : * const ReadableStream ) bool {
79+ return self .locked ;
80+ }
81+
82+ pub fn _cancel (self : * const ReadableStream , page : * Page ) ! Env.Promise {
83+ if (self .locked ) {
84+ return error .TypeError ;
85+ }
86+
7987 const resolver = Env.PromiseResolver {
8088 .js_context = page .main_context ,
8189 .resolver = self .cancel_resolver .castToPromiseResolver (),
@@ -84,21 +92,28 @@ pub fn _cancel(self: *const ReadableStream, page: *Page) Env.Promise {
8492 return resolver .promise ();
8593}
8694
87- pub fn get_locked (self : * const ReadableStream ) bool {
88- return self .locked ;
89- }
90-
9195const GetReaderOptions = struct {
96+ // Mode must equal 'byob' or be undefined. RangeError otherwise.
9297 mode : ? []const u8 = null ,
9398};
9499
95- pub fn _getReader (self : * ReadableStream , _options : ? GetReaderOptions , page : * Page ) ReadableStreamDefaultReader {
100+ pub fn _getReader (self : * ReadableStream , _options : ? GetReaderOptions , page : * Page ) ! ReadableStreamDefaultReader {
101+ if (self .locked ) {
102+ return error .TypeError ;
103+ }
104+
96105 const options = _options orelse GetReaderOptions {};
97106 _ = options ;
98107
99108 return ReadableStreamDefaultReader .constructor (self , page );
100109}
101110
111+ // TODO: pipeThrough (requires TransformStream)
112+
113+ // TODO: pipeTo (requires WritableStream)
114+
115+ // TODO: tee
116+
102117const testing = @import ("../../testing.zig" );
103118test "streams: ReadableStream" {
104119 var runner = try testing .jsRunner (testing .tracking_allocator , .{ .url = "https://lightpanda.io" });
0 commit comments