UNPKG

@bitty/create-request

Version:

Apply interceptors in `fetch` to create a custom request functions.

56 lines 2.34 kB
/// <reference lib="dom" /> /** * An alias to `window.fetch` type definition. */ type Fetch = typeof fetch; /** * Options to do a request (`"url"` + `fetch`'s second argument). */ export interface RequestOptions extends RequestInit { url: string; } /** * Interceptors to handle request errors. */ export interface ErrorInterceptors { /** * Handle request and response errors. * @param reason - Error reason, almost every time is an `Error` instance. */ onError?: (reason: unknown) => Promise<never>; /** * Handle request errors. Overwrites `onError` handling request errors. * @param reason - Error reason, almost every time is an `Error` instance. */ onRequestError?: (reason: unknown) => Promise<never>; /** * Handle response errors. Overwrites `onError` handling response errors. * @param reason - Error reason, almost every time is an `Error` instance. */ onResponseError?: (reason: unknown) => Promise<never>; } /** * Interceptors to handle request, response and errors. */ export interface RequestInterceptors extends ErrorInterceptors { onRequest?: (...params: [RequestOptions]) => RequestOptions; onResponse?: (response: Response) => Response | PromiseLike<Response>; } /** * Apply interceptors to `fetch` and create a custom request function. * @param fetch - Yours environment Fetch function. * @param interceptors - Interceptors as a kind of protocol to handle requests. */ export default function createRequest<A extends any[], R = Response>(fetch: Fetch, interceptors?: ErrorInterceptors & { onRequest: (...params: A) => RequestOptions; onResponse: (response: Response) => R | PromiseLike<R>; }): (...params: A) => Promise<R>; export default function createRequest<A extends any[]>(fetch: Fetch, interceptors?: ErrorInterceptors & { onRequest: (...params: A) => RequestOptions; }): (...params: A) => Promise<Response>; export default function createRequest<R = Response>(fetch: Fetch, interceptors?: ErrorInterceptors & { onResponse: (response: Response) => R | PromiseLike<R>; }): (...params: [RequestOptions]) => Promise<R>; export default function createRequest(fetch: Fetch, interceptors?: RequestInterceptors): (...params: [RequestOptions]) => Promise<Response>; export {}; //# sourceMappingURL=index.d.ts.map