From d26ff54def3fa95bc4c670989b5a4e46210b12db Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sun, 2 Aug 2026 22:28:45 -0400 Subject: [PATCH] fix: stream promised read results lazily --- .changeset/wise-moons-read.md | 5 ++++ packages/kit/src/runtime/server/index.js | 34 +++++++----------------- 2 files changed, 15 insertions(+), 24 deletions(-) create mode 100644 .changeset/wise-moons-read.md diff --git a/.changeset/wise-moons-read.md b/.changeset/wise-moons-read.md new file mode 100644 index 000000000000..839ccf11669d --- /dev/null +++ b/.changeset/wise-moons-read.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: stream promised `read` results lazily instead of eagerly buffering them diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 0b1522391ef0..98dcc85465ca 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -67,31 +67,17 @@ export class Server { const result = read(file); if (result instanceof ReadableStream) { return result; - } else { - return new ReadableStream({ - async start(controller) { - try { - const stream = await Promise.resolve(result); - if (!stream) { - controller.close(); - return; - } - - const reader = stream.getReader(); - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - controller.enqueue(value); - } - - controller.close(); - } catch (error) { - controller.error(error); - } - } - }); } + + // TODO remove the cast once TypeScript's lib includes `ReadableStream.from` + return /** @type {ReadableStream} */ ( + /** @type {any} */ (ReadableStream).from( + (async function* () { + const stream = await result; + if (stream) yield* stream; + })() + ) + ); }; set_read_implementation(wrapped_read);