rx-query
Version:
80 lines (79 loc) • 2.73 kB
TypeScript
import { Observable } from 'rxjs';
export declare const NOOP_MUTATE = "RX_QUERY_NOOP_MUTATE";
export declare type NOOP_MUTATE_TYPE = typeof NOOP_MUTATE;
export declare type QueryOutput<QueryResult = unknown> = {
status: Readonly<'idle' | 'success' | 'error' | 'loading' | 'refreshing' | 'mutating' | 'mutate-error'>;
data?: Readonly<QueryResult>;
error?: Readonly<unknown>;
retries?: Readonly<number>;
mutate: Mutator<QueryResult>;
};
export declare type Mutator<QueryResult = unknown> = (data: unknown, updater?: (current: QueryResult) => QueryResult) => void;
export declare type QueryConfig<QueryResult = unknown, QueryParam = unknown> = {
/**
* How many times a query should be retried before ending up in the `error` state
*
* @default 3
*/
retries?: number | ((retryAttempt: number, error: unknown) => boolean);
/**
* The delay between consecutive retries
*
* @default (n) => (n + 1) * 1000
*/
retryDelay?: number | ((retryAttempt: number) => number);
/**
* When `true` a fetch will be invoken when the window is refocused
*
* @default true
*/
refetchOnWindowFocus?: boolean;
/**
* When `true` a fetch will be invoken when the client is online
*
* @default true
*/
refetchOnReconnect?: boolean;
/**
* The interval in milliseconds to fetch the query
*
* @default Infinity
*/
refetchInterval?: number | Observable<unknown>;
/**
* How long an item is "fresh" in milliseconds
* When an item is fresh, it won't get refetched
*
* @default 0
*/
staleTime?: number;
/**
* How long an item remains in the cache (in milliseconds) when there are no subscribers
*
* @default 30_0000 (5 minutes)
*/
cacheTime?: number;
/**
* Return the latest result
*
* @default false
*/
keepPreviousData?: boolean;
/**
* A mutate function to update the cache
*
* @default (data) => data
*/
mutator?: (data: any, options: {
queryParameters: QueryParam;
cacheKey: string;
}) => QueryResult | Observable<QueryResult> | NOOP_MUTATE_TYPE | Observable<NOOP_MUTATE_TYPE>;
};
export declare type Revalidator<QueryResult = unknown, QueryParam = unknown> = {
key: string;
trigger: 'query-subscribe' | 'query-unsubscribe' | 'interval' | 'focus' | 'reconnect' | 'manual' | 'group-unsubscribe' | 'group-remove' | 'mutate-optimistic' | 'mutate-error' | 'mutate-success' | 'reset-cache';
config: Required<QueryConfig>;
params?: QueryParam;
query?: (status: string, params?: QueryParam) => Observable<QueryOutput<QueryResult>>;
data?: QueryResult;
};