Skip to content

Commit

Permalink
feat: initialData type narrowing (#240)
Browse files Browse the repository at this point in the history
  • Loading branch information
DamianOsipiuk committed Sep 9, 2022
1 parent d0bb50b commit dab6c6c
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 11 deletions.
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"homepage": "https://github.com/DamianOsipiuk/vue-query#readme",
"dependencies": {
"@vue/devtools-api": "^6.2.1",
"@tanstack/query-core": "^4.0.5",
"@tanstack/query-core": "^4.2.3",
"match-sorter": "^6.3.1",
"vue-demi": "^0.13.5"
},
Expand Down
98 changes: 95 additions & 3 deletions src/vuejs/useQuery.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { UnwrapRef } from "vue-demi";
import type { ToRefs, UnwrapRef } from "vue-demi";
import { QueryObserver } from "@tanstack/query-core";
import type {
QueryFunction,
QueryKey,
QueryObserverResult,
DefinedQueryObserverResult,
} from "@tanstack/query-core";
import { useBaseQuery, UseQueryReturnType as UQRT } from "./useBaseQuery";
import type { WithQueryClientKey, VueQueryObserverOptions } from "./types";
Expand All @@ -16,6 +17,15 @@ type UseQueryReturnType<TData, TError> = Omit<
remove: QueryObserverResult<TData, TError>["remove"];
};

type UseQueryDefinedReturnType<TData, TError> = Omit<
ToRefs<Readonly<DefinedQueryObserverResult<TData, TError>>>,
"refetch" | "remove"
> & {
suspense: () => Promise<QueryObserverResult<TData, TError>>;
refetch: QueryObserverResult<TData, TError>["refetch"];
remove: QueryObserverResult<TData, TError>["remove"];
};

export type UseQueryOptions<
TQueryFnData = unknown,
TError = unknown,
Expand All @@ -25,6 +35,30 @@ export type UseQueryOptions<
VueQueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
options: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"initialData"
> & { initialData?: () => undefined }
): UseQueryReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
options: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"initialData"
> & { initialData: TQueryFnData | (() => TQueryFnData) }
): UseQueryDefinedReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
Expand All @@ -33,6 +67,33 @@ export function useQuery<
>(
options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
): UseQueryReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
queryKey: TQueryKey,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryKey" | "initialData"
> & { initialData?: () => undefined }
): UseQueryReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
queryKey: TQueryKey,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryKey" | "initialData"
> & { initialData: TQueryFnData | (() => TQueryFnData) }
): UseQueryDefinedReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
Expand All @@ -45,14 +106,43 @@ export function useQuery<
"queryKey"
>
): UseQueryReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
queryKey: TQueryKey,
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryKey" | "queryFn" | "initialData"
> & { initialData?: () => undefined }
): UseQueryReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
queryKey: TQueryKey,
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryKey" | "queryFn" | "initialData"
> & { initialData: TQueryFnData | (() => TQueryFnData) }
): UseQueryDefinedReturnType<TData, TError>;

export function useQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey
>(
queryKey: TQueryKey,
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryKey" | "queryFn"
Expand All @@ -70,7 +160,9 @@ export function useQuery<
| QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>
| UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
): UseQueryReturnType<TData, TError> {
):
| UseQueryReturnType<TData, TError>
| UseQueryDefinedReturnType<TData, TError> {
const result = useBaseQuery(QueryObserver, arg1, arg2, arg3);

return {
Expand Down

0 comments on commit dab6c6c

Please sign in to comment.