abit-cache
Version:
React cache library from scratch
86 lines (85 loc) • 3.16 kB
TypeScript
import type { Dispatch, SetStateAction } from 'react';
import AbitCache from '../services/AbitCache';
type TKey = string | object | unknown[];
type TAbortSignal = {
signal: AbortSignal;
};
type TCacheFetcher<Data> = (key: TKey, signal: TAbortSignal) => Promise<Data>;
type TOnErrorRetry = (err: Error, key: TKey, revalidate: () => Promise<void>) => void;
type TOnSettled<Data, Variables> = (data: Data | null, error: Error | null, variables: Variables) => void;
type TCacheOptions<Data = unknown> = {
isEnabled?: boolean;
isSuspense?: boolean;
staleTime?: number;
isRevalidateIfStale?: boolean;
isRevalidateOnFocus?: boolean;
isRevalidateOnReconnect?: boolean;
isKeepPreviousData?: boolean;
shouldRetryOnError?: boolean;
errorRetryInterval?: number;
errorRetryCount?: number;
dedupingInterval?: number;
focusThrottleInterval?: number;
onSuccess?: (data: Data, key: TKey) => void;
onError?: (err: Error, key: TKey) => void;
onErrorRetry?: TOnErrorRetry;
isDeepEqual?: (a: Data | null, b: Data | null) => boolean;
};
type TOptimisticFunction<Data> = (previousData: Data | null) => Data;
type TMutateOptions<Data, Variables> = {
isRevalidate?: boolean;
isRollbackOnError?: boolean;
optimisticData?: Data | TOptimisticFunction<Data>;
onSuccess?: (data: Data) => void;
onError?: (error: Error) => void;
onSettled?: TOnSettled<Data, Variables>;
};
type TMutateFetcher<Data, Variables> = (variables: Variables, abortSignal: TAbortSignal) => Promise<Data>;
type TCacheEntry<Data = unknown> = {
data: Data;
timestamp: number;
};
type TCacheConfig = {
readonly Cache: AbitCache;
} & TCacheOptions;
type TUseQueryReturn<Data> = {
data: Data | null;
error: Error | null;
isLoading: boolean;
clear: () => void;
invalidate: (key: TKey) => void;
invalidateMatching: (pattern: string) => void;
revalidate: () => Promise<void>;
};
type TRevalidateOnFocusParams = {
key: TKey;
isRevalidateOnFocus: boolean;
isEnabled: boolean;
staleTime: number;
focusThrottleInterval: number;
revalidate: () => Promise<void>;
};
type TOnReconnectParams = {
key: TKey;
staleTime: number;
isEnabled: boolean;
isRevalidateOnReconnect: boolean;
revalidate: () => Promise<void>;
};
type TUseRevalidateParams<Data> = {
key: TKey;
isEnabled: boolean;
shouldRetryOnError: boolean;
errorRetryInterval: number;
errorRetryCount: number;
dedupingInterval: number;
fetcher: TCacheFetcher<Data>;
setIsLoading: Dispatch<SetStateAction<boolean>>;
setData: (newData: Data) => void;
setError: Dispatch<SetStateAction<Error | null>>;
onSuccess?: (data: Data, key: TKey) => void;
onError?: (err: Error, key: TKey) => void;
onErrorRetry?: TOnErrorRetry;
};
type TDefaultConfig = Required<Omit<TCacheConfig, 'onErrorRetry' | 'onSuccess' | 'onError'>>;
export type { TCacheConfig, TCacheEntry, TCacheFetcher, TCacheOptions, TDefaultConfig, TKey, TMutateFetcher, TMutateOptions, TOnReconnectParams, TOptimisticFunction, TRevalidateOnFocusParams, TUseQueryReturn, TUseRevalidateParams, };