axios-cache-interceptor
Version:
Cache interceptor for axios
181 lines • 8.36 kB
text/typescript
/*!
* Axios Cache Interceptor 1.7.0
* (c) 2021-present Arthur Fiorette & Contributors
* Released under the MIT License.
*/
import type { AxiosInstance, AxiosInterceptorManager, AxiosRequestConfig, AxiosResponse, AxiosResponseHeaders } from 'axios';
import type { CacheInstance, CacheProperties } from './cache.mjs';
/**
* A slightly changed than the original axios response. Containing information about the
* cache and other needed properties.
*
* @template R The type returned by this response
* @template D The type that the request body was
* @see https://axios-cache-interceptor.js.org/config/response-object
*/
export interface CacheAxiosResponse<R = any, D = any> extends AxiosResponse<R, D> {
config: InternalCacheRequestConfig<R, D>;
/**
* The [Request ID](https://axios-cache-interceptor.js.org/guide/request-id) used in
* this request.
*
* It may have been generated by the [Key
* Generator](https://axios-cache-interceptor.js.org/guide/request-id#custom-generator)
* or a custom one provided by
* [`config.id`](https://axios-cache-interceptor.js.org/config/request-specifics#id)
*
* @see https://axios-cache-interceptor.js.org/config/response-object#id
*/
id: string;
/**
* A simple boolean indicating if the request returned data from the cache or from the
* network call.
*
* This does not indicated if the request was capable of being cached or not, as options
* like
* [`cache.override`](https://axios-cache-interceptor.js.org/config/request-specifics#cache-override)
* may have been enabled.
*
* @see https://axios-cache-interceptor.js.org/config/response-object#cached
*/
cached: boolean;
/**
* A simple boolean indicating if the request returned data is from valid or stale cache.
*
* @see https://axios-cache-interceptor.js.org/config/response-object#stale
*/
stale?: boolean;
}
/**
* Options that can be overridden per request
*
* @template R The type returned by this response
* @template D The type for the request body
*/
export interface CacheRequestConfig<R = any, D = any> extends AxiosRequestConfig<D> {
/**
* The [Request ID](https://axios-cache-interceptor.js.org/guide/request-id) used in
* this request.
*
* It may have been generated by the [Key
* Generator](https://axios-cache-interceptor.js.org/guide/request-id#custom-generator)
* or a custom one provided by
* [`config.id`](https://axios-cache-interceptor.js.org/config/request-specifics#id)
*
* @default 'auto generated by the current key generator'
* @see https://axios-cache-interceptor.js.org/config/response-object#id
*/
id?: string;
/**
* The cache option available through the request config is where all the cache
* customization happens.
*
* Setting the `cache` property to `false` will disable the cache for this request.
*
* This does not mean that the current cache will be excluded from the storage.
*
* @default 'inherits from global configuration'
* @see https://axios-cache-interceptor.js.org/config/response-object#cache
*/
cache?: false | Partial<CacheProperties<R, D>>;
}
/** Cached version of type {@link InternalAxiosRequestConfig} */
export interface InternalCacheRequestConfig<R = any, D = any> extends CacheRequestConfig<R, D> {
headers: AxiosResponseHeaders;
}
/**
* Same as the AxiosInstance but with CacheRequestConfig as a config type and
* CacheAxiosResponse as response type.
*
* @see https://axios-cache-interceptor.js.org/guide/getting-started
*/
export interface AxiosCacheInstance extends CacheInstance, AxiosInstance {
/**
* @template T1 The type returned by this response
* @template R1 The custom response type that the request can return
* @template D1 The type that the request body use
*/
<T1 = any, D1 = any, R1 = CacheAxiosResponse<T1, D1>>(config: CacheRequestConfig<T1, D1>): Promise<R1>;
/**
* @template T2 The type returned by this response
* @template R2 The custom response type that the request can return
* @template D2 The type that the request body use
*/
<T2 = any, D2 = any, R2 = CacheAxiosResponse<T2, D2>>(url: string, config?: CacheRequestConfig<T2, D2>): Promise<R2>;
defaults: AxiosInstance['defaults'] & {
cache: CacheProperties;
};
interceptors: {
request: AxiosInterceptorManager<InternalCacheRequestConfig<unknown, unknown>>;
response: AxiosInterceptorManager<Partial<CacheAxiosResponse<unknown, unknown>> & AxiosResponse<unknown, unknown>>;
};
/** @template D The type that the request body use */
getUri<D>(config?: CacheRequestConfig<any, D>): string;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
request<T = any, D = any, R = CacheAxiosResponse<T, D>>(config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
get<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
delete<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
head<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
options<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
post<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
postForm<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
put<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
putForm<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
patch<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
/**
* @template T The type returned by this response
* @template R The custom response type that the request can return
* @template D The type that the request body use
*/
patchForm<T = any, D = any, R = CacheAxiosResponse<T, D>>(url: string, data?: D, config?: CacheRequestConfig<T, D>): Promise<R>;
}
//# sourceMappingURL=axios.d.ts.map