@@ -36,14 +36,16 @@ const State = union(enum) {
3636
3737// This promise resolves when a stream is canceled.
3838cancel_resolver : v8 .Persistent (v8 .PromiseResolver ),
39+ closed_resolver : v8 .Persistent (v8 .PromiseResolver ),
40+ reader_resolver : ? v8 .Persistent (v8 .PromiseResolver ) = null ,
41+
3942locked : bool = false ,
4043state : State = .readable ,
4144
4245cancel_fn : ? Env.Function = null ,
4346pull_fn : ? Env.Function = null ,
4447
4548strategy : QueueingStrategy ,
46- reader_resolver : ? v8 .Persistent (v8 .PromiseResolver ) = null ,
4749queue : std .ArrayListUnmanaged ([]const u8 ) = .empty ,
4850
4951pub const ReadableStreamReadResult = struct {
@@ -82,8 +84,13 @@ pub fn constructor(underlying: ?UnderlyingSource, _strategy: ?QueueingStrategy,
8284 v8 .PromiseResolver .init (page .main_context .v8_context ),
8385 );
8486
87+ const closed_resolver = v8 .Persistent (v8 .PromiseResolver ).init (
88+ page .main_context .isolate ,
89+ v8 .PromiseResolver .init (page .main_context .v8_context ),
90+ );
91+
8592 const stream = try page .arena .create (ReadableStream );
86- stream .* = ReadableStream { .cancel_resolver = cancel_resolver , .strategy = strategy };
93+ stream .* = ReadableStream { .cancel_resolver = cancel_resolver , .closed_resolver = closed_resolver , . strategy = strategy };
8794
8895 const controller = ReadableStreamDefaultController { .stream = stream };
8996
@@ -106,6 +113,15 @@ pub fn constructor(underlying: ?UnderlyingSource, _strategy: ?QueueingStrategy,
106113 return stream ;
107114}
108115
116+ pub fn destructor (self : * ReadableStream ) void {
117+ self .cancel_resolver .deinit ();
118+ self .closed_resolver .deinit ();
119+
120+ if (self .reader_resolver ) | * rr | {
121+ rr .deinit ();
122+ }
123+ }
124+
109125pub fn get_locked (self : * const ReadableStream ) bool {
110126 return self .locked ;
111127}
@@ -150,7 +166,7 @@ const GetReaderOptions = struct {
150166 mode : ? []const u8 = null ,
151167};
152168
153- pub fn _getReader (self : * ReadableStream , _options : ? GetReaderOptions , page : * Page ) ! ReadableStreamDefaultReader {
169+ pub fn _getReader (self : * ReadableStream , _options : ? GetReaderOptions ) ! ReadableStreamDefaultReader {
154170 if (self .locked ) {
155171 return error .TypeError ;
156172 }
@@ -159,7 +175,7 @@ pub fn _getReader(self: *ReadableStream, _options: ?GetReaderOptions, page: *Pag
159175 const options = _options orelse GetReaderOptions {};
160176 _ = options ;
161177
162- return ReadableStreamDefaultReader .constructor (self , page );
178+ return ReadableStreamDefaultReader .constructor (self );
163179}
164180
165181// TODO: pipeThrough (requires TransformStream)
0 commit comments