UNPKG

@swan-io/request

Version:

Wrapper for XMLHttpRequest with better data-structures

63 lines (62 loc) 2.02 kB
import { Future, Option, Result } from "@swan-io/boxed"; type ResponseType = "text" | "arraybuffer" | "blob" | "json"; type ResponseTypeMap = { text: string; arraybuffer: ArrayBuffer; blob: Blob; json: unknown; }; type Method = "GET" | "POST" | "OPTIONS" | "PATCH" | "PUT" | "DELETE"; export declare class NetworkError extends Error { url: string; constructor(url: string); } export declare class TimeoutError extends Error { url: string; timeout: number | undefined; constructor(url: string, timeout?: number); } export declare class CanceledError extends Error { constructor(); } type Config<T extends ResponseType> = { url: string; method?: Method; type: T; body?: BodyInit | null; headers?: Record<string, string>; credentials?: RequestCredentials; timeout?: number; cache?: RequestCache; integrity?: string; keepalive?: boolean; mode?: RequestMode; priority?: RequestPriority; redirect?: RequestRedirect; referrer?: string; referrerPolicy?: ReferrerPolicy; window?: null; }; export type Response<T> = { status: number; ok: boolean; response: Option<T>; url: string; headers: Headers; }; export declare class BadStatusError extends Error { url: string; status: number; response: unknown; constructor(url: string, status: number, response?: unknown); } export declare const badStatusToError: <T>(response: Response<T>) => Result<Response<T>, BadStatusError>; export declare class EmptyResponseError extends Error { url: string; constructor(url: string); } export declare const emptyToError: <T>(response: Response<T>) => Result<T, EmptyResponseError>; export declare const Request: { make: <T extends ResponseType>({ url, method, type, body, headers, credentials, timeout, cache, integrity, keepalive, mode, priority, redirect, referrer, referrerPolicy, window, }: Config<T>) => Future<Result<Response<ResponseTypeMap[T]>, NetworkError | TimeoutError>>; }; export {};