Skip to content

Commit d04118f

Browse files
ronagMylesBorins
authored andcommitted
stream: simplify push
PR-URL: #31150 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent 85926d4 commit d04118f

1 file changed

Lines changed: 33 additions & 52 deletions

File tree

‎lib/_stream_readable.js‎

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

226-
letskipChunkCheck;
227-
226+
leterr;
228227
if(!state.objectMode){
229228
if(typeofchunk==='string'){
230229
encoding=encoding||state.defaultEncoding;
@@ -236,54 +235,47 @@ function readableAddChunk(stream, chunk, encoding, addToFront) {
236235
chunk=Buffer.from(chunk,encoding);
237236
encoding='';
238237
}
239-
skipChunkCheck=true;
238+
}elseif(chunkinstanceofBuffer){
239+
encoding='';
240+
}elseif(Stream._isUint8Array(chunk)){
241+
chunk=Stream._uint8ArrayToBuffer(chunk);
242+
encoding='';
243+
}elseif(chunk!=null){
244+
err=newERR_INVALID_ARG_TYPE(
245+
'chunk',['string','Buffer','Uint8Array'],chunk);
240246
}
241-
}else{
242-
skipChunkCheck=true;
243247
}
244248

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

289281
// We can push more data if we are below the highWaterMark.
@@ -317,17 +309,6 @@ function addChunk(stream, state, chunk, addToFront) {
317309
maybeReadMore(stream,state);
318310
}
319311

320-
functionchunkInvalid(state,chunk){
321-
if(!Stream._isUint8Array(chunk)&&
322-
typeofchunk!=='string'&&
323-
chunk!==undefined&&
324-
!state.objectMode){
325-
returnnewERR_INVALID_ARG_TYPE(
326-
'chunk',['string','Buffer','Uint8Array'],chunk);
327-
}
328-
}
329-
330-
331312
Readable.prototype.isPaused=function(){
332313
conststate=this._readableState;
333314
returnstate[kPaused]===true||state.flowing===false;

0 commit comments

Comments
 (0)