(
self: Effect.Effect<HttpServerResponse, E, R>,
handleResponse: (
request: HttpServerRequest,
response: HttpServerResponse
) => Effect.Effect<unknown, EH, RH>,
middleware?: HttpMiddleware | undefined
)
| 34 | * @since 4.0.0 |
| 35 | */ |
| 36 | export const toHandled = <E, R, EH, RH>( |
| 37 | self: Effect.Effect<HttpServerResponse, E, R>, |
| 38 | handleResponse: ( |
| 39 | request: HttpServerRequest, |
| 40 | response: HttpServerResponse |
| 41 | ) => Effect.Effect<unknown, EH, RH>, |
| 42 | middleware?: HttpMiddleware | undefined |
| 43 | ): Effect.Effect<void, never, Exclude<R | RH | HttpServerRequest, Scope.Scope>> => { |
| 44 | const handleCause = (cause: Cause.Cause<E | EH | HttpServerError>) => |
| 45 | Effect.flatMapEager(causeResponse(cause), ([response, cause]) => { |
| 46 | const fiber = Fiber.getCurrent()! |
| 47 | reportCauseUnsafe(fiber, cause) |
| 48 | const request = Context.getUnsafe(fiber.context, HttpServerRequest) |
| 49 | const handler = preResponseHandler.requestPreResponseHandlers.get(request.source) |
| 50 | const cont = cause.reasons.length === 0 ? Effect.succeed(response) : Effect.failCause(cause) |
| 51 | if (handler === undefined) { |
| 52 | ;(request as any)[handledSymbol] = true |
| 53 | return Effect.flatMapEager( |
| 54 | handleResponse(request, response), |
| 55 | () => cont |
| 56 | ) |
| 57 | } |
| 58 | |
| 59 | return Effect.flatMapEager( |
| 60 | Effect.flatMapEager(handler(request, response), (response) => { |
| 61 | ;(request as any)[handledSymbol] = true |
| 62 | return handleResponse(request, response) |
| 63 | }), |
| 64 | () => cont |
| 65 | ) |
| 66 | }) |
| 67 | |
| 68 | const responded = Effect.matchCauseEffect(self, { |
| 69 | onSuccess: (response) => { |
| 70 | const fiber = Fiber.getCurrent()! |
| 71 | const request = Context.getUnsafe(fiber.context, HttpServerRequest) |
| 72 | const handler = preResponseHandler.requestPreResponseHandlers.get(request.source) |
| 73 | if (handler === undefined) { |
| 74 | ;(request as any)[handledSymbol] = true |
| 75 | return Effect.mapEager(handleResponse(request, response), () => response) |
| 76 | } |
| 77 | return Effect.flatMapEager(handler(request, response), (sentResponse) => { |
| 78 | ;(request as any)[handledSymbol] = true |
| 79 | return Effect.mapEager(handleResponse(request, sentResponse), () => response) |
| 80 | }) |
| 81 | }, |
| 82 | onFailure: handleCause |
| 83 | }) |
| 84 | |
| 85 | const withMiddleware: Effect.Effect< |
| 86 | unknown, |
| 87 | E | EH | HttpServerError, |
| 88 | HttpServerRequest | R | RH |
| 89 | > = middleware === undefined ? |
| 90 | tracer(responded) : |
| 91 | Effect.matchCauseEffect(tracer(middleware(responded)), { |
| 92 | onFailure(cause): Effect.Effect<void, EH, RH> { |
| 93 | const fiber = Fiber.getCurrent()! |
no test coverage detected
searching dependent graphs…