@tanstack/solid-query 5.32.1 → 5.34.0
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/build/index.d.cts +41 -6
- package/build/index.d.ts +41 -6
- package/package.json +1 -1
- package/src/__tests__/createQuery.test-d.tsx +3 -3
- package/src/__tests__/queryOptions.test-d.tsx +147 -0
- package/src/createQueries.ts +8 -1
- package/src/createQuery.ts +29 -15
- package/src/types.ts +28 -7
package/build/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultError, QueryKey, OmitKeyof, QueryObserverOptions as QueryObserverOptions$1, InfiniteQueryObserverOptions as InfiniteQueryObserverOptions$1, DefaultOptions as DefaultOptions$1, QueryClientConfig as QueryClientConfig$1, QueryClient as QueryClient$1, QueryObserverResult, DefinedQueryObserverResult, InfiniteQueryObserverResult, MutationObserverOptions, MutateFunction, MutationObserverResult, QueryFilters, InfiniteData, MutationFilters, MutationState, Mutation, QueriesPlaceholderDataFunction, QueryFunction, SkipToken, ThrowOnError } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, QueryKey, OmitKeyof, QueryObserverOptions as QueryObserverOptions$1, InfiniteQueryObserverOptions as InfiniteQueryObserverOptions$1, DefaultOptions as DefaultOptions$1, QueryClientConfig as QueryClientConfig$1, QueryClient as QueryClient$1, QueryObserverResult, DefinedQueryObserverResult, InfiniteQueryObserverResult, MutationObserverOptions, MutateFunction, MutationObserverResult, DataTag, QueryFilters, InfiniteData, MutationFilters, MutationState, Mutation, QueriesPlaceholderDataFunction, QueryFunction, SkipToken, ThrowOnError } from '@tanstack/query-core';
|
|
2
2
|
export * from '@tanstack/query-core';
|
|
3
3
|
import * as solid_js from 'solid-js';
|
|
4
4
|
import { JSX, Accessor } from 'solid-js';
|
|
@@ -32,8 +32,20 @@ declare class QueryClient extends QueryClient$1 {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
type FunctionedParams<T> = () => T;
|
|
35
|
-
interface CreateBaseQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey> {
|
|
35
|
+
interface CreateBaseQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends OmitKeyof<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, 'suspense'> {
|
|
36
|
+
/**
|
|
37
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
38
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
39
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
40
|
+
* Defaults to `false`.
|
|
41
|
+
*/
|
|
36
42
|
deferStream?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
45
|
+
* The `data` property on createQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
46
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
47
|
+
*/
|
|
48
|
+
suspense?: boolean;
|
|
37
49
|
}
|
|
38
50
|
interface SolidQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends CreateBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> {
|
|
39
51
|
}
|
|
@@ -42,9 +54,21 @@ type CreateBaseQueryResult<TData = unknown, TError = DefaultError> = QueryObserv
|
|
|
42
54
|
type CreateQueryResult<TData = unknown, TError = DefaultError> = CreateBaseQueryResult<TData, TError>;
|
|
43
55
|
type DefinedCreateBaseQueryResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError>;
|
|
44
56
|
type DefinedCreateQueryResult<TData = unknown, TError = DefaultError> = DefinedCreateBaseQueryResult<TData, TError>;
|
|
45
|
-
interface SolidInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends OmitKeyof<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, 'queryKey'> {
|
|
57
|
+
interface SolidInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends OmitKeyof<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, 'queryKey' | 'suspense'> {
|
|
46
58
|
queryKey: TQueryKey;
|
|
59
|
+
/**
|
|
60
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
61
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
62
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
63
|
+
* Defaults to `false`.
|
|
64
|
+
*/
|
|
47
65
|
deferStream?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
68
|
+
* The `data` property on createInfiniteQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
69
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
70
|
+
*/
|
|
71
|
+
suspense?: boolean;
|
|
48
72
|
}
|
|
49
73
|
type CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = FunctionedParams<SolidInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam>>;
|
|
50
74
|
type CreateInfiniteQueryResult<TData = unknown, TError = DefaultError> = InfiniteQueryObserverResult<TData, TError>;
|
|
@@ -69,8 +93,12 @@ type UndefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError,
|
|
|
69
93
|
type DefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = FunctionedParams<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
70
94
|
initialData: TQueryFnData | (() => TQueryFnData);
|
|
71
95
|
}>;
|
|
72
|
-
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey
|
|
73
|
-
|
|
96
|
+
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> = ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>>(options: ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>): ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> & {
|
|
97
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>;
|
|
98
|
+
};
|
|
99
|
+
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> = ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>>(options: ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>): ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> & {
|
|
100
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>;
|
|
101
|
+
};
|
|
74
102
|
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: () => QueryClient): CreateQueryResult<TData, TError>;
|
|
75
103
|
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: () => QueryClient): DefinedCreateQueryResult<TData, TError>;
|
|
76
104
|
|
|
@@ -96,8 +124,15 @@ type MutationStateOptions<TResult = MutationState> = {
|
|
|
96
124
|
};
|
|
97
125
|
declare function useMutationState<TResult = MutationState>(options?: Accessor<MutationStateOptions<TResult>>, queryClient?: Accessor<QueryClient>): Accessor<Array<TResult>>;
|
|
98
126
|
|
|
99
|
-
type CreateQueryOptionsForCreateQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'placeholderData'> & {
|
|
127
|
+
type CreateQueryOptionsForCreateQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'placeholderData' | 'suspense'> & {
|
|
100
128
|
placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>;
|
|
129
|
+
/**
|
|
130
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
131
|
+
* The `data` property on createQueries is a plain object and not a SolidJS Resource.
|
|
132
|
+
* It will not suspend when the data is loading.
|
|
133
|
+
* Setting `suspense` to `true` will be a no-op.
|
|
134
|
+
*/
|
|
135
|
+
suspense?: boolean;
|
|
101
136
|
};
|
|
102
137
|
type MAXIMUM_DEPTH = 20;
|
|
103
138
|
type GetOptions<T> = T extends {
|
package/build/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultError, QueryKey, OmitKeyof, QueryObserverOptions as QueryObserverOptions$1, InfiniteQueryObserverOptions as InfiniteQueryObserverOptions$1, DefaultOptions as DefaultOptions$1, QueryClientConfig as QueryClientConfig$1, QueryClient as QueryClient$1, QueryObserverResult, DefinedQueryObserverResult, InfiniteQueryObserverResult, MutationObserverOptions, MutateFunction, MutationObserverResult, QueryFilters, InfiniteData, MutationFilters, MutationState, Mutation, QueriesPlaceholderDataFunction, QueryFunction, SkipToken, ThrowOnError } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, QueryKey, OmitKeyof, QueryObserverOptions as QueryObserverOptions$1, InfiniteQueryObserverOptions as InfiniteQueryObserverOptions$1, DefaultOptions as DefaultOptions$1, QueryClientConfig as QueryClientConfig$1, QueryClient as QueryClient$1, QueryObserverResult, DefinedQueryObserverResult, InfiniteQueryObserverResult, MutationObserverOptions, MutateFunction, MutationObserverResult, DataTag, QueryFilters, InfiniteData, MutationFilters, MutationState, Mutation, QueriesPlaceholderDataFunction, QueryFunction, SkipToken, ThrowOnError } from '@tanstack/query-core';
|
|
2
2
|
export * from '@tanstack/query-core';
|
|
3
3
|
import * as solid_js from 'solid-js';
|
|
4
4
|
import { JSX, Accessor } from 'solid-js';
|
|
@@ -32,8 +32,20 @@ declare class QueryClient extends QueryClient$1 {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
type FunctionedParams<T> = () => T;
|
|
35
|
-
interface CreateBaseQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey> {
|
|
35
|
+
interface CreateBaseQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends OmitKeyof<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, 'suspense'> {
|
|
36
|
+
/**
|
|
37
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
38
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
39
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
40
|
+
* Defaults to `false`.
|
|
41
|
+
*/
|
|
36
42
|
deferStream?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
45
|
+
* The `data` property on createQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
46
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
47
|
+
*/
|
|
48
|
+
suspense?: boolean;
|
|
37
49
|
}
|
|
38
50
|
interface SolidQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends CreateBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> {
|
|
39
51
|
}
|
|
@@ -42,9 +54,21 @@ type CreateBaseQueryResult<TData = unknown, TError = DefaultError> = QueryObserv
|
|
|
42
54
|
type CreateQueryResult<TData = unknown, TError = DefaultError> = CreateBaseQueryResult<TData, TError>;
|
|
43
55
|
type DefinedCreateBaseQueryResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError>;
|
|
44
56
|
type DefinedCreateQueryResult<TData = unknown, TError = DefaultError> = DefinedCreateBaseQueryResult<TData, TError>;
|
|
45
|
-
interface SolidInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends OmitKeyof<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, 'queryKey'> {
|
|
57
|
+
interface SolidInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends OmitKeyof<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, 'queryKey' | 'suspense'> {
|
|
46
58
|
queryKey: TQueryKey;
|
|
59
|
+
/**
|
|
60
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
61
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
62
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
63
|
+
* Defaults to `false`.
|
|
64
|
+
*/
|
|
47
65
|
deferStream?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
68
|
+
* The `data` property on createInfiniteQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
69
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
70
|
+
*/
|
|
71
|
+
suspense?: boolean;
|
|
48
72
|
}
|
|
49
73
|
type CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = FunctionedParams<SolidInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam>>;
|
|
50
74
|
type CreateInfiniteQueryResult<TData = unknown, TError = DefaultError> = InfiniteQueryObserverResult<TData, TError>;
|
|
@@ -69,8 +93,12 @@ type UndefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError,
|
|
|
69
93
|
type DefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = FunctionedParams<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
70
94
|
initialData: TQueryFnData | (() => TQueryFnData);
|
|
71
95
|
}>;
|
|
72
|
-
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey
|
|
73
|
-
|
|
96
|
+
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> = ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>>(options: ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>): ReturnType<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> & {
|
|
97
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>;
|
|
98
|
+
};
|
|
99
|
+
declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> = ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>>(options: ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>): ReturnType<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>> & {
|
|
100
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>;
|
|
101
|
+
};
|
|
74
102
|
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: () => QueryClient): CreateQueryResult<TData, TError>;
|
|
75
103
|
declare function createQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: () => QueryClient): DefinedCreateQueryResult<TData, TError>;
|
|
76
104
|
|
|
@@ -96,8 +124,15 @@ type MutationStateOptions<TResult = MutationState> = {
|
|
|
96
124
|
};
|
|
97
125
|
declare function useMutationState<TResult = MutationState>(options?: Accessor<MutationStateOptions<TResult>>, queryClient?: Accessor<QueryClient>): Accessor<Array<TResult>>;
|
|
98
126
|
|
|
99
|
-
type CreateQueryOptionsForCreateQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'placeholderData'> & {
|
|
127
|
+
type CreateQueryOptionsForCreateQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'placeholderData' | 'suspense'> & {
|
|
100
128
|
placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>;
|
|
129
|
+
/**
|
|
130
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
131
|
+
* The `data` property on createQueries is a plain object and not a SolidJS Resource.
|
|
132
|
+
* It will not suspend when the data is loading.
|
|
133
|
+
* Setting `suspense` to `true` will be a no-op.
|
|
134
|
+
*/
|
|
135
|
+
suspense?: boolean;
|
|
101
136
|
};
|
|
102
137
|
type MAXIMUM_DEPTH = 20;
|
|
103
138
|
type GetOptions<T> = T extends {
|
package/package.json
CHANGED
|
@@ -14,12 +14,12 @@ describe('initialData', () => {
|
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
it('TData should be defined when passed through queryOptions', () => {
|
|
17
|
-
const options = queryOptions(
|
|
17
|
+
const options = queryOptions({
|
|
18
18
|
queryKey: ['key'],
|
|
19
19
|
queryFn: () => ({ wow: true }),
|
|
20
20
|
initialData: { wow: true },
|
|
21
|
-
})
|
|
22
|
-
const { data } = createQuery(options)
|
|
21
|
+
})
|
|
22
|
+
const { data } = createQuery(() => options)
|
|
23
23
|
|
|
24
24
|
expectTypeOf(data).toEqualTypeOf<{ wow: boolean }>()
|
|
25
25
|
})
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from 'vitest'
|
|
2
|
+
import { QueryClient, dataTagSymbol, skipToken } from '@tanstack/query-core'
|
|
3
|
+
import { createQuery, queryOptions } from '../createQuery'
|
|
4
|
+
|
|
5
|
+
describe('queryOptions', () => {
|
|
6
|
+
it('should not allow excess properties', () => {
|
|
7
|
+
queryOptions({
|
|
8
|
+
queryKey: ['key'],
|
|
9
|
+
queryFn: () => Promise.resolve(5),
|
|
10
|
+
// @ts-expect-error this is a good error, because stallTime does not exist!
|
|
11
|
+
stallTime: 1000,
|
|
12
|
+
})
|
|
13
|
+
})
|
|
14
|
+
it('should infer types for callbacks', () => {
|
|
15
|
+
queryOptions({
|
|
16
|
+
queryKey: ['key'],
|
|
17
|
+
queryFn: () => Promise.resolve(5),
|
|
18
|
+
staleTime: 1000,
|
|
19
|
+
select: (data) => {
|
|
20
|
+
expectTypeOf(data).toEqualTypeOf<number>()
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
it('should work when passed to createQuery', () => {
|
|
25
|
+
const options = queryOptions({
|
|
26
|
+
queryKey: ['key'],
|
|
27
|
+
queryFn: () => Promise.resolve(5),
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
const { data } = createQuery(() => options)
|
|
31
|
+
expectTypeOf(data).toEqualTypeOf<number | undefined>()
|
|
32
|
+
})
|
|
33
|
+
it('should work when passed to fetchQuery', async () => {
|
|
34
|
+
const options = queryOptions({
|
|
35
|
+
queryKey: ['key'],
|
|
36
|
+
queryFn: () => Promise.resolve(5),
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const data = await new QueryClient().fetchQuery(options)
|
|
40
|
+
expectTypeOf(data).toEqualTypeOf<number>()
|
|
41
|
+
})
|
|
42
|
+
it('should tag the queryKey with the result type of the QueryFn', () => {
|
|
43
|
+
expect(() => {
|
|
44
|
+
const { queryKey } = queryOptions({
|
|
45
|
+
queryKey: ['key'],
|
|
46
|
+
queryFn: () => Promise.resolve(5),
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
expectTypeOf(queryKey[dataTagSymbol]).toEqualTypeOf<number>()
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
it('should tag the queryKey even if no promise is returned', () => {
|
|
53
|
+
const { queryKey } = queryOptions({
|
|
54
|
+
queryKey: ['key'],
|
|
55
|
+
queryFn: () => 5,
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
expectTypeOf(queryKey[dataTagSymbol]).toEqualTypeOf<number>()
|
|
59
|
+
})
|
|
60
|
+
it('should tag the queryKey with unknown if there is no queryFn', () => {
|
|
61
|
+
const { queryKey } = queryOptions({
|
|
62
|
+
queryKey: ['key'],
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
expectTypeOf(queryKey[dataTagSymbol]).toEqualTypeOf<unknown>()
|
|
66
|
+
})
|
|
67
|
+
it('should tag the queryKey with the result type of the QueryFn if select is used', () => {
|
|
68
|
+
const { queryKey } = queryOptions({
|
|
69
|
+
queryKey: ['key'],
|
|
70
|
+
queryFn: () => Promise.resolve(5),
|
|
71
|
+
select: (data) => data.toString(),
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
expectTypeOf(queryKey[dataTagSymbol]).toEqualTypeOf<number>()
|
|
75
|
+
})
|
|
76
|
+
it('should return the proper type when passed to getQueryData', () => {
|
|
77
|
+
const { queryKey } = queryOptions({
|
|
78
|
+
queryKey: ['key'],
|
|
79
|
+
queryFn: () => Promise.resolve(5),
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
const queryClient = new QueryClient()
|
|
83
|
+
const data = queryClient.getQueryData(queryKey)
|
|
84
|
+
expectTypeOf(data).toEqualTypeOf<number | undefined>()
|
|
85
|
+
})
|
|
86
|
+
it('should return the proper type when passed to getQueryState', () => {
|
|
87
|
+
const { queryKey } = queryOptions({
|
|
88
|
+
queryKey: ['key'],
|
|
89
|
+
queryFn: () => Promise.resolve(5),
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
const queryClient = new QueryClient()
|
|
93
|
+
const state = queryClient.getQueryState(queryKey)
|
|
94
|
+
expectTypeOf(state?.data).toEqualTypeOf<number | undefined>()
|
|
95
|
+
})
|
|
96
|
+
it('should properly type updaterFn when passed to setQueryData', () => {
|
|
97
|
+
const { queryKey } = queryOptions({
|
|
98
|
+
queryKey: ['key'],
|
|
99
|
+
queryFn: () => Promise.resolve(5),
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
const queryClient = new QueryClient()
|
|
103
|
+
const data = queryClient.setQueryData(queryKey, (prev) => {
|
|
104
|
+
expectTypeOf(prev).toEqualTypeOf<number | undefined>()
|
|
105
|
+
return prev
|
|
106
|
+
})
|
|
107
|
+
expectTypeOf(data).toEqualTypeOf<number | undefined>()
|
|
108
|
+
})
|
|
109
|
+
it('should properly type value when passed to setQueryData', () => {
|
|
110
|
+
const { queryKey } = queryOptions({
|
|
111
|
+
queryKey: ['key'],
|
|
112
|
+
queryFn: () => Promise.resolve(5),
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const queryClient = new QueryClient()
|
|
116
|
+
|
|
117
|
+
// @ts-expect-error value should be a number
|
|
118
|
+
queryClient.setQueryData(queryKey, '5')
|
|
119
|
+
// @ts-expect-error value should be a number
|
|
120
|
+
queryClient.setQueryData(queryKey, () => '5')
|
|
121
|
+
|
|
122
|
+
const data = queryClient.setQueryData(queryKey, 5)
|
|
123
|
+
expectTypeOf(data).toEqualTypeOf<number | undefined>()
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
it('should infer even if there is a conditional skipToken', () => {
|
|
127
|
+
const options = queryOptions({
|
|
128
|
+
queryKey: ['key'],
|
|
129
|
+
queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
const queryClient = new QueryClient()
|
|
133
|
+
const data = queryClient.getQueryData(options.queryKey)
|
|
134
|
+
expectTypeOf(data).toEqualTypeOf<number | undefined>()
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('should infer to unknown if we disable a query with just a skipToken', () => {
|
|
138
|
+
const options = queryOptions({
|
|
139
|
+
queryKey: ['key'],
|
|
140
|
+
queryFn: skipToken,
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
const queryClient = new QueryClient()
|
|
144
|
+
const data = queryClient.getQueryData(options.queryKey)
|
|
145
|
+
expectTypeOf(data).toEqualTypeOf<unknown>()
|
|
146
|
+
})
|
|
147
|
+
})
|
package/src/createQueries.ts
CHANGED
|
@@ -37,9 +37,16 @@ type CreateQueryOptionsForCreateQueries<
|
|
|
37
37
|
TQueryKey extends QueryKey = QueryKey,
|
|
38
38
|
> = OmitKeyof<
|
|
39
39
|
SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
40
|
-
'placeholderData'
|
|
40
|
+
'placeholderData' | 'suspense'
|
|
41
41
|
> & {
|
|
42
42
|
placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
45
|
+
* The `data` property on createQueries is a plain object and not a SolidJS Resource.
|
|
46
|
+
* It will not suspend when the data is loading.
|
|
47
|
+
* Setting `suspense` to `true` will be a no-op.
|
|
48
|
+
*/
|
|
49
|
+
suspense?: boolean
|
|
43
50
|
}
|
|
44
51
|
|
|
45
52
|
// Avoid TS depth-limit error in case of large array literal
|
package/src/createQuery.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { QueryObserver } from '@tanstack/query-core'
|
|
2
2
|
import { createMemo } from 'solid-js'
|
|
3
3
|
import { createBaseQuery } from './createBaseQuery'
|
|
4
|
-
import type { DefaultError, QueryKey } from '@tanstack/query-core'
|
|
4
|
+
import type { DataTag, DefaultError, QueryKey } from '@tanstack/query-core'
|
|
5
5
|
import type { QueryClient } from './QueryClient'
|
|
6
6
|
import type { Accessor } from 'solid-js'
|
|
7
7
|
import type {
|
|
@@ -39,26 +39,40 @@ export function queryOptions<
|
|
|
39
39
|
TError = unknown,
|
|
40
40
|
TData = TQueryFnData,
|
|
41
41
|
TQueryKey extends QueryKey = QueryKey,
|
|
42
|
-
TOptions extends
|
|
43
|
-
TQueryFnData,
|
|
44
|
-
|
|
45
|
-
TData,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
TOptions extends ReturnType<
|
|
43
|
+
UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
44
|
+
> = ReturnType<
|
|
45
|
+
UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
46
|
+
>,
|
|
47
|
+
>(
|
|
48
|
+
options: ReturnType<
|
|
49
|
+
UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
50
|
+
>,
|
|
51
|
+
): ReturnType<
|
|
52
|
+
UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
53
|
+
> & {
|
|
54
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>
|
|
55
|
+
}
|
|
49
56
|
|
|
50
57
|
export function queryOptions<
|
|
51
58
|
TQueryFnData = unknown,
|
|
52
59
|
TError = unknown,
|
|
53
60
|
TData = TQueryFnData,
|
|
54
61
|
TQueryKey extends QueryKey = QueryKey,
|
|
55
|
-
TOptions extends
|
|
56
|
-
TQueryFnData,
|
|
57
|
-
|
|
58
|
-
TData,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
TOptions extends ReturnType<
|
|
63
|
+
DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
64
|
+
> = ReturnType<
|
|
65
|
+
DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
66
|
+
>,
|
|
67
|
+
>(
|
|
68
|
+
options: ReturnType<
|
|
69
|
+
DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
70
|
+
>,
|
|
71
|
+
): ReturnType<
|
|
72
|
+
DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
73
|
+
> & {
|
|
74
|
+
queryKey: DataTag<TQueryKey, TQueryFnData>
|
|
75
|
+
}
|
|
62
76
|
|
|
63
77
|
export function queryOptions(options: unknown) {
|
|
64
78
|
return options
|
package/src/types.ts
CHANGED
|
@@ -24,14 +24,23 @@ export interface CreateBaseQueryOptions<
|
|
|
24
24
|
TData = TQueryFnData,
|
|
25
25
|
TQueryData = TQueryFnData,
|
|
26
26
|
TQueryKey extends QueryKey = QueryKey,
|
|
27
|
-
> extends
|
|
28
|
-
TQueryFnData,
|
|
29
|
-
|
|
30
|
-
TData,
|
|
31
|
-
TQueryData,
|
|
32
|
-
TQueryKey
|
|
27
|
+
> extends OmitKeyof<
|
|
28
|
+
QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
|
|
29
|
+
'suspense'
|
|
33
30
|
> {
|
|
31
|
+
/**
|
|
32
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
33
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
34
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
35
|
+
* Defaults to `false`.
|
|
36
|
+
*/
|
|
34
37
|
deferStream?: boolean
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
40
|
+
* The `data` property on createQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
41
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
42
|
+
*/
|
|
43
|
+
suspense?: boolean
|
|
35
44
|
}
|
|
36
45
|
|
|
37
46
|
export interface SolidQueryOptions<
|
|
@@ -93,10 +102,22 @@ export interface SolidInfiniteQueryOptions<
|
|
|
93
102
|
TQueryKey,
|
|
94
103
|
TPageParam
|
|
95
104
|
>,
|
|
96
|
-
'queryKey'
|
|
105
|
+
'queryKey' | 'suspense'
|
|
97
106
|
> {
|
|
98
107
|
queryKey: TQueryKey
|
|
108
|
+
/**
|
|
109
|
+
* Only applicable while rendering queries on the server with streaming.
|
|
110
|
+
* Set `deferStream` to `true` to wait for the query to resolve on the server before flushing the stream.
|
|
111
|
+
* This can be useful to avoid sending a loading state to the client before the query has resolved.
|
|
112
|
+
* Defaults to `false`.
|
|
113
|
+
*/
|
|
99
114
|
deferStream?: boolean
|
|
115
|
+
/**
|
|
116
|
+
* @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.
|
|
117
|
+
* The `data` property on createInfiniteQuery is a SolidJS resource and will automatically suspend when the data is loading.
|
|
118
|
+
* Setting `suspense` to `false` will be a no-op.
|
|
119
|
+
*/
|
|
120
|
+
suspense?: boolean
|
|
100
121
|
}
|
|
101
122
|
|
|
102
123
|
export type CreateInfiniteQueryOptions<
|