EdgeAIG's picture
download
raw
6.88 kB
/**
* Typed failure model for Effect HTTP client operations.
*
* HTTP clients wrap request construction, transport, status-code validation, and
* response decoding failures in `HttpClientError`. The wrapper keeps the failed
* request and the specific failure reason together, so callers can handle client
* failures uniformly while still matching on the reason `_tag` for retry
* policy, logging, metrics, and user-facing messages.
*
* @since 4.0.0
*/
import * as Data from "../../Data.js";
import { hasProperty } from "../../Predicate.js";
import * as Schema from "../../Schema.js";
const TypeId = "~effect/http/HttpClientError";
/**
* Returns `true` when a value is an `HttpClientError`.
*
* @category guards
* @since 4.0.0
*/
export const isHttpClientError = u => hasProperty(u, TypeId);
/**
* Error wrapper for HTTP client failures, exposing the failed request and the optional response through its `reason`.
*
* @category errors
* @since 4.0.0
*/
export class HttpClientError extends /*#__PURE__*/Data.TaggedError("HttpClientError") {
constructor(props) {
if ("cause" in props.reason) {
super({
...props,
cause: props.reason.cause
});
} else {
super(props);
}
}
/**
* Marks this value as an HTTP client error for runtime guards.
*
* @since 4.0.0
*/
[TypeId] = TypeId;
/**
* HTTP request associated with the client failure.
*
* @since 4.0.0
*/
get request() {
return this.reason.request;
}
/**
* HTTP response associated with the client failure, when one was received.
*
* @since 4.0.0
*/
get response() {
return "response" in this.reason ? this.reason.response : undefined;
}
get message() {
return this.reason.message;
}
}
const formatReason = tag => tag.endsWith("Error") ? tag.slice(0, -5) : tag;
const formatMessage = (reason, description, info) => description ? `${reason}: ${description} (${info})` : `${reason} error (${info})`;
/**
* Error describing transport-level failures that occur while sending an HTTP request.
*
* @category errors
* @since 4.0.0
*/
export class TransportError extends /*#__PURE__*/Data.TaggedError("TransportError") {
/**
* Formats the request method and URL for transport error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the transport error message from the optional description and request details.
*
* @since 4.0.0
*/
get message() {
return formatMessage(formatReason(this._tag), this.description, this.methodAndUrl);
}
}
/**
* Error describing failures while encoding an HTTP request body.
*
* @category errors
* @since 4.0.0
*/
export class EncodeError extends /*#__PURE__*/Data.TaggedError("EncodeError") {
/**
* Formats the request method and URL for request encoding error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the request encoding error message from the optional description and request details.
*
* @since 4.0.0
*/
get message() {
return formatMessage(formatReason(this._tag), this.description, this.methodAndUrl);
}
}
/**
* Error describing failures while constructing a URL from an HTTP client request.
*
* @category errors
* @since 4.0.0
*/
export class InvalidUrlError extends /*#__PURE__*/Data.TaggedError("InvalidUrlError") {
/**
* Formats the request method and URL for invalid URL error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the invalid URL error message from the optional description and request details.
*
* @since 4.0.0
*/
get message() {
return formatMessage(formatReason(this._tag), this.description, this.methodAndUrl);
}
}
/**
* Response error for HTTP responses rejected because of their status code.
*
* @category errors
* @since 4.0.0
*/
export class StatusCodeError extends /*#__PURE__*/Data.TaggedError("StatusCodeError") {
/**
* Formats the request method and URL for status code error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the status code error message from the response status, optional description, and request details.
*
* @since 4.0.0
*/
get message() {
const info = `${this.response.status} ${this.methodAndUrl}`;
return formatMessage(formatReason(this._tag), this.description, info);
}
}
/**
* Response error for failures while decoding an HTTP response body.
*
* @category errors
* @since 4.0.0
*/
export class DecodeError extends /*#__PURE__*/Data.TaggedError("DecodeError") {
/**
* Formats the request method and URL for response decoding error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the response decoding error message from the response status, optional description, and request details.
*
* @since 4.0.0
*/
get message() {
const info = `${this.response.status} ${this.methodAndUrl}`;
return formatMessage(formatReason(this._tag), this.description, info);
}
}
/**
* Response error for operations that expected a response body but received an empty body.
*
* @category errors
* @since 4.0.0
*/
export class EmptyBodyError extends /*#__PURE__*/Data.TaggedError("EmptyBodyError") {
/**
* Formats the request method and URL for empty response body error messages.
*
* @since 4.0.0
*/
get methodAndUrl() {
return `${this.request.method} ${this.request.url}`;
}
/**
* Builds the empty body error message from the response status, optional description, and request details.
*
* @since 4.0.0
*/
get message() {
const info = `${this.response.status} ${this.methodAndUrl}`;
return formatMessage(formatReason(this._tag), this.description, info);
}
}
/**
* Schema for serializable HTTP client errors, preserving the specific error kind
* and cause.
*
* @category schemas
* @since 4.0.0
*/
export class HttpClientErrorSchema extends /*#__PURE__*/Schema.ErrorClass(TypeId)({
_tag: /*#__PURE__*/Schema.tag("HttpError"),
kind: /*#__PURE__*/Schema.Literals(["EncodeError", "DecodeError", "TransportError", "InvalidUrlError", "StatusCodeError", "EmptyBodyError"]),
cause: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Defect())
}) {
/**
* Builds the serializable schema representation for an HTTP client error.
*
* @since 4.0.0
*/
static fromHttpClientError(error) {
return new HttpClientErrorSchema({
_tag: "HttpError",
kind: error.reason._tag,
cause: error.reason
});
}
}
//# sourceMappingURL=HttpClientError.js.map

Xet Storage Details

Size:
6.88 kB
·
Xet hash:
fe47a746fb8584389208802f1225f2df77deca550950a967c97858b433af0c8c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.