deno icon indicating copy to clipboard operation
deno copied to clipboard

fix(ext/web): ReadableStream.from() ignores null Symbol.asyncIterator

Open Milly opened this issue 1 year ago • 0 comments

If @@asyncIterator is null or undefined, it should ignores and fallback to @@iterator.

Tests have been merged into WPT. https://github.com/web-platform-tests/wpt/pull/46374

The proposal of ReadableStream.from uses TC39 GetIterator and GetMethod within it. GetMethod treats null as undefined. So if @@asyncIterator is null it should be ignored and fallback to @@iterator.

> deno eval "ReadableStream.from({ [Symbol.asyncIterator]: null, [Symbol.iterator]: () => ({ next: () => ({ done: true }) }) }).pipeTo(new WritableStream())"
error: Uncaught (in promise) TypeError: obj[SymbolAsyncIterator] is not a function
ReadableStream.from({ [Symbol.asyncIterator]: null, [Symbol.iterator]: () => ({ next: () => ({ done: true }) }) }).pipeTo(new WritableStream())
               ^
    at getIterator (ext:deno_web/06_streams.js:5105:38)
    at Function.from (ext:deno_web/06_streams.js:5207:22)
    at file:///D:/work/js/deno/tests/wpt/suite/$deno$eval:1:16

Milly avatar May 21 '24 00:05 Milly