UNPKG

@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
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 };