@lancercomet/fetcher
Version:
Yet another fetcher.
93 lines (92 loc) • 2.7 kB
TypeScript
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 };