@pbpeterson/typed-fetch
Version:
A type-safe HTTP client that never throws. Inspired by Go's error handling pattern.
395 lines (350 loc) • 13.9 kB
text/typescript
declare abstract class BaseHttpError extends Error {
protected readonly response: Response;
readonly headers: Headers;
abstract readonly status: number;
abstract readonly statusText: string;
constructor(response: Response);
json(): Promise<any>;
text(): Promise<string>;
blob(): Promise<Blob>;
arrayBuffer(): Promise<ArrayBuffer>;
abstract clone(): BaseHttpError;
}
declare class InternalServerError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): InternalServerError;
}
declare class NetworkError extends Error {
constructor(message?: string);
}
declare class BadRequestError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): BadRequestError;
}
declare class PaymentRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): PaymentRequiredError;
}
declare class UnauthorizedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): UnauthorizedError;
}
declare class ForbiddenError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ForbiddenError;
}
declare class NotFoundError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): NotFoundError;
}
declare class MethodNotAllowedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): MethodNotAllowedError;
}
declare class NotAcceptableError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): NotAcceptableError;
}
declare class ProxyAuthenticationRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ProxyAuthenticationRequiredError;
}
declare class RequestTimeoutError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): RequestTimeoutError;
}
declare class ConflictError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ConflictError;
}
declare class GoneError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): GoneError;
}
declare class LengthRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): LengthRequiredError;
}
declare class PreconditionFailedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): PreconditionFailedError;
}
declare class RequestTooLongError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): RequestTooLongError;
}
declare class RequestUriTooLongError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): RequestUriTooLongError;
}
declare class UnsupportedMediaTypeError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): UnsupportedMediaTypeError;
}
declare class RequestedRangeNotSatisfiableError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): RequestedRangeNotSatisfiableError;
}
declare class ExpectationFailedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ExpectationFailedError;
}
declare class ImATeapotError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ImATeapotError;
}
declare class MisdirectedRequestError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): MisdirectedRequestError;
}
declare class UnprocessableEntityError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): UnprocessableEntityError;
}
declare class LockedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): LockedError;
}
declare class FailedDependencyError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): FailedDependencyError;
}
declare class TooEarlyError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): TooEarlyError;
}
declare class UpgradeRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): UpgradeRequiredError;
}
declare class PreconditionRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): PreconditionRequiredError;
}
declare class TooManyRequestsError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): TooManyRequestsError;
}
declare class RequestHeaderFieldsTooLargeError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): RequestHeaderFieldsTooLargeError;
}
declare class UnavailableForLegalReasonsError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): UnavailableForLegalReasonsError;
}
declare class NotImplementedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): NotImplementedError;
}
declare class BadGatewayError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): BadGatewayError;
}
declare class ServiceUnavailableError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): ServiceUnavailableError;
}
declare class GatewayTimeoutError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): GatewayTimeoutError;
}
declare class HttpVersionNotSupportedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): HttpVersionNotSupportedError;
}
declare class VariantAlsoNegotiatesError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): VariantAlsoNegotiatesError;
}
declare class InsufficientStorageError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): InsufficientStorageError;
}
declare class LoopDetectedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): LoopDetectedError;
}
declare class NotExtendedError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): NotExtendedError;
}
declare class NetworkAuthenticationRequiredError extends BaseHttpError {
readonly status: number;
readonly statusText: string;
static readonly status: number;
static readonly statusText: string;
constructor(response: Response);
clone(): NetworkAuthenticationRequiredError;
}
type ClientErrors = BadRequestError | ConflictError | ExpectationFailedError | FailedDependencyError | ForbiddenError | GoneError | ImATeapotError | LengthRequiredError | LockedError | MethodNotAllowedError | MisdirectedRequestError | NotAcceptableError | NotFoundError | PaymentRequiredError | PreconditionFailedError | PreconditionRequiredError | ProxyAuthenticationRequiredError | RequestedRangeNotSatisfiableError | RequestHeaderFieldsTooLargeError | RequestTimeoutError | RequestTooLongError | RequestUriTooLongError | TooEarlyError | TooManyRequestsError | UnauthorizedError | UnavailableForLegalReasonsError | UnprocessableEntityError | UnsupportedMediaTypeError | UpgradeRequiredError;
type ServerErrors = BadGatewayError | GatewayTimeoutError | HttpVersionNotSupportedError | InsufficientStorageError | InternalServerError | LoopDetectedError | NetworkAuthenticationRequiredError | NotExtendedError | NotImplementedError | ServiceUnavailableError | VariantAlsoNegotiatesError;
interface TypedResponse<JsonReturnType> extends Response {
json(): Promise<JsonReturnType>;
}
type TypedFetchReturnType<JsonReturnType, ErrorType extends ClientErrors = ClientErrors> = {
response: TypedResponse<JsonReturnType>;
error: null;
} | {
response: null;
error: ErrorType | ServerErrors | NetworkError;
};
type FetchParams = Parameters<typeof fetch>;
declare function typedFetch<JsonReturnType, ErrorType extends ClientErrors = ClientErrors>(url: FetchParams[0], options?: FetchParams[1]): Promise<TypedFetchReturnType<JsonReturnType, ErrorType>>;
export { BadGatewayError, BadRequestError, ConflictError, ExpectationFailedError, FailedDependencyError, ForbiddenError, GatewayTimeoutError, GoneError, HttpVersionNotSupportedError, ImATeapotError, InsufficientStorageError, InternalServerError, LengthRequiredError, LockedError, LoopDetectedError, MethodNotAllowedError, MisdirectedRequestError, NetworkAuthenticationRequiredError, NetworkError, NotAcceptableError, NotExtendedError, NotFoundError, NotImplementedError, PaymentRequiredError, PreconditionFailedError, PreconditionRequiredError, ProxyAuthenticationRequiredError, RequestHeaderFieldsTooLargeError, RequestTimeoutError, RequestTooLongError, RequestUriTooLongError, RequestedRangeNotSatisfiableError, ServiceUnavailableError, TooEarlyError, TooManyRequestsError, UnauthorizedError, UnavailableForLegalReasonsError, UnprocessableEntityError, UnsupportedMediaTypeError, UpgradeRequiredError, VariantAlsoNegotiatesError, typedFetch };