From bdc72ed15c689f08036bd58d2175c88e2b4f3ae1 Mon Sep 17 00:00:00 2001 From: Abanoub Ghadban Date: Thu, 6 Feb 2025 16:16:17 +0200 Subject: [PATCH] Fix RSC stream parsing to handle incomplete chunks - Introduce `lastIncompleteChunk` to preserve partial JSON data between stream reads - Ensure complete JSON chunks are processed by splitting on newlines - Handle cases where the last chunk is not terminated with a newline --- .../src/transformRSCStreamAndReplayConsoleLogs.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/node_package/src/transformRSCStreamAndReplayConsoleLogs.ts b/node_package/src/transformRSCStreamAndReplayConsoleLogs.ts index 4fae6cf46..dff45db8a 100644 --- a/node_package/src/transformRSCStreamAndReplayConsoleLogs.ts +++ b/node_package/src/transformRSCStreamAndReplayConsoleLogs.ts @@ -5,10 +5,18 @@ export default function transformRSCStreamAndReplayConsoleLogs(stream: ReadableS const decoder = new TextDecoder(); const encoder = new TextEncoder(); + let lastIncompleteChunk = ''; let { value, done } = await reader.read(); while (!done) { - const decodedValue = decoder.decode(value); - const jsonChunks = decodedValue.split('\n') + const decodedValue = lastIncompleteChunk + decoder.decode(value); + const chunks = decodedValue.split('\n'); + if (!decodedValue.endsWith('\n')) { + lastIncompleteChunk = chunks.pop() ?? ''; + } else { + lastIncompleteChunk = ''; + } + + const jsonChunks = chunks .filter(line => line.trim() !== '') .map((line) => { try {