UNPKG

@lancercomet/fetcher

Version:

Yet another fetcher.

93 lines (92 loc) 2.7 kB
import { ConstructorOf } from '@lancercomet/types'; interface IApiResponse<T = unknown> { data: T; code: number; message: string; } interface IFetchResult<T, E = Error> { data: T | undefined; error: E | undefined; status: number; } interface IFetcherApiResult<T, E = Error> extends IFetchResult<T, E> { message: string; code: number; } interface IFetcherOptions { cache?: RequestCache; credentials?: RequestCredentials; headers?: HeadersInit; redirect?: RequestRedirect; referrerPolicy?: ReferrerPolicy; } interface IFetcherRequestParam { url: string; method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'OPTION'; data?: Record<string | number, unknown> | FormData; options?: IFetcherOptions; } interface IFetcherRequestJSONParam<T> extends IFetcherRequestParam { type?: ConstructorOf<(T extends (infer P)[] ? P : T)>; } interface IFetcher { /** * Base url. * * @default undefined */ baseUrl?: string; /** * Timeout. * * @default undefined */ timeout?: number; } declare type Interceptor = (param: IFetcherRequestParam) => IFetcherRequestParam; /** * Fetcher. * * @class Fetcher */ declare class Fetcher { private _param?; private _interceptors; private _abortController; private _createParamByInterceptors; /** * Abort requesting. */ abort(): void; /** * Add a function to intercept the request. * * @param {Interceptor} func The interceptor function. * @returns {() => void} The function to remove the interceptor. */ setInterceptor(func: Interceptor): () => void; private _request; /** * Send Http request and read the response as JSON. * * @template T * @param {IFetcherRequestParam<T>} param */ requestJSON<T>(param: IFetcherRequestJSONParam<T>): Promise<IFetchResult<T>>; /** * Send http request and read the response as "The API". * * @param param */ requestAPI<T>(param: IFetcherRequestJSONParam<T>): Promise<IFetcherApiResult<T>>; /** * Send http request and read the response as ArrayBuffer. * * @param param * @param type */ requestBinary(param: IFetcherRequestParam, type: 'arraybuffer'): Promise<IFetchResult<ArrayBuffer>>; requestBinary(param: IFetcherRequestParam, type: 'blob'): Promise<IFetchResult<Blob>>; constructor(param?: IFetcher); } export { Fetcher, IApiResponse, IFetchResult, IFetcherApiResult, IFetcherOptions, IFetcherRequestParam, IFetcherRequestJSONParam, IFetcher, Interceptor };