From 622f100a24beeb46635d6de347fdf8499d84e081 Mon Sep 17 00:00:00 2001 From: Dinh Le Date: Thu, 27 Aug 2026 08:32:56 +0700 Subject: [PATCH] fix(core): avoid extending TransformStream in EventStreamDecoderStream Extending TransformStream resolves the global at module-evaluation time, so importing @standardserver/core crashed on runtimes without it even when the stream class was never used. Compose a TransformStream inside the constructor instead, deferring the global lookup to instantiation. --- packages/core/src/event-stream/decoder.test.ts | 15 +++++++++++++++ packages/core/src/event-stream/decoder.ts | 10 ++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/core/src/event-stream/decoder.test.ts b/packages/core/src/event-stream/decoder.test.ts index 89a5362..46dc92b 100644 --- a/packages/core/src/event-stream/decoder.test.ts +++ b/packages/core/src/event-stream/decoder.test.ts @@ -325,6 +325,21 @@ describe('eventStreamDecoderStream', () => { ]) }) + it('imports without TransformStream in the global scope', async ({ onTestFinished }) => { + vi.stubGlobal('TransformStream', undefined) + vi.resetModules() + + onTestFinished(() => { + vi.unstubAllGlobals() + vi.resetModules() + }) + + const module = await import('./decoder') + + expect(module.EventStreamDecoderStream).toBeDefined() + expect(module.decodeEventStreamMessage('data: hello\n\n')).toEqual({ data: 'hello' }) + }) + it('on incomplete message', async () => { const stream = new ReadableStream({ start(controller) { diff --git a/packages/core/src/event-stream/decoder.ts b/packages/core/src/event-stream/decoder.ts index 2c985fc..0104f86 100644 --- a/packages/core/src/event-stream/decoder.ts +++ b/packages/core/src/event-stream/decoder.ts @@ -143,11 +143,14 @@ export class EventStreamDecoder { } } -export class EventStreamDecoderStream extends TransformStream { +export class EventStreamDecoderStream implements ReadableWritablePair { + readonly readable: ReadableStream + readonly writable: WritableStream + constructor() { let decoder!: EventStreamDecoder - super({ + const transform = new TransformStream({ start(controller) { decoder = new EventStreamDecoder((event) => { controller.enqueue(event) @@ -160,5 +163,8 @@ export class EventStreamDecoderStream extends TransformStream