frest
Version:
REST client for browser with Fetch
821 lines (813 loc) • 29 kB
TypeScript
/// <reference types="node" />
/**
* Default configuration if Frest instance is created without any configuration.
* @public
*/
declare const DEFAULT_CONFIG: Config;
/**
* Frest constructor/class signature.
* @remarks
* This is only used for UMD build.
* @public
*/
interface FrestConstructor {
new (config?: ConfigType): Frest;
}
/**
* The main Frest class.
* @public
*/
declare class Frest {
config: Config;
interceptors: Interceptors;
/**
* Creates an instance of Frest.
* @param config - Configuration for this instance.
* Can be string or array of string (in which it'll be the `base` URL for
* every requests), or a {@link Config} object. Defaults to `DEFAULT_CONFIG`
*/
constructor(config?: ConfigType);
/**
* Get base URL used in this instance.
*/
get base(): string;
create(config?: ConfigType): Frest;
/**
* Merge this instance config with the one provided here.
* @param config - Configuration to be merged into this instance's configuration.
*/
mergeConfig(config: ConfigMergeType): void;
/**
* Get `fetch` function used in this instance.
* @remarks
* This can be the native `fetch` API or any function with similar signature.
*/
get fetchFn(): typeof window.fetch;
/**
* Get full URL from the provided path and query object/string.
* @remarks
* This will use the instance's `base` URL configuration and construct full
* URL to the provided arguments.
*
* @param path - Endpoint path
* @param query - query object/string to include
* @returns Full URL to the provided arguments.
*/
parsePath(path: string | string[], query?: any): string;
/**
* Utility function to parse a query object into string.
*
* @remarks
* This is a shortcut to the `utils.parseQuery` function.
*
* @param query - The query to parse. It can be object/string
* @returns Parsed query string
*/
parseQuery(query: any): string;
/**
* Make a request to an endpoint.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
request<T = any>(init: RequestType, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
private internalRequest;
private requestConfig;
private headers;
private getFetch;
private before;
private req;
private after;
private onError;
private toFrestError;
}
interface Frest {
/**
* Make a request to an endpoint with HTTP `POST` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
post<T = any>(init: RequestType, body?: any, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Make a request to an endpoint with HTTP `GET` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
get<T = any>(init: RequestType, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Make a request to an endpoint with HTTP `PUT` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
put<T = any>(init: RequestType, body?: any, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Make a request to an endpoint with HTTP `PATCH` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
patch<T = any>(init: RequestType, body?: any, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Make a request to an endpoint with HTTP `DELETE` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
delete<T = any>(init: RequestType, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Make a request to an endpoint with HTTP `OPTIONS` method.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
options<T = any>(init: RequestType, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Upload something to an endpoint.
* @remarks
* This is a special request function which will use `XMLHTTPRequest` to support
* upload progress. By default the HTTP method used is `POST`. Currently only
* support request body of `FormData` object.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
upload<T = any>(init: RequestType, body?: any, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
/**
* Download something from an endpoint.
* @remarks
* This is a special request function which will use `XMLHTTPRequest` to support
* download progress. By default the HTTP method used is `GET`.
*
* @template T - The type of response's body, if any. Defaults to `any`.
* @param init - A string, string array, or request configuration object.
* @param request - request configuration if the first arg is string
* or string array
* @returns Response promise which will be resolved when the request is successful.
* The promise will throws in case of error in any request life-cycle.
*/
download<T = any>(init: RequestType, request?: Partial<FrestRequest>): Promise<FrestResponse<T>>;
}//# sourceMappingURL=Frest.d.ts.map
declare class InterceptorManager<T> {
get handlers(): T[];
private _int;
use(handler: T): number;
eject(id: number): void;
}
//# sourceMappingURL=InterceptorManager.d.ts.map
/**
* Supported HTTP Method
* @public
*/
declare type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS';
interface HeaderConfig {
common: Headers;
post: Headers;
get: Headers;
put: Headers;
delete: Headers;
patch: Headers;
options: Headers;
}
declare type ResponseTransformer = (raw: Response, data: any) => any;
declare type RequestTransformer = (req: FrestRequest, data?: any) => any;
/**
* Base config for Frest instance
* @public
*/
interface ConfigBase {
/**
* The base url for this instance. Defaults to empty string.
* @public
*/
base: string;
transformResponse: ResponseTransformer[];
transformRequest: RequestTransformer[];
/**
* {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | Fetch API} function implementation to use.
* @remarks
* Useful for example to provide custom `fetch` function or mocking in test.
* By default use native browser `fetch` function and will fallback to {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest | XMLHttpRequest}
* if not available.
* @public
*/
fetch: typeof fetch;
/**
* Default HTTP Method to use if not supplied in request. Defaults to `GET`.
* @public
*/
method: HttpMethod;
/**
* Default cache mode you want to use for each request: `default`, `no-store`, `reload`, `no-cache`, `force-cache`, or `only-if-cached`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
cache?: RequestCache;
/**
* Default request credentials you want to use for each request: `omit`, `same-origin`, or `include`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
credentials?: RequestCredentials;
/**
* The `keepalive` option can be used to allow the request to outlive the page.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
keepalive?: boolean;
/**
* Default mode you want to use for each request, e.g., `cors`, `no-cors`, or `same-origin`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
mode?: RequestMode;
/**
* Default redirect mode to use for each request.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
redirect?: RequestRedirect;
/**
* A {@link https://developer.mozilla.org/en-US/docs/Web/API/USVString | USVString} specifying `no-referrer`, `client`, or a URL for each request
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
referrer?: string;
/**
* Specifies the value of the referer HTTP header for each request.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
referrerPolicy?: ReferrerPolicy;
/**
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
signal?: AbortSignal;
}
interface Config extends ConfigBase {
/**
* Default {@link https://developer.mozilla.org/en-US/docs/Web/API/Headers | Headers} to include in each request.
* @remarks
* If this Headers contain key which is supplied in request, it will get overridden.
* In native `fetch` API, this can also be a key-value object, but for Frest
* it's **required** to be an instance of `Headers` class.
* @public
*/
headers: HeaderConfig;
}
/**
* Frest configuration used in constructor and config merge.
* @remarks
* Frest instance contains some default configurations, so all
* configuration properties are optional when used in constructor
* and {@link Frest.mergeConfig}. They are basically
* the same as {@link IConfig}.
* @public
*/
declare type ConfigMergeType = Partial<ConfigBase> & {
headers?: Partial<HeaderConfig>;
};
/**
* Frest configuration used in constructor.
* @remarks
* It can either be a string of `base` URL or a configuration object of {@link ConfigMergeType}.
* @public
*/
declare type ConfigType = string | ConfigMergeType;
/**
* Request configuration object.
* @remarks
* The request configuration extends from native `fetch` request init options
* and also accept any properties outside those. This can be useful for
* debugging, interceptor, etc. to identify originating request.
*
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
interface FrestRequest {
[key: string]: any;
/**
* Path relative to {@link IConfigBase.base}.
* @remarks
* The full endpoint URL to call is constructed from Frest instance's `base`
* config and this `path` property. It can be a string, e.g. `/foo/bar` or
* an array, e.g. `['foo', 'bar']`
* @public
*/
path: string | string[];
/**
* HTTP request method used in this request.
* @remarks
* Defaults to the instance's `method` configuration if not supplied.
* This is ignored when calling instance's request shortcut methods, in
* which the HTTP method is set according to the function name, e.g. `get`
* will use `GET` HTTP method and setting this **won't** override it.
* @public
*/
method: HttpMethod;
/**
* HTTP request headers used in this request.
* @remarks
* The request will include instance's `headers` configuration. Any existing
* key defined in this request header will override the default headers.
* @public
*/
headers: Headers;
transformResponse: ResponseTransformer[];
transformRequest: RequestTransformer[];
/**
* Specific action which this request called with.
* @remarks
* This is optional and mainly used for debugging purpose. You can provide
* any value to this and use it in interceptor, logging, etc to identify
* originating request.
* Note that for `download` and `upload` method of Frest instance, this
* is predetermined and can't be overridden
* @public
*/
action?: string;
/**
* Specific base URL for this request.
* @remarks
* Override the instance's `base` configuration for this specific request.
* @public
*/
base?: string;
/**
* Parameter for this request.
* @remarks
* Specify URL query with key-value object or string. This will be appended
* to the final endpoint URL as query string.
* @public
*/
query?: any;
/**
* `fetch` function used in this request.
* @remarks
* Override instance's `fetch` configuration for this request. Useful for
* mocking in tests or when you want a customized native fetch function.
* Note that for `download` and `upload` method of Frest instance, this will
* be ignored and the request will use `XMLHTTPRequest` to support upload/download
* progress.
* @public
*/
fetch?: typeof fetch;
/**
* Skip processing interceptor by its id.
* @remarks
* This is mainly used internally by interceptors. By convention, interceptors
* must honor this config and not modify request/response/error if defined
* in `skip`.
* @public
*/
skip?: string[];
/**
* Body param for this request.
* @remarks
* Provide request body parameter which will be sent with this request.
* This can be a `Blob`, `BufferSource`, `FormData`, `URLSearchParams`,
* or `USVString` object, as per native `fetch` init.
*
* Note that a request using the GET or HEAD method cannot have a body.
* Also for `upload` method of Frest instance, it's required to use
* `FormData` as body.
*
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
body?: any;
/**
* Upload progress callback for Frest instance `upload` method.
* @public
*/
onUploadProgress?: (ev: ProgressEvent) => any;
/**
* Download progress callback for Frest instance `download` method.
* @public
*/
onDownloadProgress?: (ev: ProgressEvent) => any;
/**
* Response type in case of client is XMLHttpRequest.
*
* @remarks
* If using `download`, this is default to `blob`. Otherwise by default
* it's `text`.
*/
responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text';
/**
* The cache mode you want to use for the request: `default`, `no-store`, `reload`, `no-cache`, `force-cache`, or `only-if-cached`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
cache?: RequestCache;
/**
* The request credentials you want to use for the request: `omit`, `same-origin`, or `include`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
credentials?: RequestCredentials;
/**
* The `keepalive` option can be used to allow the request to outlive the page.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
keepalive?: boolean;
/**
* The mode you want to use for the request, e.g., `cors`, `no-cors`, or `same-origin`.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
mode?: RequestMode;
/**
* The redirect mode to use for the request.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
redirect?: RequestRedirect;
/**
* A {@link https://developer.mozilla.org/en-US/docs/Web/API/USVString | USVString} specifying `no-referrer`, `client`, or a URL for the request
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
referrer?: string;
/**
* Specifies the value of the referer HTTP header for the request.
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
referrerPolicy?: ReferrerPolicy;
/**
* @remarks
* See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch | fetch}
* request init for more.
* @public
*/
signal?: AbortSignal;
}
/**
* Request configuration.
* @remarks
* This can be string, array of string as `path` of this request, or
* a request configuration object of {@link IRequest}
* @public
*/
declare type RequestType = string | string[] | Partial<FrestRequest>;
/**
* Response object as a result of successful endpoint call.
* @remarks
* Every successful request will return a promise of this object. `T` is
* type parameter of the `body` property.
*
* @public
* @template T - The type of `body` property. Defaults to `any`
*/
interface FrestResponse<T = any> {
/**
* Original `fetch` response.
* @public
*/
raw: Response;
/**
* The body of this response, if any.
* @public
*/
data: T;
readonly headers: Headers;
readonly ok: boolean;
readonly redirected: boolean;
readonly status: number;
readonly statusText: string;
readonly trailer: Promise<Headers>;
readonly type: ResponseType;
readonly url: string;
}
/**
* Error object thrown in case of request failure.
* @remarks
* Any error happened during a request life-cycle, including non-ok HTTP status,
* will have this signature.
* @public
*/
interface FrestErrorType {
/**
* The message describing this error.
* @public
*/
message: string;
/**
* Frest instance used when this error happened.
* @public
*/
frest: Frest;
/**
* The request config used when this error happened.
* @public
*/
request: FrestRequest;
/**
* The response when this error happened, if any.
* @remarks
* This can be `undefined` because an error may be thrown before the request
* is made.
* @public
*/
response?: FrestResponse;
}
/**
* Argument object passed to a request interceptor function.
* @public
*/
interface RequestInterceptorArg {
/**
* Frest instance which the request is made with.
* @public
*/
frest: Frest;
/**
* The request configuration used in this request.
* @public
*/
request: FrestRequest;
}
interface ResponseInterceptorArg {
/**
* Frest instance which the request is made with.
* @public
*/
frest: Frest;
/**
* The request configuration used in this request.
* @public
*/
request: FrestRequest;
response: FrestResponse;
}
/**
* Request interceptor function signature.
* @public
*/
declare type RequestInterceptor = (input: RequestInterceptorArg) => Promise<FrestRequest>;
/**
* Response interceptor function signature.
* @public
*/
declare type ResponseInterceptor = (input: ResponseInterceptorArg) => Promise<FrestResponse>;
/**
* Error interceptor function signature.
* @public
*/
declare type ErrorInterceptor = (error: FrestErrorType) => Promise<FrestResponse | undefined | null>;
/**
* List of interceptors by its type.
* @public
*/
interface Interceptors {
/**
* List of response interceptor;
* @public
*/
response: InterceptorManager<ResponseInterceptor>;
/**
* List of request interceptor;
* @public
*/
request: InterceptorManager<RequestInterceptor>;
/**
* List of error interceptor;
* @public
*/
error: InterceptorManager<ErrorInterceptor>;
}
//# sourceMappingURL=types.d.ts.map
/**
* Remove multiple occurrence of **forward** slash in a string.
* This doesn't remove leading and/or trailing slash.
*
* e.g. "http://example.com/a//b/" -> "http://example.com/a/b/"
*
* @public
* @param input The string to clean.
* @returns The `input` string without multiple occurrence of forward slash.
*/
declare const trimSlashes: (input: string) => string;
/**
* Utility function to parse a query object into string.
*
* @remarks
* This will only do simple and dumb stringify according to `querystringify`
* package. If you want more control use the package directly instead.
*
* @public
* @param query The query to parse. It can be object/string
* @returns Parsed query string
*/
declare const parseQuery: (query: any) => any;
/**
* A TypeScript utility to determine if a potential error is an instance of
* `FrestError`.
*
* @public
* @param e A potential error to check
* @returns true if `e` is an instance of `FrestError`. TypeScript will then provide
* completions of `FrestError` instance type.
*/
declare const isFrestError: (e: any) => e is FrestErrorType;
/**
* Determine if an object is a Buffer.
* @remarks
* Taken from `is-buffer` package by Feross Aboukhadijeh <https://feross.org>,
* licensed under MIT and copied here to provide typings for Frest and
* its users.
*
* {@link https://github.com/feross/is-buffer}
*
* @public
* @param val Value to test.
* @returns true if it's a Buffer.
*/
declare const isBuffer: (val?: any) => val is Buffer;
/**
* Determine if a value is an ArrayBuffer
*
* @param val The value to test
* @returns True if value is an ArrayBuffer, otherwise false
*/
declare const isArrayBuffer: (val?: any) => val is ArrayBuffer;
/**
* Determine if a value is a FormData
*
* @param val The value to test
* @returns True if value is an FormData, otherwise false
*/
declare const isFormData: (val?: any) => val is FormData;
/**
* Determine if a value is a view on an ArrayBuffer
*
* @param val The value to test
* @returns True if value is a view on an ArrayBuffer, otherwise false
*/
declare const isArrayBufferView: (val?: any) => val is ArrayBufferView;
/**
* Determine if a value is an Object
*
* @param val The value to test
* @returns True if value is an Object, otherwise false
*/
declare const isObject: (val?: any) => boolean;
/**
* Determine if a value is a File
*
* @param val The value to test
* @returns True if value is a File, otherwise false
*/
declare const isFile: (val?: any) => val is File;
/**
* Determine if a value is a Blob
*
* @param val The value to test
* @returns True if value is a Blob, otherwise false
*/
declare const isBlob: (val?: any) => val is Blob;
/**
* Determine if a value is a Function
*
* @param val The value to test
* @returns True if value is a Function, otherwise false
*/
declare const isFunction: (val?: any) => val is (...args: any[]) => any;
/**
* Determine if a value is a Stream
*
* @param val The value to test
* @returns True if value is a Stream, otherwise false
*/
declare const isStream: (val?: any) => boolean;
/**
* Determine if a value is a URLSearchParams object
*
* @param val The value to test
* @returns True if value is a URLSearchParams object, otherwise false
*/
declare const isURLSearchParams: (val?: any) => val is URLSearchParams;
//# sourceMappingURL=utils.d.ts.map
declare const utils_d_trimSlashes: typeof trimSlashes;
declare const utils_d_parseQuery: typeof parseQuery;
declare const utils_d_isFrestError: typeof isFrestError;
declare const utils_d_isBuffer: typeof isBuffer;
declare const utils_d_isArrayBuffer: typeof isArrayBuffer;
declare const utils_d_isFormData: typeof isFormData;
declare const utils_d_isArrayBufferView: typeof isArrayBufferView;
declare const utils_d_isObject: typeof isObject;
declare const utils_d_isFile: typeof isFile;
declare const utils_d_isBlob: typeof isBlob;
declare const utils_d_isFunction: typeof isFunction;
declare const utils_d_isStream: typeof isStream;
declare const utils_d_isURLSearchParams: typeof isURLSearchParams;
declare namespace utils_d {
export {
utils_d_trimSlashes as trimSlashes,
utils_d_parseQuery as parseQuery,
utils_d_isFrestError as isFrestError,
utils_d_isBuffer as isBuffer,
utils_d_isArrayBuffer as isArrayBuffer,
utils_d_isFormData as isFormData,
utils_d_isArrayBufferView as isArrayBufferView,
utils_d_isObject as isObject,
utils_d_isFile as isFile,
utils_d_isBlob as isBlob,
utils_d_isFunction as isFunction,
utils_d_isStream as isStream,
utils_d_isURLSearchParams as isURLSearchParams,
};
}
/**
* FrestError constructor/class signature.
* @remarks
* This is only used for UMD build.
* @public
*/
interface FrestErrorConstructor {
new (message: string, frest: Frest, request: FrestRequest, response?: FrestResponse<any>): FrestError;
}
/**
* Error representation class when there is any failure during request life-cycle.
* @public
*/
declare class FrestError extends Error implements FrestErrorType {
frest: Frest;
request: FrestRequest;
response?: FrestResponse<any> | undefined;
constructor(message: string, frest: Frest, request: FrestRequest, response?: FrestResponse<any> | undefined);
}
//# sourceMappingURL=FrestError.d.ts.map
declare const xhrFetch: typeof fetch;
declare const frest: Frest;//# sourceMappingURL=index.d.ts.map
export default frest;
export { Config, ConfigBase, ConfigMergeType, ConfigType, DEFAULT_CONFIG, ErrorInterceptor, Frest, FrestConstructor, FrestError, FrestErrorConstructor, FrestErrorType, FrestRequest, FrestResponse, HeaderConfig, HttpMethod, Interceptors, RequestInterceptor, RequestInterceptorArg, RequestTransformer, RequestType, ResponseInterceptor, ResponseInterceptorArg, ResponseTransformer, utils_d as utils, xhrFetch };