From 1ece82b4c0cfecdb205d3d1329a9b9f4c2db05c4 Mon Sep 17 00:00:00 2001 From: Vitali Kuzmich Date: Thu, 26 Oct 2023 02:09:41 +0200 Subject: [PATCH] stream: consolidate common code from push and unshift helper functions --- lib/internal/streams/readable.js | 51 +++++++++++--------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/lib/internal/streams/readable.js b/lib/internal/streams/readable.js index 80798a35dcb34f..7092471211c873 100644 --- a/lib/internal/streams/readable.js +++ b/lib/internal/streams/readable.js @@ -368,6 +368,12 @@ Readable.prototype.push = function(chunk, encoding) { debug('push', chunk); const state = this._readableState; + if (chunk === null) { + state[kState] &= ~kReading; + onEofChunk(this, state); + return false; + } + return (state[kState] & kObjectMode) === 0 ? readableAddChunkPushByteMode(this, state, chunk, encoding) : readableAddChunkPushObjectMode(this, state, chunk, encoding); @@ -377,20 +383,19 @@ Readable.prototype.push = function(chunk, encoding) { Readable.prototype.unshift = function(chunk, encoding) { debug('unshift', chunk); const state = this._readableState; + if (chunk === null) { + state[kState] &= ~kReading; + onEofChunk(this, state); + return false; + } + return (state[kState] & kObjectMode) === 0 ? readableAddChunkUnshiftByteMode(this, state, chunk, encoding) : - readableAddChunkUnshiftObjectMode(this, state, chunk); + readableAddChunkUnshiftValue(this, state, chunk); }; function readableAddChunkUnshiftByteMode(stream, state, chunk, encoding) { - if (chunk === null) { - state[kState] &= ~kReading; - onEofChunk(stream, state); - - return false; - } - if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; if (state.encoding !== encoding) { @@ -418,21 +423,11 @@ function readableAddChunkUnshiftByteMode(stream, state, chunk, encoding) { return readableAddChunkUnshiftValue(stream, state, chunk); } -function readableAddChunkUnshiftObjectMode(stream, state, chunk) { - if (chunk === null) { - state[kState] &= ~kReading; - onEofChunk(stream, state); - - return false; - } - - return readableAddChunkUnshiftValue(stream, state, chunk); -} - function readableAddChunkUnshiftValue(stream, state, chunk) { - if ((state[kState] & kEndEmitted) !== 0) + if ((state[kState] & kEndEmitted) !== 0) { errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT()); - else if ((state[kState] & (kDestroyed | kErrored)) !== 0) + return false; + } else if ((state[kState] & (kDestroyed | kErrored)) !== 0) return false; else addChunk(stream, state, chunk, true); @@ -441,12 +436,6 @@ function readableAddChunkUnshiftValue(stream, state, chunk) { } function readableAddChunkPushByteMode(stream, state, chunk, encoding) { - if (chunk === null) { - state[kState] &= ~kReading; - onEofChunk(stream, state); - return false; - } - if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; if (state.encoding !== encoding) { @@ -464,7 +453,7 @@ function readableAddChunkPushByteMode(stream, state, chunk, encoding) { return false; } - if (!chunk || chunk.length <= 0) { + if (!chunk || chunk.length === 0) { state[kState] &= ~kReading; maybeReadMore(stream, state); @@ -494,12 +483,6 @@ function readableAddChunkPushByteMode(stream, state, chunk, encoding) { } function readableAddChunkPushObjectMode(stream, state, chunk, encoding) { - if (chunk === null) { - state[kState] &= ~kReading; - onEofChunk(stream, state); - return false; - } - if ((state[kState] & kEnded) !== 0) { errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); return false;