mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-22 17:31:58 -05:00
LibWeb: Implement static method ReadableStream.from(asyncIterable)
(cherry picked from commit 0ec0e92b100faf92256e704b9e94e9c90a04b642)
This commit is contained in:
parent
2e45967127
commit
7cbe5c9d4a
5 changed files with 45 additions and 1 deletions
|
@ -0,0 +1,5 @@
|
|||
Well
|
||||
Hello
|
||||
Friends
|
||||
!
|
||||
🦬
|
|
@ -0,0 +1,30 @@
|
|||
<script src="../include.js"></script>
|
||||
<script>
|
||||
async function* asyncGenerator() {
|
||||
yield "Well";
|
||||
yield "Hello";
|
||||
yield "Friends";
|
||||
yield "!";
|
||||
yield "🦬";
|
||||
}
|
||||
|
||||
async function readStream(stream) {
|
||||
const reader = stream.getReader();
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done)
|
||||
break;
|
||||
println(value);
|
||||
}
|
||||
}
|
||||
|
||||
test(async () => {
|
||||
const asyncIterable = {
|
||||
[Symbol.asyncIterator]: asyncGenerator,
|
||||
};
|
||||
|
||||
const readableStream = ReadableStream.from(asyncIterable);
|
||||
|
||||
await readStream(readableStream);
|
||||
});
|
||||
</script>
|
|
@ -68,6 +68,13 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> ReadableStream::construct_
|
|||
return readable_stream;
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#rs-from
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> ReadableStream::from(JS::VM& vm, JS::Value async_iterable)
|
||||
{
|
||||
// 1. Return ? ReadableStreamFromIterable(asyncIterable).
|
||||
return TRY(readable_stream_from_iterable(vm, async_iterable));
|
||||
}
|
||||
|
||||
ReadableStream::ReadableStream(JS::Realm& realm)
|
||||
: PlatformObject(realm)
|
||||
{
|
||||
|
|
|
@ -70,6 +70,8 @@ public:
|
|||
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> construct_impl(JS::Realm&, Optional<JS::Handle<JS::Object>> const& underlying_source, QueuingStrategy const& = {});
|
||||
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStream>> from(JS::VM& vm, JS::Value async_iterable);
|
||||
|
||||
virtual ~ReadableStream() override;
|
||||
|
||||
bool locked() const;
|
||||
|
|
|
@ -29,7 +29,7 @@ dictionary ReadableStreamGetReaderOptions {
|
|||
interface ReadableStream {
|
||||
constructor(optional object underlyingSource, optional QueuingStrategy strategy = {});
|
||||
|
||||
[FIXME] static ReadableStream from(any asyncIterable);
|
||||
static ReadableStream from(any asyncIterable);
|
||||
|
||||
readonly attribute boolean locked;
|
||||
|
||||
|
|
Loading…
Reference in a new issue