@tanstack/solid-query 5.24.1 → 5.24.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/build/dev.cjs CHANGED
@@ -45,6 +45,8 @@ function shouldThrowError(throwError, params) {
45
45
  }
46
46
  return !!throwError;
47
47
  }
48
+ function noop() {
49
+ }
48
50
  var IsRestoringContext = solidJs.createContext(() => false);
49
51
  exports.useIsRestoring = () => solidJs.useContext(IsRestoringContext);
50
52
  exports.IsRestoringProvider = IsRestoringContext.Provider;
@@ -86,22 +88,18 @@ var hydratableObserverResult = (query, result) => {
86
88
  function createBaseQuery(options, Observer, queryClient) {
87
89
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
88
90
  const isRestoring = exports.useIsRestoring();
89
- const defaultedOptions = solidJs.createMemo(
90
- () => solidJs.mergeProps(client()?.defaultQueryOptions(options()) || {}, {
91
- get _optimisticResults() {
92
- return isRestoring() ? "isRestoring" : "optimistic";
93
- },
94
- structuralSharing: false,
95
- ...web.isServer && { retry: false, throwOnError: true }
96
- })
97
- );
91
+ const defaultedOptions = solidJs.createMemo(() => {
92
+ const defaultOptions = client().defaultQueryOptions(options());
93
+ defaultOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic";
94
+ defaultOptions.structuralSharing = false;
95
+ if (web.isServer) {
96
+ defaultOptions.retry = false;
97
+ defaultOptions.throwOnError = true;
98
+ }
99
+ return defaultOptions;
100
+ });
98
101
  const [observer, setObserver] = solidJs.createSignal(
99
- new Observer(client(), solidJs.untrack(defaultedOptions))
100
- );
101
- solidJs.createComputed(
102
- solidJs.on(client, (c) => setObserver(new Observer(c, defaultedOptions())), {
103
- defer: true
104
- })
102
+ new Observer(client(), defaultedOptions())
105
103
  );
106
104
  const [state, setState] = store.createStore(
107
105
  observer().getOptimisticResult(defaultedOptions())
@@ -124,17 +122,25 @@ function createBaseQuery(options, Observer, queryClient) {
124
122
  return obs.subscribe((result) => {
125
123
  queryCore.notifyManager.batchCalls(() => {
126
124
  const reconcileOptions = obs.options.reconcile;
127
- setState((store) => {
128
- return reconcileFn(
129
- store,
130
- result,
131
- reconcileOptions === void 0 ? false : reconcileOptions
132
- );
133
- });
134
- if (queryResource()?.data && result.data && !queryResource.loading && isRestoring())
125
+ if (queryResource()?.data && result.data && !queryResource.loading) {
126
+ setState((store) => {
127
+ return reconcileFn(
128
+ store,
129
+ result,
130
+ reconcileOptions === void 0 ? false : reconcileOptions
131
+ );
132
+ });
135
133
  mutate(state);
136
- else
134
+ } else {
135
+ setState((store) => {
136
+ return reconcileFn(
137
+ store,
138
+ result,
139
+ reconcileOptions === void 0 ? false : reconcileOptions
140
+ );
141
+ });
137
142
  refetch();
143
+ }
138
144
  })();
139
145
  });
140
146
  };
@@ -143,12 +149,13 @@ function createBaseQuery(options, Observer, queryClient) {
143
149
  () => {
144
150
  const obs = observer();
145
151
  return new Promise((resolve, reject) => {
146
- if (web.isServer)
152
+ if (web.isServer) {
147
153
  unsubscribe = createServerSubscriber(resolve, reject);
148
- else if (!unsubscribe && !isRestoring())
154
+ } else if (!unsubscribe && !isRestoring()) {
149
155
  unsubscribe = createClientSubscriber();
156
+ }
150
157
  obs.updateResult();
151
- if (!state.isLoading && !isRestoring()) {
158
+ if (!state.isLoading) {
152
159
  const query = obs.getCurrentQuery();
153
160
  resolve(hydratableObserverResult(query, state));
154
161
  }
@@ -198,17 +205,25 @@ function createBaseQuery(options, Observer, queryClient) {
198
205
  );
199
206
  solidJs.createComputed(
200
207
  solidJs.on(
201
- [isRestoring, observer],
202
- ([restoring]) => {
203
- const _unsubscribe = unsubscribe;
204
- queueMicrotask(() => _unsubscribe?.());
205
- unsubscribe = null;
206
- if (!restoring)
207
- refetch();
208
+ client,
209
+ (c) => {
210
+ if (unsubscribe) {
211
+ unsubscribe();
212
+ }
213
+ const newObserver = new Observer(c, defaultedOptions());
214
+ unsubscribe = createClientSubscriber();
215
+ setObserver(newObserver);
208
216
  },
209
- { defer: true }
217
+ {
218
+ defer: true
219
+ }
210
220
  )
211
221
  );
222
+ solidJs.createComputed(() => {
223
+ if (!isRestoring()) {
224
+ refetch();
225
+ }
226
+ });
212
227
  solidJs.onCleanup(() => {
213
228
  if (unsubscribe) {
214
229
  unsubscribe();
@@ -222,11 +237,7 @@ function createBaseQuery(options, Observer, queryClient) {
222
237
  obs.setOptions(opts);
223
238
  setState(obs.getOptimisticResult(opts));
224
239
  },
225
- {
226
- // Defer because we don't need to trigger on first render
227
- // This only cares about changes to options after the observer is created
228
- defer: true
229
- }
240
+ { defer: true }
230
241
  )
231
242
  );
232
243
  solidJs.createComputed(
@@ -317,8 +328,6 @@ function createMutation(options, queryClient) {
317
328
  solidJs.onCleanup(unsubscribe);
318
329
  return state;
319
330
  }
320
- function noop() {
321
- }
322
331
  function useIsMutating(filters, queryClient) {
323
332
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
324
333
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
package/build/dev.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { notifyManager, QueryClient as QueryClient$1, MutationObserver, replaceEqualDeep, QueriesObserver, hydrate, QueryObserver, InfiniteQueryObserver } from '@tanstack/query-core';
2
2
  export * from '@tanstack/query-core';
3
- import { batch, createContext, useContext, createRenderEffect, onCleanup, createMemo, createSignal, createComputed, on, createEffect, mergeProps, createResource, onMount, untrack } from 'solid-js';
3
+ import { batch, createContext, useContext, createRenderEffect, onCleanup, createMemo, createSignal, createComputed, on, createEffect, mergeProps, createResource, onMount } from 'solid-js';
4
4
  import { createComponent, isServer } from 'solid-js/web';
5
5
  import { createStore, unwrap, reconcile } from 'solid-js/store';
6
6
 
@@ -44,6 +44,8 @@ function shouldThrowError(throwError, params) {
44
44
  }
45
45
  return !!throwError;
46
46
  }
47
+ function noop() {
48
+ }
47
49
  var IsRestoringContext = createContext(() => false);
48
50
  var useIsRestoring = () => useContext(IsRestoringContext);
49
51
  var IsRestoringProvider = IsRestoringContext.Provider;
@@ -85,22 +87,18 @@ var hydratableObserverResult = (query, result) => {
85
87
  function createBaseQuery(options, Observer, queryClient) {
86
88
  const client = createMemo(() => useQueryClient(queryClient?.()));
87
89
  const isRestoring = useIsRestoring();
88
- const defaultedOptions = createMemo(
89
- () => mergeProps(client()?.defaultQueryOptions(options()) || {}, {
90
- get _optimisticResults() {
91
- return isRestoring() ? "isRestoring" : "optimistic";
92
- },
93
- structuralSharing: false,
94
- ...isServer && { retry: false, throwOnError: true }
95
- })
96
- );
90
+ const defaultedOptions = createMemo(() => {
91
+ const defaultOptions = client().defaultQueryOptions(options());
92
+ defaultOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic";
93
+ defaultOptions.structuralSharing = false;
94
+ if (isServer) {
95
+ defaultOptions.retry = false;
96
+ defaultOptions.throwOnError = true;
97
+ }
98
+ return defaultOptions;
99
+ });
97
100
  const [observer, setObserver] = createSignal(
98
- new Observer(client(), untrack(defaultedOptions))
99
- );
100
- createComputed(
101
- on(client, (c) => setObserver(new Observer(c, defaultedOptions())), {
102
- defer: true
103
- })
101
+ new Observer(client(), defaultedOptions())
104
102
  );
105
103
  const [state, setState] = createStore(
106
104
  observer().getOptimisticResult(defaultedOptions())
@@ -123,17 +121,25 @@ function createBaseQuery(options, Observer, queryClient) {
123
121
  return obs.subscribe((result) => {
124
122
  notifyManager.batchCalls(() => {
125
123
  const reconcileOptions = obs.options.reconcile;
126
- setState((store) => {
127
- return reconcileFn(
128
- store,
129
- result,
130
- reconcileOptions === void 0 ? false : reconcileOptions
131
- );
132
- });
133
- if (queryResource()?.data && result.data && !queryResource.loading && isRestoring())
124
+ if (queryResource()?.data && result.data && !queryResource.loading) {
125
+ setState((store) => {
126
+ return reconcileFn(
127
+ store,
128
+ result,
129
+ reconcileOptions === void 0 ? false : reconcileOptions
130
+ );
131
+ });
134
132
  mutate(state);
135
- else
133
+ } else {
134
+ setState((store) => {
135
+ return reconcileFn(
136
+ store,
137
+ result,
138
+ reconcileOptions === void 0 ? false : reconcileOptions
139
+ );
140
+ });
136
141
  refetch();
142
+ }
137
143
  })();
138
144
  });
139
145
  };
@@ -142,12 +148,13 @@ function createBaseQuery(options, Observer, queryClient) {
142
148
  () => {
143
149
  const obs = observer();
144
150
  return new Promise((resolve, reject) => {
145
- if (isServer)
151
+ if (isServer) {
146
152
  unsubscribe = createServerSubscriber(resolve, reject);
147
- else if (!unsubscribe && !isRestoring())
153
+ } else if (!unsubscribe && !isRestoring()) {
148
154
  unsubscribe = createClientSubscriber();
155
+ }
149
156
  obs.updateResult();
150
- if (!state.isLoading && !isRestoring()) {
157
+ if (!state.isLoading) {
151
158
  const query = obs.getCurrentQuery();
152
159
  resolve(hydratableObserverResult(query, state));
153
160
  }
@@ -197,17 +204,25 @@ function createBaseQuery(options, Observer, queryClient) {
197
204
  );
198
205
  createComputed(
199
206
  on(
200
- [isRestoring, observer],
201
- ([restoring]) => {
202
- const _unsubscribe = unsubscribe;
203
- queueMicrotask(() => _unsubscribe?.());
204
- unsubscribe = null;
205
- if (!restoring)
206
- refetch();
207
+ client,
208
+ (c) => {
209
+ if (unsubscribe) {
210
+ unsubscribe();
211
+ }
212
+ const newObserver = new Observer(c, defaultedOptions());
213
+ unsubscribe = createClientSubscriber();
214
+ setObserver(newObserver);
207
215
  },
208
- { defer: true }
216
+ {
217
+ defer: true
218
+ }
209
219
  )
210
220
  );
221
+ createComputed(() => {
222
+ if (!isRestoring()) {
223
+ refetch();
224
+ }
225
+ });
211
226
  onCleanup(() => {
212
227
  if (unsubscribe) {
213
228
  unsubscribe();
@@ -221,11 +236,7 @@ function createBaseQuery(options, Observer, queryClient) {
221
236
  obs.setOptions(opts);
222
237
  setState(obs.getOptimisticResult(opts));
223
238
  },
224
- {
225
- // Defer because we don't need to trigger on first render
226
- // This only cares about changes to options after the observer is created
227
- defer: true
228
- }
239
+ { defer: true }
229
240
  )
230
241
  );
231
242
  createComputed(
@@ -316,8 +327,6 @@ function createMutation(options, queryClient) {
316
327
  onCleanup(unsubscribe);
317
328
  return state;
318
329
  }
319
- function noop() {
320
- }
321
330
  function useIsMutating(filters, queryClient) {
322
331
  const client = createMemo(() => useQueryClient(queryClient?.()));
323
332
  const mutationCache = createMemo(() => client().getMutationCache());
package/build/index.cjs CHANGED
@@ -45,6 +45,8 @@ function shouldThrowError(throwError, params) {
45
45
  }
46
46
  return !!throwError;
47
47
  }
48
+ function noop() {
49
+ }
48
50
  var IsRestoringContext = solidJs.createContext(() => false);
49
51
  exports.useIsRestoring = () => solidJs.useContext(IsRestoringContext);
50
52
  exports.IsRestoringProvider = IsRestoringContext.Provider;
@@ -86,22 +88,18 @@ var hydratableObserverResult = (query, result) => {
86
88
  function createBaseQuery(options, Observer, queryClient) {
87
89
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
88
90
  const isRestoring = exports.useIsRestoring();
89
- const defaultedOptions = solidJs.createMemo(
90
- () => solidJs.mergeProps(client()?.defaultQueryOptions(options()) || {}, {
91
- get _optimisticResults() {
92
- return isRestoring() ? "isRestoring" : "optimistic";
93
- },
94
- structuralSharing: false,
95
- ...web.isServer && { retry: false, throwOnError: true }
96
- })
97
- );
91
+ const defaultedOptions = solidJs.createMemo(() => {
92
+ const defaultOptions = client().defaultQueryOptions(options());
93
+ defaultOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic";
94
+ defaultOptions.structuralSharing = false;
95
+ if (web.isServer) {
96
+ defaultOptions.retry = false;
97
+ defaultOptions.throwOnError = true;
98
+ }
99
+ return defaultOptions;
100
+ });
98
101
  const [observer, setObserver] = solidJs.createSignal(
99
- new Observer(client(), solidJs.untrack(defaultedOptions))
100
- );
101
- solidJs.createComputed(
102
- solidJs.on(client, (c) => setObserver(new Observer(c, defaultedOptions())), {
103
- defer: true
104
- })
102
+ new Observer(client(), defaultedOptions())
105
103
  );
106
104
  const [state, setState] = store.createStore(
107
105
  observer().getOptimisticResult(defaultedOptions())
@@ -124,17 +122,25 @@ function createBaseQuery(options, Observer, queryClient) {
124
122
  return obs.subscribe((result) => {
125
123
  queryCore.notifyManager.batchCalls(() => {
126
124
  const reconcileOptions = obs.options.reconcile;
127
- setState((store) => {
128
- return reconcileFn(
129
- store,
130
- result,
131
- reconcileOptions === void 0 ? false : reconcileOptions
132
- );
133
- });
134
- if (queryResource()?.data && result.data && !queryResource.loading && isRestoring())
125
+ if (queryResource()?.data && result.data && !queryResource.loading) {
126
+ setState((store) => {
127
+ return reconcileFn(
128
+ store,
129
+ result,
130
+ reconcileOptions === void 0 ? false : reconcileOptions
131
+ );
132
+ });
135
133
  mutate(state);
136
- else
134
+ } else {
135
+ setState((store) => {
136
+ return reconcileFn(
137
+ store,
138
+ result,
139
+ reconcileOptions === void 0 ? false : reconcileOptions
140
+ );
141
+ });
137
142
  refetch();
143
+ }
138
144
  })();
139
145
  });
140
146
  };
@@ -143,12 +149,13 @@ function createBaseQuery(options, Observer, queryClient) {
143
149
  () => {
144
150
  const obs = observer();
145
151
  return new Promise((resolve, reject) => {
146
- if (web.isServer)
152
+ if (web.isServer) {
147
153
  unsubscribe = createServerSubscriber(resolve, reject);
148
- else if (!unsubscribe && !isRestoring())
154
+ } else if (!unsubscribe && !isRestoring()) {
149
155
  unsubscribe = createClientSubscriber();
156
+ }
150
157
  obs.updateResult();
151
- if (!state.isLoading && !isRestoring()) {
158
+ if (!state.isLoading) {
152
159
  const query = obs.getCurrentQuery();
153
160
  resolve(hydratableObserverResult(query, state));
154
161
  }
@@ -198,17 +205,25 @@ function createBaseQuery(options, Observer, queryClient) {
198
205
  );
199
206
  solidJs.createComputed(
200
207
  solidJs.on(
201
- [isRestoring, observer],
202
- ([restoring]) => {
203
- const _unsubscribe = unsubscribe;
204
- queueMicrotask(() => _unsubscribe?.());
205
- unsubscribe = null;
206
- if (!restoring)
207
- refetch();
208
+ client,
209
+ (c) => {
210
+ if (unsubscribe) {
211
+ unsubscribe();
212
+ }
213
+ const newObserver = new Observer(c, defaultedOptions());
214
+ unsubscribe = createClientSubscriber();
215
+ setObserver(newObserver);
208
216
  },
209
- { defer: true }
217
+ {
218
+ defer: true
219
+ }
210
220
  )
211
221
  );
222
+ solidJs.createComputed(() => {
223
+ if (!isRestoring()) {
224
+ refetch();
225
+ }
226
+ });
212
227
  solidJs.onCleanup(() => {
213
228
  if (unsubscribe) {
214
229
  unsubscribe();
@@ -222,11 +237,7 @@ function createBaseQuery(options, Observer, queryClient) {
222
237
  obs.setOptions(opts);
223
238
  setState(obs.getOptimisticResult(opts));
224
239
  },
225
- {
226
- // Defer because we don't need to trigger on first render
227
- // This only cares about changes to options after the observer is created
228
- defer: true
229
- }
240
+ { defer: true }
230
241
  )
231
242
  );
232
243
  solidJs.createComputed(
@@ -317,8 +328,6 @@ function createMutation(options, queryClient) {
317
328
  solidJs.onCleanup(unsubscribe);
318
329
  return state;
319
330
  }
320
- function noop() {
321
- }
322
331
  function useIsMutating(filters, queryClient) {
323
332
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
324
333
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { notifyManager, QueryClient as QueryClient$1, MutationObserver, replaceEqualDeep, QueriesObserver, hydrate, QueryObserver, InfiniteQueryObserver } from '@tanstack/query-core';
2
2
  export * from '@tanstack/query-core';
3
- import { batch, createContext, useContext, createRenderEffect, onCleanup, createMemo, createSignal, createComputed, on, createEffect, mergeProps, createResource, onMount, untrack } from 'solid-js';
3
+ import { batch, createContext, useContext, createRenderEffect, onCleanup, createMemo, createSignal, createComputed, on, createEffect, mergeProps, createResource, onMount } from 'solid-js';
4
4
  import { createComponent, isServer } from 'solid-js/web';
5
5
  import { createStore, unwrap, reconcile } from 'solid-js/store';
6
6
 
@@ -44,6 +44,8 @@ function shouldThrowError(throwError, params) {
44
44
  }
45
45
  return !!throwError;
46
46
  }
47
+ function noop() {
48
+ }
47
49
  var IsRestoringContext = createContext(() => false);
48
50
  var useIsRestoring = () => useContext(IsRestoringContext);
49
51
  var IsRestoringProvider = IsRestoringContext.Provider;
@@ -85,22 +87,18 @@ var hydratableObserverResult = (query, result) => {
85
87
  function createBaseQuery(options, Observer, queryClient) {
86
88
  const client = createMemo(() => useQueryClient(queryClient?.()));
87
89
  const isRestoring = useIsRestoring();
88
- const defaultedOptions = createMemo(
89
- () => mergeProps(client()?.defaultQueryOptions(options()) || {}, {
90
- get _optimisticResults() {
91
- return isRestoring() ? "isRestoring" : "optimistic";
92
- },
93
- structuralSharing: false,
94
- ...isServer && { retry: false, throwOnError: true }
95
- })
96
- );
90
+ const defaultedOptions = createMemo(() => {
91
+ const defaultOptions = client().defaultQueryOptions(options());
92
+ defaultOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic";
93
+ defaultOptions.structuralSharing = false;
94
+ if (isServer) {
95
+ defaultOptions.retry = false;
96
+ defaultOptions.throwOnError = true;
97
+ }
98
+ return defaultOptions;
99
+ });
97
100
  const [observer, setObserver] = createSignal(
98
- new Observer(client(), untrack(defaultedOptions))
99
- );
100
- createComputed(
101
- on(client, (c) => setObserver(new Observer(c, defaultedOptions())), {
102
- defer: true
103
- })
101
+ new Observer(client(), defaultedOptions())
104
102
  );
105
103
  const [state, setState] = createStore(
106
104
  observer().getOptimisticResult(defaultedOptions())
@@ -123,17 +121,25 @@ function createBaseQuery(options, Observer, queryClient) {
123
121
  return obs.subscribe((result) => {
124
122
  notifyManager.batchCalls(() => {
125
123
  const reconcileOptions = obs.options.reconcile;
126
- setState((store) => {
127
- return reconcileFn(
128
- store,
129
- result,
130
- reconcileOptions === void 0 ? false : reconcileOptions
131
- );
132
- });
133
- if (queryResource()?.data && result.data && !queryResource.loading && isRestoring())
124
+ if (queryResource()?.data && result.data && !queryResource.loading) {
125
+ setState((store) => {
126
+ return reconcileFn(
127
+ store,
128
+ result,
129
+ reconcileOptions === void 0 ? false : reconcileOptions
130
+ );
131
+ });
134
132
  mutate(state);
135
- else
133
+ } else {
134
+ setState((store) => {
135
+ return reconcileFn(
136
+ store,
137
+ result,
138
+ reconcileOptions === void 0 ? false : reconcileOptions
139
+ );
140
+ });
136
141
  refetch();
142
+ }
137
143
  })();
138
144
  });
139
145
  };
@@ -142,12 +148,13 @@ function createBaseQuery(options, Observer, queryClient) {
142
148
  () => {
143
149
  const obs = observer();
144
150
  return new Promise((resolve, reject) => {
145
- if (isServer)
151
+ if (isServer) {
146
152
  unsubscribe = createServerSubscriber(resolve, reject);
147
- else if (!unsubscribe && !isRestoring())
153
+ } else if (!unsubscribe && !isRestoring()) {
148
154
  unsubscribe = createClientSubscriber();
155
+ }
149
156
  obs.updateResult();
150
- if (!state.isLoading && !isRestoring()) {
157
+ if (!state.isLoading) {
151
158
  const query = obs.getCurrentQuery();
152
159
  resolve(hydratableObserverResult(query, state));
153
160
  }
@@ -197,17 +204,25 @@ function createBaseQuery(options, Observer, queryClient) {
197
204
  );
198
205
  createComputed(
199
206
  on(
200
- [isRestoring, observer],
201
- ([restoring]) => {
202
- const _unsubscribe = unsubscribe;
203
- queueMicrotask(() => _unsubscribe?.());
204
- unsubscribe = null;
205
- if (!restoring)
206
- refetch();
207
+ client,
208
+ (c) => {
209
+ if (unsubscribe) {
210
+ unsubscribe();
211
+ }
212
+ const newObserver = new Observer(c, defaultedOptions());
213
+ unsubscribe = createClientSubscriber();
214
+ setObserver(newObserver);
207
215
  },
208
- { defer: true }
216
+ {
217
+ defer: true
218
+ }
209
219
  )
210
220
  );
221
+ createComputed(() => {
222
+ if (!isRestoring()) {
223
+ refetch();
224
+ }
225
+ });
211
226
  onCleanup(() => {
212
227
  if (unsubscribe) {
213
228
  unsubscribe();
@@ -221,11 +236,7 @@ function createBaseQuery(options, Observer, queryClient) {
221
236
  obs.setOptions(opts);
222
237
  setState(obs.getOptimisticResult(opts));
223
238
  },
224
- {
225
- // Defer because we don't need to trigger on first render
226
- // This only cares about changes to options after the observer is created
227
- defer: true
228
- }
239
+ { defer: true }
229
240
  )
230
241
  );
231
242
  createComputed(
@@ -316,8 +327,6 @@ function createMutation(options, queryClient) {
316
327
  onCleanup(unsubscribe);
317
328
  return state;
318
329
  }
319
- function noop() {
320
- }
321
330
  function useIsMutating(filters, queryClient) {
322
331
  const client = createMemo(() => useQueryClient(queryClient?.()));
323
332
  const mutationCache = createMemo(() => client().getMutationCache());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-query",
3
- "version": "5.24.1",
3
+ "version": "5.24.2",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -48,7 +48,7 @@
48
48
  ],
49
49
  "dependencies": {
50
50
  "solid-js": "^1.8.14",
51
- "@tanstack/query-core": "5.24.1"
51
+ "@tanstack/query-core": "5.24.2"
52
52
  },
53
53
  "devDependencies": {
54
54
  "tsup-preset-solid": "^2.2.0",
@@ -64,6 +64,7 @@
64
64
  "test:lib": "vitest --retry=3",
65
65
  "test:lib:dev": "pnpm run test:lib --watch",
66
66
  "test:build": "publint --strict",
67
- "build": "tsup"
67
+ "build": "tsup",
68
+ "build:watch": "tsup --watch"
68
69
  }
69
70
  }
@@ -1,4 +1,3 @@
1
- /* eslint-disable @typescript-eslint/no-unnecessary-condition */
2
1
  // Had to disable the lint rule because isServer type is defined as false
3
2
  // in solid-js/web package. I'll create a GitHub issue with them to see
4
3
  // why that happens.
@@ -9,10 +8,8 @@ import {
9
8
  createMemo,
10
9
  createResource,
11
10
  createSignal,
12
- mergeProps,
13
11
  on,
14
12
  onCleanup,
15
- untrack,
16
13
  } from 'solid-js'
17
14
  import { createStore, reconcile, unwrap } from 'solid-js/store'
18
15
  import { useQueryClient } from './QueryClientProvider'
@@ -124,25 +121,21 @@ export function createBaseQuery<
124
121
  const client = createMemo(() => useQueryClient(queryClient?.()))
125
122
  const isRestoring = useIsRestoring()
126
123
 
127
- const defaultedOptions = createMemo(() =>
128
- mergeProps(client()?.defaultQueryOptions(options()) || {}, {
129
- get _optimisticResults() {
130
- return isRestoring() ? 'isRestoring' : 'optimistic'
131
- },
132
- structuralSharing: false,
133
- ...(isServer && { retry: false, throwOnError: true }),
134
- }),
135
- )
124
+ const defaultedOptions = createMemo(() => {
125
+ const defaultOptions = client().defaultQueryOptions(options())
126
+ defaultOptions._optimisticResults = isRestoring()
127
+ ? 'isRestoring'
128
+ : 'optimistic'
129
+ defaultOptions.structuralSharing = false
130
+ if (isServer) {
131
+ defaultOptions.retry = false
132
+ defaultOptions.throwOnError = true
133
+ }
134
+ return defaultOptions
135
+ })
136
136
 
137
137
  const [observer, setObserver] = createSignal(
138
- new Observer(client(), untrack(defaultedOptions)),
139
- )
140
- // we set the value in a computed because `createMemo`
141
- // returns undefined during transitions
142
- createComputed(
143
- on(client, (c) => setObserver(new Observer(c, defaultedOptions())), {
144
- defer: true,
145
- }),
138
+ new Observer(client(), defaultedOptions()),
146
139
  )
147
140
 
148
141
  const [state, setState] = createStore<QueryObserverResult<TData, TError>>(
@@ -177,23 +170,27 @@ export function createBaseQuery<
177
170
  // exist on the query-core QueryObserverResult type
178
171
  const reconcileOptions = obs.options.reconcile
179
172
 
180
- setState((store) => {
181
- return reconcileFn(
182
- store,
183
- result,
184
- reconcileOptions === undefined ? false : reconcileOptions,
185
- )
186
- })
187
173
  // If the query has data we don't suspend but instead mutate the resource
188
174
  // This could happen when placeholderData/initialData is defined
189
- if (
190
- queryResource()?.data &&
191
- result.data &&
192
- !queryResource.loading &&
193
- isRestoring()
194
- )
175
+ if (queryResource()?.data && result.data && !queryResource.loading) {
176
+ setState((store) => {
177
+ return reconcileFn(
178
+ store,
179
+ result,
180
+ reconcileOptions === undefined ? false : reconcileOptions,
181
+ )
182
+ })
195
183
  mutate(state)
196
- else refetch()
184
+ } else {
185
+ setState((store) => {
186
+ return reconcileFn(
187
+ store,
188
+ result,
189
+ reconcileOptions === undefined ? false : reconcileOptions,
190
+ )
191
+ })
192
+ refetch()
193
+ }
197
194
  })()
198
195
  })
199
196
  }
@@ -209,13 +206,14 @@ export function createBaseQuery<
209
206
  () => {
210
207
  const obs = observer()
211
208
  return new Promise((resolve, reject) => {
212
- if (isServer) unsubscribe = createServerSubscriber(resolve, reject)
213
- else if (!unsubscribe && !isRestoring())
209
+ if (isServer) {
210
+ unsubscribe = createServerSubscriber(resolve, reject)
211
+ } else if (!unsubscribe && !isRestoring()) {
214
212
  unsubscribe = createClientSubscriber()
215
-
213
+ }
216
214
  obs.updateResult()
217
215
 
218
- if (!state.isLoading && !isRestoring()) {
216
+ if (!state.isLoading) {
219
217
  const query = obs.getCurrentQuery()
220
218
  resolve(hydratableObserverResult(query, state))
221
219
  }
@@ -275,17 +273,27 @@ export function createBaseQuery<
275
273
 
276
274
  createComputed(
277
275
  on(
278
- [isRestoring, observer],
279
- ([restoring]) => {
280
- const _unsubscribe = unsubscribe
281
- queueMicrotask(() => _unsubscribe?.())
282
- unsubscribe = null
283
- if (!restoring) refetch()
276
+ client,
277
+ (c) => {
278
+ if (unsubscribe) {
279
+ unsubscribe()
280
+ }
281
+ const newObserver = new Observer(c, defaultedOptions())
282
+ unsubscribe = createClientSubscriber()
283
+ setObserver(newObserver)
284
+ },
285
+ {
286
+ defer: true,
284
287
  },
285
- { defer: true },
286
288
  ),
287
289
  )
288
290
 
291
+ createComputed(() => {
292
+ if (!isRestoring()) {
293
+ refetch()
294
+ }
295
+ })
296
+
289
297
  onCleanup(() => {
290
298
  if (unsubscribe) {
291
299
  unsubscribe()
@@ -300,11 +308,7 @@ export function createBaseQuery<
300
308
  obs.setOptions(opts)
301
309
  setState(obs.getOptimisticResult(opts))
302
310
  },
303
- {
304
- // Defer because we don't need to trigger on first render
305
- // This only cares about changes to options after the observer is created
306
- defer: true,
307
- },
311
+ { defer: true },
308
312
  ),
309
313
  )
310
314
 
@@ -2,7 +2,7 @@ import { MutationObserver } from '@tanstack/query-core'
2
2
  import { createComputed, createMemo, on, onCleanup } from 'solid-js'
3
3
  import { createStore } from 'solid-js/store'
4
4
  import { useQueryClient } from './QueryClientProvider'
5
- import { shouldThrowError } from './utils'
5
+ import { noop, shouldThrowError } from './utils'
6
6
  import type { DefaultError } from '@tanstack/query-core'
7
7
  import type { QueryClient } from './QueryClient'
8
8
  import type {
@@ -74,5 +74,3 @@ export function createMutation<
74
74
 
75
75
  return state
76
76
  }
77
-
78
- function noop() {}
package/src/utils.ts CHANGED
@@ -9,3 +9,5 @@ export function shouldThrowError<T extends (...args: Array<any>) => boolean>(
9
9
 
10
10
  return !!throwError
11
11
  }
12
+
13
+ export function noop() {}