MCPcopy Create free account
hub / github.com/Effect-TS/effect / handleResponse

Function handleResponse

packages/platform/node/src/NodeHttpServer.ts:509–640  ·  view source on GitHub ↗
(
  request: HttpServerRequest,
  response: HttpServerResponse
)

Source from the content-addressed store, hash-verified

507// -----------------------------------------------------------------------------
508
509const handleResponse = (
510 request: HttpServerRequest,
511 response: HttpServerResponse
512): Effect.Effect<void, HttpServerError> => {
513 const nodeResponse = (request as ServerRequestImpl).resolvedResponse
514 if (nodeResponse.writableEnded) {
515 return Effect.void
516 }
517
518 let headers: Record<string, string | Array<string>> = response.headers
519 if (!Cookies.isEmpty(response.cookies)) {
520 headers = { ...headers }
521 const toSet = Cookies.toSetCookieHeaders(response.cookies)
522 if (headers["set-cookie"] !== undefined) {
523 toSet.push(headers["set-cookie"] as string)
524 }
525 headers["set-cookie"] = toSet
526 }
527
528 if (request.method === "HEAD") {
529 nodeResponse.writeHead(response.status, headers)
530 return Effect.andThen(
531 cancelResponseBody(response.body),
532 Effect.callback<void>((resume) => {
533 let completed = false
534 const done = () => {
535 if (completed) return
536 completed = true
537 nodeResponse.off("close", done)
538 resume(Effect.void)
539 }
540 nodeResponse.once("close", done)
541 nodeResponse.end(done)
542 })
543 )
544 }
545 const body = response.body
546 switch (body._tag) {
547 case "Empty": {
548 nodeResponse.writeHead(response.status, headers)
549 nodeResponse.end()
550 return Effect.void
551 }
552 case "Raw": {
553 nodeResponse.writeHead(response.status, headers)
554 if (
555 typeof body.body === "object" && body.body !== null && "pipe" in body.body &&
556 typeof body.body.pipe === "function"
557 ) {
558 return Effect.tryPromise({
559 try: (signal) => pipeline(body.body as any, nodeResponse, { signal, end: true }),
560 catch: (cause) =>
561 new HttpServerError({
562 reason: new ResponseError({
563 request,
564 response,
565 description: "Error writing raw response",
566 cause

Callers

nothing calls this directly

Calls 14

pushMethod · 0.80
onceMethod · 0.80
cancelResponseBodyFunction · 0.70
handleCauseFunction · 0.70
isEmptyMethod · 0.65
endMethod · 0.65
pipeMethod · 0.65
onMethod · 0.65
openUnsafeMethod · 0.65
writeMethod · 0.65
closeUnsafeMethod · 0.65
resumeFunction · 0.50

Tested by

no test coverage detected