Skip to content

Commit 57cfbc8

Browse files
committed
remove strong typing for non-bound methods
1 parent c4e1833 commit 57cfbc8

File tree

5 files changed

+104
-128
lines changed

5 files changed

+104
-128
lines changed

packages/tanstack-query-builder/src/builder/QueryBuilder.ts

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export class QueryBuilder<
2020
TFlags extends BuilderFlags = '',
2121
> extends QueryBuilderFrozen<TVars, TData, TError, TKey, TTags, TFlags> {
2222
withVars<TVars$ = TVars, const TReset extends boolean = false>(
23-
this: this,
2423
vars?: TVars$,
2524
resetVars = false as TReset,
2625
): QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags> {
@@ -31,45 +30,37 @@ export class QueryBuilder<
3130
}) as any;
3231
}
3332

34-
withData<TData$>(this: this): QueryBuilder<TVars, TData$, TError, TKey, TTags, TFlags> {
33+
withData<TData$>(): QueryBuilder<TVars, TData$, TError, TKey, TTags, TFlags> {
3534
return this as any;
3635
}
3736

38-
withError<TError$>(this: this): QueryBuilder<TVars, TData, TError$, TKey, TTags, TFlags> {
37+
withError<TError$>(): QueryBuilder<TVars, TData, TError$, TKey, TTags, TFlags> {
3938
return this as any;
4039
}
4140

42-
withConfig(this: this, config: Partial<typeof this.config>): this {
41+
withConfig(config: Partial<typeof this.config>): this {
4342
const ctor = this.constructor as typeof QueryBuilder;
4443
const newConfig = this.mergeConfigs(this.config, config);
4544
return new ctor(newConfig) as this;
4645
}
4746

48-
withPreprocessor(this: this, preprocessor: PreprocessorFn<TVars, TVars>): this;
49-
withPreprocessor<TVars$ = TVars>(
50-
this: this,
51-
preprocessor: PreprocessorFn<TVars$, TVars>,
52-
): QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags>;
47+
withPreprocessor(preprocessor: PreprocessorFn<TVars, TVars>): this;
48+
withPreprocessor<TVars$ = TVars>(preprocessor: PreprocessorFn<TVars$, TVars>): QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags>;
5349

54-
withPreprocessor<TVars$ = TVars>(
55-
this: this,
56-
preprocessor: PreprocessorFn<TVars$, TVars>,
57-
): QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags> {
50+
withPreprocessor<TVars$ = TVars>(preprocessor: PreprocessorFn<TVars$, TVars>): QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags> {
5851
const newBuilder = this as unknown as QueryBuilder<TVars$, TData, TError, TKey, TTags, TFlags>;
5952

6053
return newBuilder.withConfig({
6154
preprocessorFn: createPreprocessorFunction(preprocessor, this.config.preprocessorFn || identityPreprocessor),
6255
});
6356
}
6457

65-
withMiddleware(this: this, middleware: MiddlewareFn<TVars, TData, TError, TKey>): this;
58+
withMiddleware(middleware: MiddlewareFn<TVars, TData, TError, TKey>): this;
6659
withMiddleware<TVars$ = TVars, TData$ = TData, TError$ = TError>(
67-
this: this,
6860
middleware: MiddlewareFn<TVars$, TData$, TError$, TKey>,
6961
): QueryBuilder<TVars$, TData$, TError$, TKey, TTags, TFlags>;
7062

7163
withMiddleware<TVars$ = TVars, TData$ = TData, TError$ = TError>(
72-
this: this,
7364
middleware: MiddlewareFn<TVars$, TData$, TError$, TKey>,
7465
config?: Partial<BuilderConfig<TVars$, TData$, TError$, TKey>>,
7566
): QueryBuilder<TVars$, TData$, TError$, TKey, TTags, TFlags> {
@@ -83,22 +74,21 @@ export class QueryBuilder<
8374

8475
static tagCacheId = 0;
8576

86-
withTags(this: this, ...tags: QueryTagOption<TVars, TData, TError, QueryTagObject<TTags>>[]): this {
77+
withTags(...tags: QueryTagOption<TVars, TData, TError, QueryTagObject<TTags>>[]): this {
8778
return this.withMiddleware(createTagMiddleware(tags.flat(), QueryBuilder.tagCacheId++)) as unknown as this;
8879
}
8980

90-
withUpdates(this: this, ...tags: QueryTagOption<TVars, TData, TError, QueryUpdateTagObject<TVars, TData, TError, TTags>>[]): this {
81+
withUpdates(...tags: QueryTagOption<TVars, TData, TError, QueryUpdateTagObject<TVars, TData, TError, TTags>>[]): this {
9182
return this.withMiddleware(createUpdateMiddleware<TVars, TData, TError, TKey, TTags>(tags)) as unknown as this;
9283
}
9384

94-
withTagTypes<TTag extends string, T = unknown>(this: this): QueryBuilder<TVars, TData, TError, TKey, TTags & Record<TTag, T>, TFlags>;
95-
withTagTypes<TTags$ extends Record<string, unknown>>(this: this): QueryBuilder<TVars, TData, TError, TKey, TTags$, TFlags>;
96-
withTagTypes(this: this): this {
85+
withTagTypes<TTag extends string, T = unknown>(): QueryBuilder<TVars, TData, TError, TKey, TTags & Record<TTag, T>, TFlags>;
86+
withTagTypes<TTags$ extends Record<string, unknown>>(): QueryBuilder<TVars, TData, TError, TKey, TTags$, TFlags>;
87+
withTagTypes(): this {
9788
return this as any;
9889
}
9990

10091
withClient(
101-
this: this,
10292
queryClient: QueryClient,
10393
{ syncTagsWithOtherTabs = true }: { syncTagsWithOtherTabs?: boolean } = {},
10494
): QueryBuilder<TVars, TData, TError, TKey, TTags, TFlags | 'withClient'> {
@@ -116,17 +106,16 @@ export class QueryBuilder<
116106
}
117107

118108
withPagination(
119-
this: this,
120109
paginationOptions: BuilderPaginationOptions<TVars, TData, TError, TKey>,
121110
): QueryBuilder<TVars, TData, TError, TKey, TTags, TFlags | 'withPagination'> {
122111
return this.withConfig({ paginationOptions } as TODO);
123112
}
124113

125-
asFrozen(this: this): QueryBuilderFrozen<TVars, TData, TError, TKey, TTags, TFlags> {
114+
asFrozen(): QueryBuilderFrozen<TVars, TData, TError, TKey, TTags, TFlags> {
126115
return this as any;
127116
}
128117

129-
asBound(this: this): QueryBuilder<TVars, TData, TError, TKey, TTags, TFlags | 'bound'> {
118+
asBound(): QueryBuilder<TVars, TData, TError, TKey, TTags, TFlags | 'bound'> {
130119
return this.withConfig({ bound: true });
131120
}
132121
}

packages/tanstack-query-builder/src/builder/QueryBuilderFrozen.ts

Lines changed: 39 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ import type { TODO, WithRequired } from '../type-utils';
3232
import { QueryBuilderClient } from './QueryBuilderClient';
3333
import { QueryBuilderTagsManager } from './QueryBuilderTagsManager';
3434
import { type BuilderOptions, BuilderPaginationOptions, mergeBuilderOptions, mergeBuilderPaginationOptions } from './options';
35-
import type { BuilderConfig, BuilderFlags, BuilderQueriesResult, HasClient, HasPagination, IsBound } from './types';
36-
import { areKeysEqual, assertBound, getRandomKey, mergeMutationOptions, mergeVars } from './utils';
37-
38-
type IsBoundThis<TFlags extends BuilderFlags, TB extends QueryBuilderFrozen<any, any, any, any, any, TFlags>> = IsBound<TFlags, TB>;
35+
import type { BuilderConfig, BuilderFlags, BuilderQueriesResult, HasClient, HasPagination } from './types';
36+
import { areKeysEqual, assertThis, getRandomKey, mergeMutationOptions, mergeVars } from './utils';
3937

4038
type UseQueriesArgs<TVars, TData, TError, TKey extends unknown[]> = [
4139
queries: {
@@ -111,11 +109,8 @@ export class QueryBuilderFrozen<
111109

112110
//#region Query
113111

114-
getQueryFn(
115-
this: IsBoundThis<TFlags, this>,
116-
operationType: 'query' | 'queries' | 'infiniteQuery' = 'query',
117-
): QueryFunction<TData, TKey, Partial<TVars>> {
118-
assertBound(this);
112+
getQueryFn(operationType: 'query' | 'queries' | 'infiniteQuery' = 'query'): QueryFunction<TData, TKey, Partial<TVars>> {
113+
assertThis(this);
119114
return ({ client, meta, queryKey, signal, pageParam }) => {
120115
return this.config.queryFn({
121116
client,
@@ -129,26 +124,25 @@ export class QueryBuilderFrozen<
129124
};
130125
}
131126

132-
getQueryKeyHashFn(this: IsBoundThis<TFlags, this>): (key: TKey) => string {
133-
assertBound(this);
127+
getQueryKeyHashFn(): (key: TKey) => string {
128+
assertThis(this);
134129
return (key) => {
135130
const sanitized = this.config.queryKeySanitizer ? this.config.queryKeySanitizer(key) : key;
136131
return hashKey(sanitized);
137132
};
138133
}
139134

140-
getQueryKey(this: IsBoundThis<TFlags, this>, vars: TVars): DataTag<TKey, TData, TError> {
141-
assertBound(this);
135+
getQueryKey(vars: TVars): DataTag<TKey, TData, TError> {
136+
assertThis(this);
142137
return [this.preprocessVars(this.mergeVars([this.config.vars, vars as TODO]))] as DataTag<TKey, TData, TError>;
143138
}
144139

145140
getQueryOptions(
146-
this: IsBoundThis<TFlags, this>,
147141
vars: TVars,
148142
opts?: BuilderOptions<TVars, TData, TError, TKey>,
149143
operationType?: 'query' | 'queries' | 'infiniteQuery',
150144
): WithRequired<BuilderOptions<TVars, TData, TError, TKey>, 'queryFn' | 'queryKey'> {
151-
assertBound(this);
145+
assertThis(this);
152146

153147
return mergeBuilderOptions([
154148
{
@@ -161,27 +155,23 @@ export class QueryBuilderFrozen<
161155
]) as TODO;
162156
}
163157

164-
useQuery(this: IsBoundThis<TFlags, this>, vars: TVars, opts?: BuilderOptions<TVars, TData, TError, TKey>): UseQueryResult<TData, TError> {
165-
assertBound(this);
158+
useQuery(vars: TVars, opts?: BuilderOptions<TVars, TData, TError, TKey>): UseQueryResult<TData, TError> {
159+
assertThis(this);
166160
return useQuery(this.getQueryOptions(vars, opts), this.config.queryClient);
167161
}
168162

169-
useSuspenseQuery(
170-
this: IsBoundThis<TFlags, this>,
171-
vars: TVars,
172-
opts?: BuilderOptions<TVars, TData, TError, TKey>,
173-
): UseSuspenseQueryResult<TData, TError> {
174-
assertBound(this);
163+
useSuspenseQuery(vars: TVars, opts?: BuilderOptions<TVars, TData, TError, TKey>): UseSuspenseQueryResult<TData, TError> {
164+
assertThis(this);
175165
return useSuspenseQuery(this.getQueryOptions(vars, opts), this.config.queryClient);
176166
}
177167

178-
usePrefetchQuery(this: IsBoundThis<TFlags, this>, vars: TVars, opts?: BuilderOptions<TVars, TData, TError, TKey>): void {
179-
assertBound(this);
168+
usePrefetchQuery(vars: TVars, opts?: BuilderOptions<TVars, TData, TError, TKey>): void {
169+
assertThis(this);
180170
usePrefetchQuery(this.getQueryOptions(vars, opts), this.config.queryClient);
181171
}
182172

183-
useIsFetching(this: IsBoundThis<TFlags, this>, vars: TVars, filters?: QueryFilters): number {
184-
assertBound(this);
173+
useIsFetching(vars: TVars, filters?: QueryFilters): number {
174+
assertThis(this);
185175
return useIsFetching({ queryKey: this.getQueryKey(vars), ...filters }, this.config.queryClient);
186176
}
187177

@@ -190,11 +180,10 @@ export class QueryBuilderFrozen<
190180
//#region Queries
191181

192182
private useQueriesInternal(
193-
this: IsBoundThis<TFlags, this>,
194183
useHook: typeof useQueries | typeof useSuspenseQueries,
195184
...[queries, sharedVars, sharedOpts]: UseQueriesArgs<TVars, TData, TError, TKey>
196185
): BuilderQueriesResult<TVars, TData, TError, TKey> {
197-
assertBound(this);
186+
assertThis(this);
198187

199188
type ResultType = BuilderQueriesResult<TVars, TData, TError, TKey>;
200189

@@ -217,19 +206,13 @@ export class QueryBuilderFrozen<
217206
return result;
218207
}
219208

220-
useQueries(
221-
this: IsBoundThis<TFlags, this>,
222-
...args: UseQueriesArgs<TVars, TData, TError, TKey>
223-
): BuilderQueriesResult<TVars, TData, TError, TKey> {
224-
assertBound(this);
209+
useQueries(...args: UseQueriesArgs<TVars, TData, TError, TKey>): BuilderQueriesResult<TVars, TData, TError, TKey> {
210+
assertThis(this);
225211
return this.useQueriesInternal(useQueries, ...args);
226212
}
227213

228-
useSuspenseQueries(
229-
this: IsBoundThis<TFlags, this>,
230-
...args: UseQueriesArgs<TVars, TData, TError, TKey>
231-
): BuilderQueriesResult<TVars, TData, TError, TKey> {
232-
assertBound(this);
214+
useSuspenseQueries(...args: UseQueriesArgs<TVars, TData, TError, TKey>): BuilderQueriesResult<TVars, TData, TError, TKey> {
215+
assertThis(this);
233216
return this.useQueriesInternal(useSuspenseQueries, ...args);
234217
}
235218

@@ -240,7 +223,6 @@ export class QueryBuilderFrozen<
240223
declare getInfiniteQueryOptions: HasPagination<
241224
TFlags,
242225
(
243-
this: IsBoundThis<TFlags, this>,
244226
vars: TVars,
245227
opts?: Partial<BuilderPaginationOptions<TVars, TData, TError, TKey>>,
246228
) => WithRequired<BuilderPaginationOptions<TVars, TData, TError, TKey>, 'queryFn' | 'queryKey' | 'initialPageParam'>
@@ -249,21 +231,19 @@ export class QueryBuilderFrozen<
249231
declare useInfiniteQuery: HasPagination<
250232
TFlags,
251233
(
252-
this: IsBoundThis<TFlags, this>,
253234
vars: TVars,
254235
opts?: Partial<BuilderPaginationOptions<TVars, TData, TError, TKey>>,
255236
) => UseInfiniteQueryResult<InfiniteData<TData, Partial<TVars>>, TError>
256237
>;
257238

258239
declare usePrefetchInfiniteQuery: HasPagination<
259240
TFlags,
260-
(this: IsBoundThis<TFlags, this>, vars: TVars, opts?: Partial<BuilderPaginationOptions<TVars, TData, TError, TKey>>) => void
241+
(vars: TVars, opts?: Partial<BuilderPaginationOptions<TVars, TData, TError, TKey>>) => void
261242
>;
262243

263244
declare useSuspenseInfiniteQuery: HasPagination<
264245
TFlags,
265246
(
266-
this: IsBoundThis<TFlags, this>,
267247
vars: TVars,
268248
opts?: Partial<BuilderPaginationOptions<TVars, TData, TError, TKey>>,
269249
) => UseSuspenseInfiniteQueryResult<InfiniteData<TData, Partial<TVars>>, TError>
@@ -273,8 +253,8 @@ export class QueryBuilderFrozen<
273253

274254
//#region Mutation
275255

276-
getMutationFn(this: IsBoundThis<TFlags, this>, queryClient: QueryClient, meta?: any): MutationFunction<TData, TVars> {
277-
assertBound(this);
256+
getMutationFn(queryClient: QueryClient, meta?: any): MutationFunction<TData, TVars> {
257+
assertThis(this);
278258

279259
return async (vars) => {
280260
const queryKey = [this.mergeVars([this.config.vars, vars as TODO])] as TKey;
@@ -290,8 +270,8 @@ export class QueryBuilderFrozen<
290270
}
291271

292272
#randomKey?: string;
293-
getMutationKey(this: IsBoundThis<TFlags, this>): MutationKey {
294-
assertBound(this);
273+
getMutationKey(): MutationKey {
274+
assertThis(this);
295275

296276
if (this.config.options?.mutationKey) return this.config.options.mutationKey;
297277

@@ -301,11 +281,10 @@ export class QueryBuilderFrozen<
301281
}
302282

303283
getMutationOptions(
304-
this: IsBoundThis<TFlags, this>,
305284
queryClient: QueryClient,
306285
opts?: BuilderOptions<TVars, TData, TError, TKey>,
307286
): UseMutationOptions<TData, TError, TVars> {
308-
assertBound(this);
287+
assertThis(this);
309288

310289
return mergeMutationOptions([
311290
{
@@ -317,12 +296,8 @@ export class QueryBuilderFrozen<
317296
]);
318297
}
319298

320-
getMutationFilters(
321-
this: IsBoundThis<TFlags, this>,
322-
vars?: TVars,
323-
filters?: MutationFilters<TData, TError, TVars>,
324-
): MutationFilters<any, any, any> {
325-
assertBound(this);
299+
getMutationFilters(vars?: TVars, filters?: MutationFilters<TData, TError, TVars>): MutationFilters<any, any, any> {
300+
assertThis(this);
326301

327302
const baseKey = this.preprocessVars(this.mergeVars([this.config.vars, vars as TODO]));
328303

@@ -340,27 +315,23 @@ export class QueryBuilderFrozen<
340315
};
341316
}
342317

343-
useMutation(
344-
this: IsBoundThis<TFlags, this>,
345-
opts?: BuilderOptions<TVars, TData, TError, TKey>,
346-
): ReturnType<typeof useMutation<TData, TError, TVars>> {
347-
assertBound(this);
318+
useMutation(opts?: BuilderOptions<TVars, TData, TError, TKey>): ReturnType<typeof useMutation<TData, TError, TVars>> {
319+
assertThis(this);
348320
const queryClient = useQueryClient(this.config.queryClient);
349321
return useMutation(this.getMutationOptions(queryClient, opts), this.config.queryClient);
350322
}
351323

352-
useIsMutating(this: IsBoundThis<TFlags, this>, vars: TVars, filters?: MutationFilters<TData, TError, TVars>): number {
353-
assertBound(this);
324+
useIsMutating(vars: TVars, filters?: MutationFilters<TData, TError, TVars>): number {
325+
assertThis(this);
354326
return useIsMutating(this.getMutationFilters(vars, filters), this.config.queryClient);
355327
}
356328

357329
useMutationState<TSelect = Mutation<TData, TError, TVars>>(
358-
this: IsBoundThis<TFlags, this>,
359330
vars?: TVars,
360331
filters?: MutationFilters<TData, TError, TVars>,
361332
select?: (mt: Mutation<TData, TError, TVars>) => TSelect,
362333
): TSelect[] {
363-
assertBound(this);
334+
assertThis(this);
364335
return useMutationState({ filters: this.getMutationFilters(vars, filters), select: select as any }, this.config.queryClient);
365336
}
366337

@@ -370,7 +341,7 @@ export class QueryBuilderFrozen<
370341
//#region InfiniteQuery implementation
371342

372343
QueryBuilderFrozen.prototype.getInfiniteQueryOptions = function getInfiniteQueryOptions(vars, opts) {
373-
assertBound(this);
344+
assertThis(this);
374345

375346
// Remove incompatible options from the base query options
376347
const {
@@ -401,17 +372,17 @@ QueryBuilderFrozen.prototype.getInfiniteQueryOptions = function getInfiniteQuery
401372
};
402373

403374
QueryBuilderFrozen.prototype.useInfiniteQuery = function (vars, opts) {
404-
assertBound(this);
375+
assertThis(this);
405376
return useInfiniteQuery(this.getInfiniteQueryOptions(vars, opts), this.config.queryClient);
406377
};
407378

408379
QueryBuilderFrozen.prototype.usePrefetchInfiniteQuery = function (vars, opts) {
409-
assertBound(this);
380+
assertThis(this);
410381
return usePrefetchInfiniteQuery(this.getInfiniteQueryOptions(vars, opts), this.config.queryClient);
411382
};
412383

413384
QueryBuilderFrozen.prototype.useSuspenseInfiniteQuery = function (vars, opts) {
414-
assertBound(this);
385+
assertThis(this);
415386
return useSuspenseInfiniteQuery(this.getInfiniteQueryOptions(vars, opts), this.config.queryClient);
416387
};
417388

0 commit comments

Comments
 (0)