22 CancelOptions ,
33 DataTag ,
44 InvalidateOptions ,
5- QueryClient ,
65 QueryFilters ,
76 QueryFunction ,
87 RefetchOptions ,
@@ -21,15 +20,9 @@ import { QueryTagOption } from '../tags/types';
2120import { FunctionType } from '../types/utils' ;
2221import { MutationBuilder } from './MutationBuilder' ;
2322import { MiddlewareFn , createMiddlewareFunction } from './createMiddlewareFunction' ;
23+ import { PreprocessorFn , createPreprocessorFunction , identityPreprocessor } from './createPreprocessorFunction' ;
2424import { createTagMiddleware } from './createTagMiddleware' ;
25- import {
26- BuilderMergeVarsFn ,
27- BuilderQueriesResult ,
28- BuilderQueryFn ,
29- SetAllTypes ,
30- SetDataType ,
31- SetErrorType ,
32- } from './types' ;
25+ import { BuilderConfig , BuilderQueriesResult , SetAllTypes , SetDataType , SetErrorType } from './types' ;
3326import { AppendVarsType , BuilderTypeTemplate } from './types' ;
3427import { mergeQueryOptions , mergeVars } from './utils' ;
3528
@@ -52,23 +45,33 @@ export class QueryBuilderFrozen<T extends BuilderTypeTemplate> {
5245 return mergeVars ( list , this . config . mergeVars ) ;
5346 } ;
5447
55- getQueryFn : ( ) => QueryFunction < T [ 'data' ] , [ T [ 'vars' ] ] > = ( ) => {
48+ protected preprocessVars : ( vars : T [ 'vars' ] ) => T [ 'queryKey' ] [ 0 ] = ( vars ) => {
49+ if ( ! this . config . preprocessorFn ) return vars as T [ 'queryKey' ] [ 0 ] ;
50+ return this . config . preprocessorFn ( vars ) ;
51+ } ;
52+
53+ getQueryFn : ( ) => QueryFunction < T [ 'data' ] , T [ 'queryKey' ] > = ( ) => {
5654 return ( { client, meta, queryKey, signal, pageParam } ) => {
5755 return this . config . queryFn ( { client, meta, queryKey, signal, pageParam, originalQueryKey : queryKey } ) ;
5856 } ;
5957 } ;
6058
61- getQueryKey : ( vars : T [ 'vars' ] ) => DataTag < [ T [ 'vars' ] ] , T [ 'data' ] , T [ 'error' ] > = ( vars ) => {
62- return [ this . mergeVars ( [ this . config . vars , vars ] ) ] as DataTag < [ T [ 'vars' ] ] , T [ 'data' ] , T [ 'error' ] > ;
59+ getQueryKey : ( vars : T [ 'vars' ] ) => DataTag < T [ 'queryKey' ] , T [ 'data' ] , T [ 'error' ] > = ( vars ) => {
60+ return [ this . preprocessVars ( this . mergeVars ( [ this . config . vars , vars ] ) ) ] as DataTag <
61+ T [ 'queryKey' ] ,
62+ T [ 'data' ] ,
63+ T [ 'error' ]
64+ > ;
6365 } ;
6466
6567 getQueryOptions : (
6668 vars : T [ 'vars' ] ,
6769 opts ?: QueryBuilderConfig < T > [ 'options' ] ,
68- ) => UseQueryOptions < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > & { queryFn : FunctionType } = ( vars , opts ) => {
70+ ) => UseQueryOptions < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > & { queryFn : FunctionType } = ( vars , opts ) => {
6971 return mergeQueryOptions ( [
7072 {
7173 queryFn : this . getQueryFn ( ) ,
74+ queryKeyHashFn : this . config . queryKeyHashFn ,
7275 queryKey : this . getQueryKey ( vars ) ,
7376 } ,
7477 this . config . options ,
@@ -79,21 +82,21 @@ export class QueryBuilderFrozen<T extends BuilderTypeTemplate> {
7982 useQuery : (
8083 vars : T [ 'vars' ] ,
8184 opts ?: QueryBuilderConfig < T > [ 'options' ] ,
82- ) => ReturnType < typeof useQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > > = ( vars , opts ) => {
85+ ) => ReturnType < typeof useQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > > = ( vars , opts ) => {
8386 return useQuery ( this . getQueryOptions ( vars , opts ) , this . config . queryClient ) ;
8487 } ;
8588
8689 useSuspenseQuery : (
8790 vars : T [ 'vars' ] ,
8891 opts ?: QueryBuilderConfig < T > [ 'options' ] ,
89- ) => ReturnType < typeof useSuspenseQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > > = ( vars , opts ) => {
92+ ) => ReturnType < typeof useSuspenseQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > > = ( vars , opts ) => {
9093 return useSuspenseQuery ( this . getQueryOptions ( vars , opts ) , this . config . queryClient ) ;
9194 } ;
9295
9396 usePrefetchQuery : (
9497 vars : T [ 'vars' ] ,
9598 opts ?: QueryBuilderConfig < T > [ 'options' ] ,
96- ) => ReturnType < typeof usePrefetchQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > > = ( vars , opts ) => {
99+ ) => ReturnType < typeof usePrefetchQuery < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > > = ( vars , opts ) => {
97100 return usePrefetchQuery ( this . getQueryOptions ( vars , opts ) , this . config . queryClient ) ;
98101 } ;
99102
@@ -147,7 +150,7 @@ export class QueryBuilderFrozen<T extends BuilderTypeTemplate> {
147150
148151class QueryBuilderClient <
149152 T extends BuilderTypeTemplate ,
150- TFilters = QueryFilters < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > ,
153+ TFilters = QueryFilters < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > ,
151154> {
152155 constructor ( private builder : QueryBuilderFrozen < T > ) { }
153156
@@ -182,7 +185,7 @@ class QueryBuilderClient<
182185 this . builder . config . queryClient ?. getQueryData < T [ 'data' ] > ( this . builder . getQueryKey ( vars ) ) ;
183186
184187 readonly setData = ( vars : T [ 'vars' ] , updater : Updater < T [ 'data' ] > , opts ?: SetDataOptions ) =>
185- this . builder . config . queryClient ?. setQueryData ( this . builder . getQueryKey ( vars ) , updater , opts ) ;
188+ this . builder . config . queryClient ?. setQueryData < T [ 'data' ] > ( this . builder . getQueryKey ( vars ) , updater , opts ) ;
186189
187190 readonly getState = ( vars : T [ 'vars' ] ) =>
188191 this . builder . config . queryClient ?. getQueryState < T [ 'data' ] , T [ 'error' ] > ( this . builder . getQueryKey ( vars ) ) ;
@@ -214,6 +217,16 @@ export class QueryBuilder<T extends BuilderTypeTemplate = BuilderTypeTemplate> e
214217 return new ctor < T > ( newConfig ) as this;
215218 }
216219
220+ withPreprocessor < TVars = T [ 'vars' ] > (
221+ preprocessor : PreprocessorFn < TVars , T [ 'vars' ] > ,
222+ ) : QueryBuilder < AppendVarsType < T , TVars , true , true > > {
223+ const newBuilder = this as unknown as QueryBuilder < AppendVarsType < T , TVars , true , true > > ;
224+
225+ return newBuilder . withConfig ( {
226+ preprocessorFn : createPreprocessorFunction ( preprocessor , this . config . preprocessorFn || identityPreprocessor ) ,
227+ } ) ;
228+ }
229+
217230 withMiddleware < TVars = T [ 'vars' ] , TData = T [ 'data' ] , TError = T [ 'error' ] > (
218231 middleware : MiddlewareFn < TVars , TData , TError , T > ,
219232 config ?: Partial < QueryBuilderConfig < SetAllTypes < T , TData , TError , TVars , true > > > ,
@@ -249,25 +262,13 @@ export class QueryBuilder<T extends BuilderTypeTemplate = BuilderTypeTemplate> e
249262 protected MutationBuilderConstructor : typeof MutationBuilder = MutationBuilder ;
250263
251264 asMutationBuilder ( ) : MutationBuilder < T > {
252- return new this . MutationBuilderConstructor ( {
253- queryFn : this . config . queryFn ,
254- queryClient : this . config . queryClient ,
255- mergeVars : this . config . mergeVars ,
256- vars : this . config . vars ,
257- syncChannel : this . config . syncChannel ,
258- } ) ;
265+ const { options, ...restConfig } = this . config ;
266+ return new this . MutationBuilderConstructor ( restConfig ) ;
259267 }
260268}
261269
262270type Updater < T > = T | undefined | ( ( oldData : T | undefined ) => T | undefined ) ;
263271
264- export type QueryBuilderConfig < T extends BuilderTypeTemplate > = {
265- queryFn : BuilderQueryFn < T > ;
266- vars ?: Partial < T [ 'vars' ] > ;
267- mergeVars ?: BuilderMergeVarsFn < T [ 'vars' ] > ;
268-
269- options ?: Partial < UseQueryOptions < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , [ T [ 'vars' ] ] > & { queryFn : FunctionType } > ;
270-
271- queryClient ?: QueryClient ;
272- syncChannel ?: BroadcastChannel ;
272+ export type QueryBuilderConfig < T extends BuilderTypeTemplate > = BuilderConfig < T > & {
273+ options ?: Partial < UseQueryOptions < T [ 'data' ] , T [ 'error' ] , T [ 'data' ] , T [ 'queryKey' ] > & { queryFn : FunctionType } > ;
273274} ;
0 commit comments