(
f: (
request: HttpClientRequest.HttpClientRequest,
url: URL,
signal: AbortSignal,
fiber: Fiber.Fiber<HttpClientResponse.HttpClientResponse, Error.HttpClientError>
) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError>
)
| 625 | * @category constructors |
| 626 | * @since 4.0.0 |
| 627 | */ |
| 628 | export const make = ( |
| 629 | f: ( |
| 630 | request: HttpClientRequest.HttpClientRequest, |
| 631 | url: URL, |
| 632 | signal: AbortSignal, |
| 633 | fiber: Fiber.Fiber<HttpClientResponse.HttpClientResponse, Error.HttpClientError> |
| 634 | ) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError> |
| 635 | ): HttpClient => |
| 636 | makeWith((effect) => |
| 637 | Effect.flatMap(effect, (request) => |
| 638 | Effect.withFiber((fiber) => { |
| 639 | const scopedController = scopedRequests.get(request) |
| 640 | const controller = scopedController ?? new AbortController() |
| 641 | const urlResult = Url.make(request.url, request.urlParams, Option.getOrUndefined(request.hash)) |
| 642 | if (Result.isFailure(urlResult)) { |
| 643 | return Effect.fail( |
| 644 | new Error.HttpClientError({ |
| 645 | reason: new Error.InvalidUrlError({ |
| 646 | request, |
| 647 | cause: urlResult.failure |
| 648 | }) |
| 649 | }) |
| 650 | ) |
| 651 | } |
| 652 | const url = urlResult.success |
| 653 | const tracerDisabled = fiber.getRef(Tracer.DisablePropagation) || |
| 654 | fiber.getRef(TracerDisabledWhen)(request) |
| 655 | if (tracerDisabled) { |
| 656 | const effect = f(request, url, controller.signal, fiber as any) |
| 657 | if (scopedController) return effect |
| 658 | return Effect.uninterruptibleMask((restore) => |
| 659 | Effect.matchCauseEffect(restore(effect), { |
| 660 | onSuccess(response) { |
| 661 | responseRegistry.register(response, controller) |
| 662 | return Effect.succeed(new InterruptibleResponse(response, controller)) |
| 663 | }, |
| 664 | onFailure(cause) { |
| 665 | if (Cause.hasInterrupts(cause)) { |
| 666 | controller.abort() |
| 667 | } |
| 668 | return Effect.failCause(cause) |
| 669 | } |
| 670 | }) |
| 671 | ) |
| 672 | } |
| 673 | return Effect.useSpan( |
| 674 | fiber.getRef(SpanNameGenerator)(request), |
| 675 | { kind: "client" }, |
| 676 | (span) => { |
| 677 | span.attribute("http.request.method", request.method) |
| 678 | span.attribute("server.address", url.origin) |
| 679 | if (url.port !== "") { |
| 680 | span.attribute("server.port", +url.port) |
| 681 | } |
| 682 | span.attribute("url.full", url.toString()) |
| 683 | span.attribute("url.path", url.pathname) |
| 684 | span.attribute("url.scheme", url.protocol.slice(0, -1)) |
nothing calls this directly
no test coverage detected
searching dependent graphs…