( nodeRequest: Http.ClientRequest, request: HttpClientRequest, body: Body.HttpBody )
| 466 | }) |
| 467 | |
| 468 | const sendBody = ( |
| 469 | nodeRequest: Http.ClientRequest, |
| 470 | request: HttpClientRequest, |
| 471 | body: Body.HttpBody |
| 472 | ): Effect.Effect<void, Error.HttpClientError> => |
| 473 | Effect.suspend((): Effect.Effect<void, Error.HttpClientError> => { |
| 474 | switch (body._tag) { |
| 475 | case "Empty": { |
| 476 | nodeRequest.end() |
| 477 | return waitForFinish(nodeRequest, request) |
| 478 | } |
| 479 | case "Uint8Array": |
| 480 | case "Raw": { |
| 481 | nodeRequest.end(body.body) |
| 482 | return waitForFinish(nodeRequest, request) |
| 483 | } |
| 484 | case "FormData": { |
| 485 | const response = new globalThis.Response(body.formData) |
| 486 | |
| 487 | response.headers.forEach((value, key) => { |
| 488 | nodeRequest.setHeader(key, value) |
| 489 | }) |
| 490 | |
| 491 | return Effect.tryPromise({ |
| 492 | try: () => pipeline(Readable.fromWeb(response.body! as any), nodeRequest), |
| 493 | catch: (cause) => |
| 494 | new Error.HttpClientError({ |
| 495 | reason: new Error.TransportError({ |
| 496 | request, |
| 497 | cause |
| 498 | }) |
| 499 | }) |
| 500 | }) |
| 501 | } |
| 502 | case "Stream": { |
| 503 | return Stream.run( |
| 504 | Stream.mapError(body.stream, (cause) => |
| 505 | new Error.HttpClientError({ |
| 506 | reason: new Error.EncodeError({ |
| 507 | request, |
| 508 | cause |
| 509 | }) |
| 510 | })), |
| 511 | NodeSink.fromWritable({ |
| 512 | evaluate: () => nodeRequest, |
| 513 | onError: (cause) => |
| 514 | new Error.HttpClientError({ |
| 515 | reason: new Error.TransportError({ |
| 516 | request, |
| 517 | cause |
| 518 | }) |
| 519 | }) |
| 520 | }) |
| 521 | ) |
| 522 | } |
| 523 | } |
| 524 | }) |
| 525 |
no test coverage detected