@tanstack/solid-query 5.30.2 → 5.30.4

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/dev.cjs CHANGED
@@ -78,27 +78,23 @@ function reconcileFn(store$1, result, reconcileOption, queryHash) {
78
78
  return { ...result, data: newData };
79
79
  }
80
80
  var hydratableObserverResult = (query, result) => {
81
- if (!web.isServer)
82
- return result;
83
- return {
81
+ const obj = {
84
82
  ...store.unwrap(result),
85
- // cast to refetch function should be safe, since we only remove it on the server,
86
- // and refetch is not relevant on the server
87
- refetch: void 0,
88
- // cast to fetchNextPage function should be safe, since we only remove it on the server,
89
- fetchNextPage: void 0,
90
- // cast to fetchPreviousPage function should be safe, since we only remove it on the server,
91
- fetchPreviousPage: void 0,
92
- // hydrate() expects a QueryState object, which is similar but not
93
- // quite the same as a QueryObserverResult object. Thus, for now, we're
94
- // copying over the missing properties from state in order to support hydration
95
- dataUpdateCount: query.state.dataUpdateCount,
96
- fetchFailureCount: query.state.fetchFailureCount,
97
- isInvalidated: query.state.isInvalidated,
98
- // Unsetting these properties on the server since they might not be serializable
99
- fetchFailureReason: null,
100
- fetchMeta: null
83
+ // During SSR, functions cannot be serialized, so we need to remove them
84
+ // This is safe because we will add these functions back when the query is hydrated
85
+ refetch: void 0
86
+ };
87
+ if ("fetchNextPage" in result) {
88
+ obj.fetchNextPage = void 0;
89
+ obj.fetchPreviousPage = void 0;
90
+ }
91
+ obj.hydrationData = {
92
+ state: query.state,
93
+ queryKey: query.queryKey,
94
+ queryHash: query.queryHash,
95
+ ...query.meta && { meta: query.meta }
101
96
  };
97
+ return obj;
102
98
  };
103
99
  function createBaseQuery(options, Observer, queryClient) {
104
100
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
@@ -168,15 +164,21 @@ function createBaseQuery(options, Observer, queryClient) {
168
164
  if (typeof v === "function") {
169
165
  v = v(unwrapped);
170
166
  }
167
+ if (v.hydrationData) {
168
+ const { hydrationData, ...rest } = v;
169
+ v = rest;
170
+ }
171
171
  setStateWithReconciliation(v);
172
172
  }
173
173
  ];
174
174
  }
175
175
  let unsubscribe = null;
176
+ let resolver = null;
176
177
  const [queryResource, { refetch }] = solidJs.createResource(
177
178
  () => {
178
179
  const obs = observer();
179
180
  return new Promise((resolve, reject) => {
181
+ resolver = resolve;
180
182
  if (web.isServer) {
181
183
  unsubscribe = createServerSubscriber(resolve, reject);
182
184
  } else if (!unsubscribe && !isRestoring()) {
@@ -191,8 +193,8 @@ function createBaseQuery(options, Observer, queryClient) {
191
193
  return reject(observerResult.error);
192
194
  }
193
195
  if (!observerResult.isLoading) {
194
- const query = obs.getCurrentQuery();
195
- return resolve(hydratableObserverResult(query, observerResult));
196
+ resolver = null;
197
+ return resolve(observerResult);
196
198
  }
197
199
  setStateWithReconciliation(observerResult);
198
200
  });
@@ -211,15 +213,10 @@ function createBaseQuery(options, Observer, queryClient) {
211
213
  * Note that this is only invoked on the client, for queries that were originally run on the server.
212
214
  */
213
215
  onHydrated(_k, info) {
214
- if (info.value) {
216
+ if (info.value && "hydrationData" in info.value) {
215
217
  queryCore.hydrate(client(), {
216
- queries: [
217
- {
218
- queryKey: initialOptions.queryKey,
219
- queryHash: initialOptions.queryHash,
220
- state: info.value
221
- }
222
- ]
218
+ // @ts-expect-error - hydrationData is not correctly typed internally
219
+ queries: [{ ...info.value.hydrationData }]
223
220
  });
224
221
  }
225
222
  if (unsubscribe)
@@ -270,6 +267,10 @@ function createBaseQuery(options, Observer, queryClient) {
270
267
  unsubscribe();
271
268
  unsubscribe = null;
272
269
  }
270
+ if (resolver && !web.isServer) {
271
+ resolver(observerResult);
272
+ resolver = null;
273
+ }
273
274
  });
274
275
  solidJs.createComputed(
275
276
  solidJs.on(
package/build/dev.js CHANGED
@@ -77,27 +77,23 @@ function reconcileFn(store, result, reconcileOption, queryHash) {
77
77
  return { ...result, data: newData };
78
78
  }
79
79
  var hydratableObserverResult = (query, result) => {
80
- if (!isServer)
81
- return result;
82
- return {
80
+ const obj = {
83
81
  ...unwrap(result),
84
- // cast to refetch function should be safe, since we only remove it on the server,
85
- // and refetch is not relevant on the server
86
- refetch: void 0,
87
- // cast to fetchNextPage function should be safe, since we only remove it on the server,
88
- fetchNextPage: void 0,
89
- // cast to fetchPreviousPage function should be safe, since we only remove it on the server,
90
- fetchPreviousPage: void 0,
91
- // hydrate() expects a QueryState object, which is similar but not
92
- // quite the same as a QueryObserverResult object. Thus, for now, we're
93
- // copying over the missing properties from state in order to support hydration
94
- dataUpdateCount: query.state.dataUpdateCount,
95
- fetchFailureCount: query.state.fetchFailureCount,
96
- isInvalidated: query.state.isInvalidated,
97
- // Unsetting these properties on the server since they might not be serializable
98
- fetchFailureReason: null,
99
- fetchMeta: null
82
+ // During SSR, functions cannot be serialized, so we need to remove them
83
+ // This is safe because we will add these functions back when the query is hydrated
84
+ refetch: void 0
85
+ };
86
+ if ("fetchNextPage" in result) {
87
+ obj.fetchNextPage = void 0;
88
+ obj.fetchPreviousPage = void 0;
89
+ }
90
+ obj.hydrationData = {
91
+ state: query.state,
92
+ queryKey: query.queryKey,
93
+ queryHash: query.queryHash,
94
+ ...query.meta && { meta: query.meta }
100
95
  };
96
+ return obj;
101
97
  };
102
98
  function createBaseQuery(options, Observer, queryClient) {
103
99
  const client = createMemo(() => useQueryClient(queryClient?.()));
@@ -167,15 +163,21 @@ function createBaseQuery(options, Observer, queryClient) {
167
163
  if (typeof v === "function") {
168
164
  v = v(unwrapped);
169
165
  }
166
+ if (v.hydrationData) {
167
+ const { hydrationData, ...rest } = v;
168
+ v = rest;
169
+ }
170
170
  setStateWithReconciliation(v);
171
171
  }
172
172
  ];
173
173
  }
174
174
  let unsubscribe = null;
175
+ let resolver = null;
175
176
  const [queryResource, { refetch }] = createResource(
176
177
  () => {
177
178
  const obs = observer();
178
179
  return new Promise((resolve, reject) => {
180
+ resolver = resolve;
179
181
  if (isServer) {
180
182
  unsubscribe = createServerSubscriber(resolve, reject);
181
183
  } else if (!unsubscribe && !isRestoring()) {
@@ -190,8 +192,8 @@ function createBaseQuery(options, Observer, queryClient) {
190
192
  return reject(observerResult.error);
191
193
  }
192
194
  if (!observerResult.isLoading) {
193
- const query = obs.getCurrentQuery();
194
- return resolve(hydratableObserverResult(query, observerResult));
195
+ resolver = null;
196
+ return resolve(observerResult);
195
197
  }
196
198
  setStateWithReconciliation(observerResult);
197
199
  });
@@ -210,15 +212,10 @@ function createBaseQuery(options, Observer, queryClient) {
210
212
  * Note that this is only invoked on the client, for queries that were originally run on the server.
211
213
  */
212
214
  onHydrated(_k, info) {
213
- if (info.value) {
215
+ if (info.value && "hydrationData" in info.value) {
214
216
  hydrate(client(), {
215
- queries: [
216
- {
217
- queryKey: initialOptions.queryKey,
218
- queryHash: initialOptions.queryHash,
219
- state: info.value
220
- }
221
- ]
217
+ // @ts-expect-error - hydrationData is not correctly typed internally
218
+ queries: [{ ...info.value.hydrationData }]
222
219
  });
223
220
  }
224
221
  if (unsubscribe)
@@ -269,6 +266,10 @@ function createBaseQuery(options, Observer, queryClient) {
269
266
  unsubscribe();
270
267
  unsubscribe = null;
271
268
  }
269
+ if (resolver && !isServer) {
270
+ resolver(observerResult);
271
+ resolver = null;
272
+ }
272
273
  });
273
274
  createComputed(
274
275
  on(
package/build/index.cjs CHANGED
@@ -69,27 +69,23 @@ function reconcileFn(store$1, result, reconcileOption, queryHash) {
69
69
  return { ...result, data: newData };
70
70
  }
71
71
  var hydratableObserverResult = (query, result) => {
72
- if (!web.isServer)
73
- return result;
74
- return {
72
+ const obj = {
75
73
  ...store.unwrap(result),
76
- // cast to refetch function should be safe, since we only remove it on the server,
77
- // and refetch is not relevant on the server
78
- refetch: void 0,
79
- // cast to fetchNextPage function should be safe, since we only remove it on the server,
80
- fetchNextPage: void 0,
81
- // cast to fetchPreviousPage function should be safe, since we only remove it on the server,
82
- fetchPreviousPage: void 0,
83
- // hydrate() expects a QueryState object, which is similar but not
84
- // quite the same as a QueryObserverResult object. Thus, for now, we're
85
- // copying over the missing properties from state in order to support hydration
86
- dataUpdateCount: query.state.dataUpdateCount,
87
- fetchFailureCount: query.state.fetchFailureCount,
88
- isInvalidated: query.state.isInvalidated,
89
- // Unsetting these properties on the server since they might not be serializable
90
- fetchFailureReason: null,
91
- fetchMeta: null
74
+ // During SSR, functions cannot be serialized, so we need to remove them
75
+ // This is safe because we will add these functions back when the query is hydrated
76
+ refetch: void 0
77
+ };
78
+ if ("fetchNextPage" in result) {
79
+ obj.fetchNextPage = void 0;
80
+ obj.fetchPreviousPage = void 0;
81
+ }
82
+ obj.hydrationData = {
83
+ state: query.state,
84
+ queryKey: query.queryKey,
85
+ queryHash: query.queryHash,
86
+ ...query.meta && { meta: query.meta }
92
87
  };
88
+ return obj;
93
89
  };
94
90
  function createBaseQuery(options, Observer, queryClient) {
95
91
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
@@ -159,15 +155,21 @@ function createBaseQuery(options, Observer, queryClient) {
159
155
  if (typeof v === "function") {
160
156
  v = v(unwrapped);
161
157
  }
158
+ if (v.hydrationData) {
159
+ const { hydrationData, ...rest } = v;
160
+ v = rest;
161
+ }
162
162
  setStateWithReconciliation(v);
163
163
  }
164
164
  ];
165
165
  }
166
166
  let unsubscribe = null;
167
+ let resolver = null;
167
168
  const [queryResource, { refetch }] = solidJs.createResource(
168
169
  () => {
169
170
  const obs = observer();
170
171
  return new Promise((resolve, reject) => {
172
+ resolver = resolve;
171
173
  if (web.isServer) {
172
174
  unsubscribe = createServerSubscriber(resolve, reject);
173
175
  } else if (!unsubscribe && !isRestoring()) {
@@ -182,8 +184,8 @@ function createBaseQuery(options, Observer, queryClient) {
182
184
  return reject(observerResult.error);
183
185
  }
184
186
  if (!observerResult.isLoading) {
185
- const query = obs.getCurrentQuery();
186
- return resolve(hydratableObserverResult(query, observerResult));
187
+ resolver = null;
188
+ return resolve(observerResult);
187
189
  }
188
190
  setStateWithReconciliation(observerResult);
189
191
  });
@@ -202,15 +204,10 @@ function createBaseQuery(options, Observer, queryClient) {
202
204
  * Note that this is only invoked on the client, for queries that were originally run on the server.
203
205
  */
204
206
  onHydrated(_k, info) {
205
- if (info.value) {
207
+ if (info.value && "hydrationData" in info.value) {
206
208
  queryCore.hydrate(client(), {
207
- queries: [
208
- {
209
- queryKey: initialOptions.queryKey,
210
- queryHash: initialOptions.queryHash,
211
- state: info.value
212
- }
213
- ]
209
+ // @ts-expect-error - hydrationData is not correctly typed internally
210
+ queries: [{ ...info.value.hydrationData }]
214
211
  });
215
212
  }
216
213
  if (unsubscribe)
@@ -261,6 +258,10 @@ function createBaseQuery(options, Observer, queryClient) {
261
258
  unsubscribe();
262
259
  unsubscribe = null;
263
260
  }
261
+ if (resolver && !web.isServer) {
262
+ resolver(observerResult);
263
+ resolver = null;
264
+ }
264
265
  });
265
266
  solidJs.createComputed(
266
267
  solidJs.on(
package/build/index.js CHANGED
@@ -68,27 +68,23 @@ function reconcileFn(store, result, reconcileOption, queryHash) {
68
68
  return { ...result, data: newData };
69
69
  }
70
70
  var hydratableObserverResult = (query, result) => {
71
- if (!isServer)
72
- return result;
73
- return {
71
+ const obj = {
74
72
  ...unwrap(result),
75
- // cast to refetch function should be safe, since we only remove it on the server,
76
- // and refetch is not relevant on the server
77
- refetch: void 0,
78
- // cast to fetchNextPage function should be safe, since we only remove it on the server,
79
- fetchNextPage: void 0,
80
- // cast to fetchPreviousPage function should be safe, since we only remove it on the server,
81
- fetchPreviousPage: void 0,
82
- // hydrate() expects a QueryState object, which is similar but not
83
- // quite the same as a QueryObserverResult object. Thus, for now, we're
84
- // copying over the missing properties from state in order to support hydration
85
- dataUpdateCount: query.state.dataUpdateCount,
86
- fetchFailureCount: query.state.fetchFailureCount,
87
- isInvalidated: query.state.isInvalidated,
88
- // Unsetting these properties on the server since they might not be serializable
89
- fetchFailureReason: null,
90
- fetchMeta: null
73
+ // During SSR, functions cannot be serialized, so we need to remove them
74
+ // This is safe because we will add these functions back when the query is hydrated
75
+ refetch: void 0
76
+ };
77
+ if ("fetchNextPage" in result) {
78
+ obj.fetchNextPage = void 0;
79
+ obj.fetchPreviousPage = void 0;
80
+ }
81
+ obj.hydrationData = {
82
+ state: query.state,
83
+ queryKey: query.queryKey,
84
+ queryHash: query.queryHash,
85
+ ...query.meta && { meta: query.meta }
91
86
  };
87
+ return obj;
92
88
  };
93
89
  function createBaseQuery(options, Observer, queryClient) {
94
90
  const client = createMemo(() => useQueryClient(queryClient?.()));
@@ -158,15 +154,21 @@ function createBaseQuery(options, Observer, queryClient) {
158
154
  if (typeof v === "function") {
159
155
  v = v(unwrapped);
160
156
  }
157
+ if (v.hydrationData) {
158
+ const { hydrationData, ...rest } = v;
159
+ v = rest;
160
+ }
161
161
  setStateWithReconciliation(v);
162
162
  }
163
163
  ];
164
164
  }
165
165
  let unsubscribe = null;
166
+ let resolver = null;
166
167
  const [queryResource, { refetch }] = createResource(
167
168
  () => {
168
169
  const obs = observer();
169
170
  return new Promise((resolve, reject) => {
171
+ resolver = resolve;
170
172
  if (isServer) {
171
173
  unsubscribe = createServerSubscriber(resolve, reject);
172
174
  } else if (!unsubscribe && !isRestoring()) {
@@ -181,8 +183,8 @@ function createBaseQuery(options, Observer, queryClient) {
181
183
  return reject(observerResult.error);
182
184
  }
183
185
  if (!observerResult.isLoading) {
184
- const query = obs.getCurrentQuery();
185
- return resolve(hydratableObserverResult(query, observerResult));
186
+ resolver = null;
187
+ return resolve(observerResult);
186
188
  }
187
189
  setStateWithReconciliation(observerResult);
188
190
  });
@@ -201,15 +203,10 @@ function createBaseQuery(options, Observer, queryClient) {
201
203
  * Note that this is only invoked on the client, for queries that were originally run on the server.
202
204
  */
203
205
  onHydrated(_k, info) {
204
- if (info.value) {
206
+ if (info.value && "hydrationData" in info.value) {
205
207
  hydrate(client(), {
206
- queries: [
207
- {
208
- queryKey: initialOptions.queryKey,
209
- queryHash: initialOptions.queryHash,
210
- state: info.value
211
- }
212
- ]
208
+ // @ts-expect-error - hydrationData is not correctly typed internally
209
+ queries: [{ ...info.value.hydrationData }]
213
210
  });
214
211
  }
215
212
  if (unsubscribe)
@@ -260,6 +257,10 @@ function createBaseQuery(options, Observer, queryClient) {
260
257
  unsubscribe();
261
258
  unsubscribe = null;
262
259
  }
260
+ if (resolver && !isServer) {
261
+ resolver(observerResult);
262
+ resolver = null;
263
+ }
263
264
  });
264
265
  createComputed(
265
266
  on(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-query",
3
- "version": "5.30.2",
3
+ "version": "5.30.4",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -19,12 +19,10 @@ import type { CreateBaseQueryOptions } from './types'
19
19
  import type { Accessor, Signal } from 'solid-js'
20
20
  import type { QueryClient } from './QueryClient'
21
21
  import type {
22
- InfiniteQueryObserverResult,
23
22
  Query,
24
23
  QueryKey,
25
24
  QueryObserver,
26
25
  QueryObserverResult,
27
- QueryState,
28
26
  } from '@tanstack/query-core'
29
27
 
30
28
  function reconcileFn<TData, TError>(
@@ -62,10 +60,6 @@ function reconcileFn<TData, TError>(
62
60
  return { ...result, data: newData } as typeof result
63
61
  }
64
62
 
65
- type HydratableQueryState<TData, TError> = QueryObserverResult<TData, TError> &
66
- QueryState<TData, TError> &
67
- InfiniteQueryObserverResult<TData, TError>
68
-
69
63
  /**
70
64
  * Solid's `onHydrated` functionality will silently "fail" (hydrate with an empty object)
71
65
  * if the resource data is not serializable.
@@ -80,42 +74,29 @@ const hydratableObserverResult = <
80
74
  query: Query<TQueryFnData, TError, TData, TQueryKey>,
81
75
  result: QueryObserverResult<TDataHydratable, TError>,
82
76
  ) => {
83
- // Including the extra properties is only relevant on the server
84
- if (!isServer) return result as HydratableQueryState<TDataHydratable, TError>
85
-
86
- return {
77
+ const obj: any = {
87
78
  ...unwrap(result),
79
+ // During SSR, functions cannot be serialized, so we need to remove them
80
+ // This is safe because we will add these functions back when the query is hydrated
81
+ refetch: undefined,
82
+ }
88
83
 
89
- // cast to refetch function should be safe, since we only remove it on the server,
90
- // and refetch is not relevant on the server
91
- refetch: undefined as unknown as HydratableQueryState<
92
- TDataHydratable,
93
- TError
94
- >['refetch'],
95
-
96
- // cast to fetchNextPage function should be safe, since we only remove it on the server,
97
- fetchNextPage: undefined as unknown as HydratableQueryState<
98
- TDataHydratable,
99
- TError
100
- >['fetchNextPage'],
101
-
102
- // cast to fetchPreviousPage function should be safe, since we only remove it on the server,
103
- fetchPreviousPage: undefined as unknown as HydratableQueryState<
104
- TDataHydratable,
105
- TError
106
- >['fetchPreviousPage'],
84
+ // If the query is an infinite query, we need to remove additional properties
85
+ if ('fetchNextPage' in result) {
86
+ obj.fetchNextPage = undefined
87
+ obj.fetchPreviousPage = undefined
88
+ }
107
89
 
108
- // hydrate() expects a QueryState object, which is similar but not
109
- // quite the same as a QueryObserverResult object. Thus, for now, we're
110
- // copying over the missing properties from state in order to support hydration
111
- dataUpdateCount: query.state.dataUpdateCount,
112
- fetchFailureCount: query.state.fetchFailureCount,
113
- isInvalidated: query.state.isInvalidated,
90
+ // We will also attach the dehydrated state of the query to the result
91
+ // This will be removed on client after hydration
92
+ obj.hydrationData = {
93
+ state: query.state,
94
+ queryKey: query.queryKey,
95
+ queryHash: query.queryHash,
96
+ ...(query.meta && { meta: query.meta }),
97
+ }
114
98
 
115
- // Unsetting these properties on the server since they might not be serializable
116
- fetchFailureReason: null,
117
- fetchMeta: null,
118
- } as HydratableQueryState<TDataHydratable, TError>
99
+ return obj
119
100
  }
120
101
 
121
102
  // Base Query Function that is used to create the query.
@@ -132,9 +113,7 @@ export function createBaseQuery<
132
113
  Observer: typeof QueryObserver,
133
114
  queryClient?: Accessor<QueryClient>,
134
115
  ) {
135
- type ResourceData =
136
- | HydratableQueryState<TData, TError>
137
- | QueryObserverResult<TData, TError>
116
+ type ResourceData = QueryObserverResult<TData, TError>
138
117
 
139
118
  const client = createMemo(() => useQueryClient(queryClient?.()))
140
119
  const isRestoring = useIsRestoring()
@@ -221,12 +200,18 @@ export function createBaseQuery<
221
200
  function createDeepSignal<T>(): Signal<T> {
222
201
  return [
223
202
  () => state,
224
- (v: T) => {
203
+ (v: any) => {
225
204
  const unwrapped = unwrap(state)
226
205
  if (typeof v === 'function') {
227
206
  v = v(unwrapped)
228
207
  }
229
- setStateWithReconciliation(v as any)
208
+ // Hydration data exists on first load after SSR,
209
+ // and should be removed from the observer result
210
+ if (v.hydrationData) {
211
+ const { hydrationData, ...rest } = v
212
+ v = rest
213
+ }
214
+ setStateWithReconciliation(v)
230
215
  },
231
216
  ] as Signal<T>
232
217
  }
@@ -236,10 +221,19 @@ export function createBaseQuery<
236
221
  */
237
222
  let unsubscribe: (() => void) | null = null
238
223
 
224
+ /*
225
+ Fixes #7275
226
+ In a few cases, the observer could unmount before the resource is loaded.
227
+ This leads to Suspense boundaries to be suspended indefinitely.
228
+ This resolver will be called when the observer is unmounting
229
+ but the resource is still in a loading state
230
+ */
231
+ let resolver: ((value: ResourceData) => void) | null = null
239
232
  const [queryResource, { refetch }] = createResource<ResourceData | undefined>(
240
233
  () => {
241
234
  const obs = observer()
242
235
  return new Promise((resolve, reject) => {
236
+ resolver = resolve
243
237
  if (isServer) {
244
238
  unsubscribe = createServerSubscriber(resolve, reject)
245
239
  } else if (!unsubscribe && !isRestoring()) {
@@ -260,8 +254,8 @@ export function createBaseQuery<
260
254
  return reject(observerResult.error)
261
255
  }
262
256
  if (!observerResult.isLoading) {
263
- const query = obs.getCurrentQuery()
264
- return resolve(hydratableObserverResult(query, observerResult))
257
+ resolver = null
258
+ return resolve(observerResult)
265
259
  }
266
260
 
267
261
  setStateWithReconciliation(observerResult)
@@ -283,15 +277,10 @@ export function createBaseQuery<
283
277
  * Note that this is only invoked on the client, for queries that were originally run on the server.
284
278
  */
285
279
  onHydrated(_k, info) {
286
- if (info.value) {
280
+ if (info.value && 'hydrationData' in info.value) {
287
281
  hydrate(client(), {
288
- queries: [
289
- {
290
- queryKey: initialOptions.queryKey,
291
- queryHash: initialOptions.queryHash,
292
- state: info.value,
293
- },
294
- ],
282
+ // @ts-expect-error - hydrationData is not correctly typed internally
283
+ queries: [{ ...info.value.hydrationData }],
295
284
  })
296
285
  }
297
286
 
@@ -354,6 +343,10 @@ export function createBaseQuery<
354
343
  unsubscribe()
355
344
  unsubscribe = null
356
345
  }
346
+ if (resolver && !isServer) {
347
+ resolver(observerResult)
348
+ resolver = null
349
+ }
357
350
  })
358
351
 
359
352
  createComputed(