@octanejs/tanstack-query 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/package.json +44 -0
- package/src/HydrationBoundary.tsrx +74 -0
- package/src/HydrationBoundary.tsrx.d.ts +9 -0
- package/src/QueryClientProvider.tsrx +16 -0
- package/src/QueryClientProvider.tsrx.d.ts +10 -0
- package/src/QueryErrorResetBoundary.tsrx +21 -0
- package/src/QueryErrorResetBoundary.tsrx.d.ts +4 -0
- package/src/context.ts +29 -0
- package/src/errorResetBoundary.ts +28 -0
- package/src/index.ts +74 -0
- package/src/infiniteQueryOptions.ts +94 -0
- package/src/internal.ts +115 -0
- package/src/isRestoring.ts +13 -0
- package/src/mutationOptions.ts +33 -0
- package/src/queries-types.ts +167 -0
- package/src/queryOptions.ts +83 -0
- package/src/suspense-queries-types.ts +141 -0
- package/src/types.ts +232 -0
- package/src/useBaseQuery.ts +153 -0
- package/src/useInfiniteQuery.ts +52 -0
- package/src/useIsFetching.ts +25 -0
- package/src/useMutation.ts +65 -0
- package/src/useMutationState.ts +78 -0
- package/src/usePrefetch.ts +48 -0
- package/src/useQueries.ts +134 -0
- package/src/useQuery.ts +47 -0
- package/src/useSuspenseQueries.ts +38 -0
- package/src/useSuspenseQuery.ts +71 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Verbatim port of @tanstack/react-query's mutationOptions.ts — a typed identity helper
|
|
2
|
+
import type { DefaultError, WithRequired } from '@tanstack/query-core';
|
|
3
|
+
import type { UseMutationOptions } from './types';
|
|
4
|
+
|
|
5
|
+
export function mutationOptions<
|
|
6
|
+
TData = unknown,
|
|
7
|
+
TError = DefaultError,
|
|
8
|
+
TVariables = void,
|
|
9
|
+
TOnMutateResult = unknown,
|
|
10
|
+
>(
|
|
11
|
+
options: WithRequired<
|
|
12
|
+
UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
13
|
+
'mutationKey'
|
|
14
|
+
>,
|
|
15
|
+
): WithRequired<UseMutationOptions<TData, TError, TVariables, TOnMutateResult>, 'mutationKey'>;
|
|
16
|
+
export function mutationOptions<
|
|
17
|
+
TData = unknown,
|
|
18
|
+
TError = DefaultError,
|
|
19
|
+
TVariables = void,
|
|
20
|
+
TOnMutateResult = unknown,
|
|
21
|
+
>(
|
|
22
|
+
options: Omit<UseMutationOptions<TData, TError, TVariables, TOnMutateResult>, 'mutationKey'>,
|
|
23
|
+
): Omit<UseMutationOptions<TData, TError, TVariables, TOnMutateResult>, 'mutationKey'>;
|
|
24
|
+
export function mutationOptions<
|
|
25
|
+
TData = unknown,
|
|
26
|
+
TError = DefaultError,
|
|
27
|
+
TVariables = void,
|
|
28
|
+
TOnMutateResult = unknown,
|
|
29
|
+
>(
|
|
30
|
+
options: UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
31
|
+
): UseMutationOptions<TData, TError, TVariables, TOnMutateResult> {
|
|
32
|
+
return options;
|
|
33
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// The useQueries option/result tuple types — a 1:1 port of the type block in
|
|
2
|
+
// @tanstack/react-query's useQueries.ts (pure query-core generics, no React).
|
|
3
|
+
// `GetUseQueryOptionsForUseQueries` / `GetUseQueryResult` recursively unwrap
|
|
4
|
+
// per-entry generics so tuple inputs infer per-index option/result types.
|
|
5
|
+
import type { UseQueryOptions, UseQueryResult, DefinedUseQueryResult } from './types';
|
|
6
|
+
import type {
|
|
7
|
+
DefaultError,
|
|
8
|
+
OmitKeyof,
|
|
9
|
+
QueriesPlaceholderDataFunction,
|
|
10
|
+
QueryFunction,
|
|
11
|
+
QueryKey,
|
|
12
|
+
ThrowOnError,
|
|
13
|
+
} from '@tanstack/query-core';
|
|
14
|
+
|
|
15
|
+
// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
|
|
16
|
+
// `placeholderData` function always gets undefined passed
|
|
17
|
+
type UseQueryOptionsForUseQueries<
|
|
18
|
+
TQueryFnData = unknown,
|
|
19
|
+
TError = DefaultError,
|
|
20
|
+
TData = TQueryFnData,
|
|
21
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
22
|
+
> = OmitKeyof<
|
|
23
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
24
|
+
'placeholderData' | 'subscribed'
|
|
25
|
+
> & {
|
|
26
|
+
placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Avoid TS depth-limit error in case of large array literal
|
|
30
|
+
type MAXIMUM_DEPTH = 20;
|
|
31
|
+
|
|
32
|
+
// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
|
|
33
|
+
type SkipTokenForUseQueries = symbol;
|
|
34
|
+
|
|
35
|
+
type GetUseQueryOptionsForUseQueries<T> =
|
|
36
|
+
// Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
|
|
37
|
+
T extends {
|
|
38
|
+
queryFnData: infer TQueryFnData;
|
|
39
|
+
error?: infer TError;
|
|
40
|
+
data: infer TData;
|
|
41
|
+
}
|
|
42
|
+
? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>
|
|
43
|
+
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
44
|
+
? UseQueryOptionsForUseQueries<TQueryFnData, TError>
|
|
45
|
+
: T extends { data: infer TData; error?: infer TError }
|
|
46
|
+
? UseQueryOptionsForUseQueries<unknown, TError, TData>
|
|
47
|
+
: // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]
|
|
48
|
+
T extends [infer TQueryFnData, infer TError, infer TData]
|
|
49
|
+
? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>
|
|
50
|
+
: T extends [infer TQueryFnData, infer TError]
|
|
51
|
+
? UseQueryOptionsForUseQueries<TQueryFnData, TError>
|
|
52
|
+
: T extends [infer TQueryFnData]
|
|
53
|
+
? UseQueryOptionsForUseQueries<TQueryFnData>
|
|
54
|
+
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
|
|
55
|
+
T extends {
|
|
56
|
+
queryFn?:
|
|
57
|
+
| QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
58
|
+
| SkipTokenForUseQueries;
|
|
59
|
+
select?: (data: any) => infer TData;
|
|
60
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
61
|
+
}
|
|
62
|
+
? UseQueryOptionsForUseQueries<
|
|
63
|
+
TQueryFnData,
|
|
64
|
+
unknown extends TError ? DefaultError : TError,
|
|
65
|
+
unknown extends TData ? TQueryFnData : TData,
|
|
66
|
+
TQueryKey
|
|
67
|
+
>
|
|
68
|
+
: // Fallback
|
|
69
|
+
UseQueryOptionsForUseQueries;
|
|
70
|
+
|
|
71
|
+
// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult
|
|
72
|
+
type GetDefinedOrUndefinedQueryResult<T, TData, TError = unknown> = T extends {
|
|
73
|
+
initialData?: infer TInitialData;
|
|
74
|
+
}
|
|
75
|
+
? unknown extends TInitialData
|
|
76
|
+
? UseQueryResult<TData, TError>
|
|
77
|
+
: TInitialData extends TData
|
|
78
|
+
? DefinedUseQueryResult<TData, TError>
|
|
79
|
+
: TInitialData extends () => infer TInitialDataResult
|
|
80
|
+
? unknown extends TInitialDataResult
|
|
81
|
+
? UseQueryResult<TData, TError>
|
|
82
|
+
: TInitialDataResult extends TData
|
|
83
|
+
? DefinedUseQueryResult<TData, TError>
|
|
84
|
+
: UseQueryResult<TData, TError>
|
|
85
|
+
: UseQueryResult<TData, TError>
|
|
86
|
+
: UseQueryResult<TData, TError>;
|
|
87
|
+
|
|
88
|
+
type GetUseQueryResult<T> =
|
|
89
|
+
// Part 1: responsible for mapping explicit type parameter to function result, if object
|
|
90
|
+
T extends { queryFnData: any; error?: infer TError; data: infer TData }
|
|
91
|
+
? GetDefinedOrUndefinedQueryResult<T, TData, TError>
|
|
92
|
+
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
93
|
+
? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError>
|
|
94
|
+
: T extends { data: infer TData; error?: infer TError }
|
|
95
|
+
? GetDefinedOrUndefinedQueryResult<T, TData, TError>
|
|
96
|
+
: // Part 2: responsible for mapping explicit type parameter to function result, if tuple
|
|
97
|
+
T extends [any, infer TError, infer TData]
|
|
98
|
+
? GetDefinedOrUndefinedQueryResult<T, TData, TError>
|
|
99
|
+
: T extends [infer TQueryFnData, infer TError]
|
|
100
|
+
? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError>
|
|
101
|
+
: T extends [infer TQueryFnData]
|
|
102
|
+
? GetDefinedOrUndefinedQueryResult<T, TQueryFnData>
|
|
103
|
+
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
|
|
104
|
+
T extends {
|
|
105
|
+
queryFn?: QueryFunction<infer TQueryFnData, any> | SkipTokenForUseQueries;
|
|
106
|
+
select?: (data: any) => infer TData;
|
|
107
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
108
|
+
}
|
|
109
|
+
? GetDefinedOrUndefinedQueryResult<
|
|
110
|
+
T,
|
|
111
|
+
unknown extends TData ? TQueryFnData : TData,
|
|
112
|
+
unknown extends TError ? DefaultError : TError
|
|
113
|
+
>
|
|
114
|
+
: // Fallback
|
|
115
|
+
UseQueryResult;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
|
|
119
|
+
*/
|
|
120
|
+
export type QueriesOptions<
|
|
121
|
+
T extends Array<any>,
|
|
122
|
+
TResults extends Array<any> = [],
|
|
123
|
+
TDepth extends ReadonlyArray<number> = [],
|
|
124
|
+
> = TDepth['length'] extends MAXIMUM_DEPTH
|
|
125
|
+
? Array<UseQueryOptionsForUseQueries>
|
|
126
|
+
: T extends []
|
|
127
|
+
? []
|
|
128
|
+
: T extends [infer Head]
|
|
129
|
+
? [...TResults, GetUseQueryOptionsForUseQueries<Head>]
|
|
130
|
+
: T extends [infer Head, ...infer Tails]
|
|
131
|
+
? QueriesOptions<
|
|
132
|
+
[...Tails],
|
|
133
|
+
[...TResults, GetUseQueryOptionsForUseQueries<Head>],
|
|
134
|
+
[...TDepth, 1]
|
|
135
|
+
>
|
|
136
|
+
: ReadonlyArray<unknown> extends T
|
|
137
|
+
? T
|
|
138
|
+
: // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
|
|
139
|
+
// use this to infer the param types in the case of Array.map() argument
|
|
140
|
+
T extends Array<
|
|
141
|
+
UseQueryOptionsForUseQueries<
|
|
142
|
+
infer TQueryFnData,
|
|
143
|
+
infer TError,
|
|
144
|
+
infer TData,
|
|
145
|
+
infer TQueryKey
|
|
146
|
+
>
|
|
147
|
+
>
|
|
148
|
+
? Array<UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>>
|
|
149
|
+
: // Fallback
|
|
150
|
+
Array<UseQueryOptionsForUseQueries>;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* QueriesResults reducer recursively maps type param to results
|
|
154
|
+
*/
|
|
155
|
+
export type QueriesResults<
|
|
156
|
+
T extends Array<any>,
|
|
157
|
+
TResults extends Array<any> = [],
|
|
158
|
+
TDepth extends ReadonlyArray<number> = [],
|
|
159
|
+
> = TDepth['length'] extends MAXIMUM_DEPTH
|
|
160
|
+
? Array<UseQueryResult>
|
|
161
|
+
: T extends []
|
|
162
|
+
? []
|
|
163
|
+
: T extends [infer Head]
|
|
164
|
+
? [...TResults, GetUseQueryResult<Head>]
|
|
165
|
+
: T extends [infer Head, ...infer Tails]
|
|
166
|
+
? QueriesResults<[...Tails], [...TResults, GetUseQueryResult<Head>], [...TDepth, 1]>
|
|
167
|
+
: { [K in keyof T]: GetUseQueryResult<T[K]> };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Verbatim port of @tanstack/react-query's queryOptions.ts — a typed identity helper
|
|
2
|
+
import type {
|
|
3
|
+
DataTag,
|
|
4
|
+
DefaultError,
|
|
5
|
+
InitialDataFunction,
|
|
6
|
+
NonUndefinedGuard,
|
|
7
|
+
OmitKeyof,
|
|
8
|
+
QueryFunction,
|
|
9
|
+
QueryKey,
|
|
10
|
+
SkipToken,
|
|
11
|
+
} from '@tanstack/query-core';
|
|
12
|
+
import type { UseQueryOptions } from './types';
|
|
13
|
+
|
|
14
|
+
export type UndefinedInitialDataOptions<
|
|
15
|
+
TQueryFnData = unknown,
|
|
16
|
+
TError = DefaultError,
|
|
17
|
+
TData = TQueryFnData,
|
|
18
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
19
|
+
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
20
|
+
initialData?:
|
|
21
|
+
| undefined
|
|
22
|
+
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
|
|
23
|
+
| NonUndefinedGuard<TQueryFnData>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type UnusedSkipTokenOptions<
|
|
27
|
+
TQueryFnData = unknown,
|
|
28
|
+
TError = DefaultError,
|
|
29
|
+
TData = TQueryFnData,
|
|
30
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
31
|
+
> = OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> & {
|
|
32
|
+
queryFn?: Exclude<
|
|
33
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
|
|
34
|
+
SkipToken | undefined
|
|
35
|
+
>;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export type DefinedInitialDataOptions<
|
|
39
|
+
TQueryFnData = unknown,
|
|
40
|
+
TError = DefaultError,
|
|
41
|
+
TData = TQueryFnData,
|
|
42
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
43
|
+
> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> & {
|
|
44
|
+
initialData: NonUndefinedGuard<TQueryFnData> | (() => NonUndefinedGuard<TQueryFnData>);
|
|
45
|
+
queryFn?: QueryFunction<TQueryFnData, TQueryKey>;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export function queryOptions<
|
|
49
|
+
TQueryFnData = unknown,
|
|
50
|
+
TError = DefaultError,
|
|
51
|
+
TData = TQueryFnData,
|
|
52
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
53
|
+
>(
|
|
54
|
+
options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
55
|
+
): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
56
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export function queryOptions<
|
|
60
|
+
TQueryFnData = unknown,
|
|
61
|
+
TError = DefaultError,
|
|
62
|
+
TData = TQueryFnData,
|
|
63
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
64
|
+
>(
|
|
65
|
+
options: UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
66
|
+
): UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
67
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export function queryOptions<
|
|
71
|
+
TQueryFnData = unknown,
|
|
72
|
+
TError = DefaultError,
|
|
73
|
+
TData = TQueryFnData,
|
|
74
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
75
|
+
>(
|
|
76
|
+
options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
77
|
+
): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
78
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export function queryOptions(options: unknown) {
|
|
82
|
+
return options;
|
|
83
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// The useSuspenseQueries option/result tuple types — a 1:1 port of the type
|
|
2
|
+
// block in @tanstack/react-query's useSuspenseQueries.ts (pure query-core
|
|
3
|
+
// generics, no React).
|
|
4
|
+
import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types';
|
|
5
|
+
import type { DefaultError, QueryFunction, ThrowOnError } from '@tanstack/query-core';
|
|
6
|
+
|
|
7
|
+
// Avoid TS depth-limit error in case of large array literal
|
|
8
|
+
type MAXIMUM_DEPTH = 20;
|
|
9
|
+
|
|
10
|
+
// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
|
|
11
|
+
type SkipTokenForUseQueries = symbol;
|
|
12
|
+
|
|
13
|
+
type GetUseSuspenseQueryOptions<T> =
|
|
14
|
+
// Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
|
|
15
|
+
T extends {
|
|
16
|
+
queryFnData: infer TQueryFnData;
|
|
17
|
+
error?: infer TError;
|
|
18
|
+
data: infer TData;
|
|
19
|
+
}
|
|
20
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TData>
|
|
21
|
+
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
22
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError>
|
|
23
|
+
: T extends { data: infer TData; error?: infer TError }
|
|
24
|
+
? UseSuspenseQueryOptions<unknown, TError, TData>
|
|
25
|
+
: // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]
|
|
26
|
+
T extends [infer TQueryFnData, infer TError, infer TData]
|
|
27
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TData>
|
|
28
|
+
: T extends [infer TQueryFnData, infer TError]
|
|
29
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError>
|
|
30
|
+
: T extends [infer TQueryFnData]
|
|
31
|
+
? UseSuspenseQueryOptions<TQueryFnData>
|
|
32
|
+
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
|
|
33
|
+
T extends {
|
|
34
|
+
queryFn?:
|
|
35
|
+
| QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
36
|
+
| SkipTokenForUseQueries;
|
|
37
|
+
select?: (data: any) => infer TData;
|
|
38
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
39
|
+
}
|
|
40
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
41
|
+
: T extends {
|
|
42
|
+
queryFn?:
|
|
43
|
+
| QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
44
|
+
| SkipTokenForUseQueries;
|
|
45
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
46
|
+
}
|
|
47
|
+
? UseSuspenseQueryOptions<TQueryFnData, TError, TQueryFnData, TQueryKey>
|
|
48
|
+
: // Fallback
|
|
49
|
+
UseSuspenseQueryOptions;
|
|
50
|
+
|
|
51
|
+
type GetUseSuspenseQueryResult<T> =
|
|
52
|
+
// Part 1: responsible for mapping explicit type parameter to function result, if object
|
|
53
|
+
T extends { queryFnData: any; error?: infer TError; data: infer TData }
|
|
54
|
+
? UseSuspenseQueryResult<TData, TError>
|
|
55
|
+
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
56
|
+
? UseSuspenseQueryResult<TQueryFnData, TError>
|
|
57
|
+
: T extends { data: infer TData; error?: infer TError }
|
|
58
|
+
? UseSuspenseQueryResult<TData, TError>
|
|
59
|
+
: // Part 2: responsible for mapping explicit type parameter to function result, if tuple
|
|
60
|
+
T extends [any, infer TError, infer TData]
|
|
61
|
+
? UseSuspenseQueryResult<TData, TError>
|
|
62
|
+
: T extends [infer TQueryFnData, infer TError]
|
|
63
|
+
? UseSuspenseQueryResult<TQueryFnData, TError>
|
|
64
|
+
: T extends [infer TQueryFnData]
|
|
65
|
+
? UseSuspenseQueryResult<TQueryFnData>
|
|
66
|
+
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
|
|
67
|
+
T extends {
|
|
68
|
+
queryFn?: QueryFunction<infer TQueryFnData, any> | SkipTokenForUseQueries;
|
|
69
|
+
select?: (data: any) => infer TData;
|
|
70
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
71
|
+
}
|
|
72
|
+
? UseSuspenseQueryResult<
|
|
73
|
+
unknown extends TData ? TQueryFnData : TData,
|
|
74
|
+
unknown extends TError ? DefaultError : TError
|
|
75
|
+
>
|
|
76
|
+
: T extends {
|
|
77
|
+
queryFn?: QueryFunction<infer TQueryFnData, any> | SkipTokenForUseQueries;
|
|
78
|
+
throwOnError?: ThrowOnError<any, infer TError, any, any>;
|
|
79
|
+
}
|
|
80
|
+
? UseSuspenseQueryResult<
|
|
81
|
+
TQueryFnData,
|
|
82
|
+
unknown extends TError ? DefaultError : TError
|
|
83
|
+
>
|
|
84
|
+
: // Fallback
|
|
85
|
+
UseSuspenseQueryResult;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
|
|
89
|
+
*/
|
|
90
|
+
export type SuspenseQueriesOptions<
|
|
91
|
+
T extends Array<any>,
|
|
92
|
+
TResults extends Array<any> = [],
|
|
93
|
+
TDepth extends ReadonlyArray<number> = [],
|
|
94
|
+
> = TDepth['length'] extends MAXIMUM_DEPTH
|
|
95
|
+
? Array<UseSuspenseQueryOptions>
|
|
96
|
+
: T extends []
|
|
97
|
+
? []
|
|
98
|
+
: T extends [infer Head]
|
|
99
|
+
? [...TResults, GetUseSuspenseQueryOptions<Head>]
|
|
100
|
+
: T extends [infer Head, ...infer Tails]
|
|
101
|
+
? SuspenseQueriesOptions<
|
|
102
|
+
[...Tails],
|
|
103
|
+
[...TResults, GetUseSuspenseQueryOptions<Head>],
|
|
104
|
+
[...TDepth, 1]
|
|
105
|
+
>
|
|
106
|
+
: Array<unknown> extends T
|
|
107
|
+
? T
|
|
108
|
+
: // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
|
|
109
|
+
// use this to infer the param types in the case of Array.map() argument
|
|
110
|
+
T extends Array<
|
|
111
|
+
UseSuspenseQueryOptions<
|
|
112
|
+
infer TQueryFnData,
|
|
113
|
+
infer TError,
|
|
114
|
+
infer TData,
|
|
115
|
+
infer TQueryKey
|
|
116
|
+
>
|
|
117
|
+
>
|
|
118
|
+
? Array<UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>
|
|
119
|
+
: // Fallback
|
|
120
|
+
Array<UseSuspenseQueryOptions>;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* SuspenseQueriesResults reducer recursively maps type param to results
|
|
124
|
+
*/
|
|
125
|
+
export type SuspenseQueriesResults<
|
|
126
|
+
T extends Array<any>,
|
|
127
|
+
TResults extends Array<any> = [],
|
|
128
|
+
TDepth extends ReadonlyArray<number> = [],
|
|
129
|
+
> = TDepth['length'] extends MAXIMUM_DEPTH
|
|
130
|
+
? Array<UseSuspenseQueryResult>
|
|
131
|
+
: T extends []
|
|
132
|
+
? []
|
|
133
|
+
: T extends [infer Head]
|
|
134
|
+
? [...TResults, GetUseSuspenseQueryResult<Head>]
|
|
135
|
+
: T extends [infer Head, ...infer Tails]
|
|
136
|
+
? SuspenseQueriesResults<
|
|
137
|
+
[...Tails],
|
|
138
|
+
[...TResults, GetUseSuspenseQueryResult<Head>],
|
|
139
|
+
[...TDepth, 1]
|
|
140
|
+
>
|
|
141
|
+
: { [K in keyof T]: GetUseSuspenseQueryResult<T[K]> };
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// The binding-level type surface — a 1:1 port of @tanstack/react-query's
|
|
2
|
+
// types.ts (it is built entirely on query-core generics; nothing here is
|
|
3
|
+
// React-specific), plus the component prop / context-value types at the bottom
|
|
4
|
+
// (where upstream's React.ReactNode becomes octane's `unknown` renderable).
|
|
5
|
+
import type {
|
|
6
|
+
DefaultError,
|
|
7
|
+
DefinedInfiniteQueryObserverResult,
|
|
8
|
+
DefinedQueryObserverResult,
|
|
9
|
+
DehydratedState,
|
|
10
|
+
DistributiveOmit,
|
|
11
|
+
FetchQueryOptions,
|
|
12
|
+
HydrateOptions,
|
|
13
|
+
InfiniteQueryObserverOptions,
|
|
14
|
+
InfiniteQueryObserverResult,
|
|
15
|
+
MutateFunction,
|
|
16
|
+
MutationObserverOptions,
|
|
17
|
+
MutationObserverResult,
|
|
18
|
+
OmitKeyof,
|
|
19
|
+
Override,
|
|
20
|
+
QueryClient,
|
|
21
|
+
QueryKey,
|
|
22
|
+
QueryObserverOptions,
|
|
23
|
+
QueryObserverResult,
|
|
24
|
+
SkipToken,
|
|
25
|
+
} from '@tanstack/query-core';
|
|
26
|
+
|
|
27
|
+
export type AnyUseBaseQueryOptions = UseBaseQueryOptions<any, any, any, any, any>;
|
|
28
|
+
export interface UseBaseQueryOptions<
|
|
29
|
+
TQueryFnData = unknown,
|
|
30
|
+
TError = DefaultError,
|
|
31
|
+
TData = TQueryFnData,
|
|
32
|
+
TQueryData = TQueryFnData,
|
|
33
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
34
|
+
> extends QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey> {
|
|
35
|
+
/**
|
|
36
|
+
* Set this to `false` to unsubscribe this observer from updates to the query cache.
|
|
37
|
+
* Defaults to `true`.
|
|
38
|
+
*/
|
|
39
|
+
subscribed?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface UsePrefetchQueryOptions<
|
|
43
|
+
TQueryFnData = unknown,
|
|
44
|
+
TError = DefaultError,
|
|
45
|
+
TData = TQueryFnData,
|
|
46
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
47
|
+
> extends OmitKeyof<FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> {
|
|
48
|
+
queryFn?: Exclude<
|
|
49
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
|
|
50
|
+
SkipToken
|
|
51
|
+
>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type AnyUseQueryOptions = UseQueryOptions<any, any, any, any>;
|
|
55
|
+
export interface UseQueryOptions<
|
|
56
|
+
TQueryFnData = unknown,
|
|
57
|
+
TError = DefaultError,
|
|
58
|
+
TData = TQueryFnData,
|
|
59
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
60
|
+
> extends OmitKeyof<
|
|
61
|
+
UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
|
|
62
|
+
'suspense'
|
|
63
|
+
> {}
|
|
64
|
+
|
|
65
|
+
export type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions<any, any, any, any>;
|
|
66
|
+
export interface UseSuspenseQueryOptions<
|
|
67
|
+
TQueryFnData = unknown,
|
|
68
|
+
TError = DefaultError,
|
|
69
|
+
TData = TQueryFnData,
|
|
70
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
71
|
+
> extends OmitKeyof<
|
|
72
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
73
|
+
'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
|
|
74
|
+
> {
|
|
75
|
+
queryFn?: Exclude<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'], SkipToken>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions<any, any, any, any, any>;
|
|
79
|
+
export interface UseInfiniteQueryOptions<
|
|
80
|
+
TQueryFnData = unknown,
|
|
81
|
+
TError = DefaultError,
|
|
82
|
+
TData = TQueryFnData,
|
|
83
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
84
|
+
TPageParam = unknown,
|
|
85
|
+
> extends OmitKeyof<
|
|
86
|
+
InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>,
|
|
87
|
+
'suspense'
|
|
88
|
+
> {
|
|
89
|
+
/**
|
|
90
|
+
* Set this to `false` to unsubscribe this observer from updates to the query cache.
|
|
91
|
+
* Defaults to `true`.
|
|
92
|
+
*/
|
|
93
|
+
subscribed?: boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type AnyUseSuspenseInfiniteQueryOptions = UseSuspenseInfiniteQueryOptions<
|
|
97
|
+
any,
|
|
98
|
+
any,
|
|
99
|
+
any,
|
|
100
|
+
any,
|
|
101
|
+
any
|
|
102
|
+
>;
|
|
103
|
+
export interface UseSuspenseInfiniteQueryOptions<
|
|
104
|
+
TQueryFnData = unknown,
|
|
105
|
+
TError = DefaultError,
|
|
106
|
+
TData = TQueryFnData,
|
|
107
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
108
|
+
TPageParam = unknown,
|
|
109
|
+
> extends OmitKeyof<
|
|
110
|
+
UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>,
|
|
111
|
+
'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
|
|
112
|
+
> {
|
|
113
|
+
queryFn?: Exclude<
|
|
114
|
+
UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>['queryFn'],
|
|
115
|
+
SkipToken
|
|
116
|
+
>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export type UseBaseQueryResult<TData = unknown, TError = DefaultError> = QueryObserverResult<
|
|
120
|
+
TData,
|
|
121
|
+
TError
|
|
122
|
+
>;
|
|
123
|
+
|
|
124
|
+
export type UseQueryResult<TData = unknown, TError = DefaultError> = UseBaseQueryResult<
|
|
125
|
+
TData,
|
|
126
|
+
TError
|
|
127
|
+
>;
|
|
128
|
+
|
|
129
|
+
export type UseSuspenseQueryResult<TData = unknown, TError = DefaultError> = DistributiveOmit<
|
|
130
|
+
DefinedQueryObserverResult<TData, TError>,
|
|
131
|
+
'isPlaceholderData' | 'promise'
|
|
132
|
+
>;
|
|
133
|
+
|
|
134
|
+
export type DefinedUseQueryResult<
|
|
135
|
+
TData = unknown,
|
|
136
|
+
TError = DefaultError,
|
|
137
|
+
> = DefinedQueryObserverResult<TData, TError>;
|
|
138
|
+
|
|
139
|
+
export type UseInfiniteQueryResult<
|
|
140
|
+
TData = unknown,
|
|
141
|
+
TError = DefaultError,
|
|
142
|
+
> = InfiniteQueryObserverResult<TData, TError>;
|
|
143
|
+
|
|
144
|
+
export type DefinedUseInfiniteQueryResult<
|
|
145
|
+
TData = unknown,
|
|
146
|
+
TError = DefaultError,
|
|
147
|
+
> = DefinedInfiniteQueryObserverResult<TData, TError>;
|
|
148
|
+
|
|
149
|
+
export type UseSuspenseInfiniteQueryResult<TData = unknown, TError = DefaultError> = OmitKeyof<
|
|
150
|
+
DefinedInfiniteQueryObserverResult<TData, TError>,
|
|
151
|
+
'isPlaceholderData' | 'promise'
|
|
152
|
+
>;
|
|
153
|
+
|
|
154
|
+
export type AnyUseMutationOptions = UseMutationOptions<any, any, any, any>;
|
|
155
|
+
export interface UseMutationOptions<
|
|
156
|
+
TData = unknown,
|
|
157
|
+
TError = DefaultError,
|
|
158
|
+
TVariables = void,
|
|
159
|
+
TOnMutateResult = unknown,
|
|
160
|
+
> extends OmitKeyof<
|
|
161
|
+
MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
162
|
+
'_defaulted'
|
|
163
|
+
> {}
|
|
164
|
+
|
|
165
|
+
export type UseMutateFunction<
|
|
166
|
+
TData = unknown,
|
|
167
|
+
TError = DefaultError,
|
|
168
|
+
TVariables = void,
|
|
169
|
+
TOnMutateResult = unknown,
|
|
170
|
+
> = (...args: Parameters<MutateFunction<TData, TError, TVariables, TOnMutateResult>>) => void;
|
|
171
|
+
|
|
172
|
+
export type UseMutateAsyncFunction<
|
|
173
|
+
TData = unknown,
|
|
174
|
+
TError = DefaultError,
|
|
175
|
+
TVariables = void,
|
|
176
|
+
TOnMutateResult = unknown,
|
|
177
|
+
> = MutateFunction<TData, TError, TVariables, TOnMutateResult>;
|
|
178
|
+
|
|
179
|
+
export type UseBaseMutationResult<
|
|
180
|
+
TData = unknown,
|
|
181
|
+
TError = DefaultError,
|
|
182
|
+
TVariables = unknown,
|
|
183
|
+
TOnMutateResult = unknown,
|
|
184
|
+
> = Override<
|
|
185
|
+
MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,
|
|
186
|
+
{ mutate: UseMutateFunction<TData, TError, TVariables, TOnMutateResult> }
|
|
187
|
+
> & {
|
|
188
|
+
mutateAsync: UseMutateAsyncFunction<TData, TError, TVariables, TOnMutateResult>;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
export type UseMutationResult<
|
|
192
|
+
TData = unknown,
|
|
193
|
+
TError = DefaultError,
|
|
194
|
+
TVariables = unknown,
|
|
195
|
+
TOnMutateResult = unknown,
|
|
196
|
+
> = UseBaseMutationResult<TData, TError, TVariables, TOnMutateResult>;
|
|
197
|
+
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
// Component prop + context-value types (octane: children are renderables, so
|
|
200
|
+
// upstream's React.ReactNode becomes `unknown`; render-prop children are also
|
|
201
|
+
// accepted where upstream accepts them).
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
|
|
204
|
+
export interface QueryClientProviderProps {
|
|
205
|
+
client: QueryClient;
|
|
206
|
+
children?: unknown;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export interface HydrationBoundaryProps {
|
|
210
|
+
state: DehydratedState | null | undefined;
|
|
211
|
+
options?: OmitKeyof<HydrateOptions, 'defaultOptions'> & {
|
|
212
|
+
defaultOptions?: OmitKeyof<Exclude<HydrateOptions['defaultOptions'], undefined>, 'mutations'>;
|
|
213
|
+
};
|
|
214
|
+
children?: unknown;
|
|
215
|
+
queryClient?: QueryClient;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export type QueryErrorResetFunction = () => void;
|
|
219
|
+
export type QueryErrorIsResetFunction = () => boolean;
|
|
220
|
+
export type QueryErrorClearResetFunction = () => void;
|
|
221
|
+
|
|
222
|
+
export interface QueryErrorResetBoundaryValue {
|
|
223
|
+
clearReset: QueryErrorClearResetFunction;
|
|
224
|
+
isReset: QueryErrorIsResetFunction;
|
|
225
|
+
reset: QueryErrorResetFunction;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export type QueryErrorResetBoundaryFunction = (value: QueryErrorResetBoundaryValue) => unknown;
|
|
229
|
+
|
|
230
|
+
export interface QueryErrorResetBoundaryProps {
|
|
231
|
+
children: QueryErrorResetBoundaryFunction | unknown;
|
|
232
|
+
}
|