1import * as BunStream from "@effect/platform-bun/BunStream"
2import { assert, describe, it } from "@effect/vitest"
3import * as Cause from "effect/Cause"
4import * as Effect from "effect/Effect"
5import * as Exit from "effect/Exit"
6import * as Stream from "effect/Stream"
7
8describe("BunStream", () => {
9 it.effect("preserves mapped failures from errored readable streams", () =>
10 Effect.gen(function*() {
11 const exit = yield* BunStream.fromReadableStream({
12 evaluate: () =>
13 new ReadableStream<number>({
14 start(controller) {
15 controller.error(new Error("boom"))
16 }
17 }),
18 onError: (error) => new Error(`mapped: ${(error as Error).message}`)
19 }).pipe(Stream.runDrain, Effect.exit)
20
21 assert.isTrue(Exit.isFailure(exit))
22 if (Exit.isFailure(exit)) {
23 assert.isTrue(exit.cause.reasons.every(Cause.isFailReason))
24 assert.deepStrictEqual(Cause.squash(exit.cause), new Error("mapped: boom"))
25 }
26 }))
27})