Skip to content

Commit ff08afe

Browse files
fix: optimize sse chunk reading off-by-one error (#31)
1 parent 1b0851c commit ff08afe

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/internal/decoders/line.ts

+31
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,34 @@ function findNewlineIndex(
147147

148148
return null;
149149
}
150+
151+
export function findDoubleNewlineIndex(buffer: Uint8Array): number {
152+
// This function searches the buffer for the end patterns (\r\r, \n\n, \r\n\r\n)
153+
// and returns the index right after the first occurrence of any pattern,
154+
// or -1 if none of the patterns are found.
155+
const newline = 0x0a; // \n
156+
const carriage = 0x0d; // \r
157+
158+
for (let i = 0; i < buffer.length - 1; i++) {
159+
if (buffer[i] === newline && buffer[i + 1] === newline) {
160+
// \n\n
161+
return i + 2;
162+
}
163+
if (buffer[i] === carriage && buffer[i + 1] === carriage) {
164+
// \r\r
165+
return i + 2;
166+
}
167+
if (
168+
buffer[i] === carriage &&
169+
buffer[i + 1] === newline &&
170+
i + 3 < buffer.length &&
171+
buffer[i + 2] === carriage &&
172+
buffer[i + 3] === newline
173+
) {
174+
// \r\n\r\n
175+
return i + 4;
176+
}
177+
}
178+
179+
return -1;
180+
}

0 commit comments

Comments
 (0)