diff --git a/src/utils.ts b/src/utils.ts index 1f4240d..90797e6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,7 +5,7 @@ export function writeFromReadableStream(stream: ReadableStream, writ if (stream.locked) { throw new TypeError('ReadableStream is locked.') } else if (writable.destroyed) { - return + return stream.cancel() } const reader = stream.getReader() diff --git a/test/utils.test.ts b/test/utils.test.ts index 53f6972..e7d192e 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -109,4 +109,17 @@ describe('writeFromReadableStream', () => { expect(enqueueCalled).toBe(true) // enqueue should succeed expect(cancelCalled).toBe(false) // cancel should not be called }) + + it('does handle rejections from canceled streams', async () => { + const stream = new ReadableStream({ + async cancel() { + throw new Error('Aborted') + }, + }) + + const destroyedWritable = new Writable() + destroyedWritable.destroy() + + await expect(writeFromReadableStream(stream, destroyedWritable)).rejects.toThrow('Aborted') + }) })