summaryrefslogtreecommitdiff
path: root/ext/web/06_streams.js
diff options
context:
space:
mode:
authorMilly <milly.ca@gmail.com>2024-05-23 20:55:07 +0900
committerGitHub <noreply@github.com>2024-05-23 13:55:07 +0200
commitfa273509771c01d603d403002481bc1d01e4dd8b (patch)
tree578f03b94f5ddbd93b826a4d4a43cb8b5e19d541 /ext/web/06_streams.js
parentde5b47b13c457800828d2f3720706c44932ad772 (diff)
fix(ext/web): `ReadableStream.from()` ignores null `Symbol.asyncIterator` (#23910)
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`. [GetIterator]: https://tc39.es/ecma262/#sec-getiterator [GetMethod]: https://tc39.es/ecma262/#sec-getmethod ```bash > 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 ``` --------- Co-authored-by: Asher Gomez <ashersaupingomez@gmail.com>
Diffstat (limited to 'ext/web/06_streams.js')
-rw-r--r--ext/web/06_streams.js6
1 files changed, 3 insertions, 3 deletions
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js
index e01ece6c8..0192a54c6 100644
--- a/ext/web/06_streams.js
+++ b/ext/web/06_streams.js
@@ -5096,8 +5096,8 @@ async function* createAsyncFromSyncIterator(syncIterator) {
// Ref: https://tc39.es/ecma262/#sec-getiterator
function getIterator(obj, async = false) {
if (async) {
- if (obj[SymbolAsyncIterator] === undefined) {
- if (obj[SymbolIterator] === undefined) {
+ if (obj[SymbolAsyncIterator] == null) {
+ if (obj[SymbolIterator] == null) {
throw new TypeError("No iterator found");
}
return createAsyncFromSyncIterator(obj[SymbolIterator]());
@@ -5105,7 +5105,7 @@ function getIterator(obj, async = false) {
return obj[SymbolAsyncIterator]();
}
} else {
- if (obj[SymbolIterator] === undefined) {
+ if (obj[SymbolIterator] == null) {
throw new TypeError("No iterator found");
}
return obj[SymbolIterator]();