MCPcopy Create free account
hub / github.com/effect-app/libs / toHandled

Function toHandled

repos/effect/packages/effect/src/unstable/http/HttpEffect.ts:36–114  ·  view source on GitHub ↗
(
  self: Effect.Effect<HttpServerResponse, E, R>,
  handleResponse: (
    request: HttpServerRequest,
    response: HttpServerResponse
  ) => Effect.Effect<unknown, EH, RH>,
  middleware?: HttpMiddleware | undefined
)

Source from the content-addressed store, hash-verified

34 * @since 4.0.0
35 */
36export 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()!

Callers 1

toWebHandlerWithFunction · 0.85

Calls 6

getUnsafeMethod · 0.80
handlerFunction · 0.70
scopedFunction · 0.70
getMethod · 0.65
handleResponseFunction · 0.50
middlewareFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…