@tanstack/solid-query 5.33.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 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';
@@ -93,8 +93,12 @@ type UndefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError,
93
93
  type DefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = FunctionedParams<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
94
94
  initialData: TQueryFnData | (() => TQueryFnData);
95
95
  }>;
96
- declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> = UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>(options: TOptions): TOptions;
97
- declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> = DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>(options: TOptions): TOptions;
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
+ };
98
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>;
99
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>;
100
104
 
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';
@@ -93,8 +93,12 @@ type UndefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError,
93
93
  type DefinedInitialDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = FunctionedParams<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
94
94
  initialData: TQueryFnData | (() => TQueryFnData);
95
95
  }>;
96
- declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> = UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>(options: TOptions): TOptions;
97
- declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOptions extends DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> = DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>>(options: TOptions): TOptions;
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
+ };
98
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>;
99
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>;
100
104
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-query",
3
- "version": "5.33.1",
3
+ "version": "5.34.0",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -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
+ })
@@ -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 UndefinedInitialDataOptions<
43
- TQueryFnData,
44
- TError,
45
- TData,
46
- TQueryKey
47
- > = UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
48
- >(options: TOptions): TOptions
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 DefinedInitialDataOptions<
56
- TQueryFnData,
57
- TError,
58
- TData,
59
- TQueryKey
60
- > = DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
61
- >(options: TOptions): TOptions
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