( request: HttpServerRequest, response: HttpServerResponse )
| 507 | // ----------------------------------------------------------------------------- |
| 508 | |
| 509 | const 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 |
nothing calls this directly
no test coverage detected