import gossamer/async_iterator.{type AsyncIterator} import gossamer/promise.{type Promise} import gossamer/readable_stream/byob_reader.{type ByobReader} import gossamer/readable_stream/default_controller.{type DefaultController} import gossamer/readable_stream/reader.{type Reader} import gossamer/readable_stream/stream_pipe_option.{type StreamPipeOption} import gossamer/readable_stream/underlying_source.{type UnderlyingSource} import gossamer/writable_stream.{type WritableStream} @external(javascript, "./readable_stream.type.ts", "ReadableStream$") pub type ReadableStream(a) @external(javascript, "./readable_stream.ffi.mjs", "new_") pub fn new(source: List(UnderlyingSource(a))) -> ReadableStream(a) pub fn from_start(start: fn(DefaultController(a)) -> Nil) -> ReadableStream(a) { new([underlying_source.Start(start)]) } pub fn from_pull( pull: fn(DefaultController(a)) -> Promise(Nil), ) -> ReadableStream(a) { new([underlying_source.Pull(pull)]) } @external(javascript, "./readable_stream.ffi.mjs", "from") pub fn from(iterable: a) -> ReadableStream(b) @external(javascript, "./readable_stream.ffi.mjs", "is_locked") pub fn is_locked(stream: ReadableStream(a)) -> Bool @external(javascript, "./readable_stream.ffi.mjs", "cancel") pub fn cancel(stream: ReadableStream(a), reason: r) -> Promise(Nil) @external(javascript, "./readable_stream.ffi.mjs", "get_reader") pub fn get_reader(stream: ReadableStream(a)) -> Reader(a) @external(javascript, "./readable_stream.ffi.mjs", "get_byob_reader") pub fn get_byob_reader(stream: ReadableStream(a)) -> ByobReader(a) @external(javascript, "./readable_stream.ffi.mjs", "pipe_through") pub fn pipe_through( stream: ReadableStream(a), transform: #(ReadableStream(b), WritableStream(a)), options: List(StreamPipeOption), ) -> ReadableStream(b) @external(javascript, "./readable_stream.ffi.mjs", "pipe_to") pub fn pipe_to( stream: ReadableStream(a), destination: WritableStream(a), options: List(StreamPipeOption), ) -> Promise(Nil) @external(javascript, "./readable_stream.ffi.mjs", "tee") pub fn tee(stream: ReadableStream(a)) -> #(ReadableStream(a), ReadableStream(a)) @external(javascript, "./readable_stream.ffi.mjs", "async_iterator") pub fn async_iterator(stream: ReadableStream(a)) -> AsyncIterator(a, Nil, Nil)