@swan-io/request
Version:
Wrapper for XMLHttpRequest with better data-structures
63 lines (62 loc) • 2.02 kB
TypeScript
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 {};