Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions packages/clients/tanstack-query/src/react.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,15 @@ export type ModelSuspenseQueryResult<T> = UseSuspenseQueryResult<WithOptimistic<
queryKey: QueryKey;
};

export type ModelInfiniteQueryOptions<T> = Omit<
UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>,
export type ModelInfiniteQueryOptions<T, TPageParam = unknown> = Omit<
UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T, TPageParam>, QueryKey, TPageParam>,
'queryKey' | 'initialPageParam'
>;

export type ModelInfiniteQueryResult<T> = UseInfiniteQueryResult<T, DefaultError> & { queryKey: QueryKey };

export type ModelSuspenseInfiniteQueryOptions<T> = Omit<
UseSuspenseInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>,
export type ModelSuspenseInfiniteQueryOptions<T, TPageParam = unknown> = Omit<
UseSuspenseInfiniteQueryOptions<T, DefaultError, InfiniteData<T, TPageParam>, QueryKey, TPageParam>,
'queryKey' | 'initialPageParam'
>;

Expand Down Expand Up @@ -253,15 +253,15 @@ export type ModelQueryHooks<
options?: ModelSuspenseQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>,
): ModelSuspenseQueryResult<SimplifiedPlainResult<Schema, Model, T, Options>[]>;

useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>>(
useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>, TPageParam = unknown>(
args?: SelectSubset<T, FindManyArgs<Schema, Model, Options>>,
options?: ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[]>>;
options?: ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>;

useSuspenseInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>>(
useSuspenseInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>, TPageParam = unknown>(
args?: SelectSubset<T, FindManyArgs<Schema, Model, Options>>,
options?: ModelSuspenseInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>,
): ModelSuspenseInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[]>>;
options?: ModelSuspenseInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>,
): ModelSuspenseInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>;

useCreate<T extends CreateArgs<Schema, Model, Options>>(
options?: ModelMutationOptions<SimplifiedPlainResult<Schema, Model, T, Options>, T>,
Expand Down Expand Up @@ -566,14 +566,14 @@ export function useInternalSuspenseQuery<TQueryFnData, TData>(
};
}

export function useInternalInfiniteQuery<TQueryFnData, TData>(
export function useInternalInfiniteQuery<TQueryFnData, TData, TPageParam = unknown>(
_schema: SchemaDef,
model: string,
operation: string,
args: unknown,
options:
| (Omit<
UseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData>>,
UseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>,
'queryKey' | 'initialPageParam'
> &
QueryContext)
Expand All @@ -589,19 +589,19 @@ export function useInternalInfiniteQuery<TQueryFnData, TData>(
queryFn: ({ pageParam, signal }) => {
return fetcher<TQueryFnData>(makeUrl(endpoint, model, operation, pageParam ?? args), { signal }, fetch);
},
initialPageParam: args,
initialPageParam: args as TPageParam,
...options,
}),
};
}

export function useInternalSuspenseInfiniteQuery<TQueryFnData, TData>(
export function useInternalSuspenseInfiniteQuery<TQueryFnData, TData, TPageParam = unknown>(
_schema: SchemaDef,
model: string,
operation: string,
args: unknown,
options: Omit<
UseSuspenseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData>> & QueryContext,
UseSuspenseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam> & QueryContext,
'queryKey' | 'initialPageParam'
>,
) {
Expand All @@ -614,7 +614,7 @@ export function useInternalSuspenseInfiniteQuery<TQueryFnData, TData>(
queryFn: ({ pageParam, signal }) => {
return fetcher<TQueryFnData>(makeUrl(endpoint, model, operation, pageParam ?? args), { signal }, fetch);
},
initialPageParam: args,
initialPageParam: args as TPageParam,
...options,
}),
};
Expand Down
23 changes: 13 additions & 10 deletions packages/clients/tanstack-query/src/svelte/index.svelte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ export type ModelQueryOptions<T> = Omit<CreateQueryOptions<T, DefaultError>, 'qu

export type ModelQueryResult<T> = CreateQueryResult<WithOptimistic<T>, DefaultError> & { queryKey: QueryKey };

export type ModelInfiniteQueryOptions<T> = Omit<
CreateInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>,
export type ModelInfiniteQueryOptions<T, TPageParam = unknown> = Omit<
CreateInfiniteQueryOptions<T, DefaultError, InfiniteData<T, TPageParam>, QueryKey, TPageParam>,
'queryKey' | 'initialPageParam'
> &
QueryContext;
Expand Down Expand Up @@ -225,10 +225,10 @@ export type ModelQueryHooks<
options?: Accessor<ModelQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>>,
): ModelQueryResult<SimplifiedPlainResult<Schema, Model, T, Options>[]>;

useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>>(
useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>, TPageParam = unknown>(
args?: Accessor<SelectSubset<T, FindManyArgs<Schema, Model, Options>>>,
options?: Accessor<ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[]>>;
options?: Accessor<ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>;

useCreate<T extends CreateArgs<Schema, Model, Options>>(
options?: Accessor<ModelMutationOptions<SimplifiedPlainResult<Schema, Model, T, Options>, T>>,
Expand Down Expand Up @@ -458,14 +458,14 @@ export function useInternalQuery<TQueryFnData, TData>(
return createQueryResult(query, queryKey);
}

export function useInternalInfiniteQuery<TQueryFnData, TData>(
export function useInternalInfiniteQuery<TQueryFnData, TData, TPageParam = unknown>(
_schema: SchemaDef,
model: string,
operation: string,
args: Accessor<unknown>,
options?: Accessor<
Omit<
CreateInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData>>,
CreateInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>,
'queryKey' | 'initialPageParam'
> &
QueryContext
Expand All @@ -476,18 +476,21 @@ export function useInternalInfiniteQuery<TQueryFnData, TData>(
const queryKey = $derived(getQueryKey(model, operation, args(), { infinite: true, optimisticUpdate: false }));

const finalOptions = () => {
const queryFn: QueryFunction<TQueryFnData, QueryKey, unknown> = ({ pageParam, signal }) =>
const queryFn: QueryFunction<TQueryFnData, QueryKey, TPageParam> = ({ pageParam, signal }) =>
fetcher<TQueryFnData>(makeUrl(endpoint, model, operation, pageParam ?? args()), { signal }, fetch);
const optionsValue = options?.() ?? { getNextPageParam: () => undefined };
return {
queryKey,
queryFn,
initialPageParam: args(),
initialPageParam: args() as TPageParam,
...optionsValue,
};
};

const query = createInfiniteQuery<TQueryFnData, DefaultError, InfiniteData<TData>>(finalOptions);
// Cast is needed because TypeScript cannot reconcile the `TPageParam` generic
// in `finalOptions` with `createInfiniteQuery`'s own internal `TPageParam` inference.
// At runtime these types are equivalent since `finalOptions` is built from typed options.
const query = createInfiniteQuery<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>(finalOptions as unknown as Accessor<CreateInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>>);
// svelte-ignore state_referenced_locally
return createQueryResult(query, queryKey);
}
Expand Down
14 changes: 7 additions & 7 deletions packages/clients/tanstack-query/src/vue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ export type ModelQueryOptions<T> = MaybeRefOrGetter<

export type ModelQueryResult<T> = UseQueryReturnType<WithOptimistic<T>, DefaultError> & { queryKey: Ref<QueryKey> };

export type ModelInfiniteQueryOptions<T> = MaybeRefOrGetter<
Omit<UnwrapRef<UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>>, 'queryKey' | 'initialPageParam'> &
export type ModelInfiniteQueryOptions<T, TPageParam = unknown> = MaybeRefOrGetter<
Omit<UnwrapRef<UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T, TPageParam>, QueryKey, TPageParam>>, 'queryKey' | 'initialPageParam'> &
QueryContext
>;

Expand Down Expand Up @@ -227,10 +227,10 @@ export type ModelQueryHooks<
options?: MaybeRefOrGetter<ModelQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>>,
): ModelQueryResult<SimplifiedPlainResult<Schema, Model, T, Options>[]>;

useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>>(
useInfiniteFindMany<T extends FindManyArgs<Schema, Model, Options>, TPageParam = unknown>(
args?: MaybeRefOrGetter<SelectSubset<T, FindManyArgs<Schema, Model, Options>>>,
options?: MaybeRefOrGetter<ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[]>>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[]>>;
options?: MaybeRefOrGetter<ModelInfiniteQueryOptions<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>,
): ModelInfiniteQueryResult<InfiniteData<SimplifiedPlainResult<Schema, Model, T, Options>[], TPageParam>>;

useCreate<T extends CreateArgs<Schema, Model, Options>>(
options?: MaybeRefOrGetter<ModelMutationOptions<SimplifiedPlainResult<Schema, Model, T, Options>, T>>,
Expand Down Expand Up @@ -480,14 +480,14 @@ export function useInternalQuery<TQueryFnData, TData>(
return { queryKey, ...useQuery<TQueryFnData, DefaultError, TData>(finalOptions) };
}

export function useInternalInfiniteQuery<TQueryFnData, TData>(
export function useInternalInfiniteQuery<TQueryFnData, TData, TPageParam = unknown>(
_schema: SchemaDef,
model: string,
operation: string,
args: MaybeRefOrGetter<unknown>,
options: MaybeRefOrGetter<
| (Omit<
UnwrapRef<UseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData>>>,
UnwrapRef<UseInfiniteQueryOptions<TQueryFnData, DefaultError, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>>,
'queryKey' | 'initialPageParam'
> &
QueryContext)
Expand Down
10 changes: 10 additions & 0 deletions packages/clients/tanstack-query/test/react-typing.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,16 @@ describe('React client typing test', () => {
// @ts-expect-error
check(client.user.useInfiniteFindMany().data?.pages[0]?.[0]?.$optimistic);

// TPageParam inference: pageParams should be typed as { cursor: string }[], not unknown[]
const infiniteResult = client.user.useInfiniteFindMany(
{},
{
getNextPageParam: (_lastPage, _allPages, lastPageParam: { cursor: string }) =>
lastPageParam,
},
);
check(infiniteResult.data?.pageParams[0]?.cursor);

check(client.user.useSuspenseFindMany().data[0]?.email);
check(client.user.useSuspenseInfiniteFindMany().data.pages[0]?.[0]?.email);
check(client.user.useCount().data?.toFixed(2));
Expand Down