@@ -47,6 +47,7 @@ const {
47
47
// Lazy loaded to improve the startup performance.
48
48
let StringDecoder ;
49
49
let createReadableStreamAsyncIterator ;
50
+ let from ;
50
51
51
52
Object . setPrototypeOf ( Readable . prototype , Stream . prototype ) ;
52
53
Object . setPrototypeOf ( Readable , Stream ) ;
@@ -1209,40 +1210,8 @@ function endReadableNT(state, stream) {
1209
1210
}
1210
1211
1211
1212
Readable . from = function ( iterable , opts ) {
1212
- let iterator ;
1213
- if ( iterable && iterable [ Symbol . asyncIterator ] )
1214
- iterator = iterable [ Symbol . asyncIterator ] ( ) ;
1215
- else if ( iterable && iterable [ Symbol . iterator ] )
1216
- iterator = iterable [ Symbol . iterator ] ( ) ;
1217
- else
1218
- throw new ERR_INVALID_ARG_TYPE ( 'iterable' , [ 'Iterable' ] , iterable ) ;
1219
-
1220
- const readable = new Readable ( {
1221
- objectMode : true ,
1222
- ...opts
1223
- } ) ;
1224
- // Reading boolean to protect against _read
1225
- // being called before last iteration completion.
1226
- let reading = false ;
1227
- readable . _read = function ( ) {
1228
- if ( ! reading ) {
1229
- reading = true ;
1230
- next ( ) ;
1231
- }
1232
- } ;
1233
- async function next ( ) {
1234
- try {
1235
- const { value, done } = await iterator . next ( ) ;
1236
- if ( done ) {
1237
- readable . push ( null ) ;
1238
- } else if ( readable . push ( await value ) ) {
1239
- next ( ) ;
1240
- } else {
1241
- reading = false ;
1242
- }
1243
- } catch ( err ) {
1244
- readable . destroy ( err ) ;
1245
- }
1213
+ if ( from === undefined ) {
1214
+ from = require ( 'internal/streams/from' ) ;
1246
1215
}
1247
- return readable ;
1216
+ return from ( Readable , iterable , opts ) ;
1248
1217
} ;
0 commit comments