Skip to content

Commit 6e76752

Browse files
ronagcodebytere
authored andcommitted
stream: simplify push
PR-URL: #31150 Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
1 parent 7a8963b commit 6e76752

File tree

1 file changed

+33
-52
lines changed

1 file changed

+33
-52
lines changed

‎lib/_stream_readable.js‎

Lines changed: 33 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,7 @@ function readableAddChunk(stream, chunk, encoding, addToFront){
218218
debug('readableAddChunk',chunk);
219219
conststate=stream._readableState;
220220

221-
letskipChunkCheck;
222-
221+
leterr;
223222
if(!state.objectMode){
224223
if(typeofchunk==='string'){
225224
encoding=encoding||state.defaultEncoding;
@@ -231,54 +230,47 @@ function readableAddChunk(stream, chunk, encoding, addToFront){
231230
chunk=Buffer.from(chunk,encoding);
232231
encoding='';
233232
}
234-
skipChunkCheck=true;
233+
}elseif(chunkinstanceofBuffer){
234+
encoding='';
235+
}elseif(Stream._isUint8Array(chunk)){
236+
chunk=Stream._uint8ArrayToBuffer(chunk);
237+
encoding='';
238+
}elseif(chunk!=null){
239+
err=newERR_INVALID_ARG_TYPE(
240+
'chunk',['string','Buffer','Uint8Array'],chunk);
235241
}
236-
}else{
237-
skipChunkCheck=true;
238242
}
239243

240-
if(chunk===null){
244+
if(err){
245+
errorOrDestroy(stream,err);
246+
}elseif(chunk===null){
241247
state.reading=false;
242248
onEofChunk(stream,state);
243-
}else{
244-
varer;
245-
if(!skipChunkCheck)
246-
er=chunkInvalid(state,chunk);
247-
if(er){
248-
errorOrDestroy(stream,er);
249-
}elseif(state.objectMode||(chunk&&chunk.length>0)){
250-
if(typeofchunk!=='string'&&
251-
!state.objectMode&&
252-
// Do not use Object.getPrototypeOf as it is slower since V8 7.3.
253-
!(chunkinstanceofBuffer)){
254-
chunk=Stream._uint8ArrayToBuffer(chunk);
255-
}
256-
257-
if(addToFront){
258-
if(state.endEmitted)
259-
errorOrDestroy(stream,newERR_STREAM_UNSHIFT_AFTER_END_EVENT());
249+
}elseif(state.objectMode||(chunk&&chunk.length>0)){
250+
if(addToFront){
251+
if(state.endEmitted)
252+
errorOrDestroy(stream,newERR_STREAM_UNSHIFT_AFTER_END_EVENT());
253+
else
254+
addChunk(stream,state,chunk,true);
255+
}elseif(state.ended){
256+
errorOrDestroy(stream,newERR_STREAM_PUSH_AFTER_EOF());
257+
}elseif(state.destroyed){
258+
returnfalse;
259+
}else{
260+
state.reading=false;
261+
if(state.decoder&&!encoding){
262+
chunk=state.decoder.write(chunk);
263+
if(state.objectMode||chunk.length!==0)
264+
addChunk(stream,state,chunk,false);
260265
else
261-
addChunk(stream,state,chunk,true);
262-
}elseif(state.ended){
263-
errorOrDestroy(stream,newERR_STREAM_PUSH_AFTER_EOF());
264-
}elseif(state.destroyed){
265-
returnfalse;
266+
maybeReadMore(stream,state);
266267
}else{
267-
state.reading=false;
268-
if(state.decoder&&!encoding){
269-
chunk=state.decoder.write(chunk);
270-
if(state.objectMode||chunk.length!==0)
271-
addChunk(stream,state,chunk,false);
272-
else
273-
maybeReadMore(stream,state);
274-
}else{
275-
addChunk(stream,state,chunk,false);
276-
}
268+
addChunk(stream,state,chunk,false);
277269
}
278-
}elseif(!addToFront){
279-
state.reading=false;
280-
maybeReadMore(stream,state);
281270
}
271+
}elseif(!addToFront){
272+
state.reading=false;
273+
maybeReadMore(stream,state);
282274
}
283275

284276
// We can push more data if we are below the highWaterMark.
@@ -306,17 +298,6 @@ function addChunk(stream, state, chunk, addToFront){
306298
maybeReadMore(stream,state);
307299
}
308300

309-
functionchunkInvalid(state,chunk){
310-
if(!Stream._isUint8Array(chunk)&&
311-
typeofchunk!=='string'&&
312-
chunk!==undefined&&
313-
!state.objectMode){
314-
returnnewERR_INVALID_ARG_TYPE(
315-
'chunk',['string','Buffer','Uint8Array'],chunk);
316-
}
317-
}
318-
319-
320301
Readable.prototype.isPaused=function(){
321302
conststate=this._readableState;
322303
returnstate[kPaused]===true||state.flowing===false;

0 commit comments

Comments
(0)