(
self: Default<E, R>,
handleResponse: (
request: ServerRequest.HttpServerRequest,
response: ServerResponse.HttpServerResponse
) => Effect.Effect<_, EH, RH>,
middleware?: HttpMiddleware | undefined
)
| 46 | * @category combinators |
| 47 | */ |
| 48 | export const toHandled = <E, R, _, EH, RH>( |
| 49 | self: Default<E, R>, |
| 50 | handleResponse: ( |
| 51 | request: ServerRequest.HttpServerRequest, |
| 52 | response: ServerResponse.HttpServerResponse |
| 53 | ) => Effect.Effect<_, EH, RH>, |
| 54 | middleware?: HttpMiddleware | undefined |
| 55 | ): Effect.Effect<void, never, Exclude<R | RH | ServerRequest.HttpServerRequest, Scope.Scope>> => { |
| 56 | const responded = Effect.withFiberRuntime< |
| 57 | ServerResponse.HttpServerResponse, |
| 58 | E | EH | ServerError.ResponseError, |
| 59 | R | RH | ServerRequest.HttpServerRequest |
| 60 | >((fiber) => |
| 61 | Effect.flatMap(self, (response) => { |
| 62 | const request = Context.unsafeGet(fiber.currentContext, ServerRequest.HttpServerRequest) |
| 63 | const handler = fiber.getFiberRef(currentPreResponseHandlers) |
| 64 | if (handler._tag === "None") { |
| 65 | ;(request as any)[handledSymbol] = true |
| 66 | return Effect.as(handleResponse(request, response), response) |
| 67 | } |
| 68 | return Effect.tap(handler.value(request, response), (response) => { |
| 69 | ;(request as any)[handledSymbol] = true |
| 70 | return handleResponse(request, response) |
| 71 | }) |
| 72 | }) |
| 73 | ) |
| 74 | |
| 75 | const withErrorHandling = Effect.catchAllCause( |
| 76 | responded, |
| 77 | (cause) => |
| 78 | Effect.withFiberRuntime< |
| 79 | ServerResponse.HttpServerResponse, |
| 80 | E | EH | ServerError.ResponseError, |
| 81 | ServerRequest.HttpServerRequest | RH |
| 82 | >((fiber) => |
| 83 | Effect.flatMap(ServerError.causeResponse(cause), ([response, cause]) => { |
| 84 | const request = Context.unsafeGet(fiber.currentContext, ServerRequest.HttpServerRequest) |
| 85 | const handler = fiber.getFiberRef(currentPreResponseHandlers) |
| 86 | if (handler._tag === "None") { |
| 87 | ;(request as any)[handledSymbol] = true |
| 88 | return Effect.zipRight( |
| 89 | handleResponse(request, response), |
| 90 | Cause.isEmptyType(cause) ? Effect.succeed(response) : Effect.failCause(cause) |
| 91 | ) |
| 92 | } |
| 93 | return Effect.zipRight( |
| 94 | Effect.tap(handler.value(request, response), (response) => { |
| 95 | ;(request as any)[handledSymbol] = true |
| 96 | return handleResponse(request, response) |
| 97 | }), |
| 98 | Cause.isEmptyType(cause) ? Effect.succeed(response) : Effect.failCause(cause) |
| 99 | ) |
| 100 | }) |
| 101 | ) |
| 102 | ) |
| 103 | |
| 104 | const withMiddleware = unify( |
| 105 | middleware === undefined ? |
no test coverage detected