stream: throw TypeError when criteria fulfilled in getIterator

PR-URL: https://github.com/nodejs/node/pull/53825
Fixes: https://github.com/nodejs/node/issues/53819
Refs: https://github.com/nodejs/node/issues/53819
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
This commit is contained in:
jakecastelli 2024-08-01 11:30:47 +09:30 committed by GitHub
parent 7941b4b333
commit 1fd170a7fc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 0 deletions

View File

@ -18,6 +18,7 @@ const {
const {
codes: {
ERR_ARG_NOT_ITERABLE,
ERR_INVALID_ARG_VALUE,
ERR_INVALID_STATE,
ERR_OPERATION_FAILED,
@ -235,6 +236,11 @@ function getIterator(obj, kind = 'sync', method) {
method = obj[SymbolAsyncIterator];
if (method === undefined) {
const syncMethod = obj[SymbolIterator];
if (syncMethod === undefined) {
throw new ERR_ARG_NOT_ITERABLE(obj);
}
const syncIteratorRecord = getIterator(obj, 'sync', syncMethod);
return createAsyncFromSyncIterator(syncIteratorRecord);
}
@ -243,6 +249,10 @@ function getIterator(obj, kind = 'sync', method) {
}
}
if (method === undefined) {
throw new ERR_ARG_NOT_ITERABLE(obj);
}
const iterator = FunctionPrototypeCall(method, obj);
if (typeof iterator !== 'object' || iterator === null) {
throw new ERR_INVALID_STATE.TypeError('The iterator method must return an object');

View File

@ -0,0 +1,9 @@
'use strict';
require('../common');
const assert = require('node:assert');
assert.throws(
() => ReadableStream.from({}),
{ code: 'ERR_ARG_NOT_ITERABLE', name: 'TypeError' },
);