Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
8 changes: 5 additions & 3 deletions packages/clients/tanstack-query/src/react.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import {
type ExtraMutationOptions,
type ExtraQueryOptions,
} from './utils/common';
import type { TrimDelegateModelOperations } from './utils/types';
import type { TrimDelegateModelOperations, WithOptimistic } from './utils/types';

export type { FetchFn } from './utils/common';

Expand Down Expand Up @@ -93,12 +93,14 @@ function useHooksContext() {

export type ModelQueryOptions<T> = Omit<UseQueryOptions<T, DefaultError>, 'queryKey'> & ExtraQueryOptions;

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

export type ModelSuspenseQueryOptions<T> = Omit<UseSuspenseQueryOptions<T, DefaultError>, 'queryKey'> &
ExtraQueryOptions;

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

export type ModelInfiniteQueryOptions<T> = Omit<
UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>,
Expand Down
6 changes: 4 additions & 2 deletions packages/clients/tanstack-query/src/svelte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ import {
type ExtraMutationOptions,
type ExtraQueryOptions,
} from './utils/common';
import type { TrimDelegateModelOperations } from './utils/types';
import type { TrimDelegateModelOperations, WithOptimistic } from './utils/types';

export type { FetchFn } from './utils/common';

Expand Down Expand Up @@ -91,7 +91,9 @@ function getQuerySettings() {

export type ModelQueryOptions<T> = Omit<CreateQueryOptions<T, DefaultError>, 'queryKey'> & ExtraQueryOptions;

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

export type ModelInfiniteQueryOptions<T> = Omit<
CreateInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>,
Expand Down
7 changes: 7 additions & 0 deletions packages/clients/tanstack-query/src/utils/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@ export type TrimDelegateModelOperations<
Model extends GetModels<Schema>,
T extends Record<string, unknown>,
> = IsDelegateModel<Schema, Model> extends true ? Omit<T, HooksOperationsIneligibleForDelegateModels> : T;

export type WithOptimistic<T> =
T extends Array<infer U>
? Array<U & { $optimistic?: boolean }>
: T & {
$optimistic?: boolean;
};
4 changes: 2 additions & 2 deletions packages/clients/tanstack-query/src/vue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ import {
type ExtraMutationOptions,
type ExtraQueryOptions,
} from './utils/common';
import type { TrimDelegateModelOperations } from './utils/types';
import type { TrimDelegateModelOperations, WithOptimistic } from './utils/types';

export type { FetchFn } from './utils/common';
export const VueQueryContextKey = 'zenstack-vue-query-context';
Expand Down Expand Up @@ -86,7 +86,7 @@ export type ModelQueryOptions<T> = MaybeRefOrGetter<
Omit<UnwrapRef<UseQueryOptions<T, DefaultError>>, 'queryKey'> & ExtraQueryOptions
>;

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

export type ModelInfiniteQueryOptions<T> = MaybeRefOrGetter<
Omit<UnwrapRef<UseInfiniteQueryOptions<T, DefaultError, InfiniteData<T>>>, 'queryKey' | 'initialPageParam'>
Expand Down
4 changes: 4 additions & 0 deletions packages/clients/tanstack-query/test/react-typing-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ check(client.user.useFindUnique({ select: { email: true } }).data.name);
check(client.user.useFindUnique({ where: { id: '1' }, include: { posts: true } }).data?.posts[0]?.title);

check(client.user.useFindFirst().data?.email);
check(client.user.useFindFirst().data?.$optimistic);

check(client.user.useFindMany().data?.[0]?.email);
check(client.user.useFindMany().data?.[0]?.$optimistic);

check(client.user.useInfiniteFindMany().data?.pages[0]?.[0]?.email);
check(
Expand All @@ -28,6 +30,8 @@ check(
},
).data?.pages[1]?.[0]?.email,
);
// @ts-expect-error
check(client.user.useInfiniteFindMany().data?.pages[0]?.[0]?.$optimistic);

check(client.user.useSuspenseFindMany().data[0]?.email);
check(client.user.useSuspenseInfiniteFindMany().data.pages[0]?.[0]?.email);
Expand Down
5 changes: 5 additions & 0 deletions packages/clients/tanstack-query/test/svelte-typing-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ check(get(client.user.useFindUnique({ select: { email: true } })).data.name);
check(get(client.user.useFindUnique({ where: { id: '1' }, include: { posts: true } })).data?.posts[0]?.title);

check(get(client.user.useFindFirst()).data?.email);
check(get(client.user.useFindFirst()).data?.$optimistic);

check(get(client.user.useFindMany()).data?.[0]?.email);
check(get(client.user.useFindMany()).data?.[0]?.$optimistic);

check(get(client.user.useInfiniteFindMany()).data?.pages[0]?.[0]?.email);
check(
get(
Expand All @@ -30,6 +33,8 @@ check(
),
).data?.pages[1]?.[0]?.email,
);
// @ts-expect-error
check(get(client.user.useInfiniteFindMany()).data?.pages[0]?.[0]?.$optimistic);

check(get(client.user.useCount()).data?.toFixed(2));
check(get(client.user.useCount({ select: { email: true } })).data?.email.toFixed(2));
Expand Down
4 changes: 4 additions & 0 deletions packages/clients/tanstack-query/test/vue-typing-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ check(client.user.useFindUnique({ select: { email: true } }).data.name);
check(client.user.useFindUnique({ where: { id: '1' }, include: { posts: true } }).data.value?.posts[0]?.title);

check(client.user.useFindFirst().data.value?.email);
check(client.user.useFindFirst().data.value?.$optimistic);

check(client.user.useFindMany().data.value?.[0]?.email);
check(client.user.useFindMany().data.value?.[0]?.$optimistic);

check(client.user.useInfiniteFindMany().data.value?.pages[0]?.[0]?.email);
check(
Expand All @@ -28,6 +30,8 @@ check(
},
).data.value?.pages[1]?.[0]?.email,
);
// @ts-expect-error
check(client.user.useInfiniteFindMany().data.value?.pages[0]?.[0]?.$optimistic);

check(client.user.useCount().data.value?.toFixed(2));
check(client.user.useCount({ select: { email: true } }).data.value?.email.toFixed(2));
Expand Down
Loading