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. *