@bisham/query-factory
Version:
A simple, type-safe utility to create and manage React Query queries effortlessly.
115 lines (110 loc) • 12.8 kB
TypeScript
import { DefaultError, QueryKey, UndefinedInitialDataOptions, UnusedSkipTokenOptions, DefinedInitialDataOptions, UseQueryOptions, OmitKeyof, QueryFunction, UseQueryResult, DefinedUseQueryResult, DataTag, InferDataFromTag, QueryFilters, Updater, SetDataOptions, InvalidateQueryFilters, InvalidateOptions, FetchQueryOptions, RefetchQueryFilters, RefetchOptions, QueryFunctionContext, QueryClient } from '@tanstack/react-query';
type QueryFunctionContextObj<TQueryKey extends QueryKey = QueryKey> = QueryFunctionContext<TQueryKey>;
type GetFactoryQueryOptionsWithoutParams<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TQueryOptions extends UndefinedInitialDataOptions | UnusedSkipTokenOptions | DefinedInitialDataOptions = UseQueryOptions> = OmitKeyof<TQueryOptions extends UndefinedInitialDataOptions ? UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> : TQueryOptions extends UnusedSkipTokenOptions ? UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> : TQueryOptions extends DefinedInitialDataOptions ? DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> : UseQueryOptions, "queryKey" | "queryFn" | "select"> & {
queryKey: () => TQueryKey;
queryFn: QueryFunction<TQueryFnData, TQueryKey>;
};
type GetFactoryQueryOptionsWithParams<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TQueryOptions extends UndefinedInitialDataOptions | UnusedSkipTokenOptions | DefinedInitialDataOptions = UseQueryOptions, TParams extends Record<string, unknown> | undefined = undefined> = OmitKeyof<TQueryOptions extends UndefinedInitialDataOptions ? UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> : TQueryOptions extends UnusedSkipTokenOptions ? UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> : TQueryOptions extends DefinedInitialDataOptions ? DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> : UseQueryOptions, "queryKey" | "queryFn" | "select"> & {
queryKey: (params: TParams) => TQueryKey;
queryFn: (params: QueryFunctionContextObj<TQueryKey> & {
params: TParams;
}) => TQueryFnData | Promise<TQueryFnData>;
};
type GetFactoryQueryReturnWithoutParams<TQueryFnData = unknown, TError = DefaultError, TQueryKey extends QueryKey = QueryKey> = {
<TData = TQueryFnData>(options?: OmitKeyof<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">): UseQueryResult<NoInfer<TData>, TError>;
<TData = TQueryFnData>(options: OmitKeyof<DefinedInitialDataOptions, "queryKey" | "queryFn">): DefinedUseQueryResult<NoInfer<TData>, TError>;
getQueryKey: () => DataTag<TQueryKey, TQueryFnData, TError>;
getQueryOptions: <TData = TQueryFnData>(options?: OmitKeyof<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> | DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">) => (UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> | DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>) & {
queryKey: DataTag<TQueryKey, TQueryFnData, TError>;
};
getQueryData: () => InferDataFromTag<TQueryFnData, TQueryKey> | undefined;
getQueriesData: (filters?: OmitKeyof<QueryFilters, "queryKey">) => Array<[TQueryKey, TQueryFnData | undefined]>;
setQueryData: (params: {
updater: Updater<NoInfer<TQueryFnData> | undefined, NoInfer<TQueryFnData> | undefined>;
options?: SetDataOptions;
}) => NoInfer<TQueryFnData> | undefined;
removeQueryData: (filters?: OmitKeyof<QueryFilters, "queryKey">) => void;
removeAllQueriesData: (filters?: OmitKeyof<QueryFilters, "queryKey">) => void;
invalidateQuery: (params?: {
filters?: OmitKeyof<InvalidateQueryFilters<TQueryKey>, "queryKey">;
options?: InvalidateOptions;
}) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
invalidateAllQueries: (params?: {
filters?: OmitKeyof<InvalidateQueryFilters<TQueryKey>, "queryKey">;
options?: InvalidateOptions;
}) => Promise<Array<[TQueryKey, TQueryFnData | undefined]>>;
prefetch: <TData = TQueryFnData>(options?: OmitKeyof<FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
refetchQuery: (params?: {
filters?: OmitKeyof<RefetchQueryFilters<TQueryKey>, "queryKey">;
options?: RefetchOptions;
}) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
refetchAllQueries: (params?: {
filters?: OmitKeyof<RefetchQueryFilters<TQueryKey>, "queryKey">;
options?: RefetchOptions;
}) => Promise<Array<[TQueryKey, TQueryFnData | undefined]>>;
};
type GetFactoryQueryReturnWithParams<TQueryFnData = unknown, TError = DefaultError, TQueryKey extends QueryKey = QueryKey, TParams extends Record<string, unknown> | undefined = undefined> = {
<TData = TQueryFnData>(options: OmitKeyof<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn"> & {
params: TParams;
}): UseQueryResult<NoInfer<TData>, TError>;
<TData = TQueryFnData>(options: OmitKeyof<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn"> & {
params: TParams;
}): DefinedUseQueryResult<NoInfer<TData>, TError>;
getQueryKey: (params: {
params: TParams;
}) => DataTag<TQueryKey, TQueryFnData, TError>;
getQueryOptions: <TData = TQueryFnData>(options?: OmitKeyof<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> | DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn"> & {
params: TParams;
}) => (UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> | UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> | DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>) & {
queryKey: DataTag<TQueryKey, TQueryFnData, TError>;
};
getQueryData: (params: {
params: TParams;
}) => InferDataFromTag<TQueryFnData, TQueryKey> | undefined;
getQueriesData: (filters?: OmitKeyof<QueryFilters, "queryKey">) => Array<[TQueryKey, TQueryFnData | undefined]>;
setQueryData: (params: {
params: TParams;
updater: Updater<NoInfer<TQueryFnData> | undefined, NoInfer<TQueryFnData> | undefined>;
options?: SetDataOptions;
}) => NoInfer<TQueryFnData> | undefined;
removeQueryData: (filters: OmitKeyof<QueryFilters, "queryKey"> & {
params: TParams;
}) => void;
removeAllQueriesData: (filters?: OmitKeyof<QueryFilters, "queryKey">) => void;
invalidateQuery: (params: {
filters?: OmitKeyof<InvalidateQueryFilters<TQueryKey>, "queryKey">;
params: TParams;
options?: InvalidateOptions;
}) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
invalidateAllQueries: (params?: {
filters?: OmitKeyof<InvalidateQueryFilters<TQueryKey>, "queryKey">;
options?: InvalidateOptions;
}) => Promise<Array<[TQueryKey, TQueryFnData | undefined]>>;
prefetch: <TData = TQueryFnData>(options: OmitKeyof<FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn"> & {
params: TParams;
}) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
refetchQuery: (params: {
filters?: OmitKeyof<RefetchQueryFilters<TQueryKey>, "queryKey">;
params: TParams;
options?: RefetchOptions;
}) => Promise<InferDataFromTag<TQueryFnData, TQueryKey> | undefined>;
refetchAllQueries: (params?: {
filters?: OmitKeyof<RefetchQueryFilters<TQueryKey>, "queryKey">;
options?: RefetchOptions;
}) => Promise<Array<[TQueryKey, TQueryFnData | undefined]>>;
};
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, DefinedInitialDataOptions>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, UnusedSkipTokenOptions>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, UndefinedInitialDataOptions>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, DefinedInitialDataOptions, TParams>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, UnusedSkipTokenOptions, TParams>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, UndefinedInitialDataOptions, TParams>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
declare function createQueryFactory(queryClient: QueryClient): {
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[]>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, DefinedInitialDataOptions>): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[]>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, UnusedSkipTokenOptions>): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[]>(factoryOptions: GetFactoryQueryOptionsWithoutParams<TQueryFnData, TError, TData, TQueryKey, UndefinedInitialDataOptions>): GetFactoryQueryReturnWithoutParams<TQueryFnData, TError, TQueryKey>;
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[], TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, DefinedInitialDataOptions, TParams>): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[], TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, UnusedSkipTokenOptions, TParams>, factoryQueryClient: QueryClient): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[], TParams extends Record<string, unknown> | undefined = undefined>(factoryOptions: GetFactoryQueryOptionsWithParams<TQueryFnData, TError, TData, TQueryKey, UndefinedInitialDataOptions, TParams>): GetFactoryQueryReturnWithParams<TQueryFnData, TError, TQueryKey, TParams>;
};
export { createQuery, createQueryFactory };