From 4a5fd493e04e7a622f3e5b0655706c37abdc3d0c Mon Sep 17 00:00:00 2001 From: Tim Smart Date: Wed, 29 Jul 2026 13:41:33 +1200 Subject: [PATCH] Construct empty Bun multipart streams per request --- .changeset/eff-170-bun-multipart-stream.md | 5 +++++ packages/platform-bun/src/BunMultipart.ts | 15 +++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 .changeset/eff-170-bun-multipart-stream.md diff --git a/.changeset/eff-170-bun-multipart-stream.md b/.changeset/eff-170-bun-multipart-stream.md new file mode 100644 index 00000000000..ccc6b55a9f0 --- /dev/null +++ b/.changeset/eff-170-bun-multipart-stream.md @@ -0,0 +1,5 @@ +--- +"@effect/platform-bun": patch +--- + +Construct an empty multipart stream for each bodiless Bun request. diff --git a/packages/platform-bun/src/BunMultipart.ts b/packages/platform-bun/src/BunMultipart.ts index 080eea6b963..37162cc6bfb 100644 --- a/packages/platform-bun/src/BunMultipart.ts +++ b/packages/platform-bun/src/BunMultipart.ts @@ -24,19 +24,18 @@ import * as BunStream from "./BunStream.ts" */ export const stream = (source: Request): Stream.Stream => BunStream.fromReadableStream({ - evaluate: () => source.body ?? emptyReadbleStream, + evaluate: () => + source.body ?? new ReadableStream({ + start(controller) { + controller.enqueue(new Uint8Array()) + controller.close() + } + }), onError: (cause) => Multipart.MultipartError.fromReason("InternalError", cause) }).pipe( Stream.pipeThroughChannel(Multipart.makeChannel(Object.fromEntries(source.headers))) ) -const emptyReadbleStream = new ReadableStream({ - start(controller) { - controller.enqueue(new Uint8Array()) - controller.close() - } -}) - /** * Parses and persists multipart data from a Bun `Request`, requiring file-system, path, and scope services. *