From fefcb8987e0209bc80b965971621d219818325c4 Mon Sep 17 00:00:00 2001 From: twxia Date: Wed, 7 May 2025 12:46:06 +0100 Subject: [PATCH 1/3] fix(provider-utils): SSE parser bug (CRLF) CRLF pointer was incorrectly implemented in event-source-parser-stream --- .../provider-utils/src/event-source-parser-stream.test.ts | 6 ++++++ packages/provider-utils/src/event-source-parser-stream.ts | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/provider-utils/src/event-source-parser-stream.test.ts b/packages/provider-utils/src/event-source-parser-stream.test.ts index efa96ba72198..1de5f65e73d1 100644 --- a/packages/provider-utils/src/event-source-parser-stream.test.ts +++ b/packages/provider-utils/src/event-source-parser-stream.test.ts @@ -43,6 +43,12 @@ describe('EventSourceParserStream', () => { ]); }); + it('should handle CRLF lines correctly', async () => { + expect(await parseStream(['data: sup?\r\nevent: hey\n\n'])).toEqual([ + { data: 'sup?', event: 'hey' }, + ]); + }); + it('should handle CRLF line endings', async () => { expect(await parseStream(['data: hello\r\n\r\n'])).toEqual([ { data: 'hello' }, diff --git a/packages/provider-utils/src/event-source-parser-stream.ts b/packages/provider-utils/src/event-source-parser-stream.ts index c0ccb1208631..48bad31da760 100644 --- a/packages/provider-utils/src/event-source-parser-stream.ts +++ b/packages/provider-utils/src/event-source-parser-stream.ts @@ -120,8 +120,7 @@ function splitLines(buffer: string, chunk: string) { } else if (char === '\r') { lines.push(currentLine); currentLine = ''; - - if (chunk[i + 1] === '\n') { + if (chunk[i] === '\n') { i++; // CRLF case: Skip the LF character } } else { From a44ef491de0ecdf9c1fe45976bf441e4fc459787 Mon Sep 17 00:00:00 2001 From: twxia Date: Wed, 7 May 2025 12:46:06 +0100 Subject: [PATCH 2/3] chore: changeset --- .changeset/shaggy-singers-promise.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/shaggy-singers-promise.md diff --git a/.changeset/shaggy-singers-promise.md b/.changeset/shaggy-singers-promise.md new file mode 100644 index 000000000000..837f19d1e7ac --- /dev/null +++ b/.changeset/shaggy-singers-promise.md @@ -0,0 +1,5 @@ +--- +'@ai-sdk/provider-utils': major +--- + +SSE parser bug (CRLF should be handled correctly) From 8c7fcc7d14715f0e9b12117fd53b9d002aae898a Mon Sep 17 00:00:00 2001 From: twxia Date: Wed, 7 May 2025 12:46:06 +0100 Subject: [PATCH 3/3] chore: update changeset --- .changeset/shaggy-singers-promise.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/shaggy-singers-promise.md b/.changeset/shaggy-singers-promise.md index 837f19d1e7ac..575aa29cca30 100644 --- a/.changeset/shaggy-singers-promise.md +++ b/.changeset/shaggy-singers-promise.md @@ -1,5 +1,5 @@ --- -'@ai-sdk/provider-utils': major +'@ai-sdk/provider-utils': patch --- -SSE parser bug (CRLF should be handled correctly) +fix(provider-utils): fix SSE parser bug (CRLF)