@tanstack/solid-query 5.0.0-alpha.7 → 5.0.0-alpha.75

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.
Files changed (81) hide show
  1. package/{build/cjs/index.js → dist/cjs/index.cjs} +92 -32
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/{build → dist}/esm/index.js +92 -34
  4. package/dist/esm/index.js.map +1 -0
  5. package/dist/source/QueryClient.js +6 -0
  6. package/{build → dist}/source/createBaseQuery.js +49 -23
  7. package/{build → dist}/source/createMutation.js +1 -1
  8. package/{build → dist}/source/createQueries.js +13 -7
  9. package/{build → dist}/source/createQuery.js +3 -0
  10. package/{build → dist}/source/index.js +2 -1
  11. package/dist/types/QueryClient.d.ts +29 -0
  12. package/{build → dist}/types/QueryClientProvider.d.ts +3 -3
  13. package/{build → dist}/types/createBaseQuery.d.ts +2 -1
  14. package/{build → dist}/types/createInfiniteQuery.d.ts +2 -1
  15. package/{build → dist}/types/createMutation.d.ts +2 -1
  16. package/{build → dist}/types/createQueries.d.ts +11 -9
  17. package/dist/types/createQuery.d.ts +14 -0
  18. package/{build → dist}/types/index.d.ts +3 -1
  19. package/dist/types/types.d.ts +34 -0
  20. package/{build → dist}/types/useIsFetching.d.ts +2 -1
  21. package/{build → dist}/types/useIsMutating.d.ts +2 -1
  22. package/package.json +22 -26
  23. package/src/QueryClient.ts +84 -0
  24. package/src/QueryClientProvider.tsx +2 -3
  25. package/src/__tests__/QueryClientProvider.test.tsx +19 -3
  26. package/src/__tests__/createInfiniteQuery.test.tsx +83 -19
  27. package/src/__tests__/createMutation.test.tsx +5 -5
  28. package/src/__tests__/createQueries.test.tsx +6 -78
  29. package/src/__tests__/createQuery.test.tsx +66 -334
  30. package/src/__tests__/createQuery.types.test.tsx +21 -1
  31. package/src/__tests__/suspense.test.tsx +7 -90
  32. package/src/__tests__/transition.test.tsx +1 -1
  33. package/src/__tests__/useIsFetching.test.tsx +1 -1
  34. package/src/__tests__/useIsMutating.test.tsx +5 -7
  35. package/src/__tests__/utils.tsx +1 -1
  36. package/src/createBaseQuery.ts +73 -28
  37. package/src/createInfiniteQuery.ts +1 -1
  38. package/src/createMutation.ts +3 -2
  39. package/src/createQueries.ts +32 -14
  40. package/src/createQuery.ts +24 -1
  41. package/src/index.ts +8 -1
  42. package/src/types.ts +4 -2
  43. package/src/useIsFetching.ts +2 -1
  44. package/src/useIsMutating.ts +2 -1
  45. package/build/cjs/index.js.map +0 -1
  46. package/build/esm/index.js.map +0 -1
  47. package/build/source/__tests__/QueryClientProvider.test.jsx +0 -121
  48. package/build/source/__tests__/createInfiniteQuery.test.jsx +0 -1315
  49. package/build/source/__tests__/createMutation.test.jsx +0 -867
  50. package/build/source/__tests__/createQueries.test.jsx +0 -661
  51. package/build/source/__tests__/createQuery.test.jsx +0 -4608
  52. package/build/source/__tests__/createQuery.types.test.jsx +0 -135
  53. package/build/source/__tests__/suspense.test.jsx +0 -721
  54. package/build/source/__tests__/transition.test.jsx +0 -42
  55. package/build/source/__tests__/useIsFetching.test.jsx +0 -190
  56. package/build/source/__tests__/useIsMutating.test.jsx +0 -198
  57. package/build/source/__tests__/utils.jsx +0 -50
  58. package/build/types/__tests__/QueryClientProvider.test.d.ts +0 -1
  59. package/build/types/__tests__/createInfiniteQuery.test.d.ts +0 -1
  60. package/build/types/__tests__/createMutation.test.d.ts +0 -1
  61. package/build/types/__tests__/createQueries.test.d.ts +0 -1
  62. package/build/types/__tests__/createQuery.test.d.ts +0 -1
  63. package/build/types/__tests__/createQuery.types.test.d.ts +0 -2
  64. package/build/types/__tests__/suspense.test.d.ts +0 -1
  65. package/build/types/__tests__/transition.test.d.ts +0 -1
  66. package/build/types/__tests__/useIsFetching.test.d.ts +0 -1
  67. package/build/types/__tests__/useIsMutating.test.d.ts +0 -1
  68. package/build/types/__tests__/utils.d.ts +0 -21
  69. package/build/types/createQuery.d.ts +0 -11
  70. package/build/types/types.d.ts +0 -33
  71. package/build/umd/index.js +0 -2
  72. package/build/umd/index.js.map +0 -1
  73. package/{build → dist}/source/QueryClientProvider.jsx +1 -1
  74. /package/{build → dist}/source/createInfiniteQuery.js +0 -0
  75. /package/{build → dist}/source/setBatchUpdatesFn.js +0 -0
  76. /package/{build → dist}/source/types.js +0 -0
  77. /package/{build → dist}/source/useIsFetching.js +0 -0
  78. /package/{build → dist}/source/useIsMutating.js +0 -0
  79. /package/{build → dist}/source/utils.js +0 -0
  80. /package/{build → dist}/types/setBatchUpdatesFn.d.ts +0 -0
  81. /package/{build → dist}/types/utils.d.ts +0 -0
@@ -7,12 +7,18 @@ var store = require('solid-js/store');
7
7
 
8
8
  queryCore.notifyManager.setBatchNotifyFunction(solidJs.batch);
9
9
 
10
+ class QueryClient extends queryCore.QueryClient {
11
+ constructor(config = {}) {
12
+ super(config);
13
+ }
14
+ }
15
+
10
16
  const QueryClientContext = solidJs.createContext(undefined);
11
17
  const useQueryClient = queryClient => {
12
- const client = solidJs.useContext(QueryClientContext);
13
18
  if (queryClient) {
14
19
  return queryClient;
15
20
  }
21
+ const client = solidJs.useContext(QueryClientContext);
16
22
  if (!client) {
17
23
  throw new Error('No QueryClient set, use QueryClientProvider to set one');
18
24
  }
@@ -42,23 +48,59 @@ function shouldThrowError(throwError, params) {
42
48
  }
43
49
 
44
50
  /* eslint-disable @typescript-eslint/no-unnecessary-condition */
51
+ // Had to disable the lint rule because isServer type is defined as false
52
+ // in solid-js/web package. I'll create a GitHub issue with them to see
53
+ // why that happens.
54
+
55
+ function reconcileFn(store$1, result, reconcileOption) {
56
+ if (reconcileOption === false) return result;
57
+ if (typeof reconcileOption === 'function') {
58
+ const newData = reconcileOption(store$1.data, result.data);
59
+ return {
60
+ ...result,
61
+ data: newData
62
+ };
63
+ }
64
+ const newData = store.reconcile(result.data, {
65
+ key: reconcileOption
66
+ })(store$1.data);
67
+ return {
68
+ ...result,
69
+ data: newData
70
+ };
71
+ }
45
72
 
46
73
  // Base Query Function that is used to create the query.
47
74
  function createBaseQuery(options, Observer, queryClient) {
48
75
  const client = solidJs.createMemo(() => useQueryClient(queryClient?.()));
49
76
  const defaultedOptions = client().defaultQueryOptions(options());
50
77
  defaultedOptions._optimisticResults = 'optimistic';
78
+ defaultedOptions.structuralSharing = false;
51
79
  if (web.isServer) {
52
80
  defaultedOptions.retry = false;
53
- defaultedOptions.throwErrors = true;
81
+ defaultedOptions.throwOnError = true;
54
82
  }
55
83
  const observer = new Observer(client(), defaultedOptions);
56
84
  const [state, setState] = store.createStore(observer.getOptimisticResult(defaultedOptions));
57
85
  const createServerSubscriber = (resolve, reject) => {
58
86
  return observer.subscribe(result => {
59
87
  queryCore.notifyManager.batchCalls(() => {
88
+ const query = observer.getCurrentQuery();
89
+ const {
90
+ refetch,
91
+ ...rest
92
+ } = store.unwrap(result);
60
93
  const unwrappedResult = {
61
- ...store.unwrap(result)
94
+ ...rest,
95
+ // hydrate() expects a QueryState object, which is similar but not
96
+ // quite the same as a QueryObserverResult object. Thus, for now, we're
97
+ // copying over the missing properties from state in order to support hydration
98
+ dataUpdateCount: query.state.dataUpdateCount,
99
+ fetchFailureCount: query.state.fetchFailureCount,
100
+ // Removing these properties since they might not be serializable
101
+ // fetchFailureReason: query.state.fetchFailureReason,
102
+ // fetchMeta: query.state.fetchMeta,
103
+ isInvalidated: query.state.isInvalidated
62
104
  };
63
105
  if (unwrappedResult.isError) {
64
106
  if (process.env['NODE_ENV'] === 'development') {
@@ -67,6 +109,8 @@ function createBaseQuery(options, Observer, queryClient) {
67
109
  reject(unwrappedResult.error);
68
110
  }
69
111
  if (unwrappedResult.isSuccess) {
112
+ // Use of any here is fine
113
+ // We cannot include refetch since it is not serializable
70
114
  resolve(unwrappedResult);
71
115
  }
72
116
  })();
@@ -75,16 +119,20 @@ function createBaseQuery(options, Observer, queryClient) {
75
119
  const createClientSubscriber = () => {
76
120
  return observer.subscribe(result => {
77
121
  queryCore.notifyManager.batchCalls(() => {
78
- const unwrappedResult = {
79
- ...store.unwrap(result)
80
- };
122
+ // @ts-expect-error - This will error because the reconcile option does not
123
+ // exist on the query-core QueryObserverResult type
124
+ const reconcileOptions = observer.options.reconcile;
81
125
  // If the query has data we dont suspend but instead mutate the resource
82
126
  // This could happen when placeholderData/initialData is defined
83
- if (queryResource()?.data && unwrappedResult.data && !queryResource.loading) {
84
- setState(unwrappedResult);
127
+ if (queryResource()?.data && result.data && !queryResource.loading) {
128
+ setState(store => {
129
+ return reconcileFn(store, result, reconcileOptions === undefined ? 'id' : reconcileOptions);
130
+ });
85
131
  mutate(state);
86
132
  } else {
87
- setState(unwrappedResult);
133
+ setState(store => {
134
+ return reconcileFn(store, result, reconcileOptions === undefined ? 'id' : reconcileOptions);
135
+ });
88
136
  refetch();
89
137
  }
90
138
  })();
@@ -161,30 +209,28 @@ function createBaseQuery(options, Observer, queryClient) {
161
209
  unsubscribe = null;
162
210
  }
163
211
  });
164
- solidJs.onMount(() => {
165
- observer.setOptions(defaultedOptions, {
166
- listeners: false
167
- });
168
- });
169
- solidJs.createComputed(() => {
170
- observer.setOptions(client().defaultQueryOptions(options()));
171
- });
212
+ solidJs.createComputed(solidJs.on(() => client().defaultQueryOptions(options()), () => observer.setOptions(client().defaultQueryOptions(options())), {
213
+ // Defer because we don't need to trigger on first render
214
+ // This only cares about changes to options after the observer is created
215
+ defer: true
216
+ }));
172
217
  solidJs.createComputed(solidJs.on(() => state.status, () => {
173
- if (state.isError && !state.isFetching && shouldThrowError(observer.options.throwErrors, [state.error, observer.getCurrentQuery()])) {
218
+ if (state.isError && !state.isFetching && shouldThrowError(observer.options.throwOnError, [state.error, observer.getCurrentQuery()])) {
174
219
  throw state.error;
175
220
  }
176
221
  }));
177
222
  const handler = {
178
223
  get(target, prop) {
179
- if (prop === 'data') {
180
- return queryResource()?.data;
181
- }
182
- return Reflect.get(target, prop);
224
+ const val = queryResource()?.[prop];
225
+ return val !== undefined ? val : Reflect.get(target, prop);
183
226
  }
184
227
  };
185
228
  return new Proxy(state, handler);
186
229
  }
187
230
 
231
+ function queryOptions(options) {
232
+ return options;
233
+ }
188
234
  function createQuery(options, queryClient) {
189
235
  return createBaseQuery(solidJs.createMemo(() => options()), queryCore.QueryObserver, queryClient);
190
236
  }
@@ -222,7 +268,7 @@ function createMutation(options, queryClient) {
222
268
  observer.setOptions(options());
223
269
  });
224
270
  solidJs.createComputed(solidJs.on(() => state.status, () => {
225
- if (state.isError && shouldThrowError(observer.options.throwErrors, [state.error])) {
271
+ if (state.isError && shouldThrowError(observer.options.throwOnError, [state.error])) {
226
272
  throw state.error;
227
273
  }
228
274
  }));
@@ -251,6 +297,15 @@ function useIsMutating(filters, queryClient) {
251
297
  return mutations;
252
298
  }
253
299
 
300
+ // This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
301
+ // `placeholderData` function does not have a parameter
302
+ // Avoid TS depth-limit error in case of large array literal
303
+ /**
304
+ * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
305
+ */
306
+ /**
307
+ * QueriesResults reducer recursively maps type param to results
308
+ */
254
309
  function createQueries(queriesOptions, queryClient) {
255
310
  const client = useQueryClient(queryClient?.());
256
311
  const defaultedQueries = queriesOptions().queries.map(options => {
@@ -258,36 +313,41 @@ function createQueries(queriesOptions, queryClient) {
258
313
  defaultedOptions._optimisticResults = 'optimistic';
259
314
  return defaultedOptions;
260
315
  });
261
- const observer = new queryCore.QueriesObserver(client, defaultedQueries);
262
- const [state, setState] = store.createStore(observer.getOptimisticResult(defaultedQueries));
316
+ const observer = new queryCore.QueriesObserver(client, defaultedQueries, queriesOptions().combine ? {
317
+ combine: queriesOptions().combine
318
+ } : undefined);
319
+
320
+ // @ts-expect-error - Types issue with solid-js createStore
321
+ const [state, setState] = store.createStore(observer.getOptimisticResult(defaultedQueries)[1]());
263
322
  const unsubscribe = observer.subscribe(result => {
264
323
  queryCore.notifyManager.batchCalls(() => {
265
324
  setState(store.unwrap(result));
266
325
  })();
267
326
  });
268
327
  solidJs.onCleanup(unsubscribe);
269
- solidJs.onMount(() => {
270
- observer.setQueries(defaultedQueries, {
271
- listeners: false
272
- });
273
- });
274
328
  solidJs.createComputed(() => {
275
329
  const updatedQueries = queriesOptions().queries.map(options => {
276
330
  const defaultedOptions = client.defaultQueryOptions(options);
277
331
  defaultedOptions._optimisticResults = 'optimistic';
278
332
  return defaultedOptions;
279
333
  });
280
- observer.setQueries(updatedQueries);
334
+ observer.setQueries(updatedQueries, queriesOptions().combine ? {
335
+ combine: queriesOptions().combine
336
+ } : undefined, {
337
+ listeners: false
338
+ });
281
339
  });
282
340
  return state;
283
341
  }
284
342
 
343
+ exports.QueryClient = QueryClient;
285
344
  exports.QueryClientContext = QueryClientContext;
286
345
  exports.QueryClientProvider = QueryClientProvider;
287
346
  exports.createInfiniteQuery = createInfiniteQuery;
288
347
  exports.createMutation = createMutation;
289
348
  exports.createQueries = createQueries;
290
349
  exports.createQuery = createQuery;
350
+ exports.queryOptions = queryOptions;
291
351
  exports.useIsFetching = useIsFetching;
292
352
  exports.useIsMutating = useIsMutating;
293
353
  exports.useQueryClient = useQueryClient;
@@ -297,4 +357,4 @@ Object.keys(queryCore).forEach(function (k) {
297
357
  get: function () { return queryCore[k]; }
298
358
  });
299
359
  });
300
- //# sourceMappingURL=index.js.map
360
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/setBatchUpdatesFn.ts","../../src/QueryClient.ts","../../src/QueryClientProvider.tsx","../../src/utils.ts","../../src/createBaseQuery.ts","../../src/createQuery.ts","../../src/useIsFetching.ts","../../src/createInfiniteQuery.ts","../../src/createMutation.ts","../../src/useIsMutating.ts","../../src/createQueries.ts"],"sourcesContent":["import { notifyManager } from '@tanstack/query-core'\nimport { batch } from 'solid-js'\n\nnotifyManager.setBatchNotifyFunction(batch)\n","import type {\n QueryClientConfig as QueryCoreClientConfig,\n DefaultOptions as CoreDefaultOptions,\n QueryObserverOptions as QueryCoreObserverOptions,\n InfiniteQueryObserverOptions as QueryCoreInfiniteQueryObserverOptions,\n DefaultError,\n QueryKey,\n} from '@tanstack/query-core'\nimport { QueryClient as QueryCoreClient } from '@tanstack/query-core'\n\nexport interface QueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends Omit<\n QueryCoreObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface InfiniteQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends Omit<\n QueryCoreInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface DefaultOptions<TError = DefaultError>\n extends CoreDefaultOptions<TError> {\n queries?: QueryObserverOptions<unknown, TError>\n}\n\nexport interface QueryClientConfig extends QueryCoreClientConfig {\n defaultOptions?: DefaultOptions\n}\n\nexport class QueryClient extends QueryCoreClient {\n constructor(config: QueryClientConfig = {}) {\n super(config)\n }\n}\n","import type { QueryClient } from './QueryClient'\nimport type { JSX } from 'solid-js'\nimport { createContext, useContext, onMount, onCleanup } from 'solid-js'\n\nexport const QueryClientContext = createContext<QueryClient | undefined>(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n if (queryClient) {\n return queryClient\n }\n const client = useContext(QueryClientContext)\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: JSX.Element\n}\n\nexport const QueryClientProvider = (\n props: QueryClientProviderProps,\n): JSX.Element => {\n onMount(() => {\n props.client.mount()\n })\n onCleanup(() => props.client.unmount())\n\n return (\n <QueryClientContext.Provider value={props.client}>\n {props.children}\n </QueryClientContext.Provider>\n )\n}\n","export function shouldThrowError<T extends (...args: any[]) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters<T>,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n","/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n// Had to disable the lint rule because isServer type is defined as false\n// in solid-js/web package. I'll create a GitHub issue with them to see\n// why that happens.\nimport type {\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { hydrate, notifyManager } from '@tanstack/query-core'\nimport type { Accessor } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport {\n createComputed,\n createMemo,\n createResource,\n on,\n onCleanup,\n} from 'solid-js'\nimport { createStore, reconcile, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateBaseQueryOptions } from './types'\nimport { shouldThrowError } from './utils'\n\nfunction reconcileFn<TData, TError>(\n store: QueryObserverResult<TData, TError>,\n result: QueryObserverResult<TData, TError>,\n reconcileOption:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData),\n): QueryObserverResult<TData, TError> {\n if (reconcileOption === false) return result\n if (typeof reconcileOption === 'function') {\n const newData = reconcileOption(store.data, result.data as TData)\n return { ...result, data: newData } as typeof result\n }\n const newData = reconcile(result.data, { key: reconcileOption })(store.data)\n return { ...result, data: newData } as typeof result\n}\n\n// Base Query Function that is used to create the query.\nexport function createBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: Accessor<\n CreateBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n Observer: typeof QueryObserver,\n queryClient?: Accessor<QueryClient>,\n) {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n\n const defaultedOptions = client().defaultQueryOptions(options())\n defaultedOptions._optimisticResults = 'optimistic'\n defaultedOptions.structuralSharing = false\n if (isServer) {\n defaultedOptions.retry = false\n defaultedOptions.throwOnError = true\n }\n const observer = new Observer(client(), defaultedOptions)\n\n const [state, setState] = createStore<QueryObserverResult<TData, TError>>(\n observer.getOptimisticResult(defaultedOptions),\n )\n\n const createServerSubscriber = (\n resolve: (\n data:\n | QueryObserverResult<TData, TError>\n | PromiseLike<QueryObserverResult<TData, TError> | undefined>\n | undefined,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n const query = observer.getCurrentQuery()\n const { refetch, ...rest } = unwrap(result)\n const unwrappedResult = {\n ...rest,\n\n // hydrate() expects a QueryState object, which is similar but not\n // quite the same as a QueryObserverResult object. Thus, for now, we're\n // copying over the missing properties from state in order to support hydration\n dataUpdateCount: query.state.dataUpdateCount,\n fetchFailureCount: query.state.fetchFailureCount,\n // Removing these properties since they might not be serializable\n // fetchFailureReason: query.state.fetchFailureReason,\n // fetchMeta: query.state.fetchMeta,\n isInvalidated: query.state.isInvalidated,\n }\n\n if (unwrappedResult.isError) {\n if (process.env['NODE_ENV'] === 'development') {\n console.error(unwrappedResult.error)\n }\n reject(unwrappedResult.error)\n }\n if (unwrappedResult.isSuccess) {\n // Use of any here is fine\n // We cannot include refetch since it is not serializable\n resolve(unwrappedResult as any)\n }\n })()\n })\n }\n\n const createClientSubscriber = () => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n // @ts-expect-error - This will error because the reconcile option does not\n // exist on the query-core QueryObserverResult type\n const reconcileOptions = observer.options.reconcile\n // If the query has data we dont suspend but instead mutate the resource\n // This could happen when placeholderData/initialData is defined\n if (queryResource()?.data && result.data && !queryResource.loading) {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n mutate(state)\n } else {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n refetch()\n }\n })()\n })\n }\n\n /**\n * Unsubscribe is set lazily, so that we can subscribe after hydration when needed.\n */\n let unsubscribe: (() => void) | null = null\n\n const [queryResource, { refetch, mutate }] = createResource<\n QueryObserverResult<TData, TError> | undefined\n >(\n () => {\n return new Promise((resolve, reject) => {\n if (isServer) {\n unsubscribe = createServerSubscriber(resolve, reject)\n } else {\n if (!unsubscribe) {\n unsubscribe = createClientSubscriber()\n }\n }\n if (!state.isLoading) {\n resolve(state)\n }\n })\n },\n {\n initialValue: state,\n\n // If initialData is provided, we resolve the resource immediately\n ssrLoadFrom: options().initialData ? 'initial' : 'server',\n\n get deferStream() {\n return options().deferStream\n },\n\n /**\n * If this resource was populated on the server (either sync render, or streamed in over time), onHydrated\n * will be called. This is the point at which we can hydrate the query cache state, and setup the query subscriber.\n *\n * Leveraging onHydrated allows us to plug into the async and streaming support that solidjs resources already support.\n *\n * Note that this is only invoked on the client, for queries that were originally run on the server.\n */\n onHydrated(_k, info) {\n if (info.value) {\n hydrate(client(), {\n queries: [\n {\n queryKey: defaultedOptions.queryKey,\n queryHash: defaultedOptions.queryHash,\n state: info.value,\n },\n ],\n })\n }\n\n if (!unsubscribe) {\n /**\n * Do not refetch query on mount if query was fetched on server,\n * even if `staleTime` is not set.\n */\n const newOptions = { ...defaultedOptions }\n if (defaultedOptions.staleTime || !defaultedOptions.initialData) {\n newOptions.refetchOnMount = false\n }\n // Setting the options as an immutable object to prevent\n // wonky behavior with observer subscriptions\n observer.setOptions(newOptions)\n setState(observer.getOptimisticResult(newOptions))\n unsubscribe = createClientSubscriber()\n }\n },\n },\n )\n\n onCleanup(() => {\n if (unsubscribe) {\n unsubscribe()\n unsubscribe = null\n }\n })\n\n createComputed(\n on(\n () => client().defaultQueryOptions(options()),\n () => observer.setOptions(client().defaultQueryOptions(options())),\n {\n // Defer because we don't need to trigger on first render\n // This only cares about changes to options after the observer is created\n defer: true,\n },\n ),\n )\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n !state.isFetching &&\n shouldThrowError(observer.options.throwOnError, [\n state.error,\n observer.getCurrentQuery(),\n ])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const handler = {\n get(\n target: QueryObserverResult<TData, TError>,\n prop: keyof QueryObserverResult<TData, TError>,\n ): any {\n const val = queryResource()?.[prop]\n return val !== undefined ? val : Reflect.get(target, prop)\n },\n }\n\n return new Proxy(state, handler)\n}\n","import type { QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo } from 'solid-js'\nimport { createBaseQuery } from './createBaseQuery'\nimport type {\n CreateQueryOptions,\n CreateQueryResult,\n DefinedCreateQueryResult,\n FunctionedParams,\n SolidQueryOptions,\n} from './types'\n\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n }\n>\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n }\n>\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n\nexport function queryOptions(options: unknown) {\n return options\n}\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): CreateQueryResult<TData, TError>\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): DefinedCreateQueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: Accessor<QueryClient>,\n) {\n return createBaseQuery(\n createMemo(() => options()),\n QueryObserver,\n queryClient,\n )\n}\n","import type { QueryFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo, createSignal, onCleanup } from 'solid-js'\nimport { useQueryClient } from './QueryClientProvider'\n\nexport function useIsFetching(\n filters?: Accessor<QueryFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const queryCache = createMemo(() => client().getQueryCache())\n\n const [fetches, setFetches] = createSignal(client().isFetching(filters?.()))\n\n const unsubscribe = queryCache().subscribe(() => {\n setFetches(client().isFetching(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return fetches\n}\n","import type {\n QueryObserver,\n QueryKey,\n DefaultError,\n InfiniteData,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n CreateInfiniteQueryOptions,\n CreateInfiniteQueryResult,\n} from './types'\nimport { createBaseQuery } from './createBaseQuery'\nimport { createMemo } from 'solid-js'\nimport type { Accessor } from 'solid-js'\n\nexport function createInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): CreateInfiniteQueryResult<TData, TError> {\n return createBaseQuery(\n createMemo(() => options()),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as CreateInfiniteQueryResult<TData, TError>\n}\n","import type { DefaultError } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { MutationObserver } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n CreateMutateFunction,\n CreateMutationOptions,\n CreateMutationResult,\n} from './types'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup, on } from 'solid-js'\nimport { createStore } from 'solid-js/store'\nimport { shouldThrowError } from './utils'\n\n// HOOK\nexport function createMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: CreateMutationOptions<TData, TError, TVariables, TContext>,\n queryClient?: Accessor<QueryClient>,\n): CreateMutationResult<TData, TError, TVariables, TContext> {\n const client = useQueryClient(queryClient?.())\n\n const observer = new MutationObserver<TData, TError, TVariables, TContext>(\n client,\n options(),\n )\n\n const mutate: CreateMutateFunction<TData, TError, TVariables, TContext> = (\n variables,\n mutateOptions,\n ) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n }\n\n const [state, setState] = createStore<\n CreateMutationResult<TData, TError, TVariables, TContext>\n >({\n ...observer.getCurrentResult(),\n mutate,\n mutateAsync: observer.getCurrentResult().mutate,\n })\n\n createComputed(() => {\n observer.setOptions(options())\n })\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n shouldThrowError(observer.options.throwOnError, [state.error])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n setState({\n ...result,\n mutate,\n mutateAsync: result.mutate,\n })\n })\n\n onCleanup(unsubscribe)\n\n return state\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n","import type { MutationFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { Accessor } from 'solid-js'\nimport { createSignal, onCleanup, createMemo } from 'solid-js'\n\nexport function useIsMutating(\n filters?: Accessor<MutationFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const mutationCache = createMemo(() => client().getMutationCache())\n\n const [mutations, setMutations] = createSignal(\n client().isMutating(filters?.()),\n )\n\n const unsubscribe = mutationCache().subscribe((_result) => {\n setMutations(client().isMutating(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return mutations\n}\n","import type {\n QueriesPlaceholderDataFunction,\n QueryFunction,\n QueryKey,\n DefaultError,\n QueriesObserverOptions,\n} from '@tanstack/query-core'\nimport { notifyManager, QueriesObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup } from 'solid-js'\nimport { createStore, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateQueryResult, SolidQueryOptions } from './types'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype CreateQueryOptionsForCreateQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\ntype GetOptions<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>\n select: (data: any) => infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, Error, TData, TQueryKey>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey> }\n ? CreateQueryOptionsForCreateQueries<\n TQueryFnData,\n Error,\n TQueryFnData,\n TQueryKey\n >\n : // Fallback\n CreateQueryOptionsForCreateQueries\n\ntype GetResults<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? CreateQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryResult<TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? CreateQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<unknown, any>\n select: (data: any) => infer TData\n }\n ? CreateQueryResult<TData>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, any> }\n ? CreateQueryResult<TQueryFnData>\n : // Fallback\n CreateQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryOptionsForCreateQueries[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>\n : unknown[] extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >[]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData, TQueryKey>[]\n : // Fallback\n CreateQueryOptionsForCreateQueries[]\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryResult[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>\n : T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >[]\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n CreateQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >[]\n : // Fallback\n CreateQueryResult[]\n\nexport function createQueries<\n T extends any[],\n TCombinedResult = QueriesResults<T>,\n>(\n queriesOptions: Accessor<{\n queries: readonly [...QueriesOptions<T>]\n combine?: (result: QueriesResults<T>) => TCombinedResult\n }>,\n queryClient?: Accessor<QueryClient>,\n): TCombinedResult {\n const client = useQueryClient(queryClient?.())\n\n const defaultedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n\n const observer = new QueriesObserver(\n client,\n defaultedQueries,\n queriesOptions().combine\n ? ({\n combine: queriesOptions().combine,\n } as QueriesObserverOptions<TCombinedResult>)\n : undefined,\n )\n\n // @ts-expect-error - Types issue with solid-js createStore\n const [state, setState] = createStore<TCombinedResult>(\n observer.getOptimisticResult(defaultedQueries)[1](),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n setState(unwrap(result) as unknown as TCombinedResult)\n })()\n })\n\n onCleanup(unsubscribe)\n\n createComputed(() => {\n const updatedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n observer.setQueries(\n updatedQueries,\n queriesOptions().combine\n ? ({\n combine: queriesOptions().combine,\n } as QueriesObserverOptions<TCombinedResult>)\n : undefined,\n { listeners: false },\n )\n })\n\n return state\n}\n"],"names":["notifyManager","setBatchNotifyFunction","batch","QueryClient","QueryCoreClient","constructor","config","QueryClientContext","createContext","undefined","useQueryClient","queryClient","client","useContext","Error","QueryClientProvider","props","onMount","mount","onCleanup","unmount","_$createComponent","Provider","value","children","shouldThrowError","throwError","params","reconcileFn","store","result","reconcileOption","newData","data","reconcile","key","createBaseQuery","options","Observer","createMemo","defaultedOptions","defaultQueryOptions","_optimisticResults","structuralSharing","isServer","retry","throwOnError","observer","state","setState","createStore","getOptimisticResult","createServerSubscriber","resolve","reject","subscribe","batchCalls","query","getCurrentQuery","refetch","rest","unwrap","unwrappedResult","dataUpdateCount","fetchFailureCount","isInvalidated","isError","process","env","console","error","isSuccess","createClientSubscriber","reconcileOptions","queryResource","loading","mutate","unsubscribe","createResource","Promise","isLoading","initialValue","ssrLoadFrom","initialData","deferStream","onHydrated","_k","info","hydrate","queries","queryKey","queryHash","newOptions","staleTime","refetchOnMount","setOptions","createComputed","on","defer","status","isFetching","handler","get","target","prop","val","Reflect","Proxy","queryOptions","createQuery","QueryObserver","useIsFetching","filters","queryCache","getQueryCache","fetches","setFetches","createSignal","createInfiniteQuery","InfiniteQueryObserver","createMutation","MutationObserver","variables","mutateOptions","catch","noop","getCurrentResult","mutateAsync","useIsMutating","mutationCache","getMutationCache","mutations","setMutations","isMutating","_result","createQueries","queriesOptions","defaultedQueries","map","QueriesObserver","combine","updatedQueries","setQueries","listeners"],"mappings":"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"}
@@ -1,17 +1,23 @@
1
- import { notifyManager, hydrate, QueryObserver, InfiniteQueryObserver, MutationObserver, QueriesObserver } from '@tanstack/query-core';
1
+ import { notifyManager, QueryClient as QueryClient$1, hydrate, QueryObserver, InfiniteQueryObserver, MutationObserver, QueriesObserver } from '@tanstack/query-core';
2
2
  export * from '@tanstack/query-core';
3
3
  import { batch, createContext, useContext, onMount, onCleanup, createMemo, createResource, createComputed, on, createSignal } from 'solid-js';
4
4
  import { createComponent, isServer } from 'solid-js/web';
5
- import { createStore, unwrap } from 'solid-js/store';
5
+ import { createStore, unwrap, reconcile } from 'solid-js/store';
6
6
 
7
7
  notifyManager.setBatchNotifyFunction(batch);
8
8
 
9
+ class QueryClient extends QueryClient$1 {
10
+ constructor(config = {}) {
11
+ super(config);
12
+ }
13
+ }
14
+
9
15
  const QueryClientContext = createContext(undefined);
10
16
  const useQueryClient = queryClient => {
11
- const client = useContext(QueryClientContext);
12
17
  if (queryClient) {
13
18
  return queryClient;
14
19
  }
20
+ const client = useContext(QueryClientContext);
15
21
  if (!client) {
16
22
  throw new Error('No QueryClient set, use QueryClientProvider to set one');
17
23
  }
@@ -41,23 +47,59 @@ function shouldThrowError(throwError, params) {
41
47
  }
42
48
 
43
49
  /* eslint-disable @typescript-eslint/no-unnecessary-condition */
50
+ // Had to disable the lint rule because isServer type is defined as false
51
+ // in solid-js/web package. I'll create a GitHub issue with them to see
52
+ // why that happens.
53
+
54
+ function reconcileFn(store, result, reconcileOption) {
55
+ if (reconcileOption === false) return result;
56
+ if (typeof reconcileOption === 'function') {
57
+ const newData = reconcileOption(store.data, result.data);
58
+ return {
59
+ ...result,
60
+ data: newData
61
+ };
62
+ }
63
+ const newData = reconcile(result.data, {
64
+ key: reconcileOption
65
+ })(store.data);
66
+ return {
67
+ ...result,
68
+ data: newData
69
+ };
70
+ }
44
71
 
45
72
  // Base Query Function that is used to create the query.
46
73
  function createBaseQuery(options, Observer, queryClient) {
47
74
  const client = createMemo(() => useQueryClient(queryClient?.()));
48
75
  const defaultedOptions = client().defaultQueryOptions(options());
49
76
  defaultedOptions._optimisticResults = 'optimistic';
77
+ defaultedOptions.structuralSharing = false;
50
78
  if (isServer) {
51
79
  defaultedOptions.retry = false;
52
- defaultedOptions.throwErrors = true;
80
+ defaultedOptions.throwOnError = true;
53
81
  }
54
82
  const observer = new Observer(client(), defaultedOptions);
55
83
  const [state, setState] = createStore(observer.getOptimisticResult(defaultedOptions));
56
84
  const createServerSubscriber = (resolve, reject) => {
57
85
  return observer.subscribe(result => {
58
86
  notifyManager.batchCalls(() => {
87
+ const query = observer.getCurrentQuery();
88
+ const {
89
+ refetch,
90
+ ...rest
91
+ } = unwrap(result);
59
92
  const unwrappedResult = {
60
- ...unwrap(result)
93
+ ...rest,
94
+ // hydrate() expects a QueryState object, which is similar but not
95
+ // quite the same as a QueryObserverResult object. Thus, for now, we're
96
+ // copying over the missing properties from state in order to support hydration
97
+ dataUpdateCount: query.state.dataUpdateCount,
98
+ fetchFailureCount: query.state.fetchFailureCount,
99
+ // Removing these properties since they might not be serializable
100
+ // fetchFailureReason: query.state.fetchFailureReason,
101
+ // fetchMeta: query.state.fetchMeta,
102
+ isInvalidated: query.state.isInvalidated
61
103
  };
62
104
  if (unwrappedResult.isError) {
63
105
  if (process.env['NODE_ENV'] === 'development') {
@@ -66,6 +108,8 @@ function createBaseQuery(options, Observer, queryClient) {
66
108
  reject(unwrappedResult.error);
67
109
  }
68
110
  if (unwrappedResult.isSuccess) {
111
+ // Use of any here is fine
112
+ // We cannot include refetch since it is not serializable
69
113
  resolve(unwrappedResult);
70
114
  }
71
115
  })();
@@ -74,16 +118,20 @@ function createBaseQuery(options, Observer, queryClient) {
74
118
  const createClientSubscriber = () => {
75
119
  return observer.subscribe(result => {
76
120
  notifyManager.batchCalls(() => {
77
- const unwrappedResult = {
78
- ...unwrap(result)
79
- };
121
+ // @ts-expect-error - This will error because the reconcile option does not
122
+ // exist on the query-core QueryObserverResult type
123
+ const reconcileOptions = observer.options.reconcile;
80
124
  // If the query has data we dont suspend but instead mutate the resource
81
125
  // This could happen when placeholderData/initialData is defined
82
- if (queryResource()?.data && unwrappedResult.data && !queryResource.loading) {
83
- setState(unwrappedResult);
126
+ if (queryResource()?.data && result.data && !queryResource.loading) {
127
+ setState(store => {
128
+ return reconcileFn(store, result, reconcileOptions === undefined ? 'id' : reconcileOptions);
129
+ });
84
130
  mutate(state);
85
131
  } else {
86
- setState(unwrappedResult);
132
+ setState(store => {
133
+ return reconcileFn(store, result, reconcileOptions === undefined ? 'id' : reconcileOptions);
134
+ });
87
135
  refetch();
88
136
  }
89
137
  })();
@@ -160,30 +208,28 @@ function createBaseQuery(options, Observer, queryClient) {
160
208
  unsubscribe = null;
161
209
  }
162
210
  });
163
- onMount(() => {
164
- observer.setOptions(defaultedOptions, {
165
- listeners: false
166
- });
167
- });
168
- createComputed(() => {
169
- observer.setOptions(client().defaultQueryOptions(options()));
170
- });
211
+ createComputed(on(() => client().defaultQueryOptions(options()), () => observer.setOptions(client().defaultQueryOptions(options())), {
212
+ // Defer because we don't need to trigger on first render
213
+ // This only cares about changes to options after the observer is created
214
+ defer: true
215
+ }));
171
216
  createComputed(on(() => state.status, () => {
172
- if (state.isError && !state.isFetching && shouldThrowError(observer.options.throwErrors, [state.error, observer.getCurrentQuery()])) {
217
+ if (state.isError && !state.isFetching && shouldThrowError(observer.options.throwOnError, [state.error, observer.getCurrentQuery()])) {
173
218
  throw state.error;
174
219
  }
175
220
  }));
176
221
  const handler = {
177
222
  get(target, prop) {
178
- if (prop === 'data') {
179
- return queryResource()?.data;
180
- }
181
- return Reflect.get(target, prop);
223
+ const val = queryResource()?.[prop];
224
+ return val !== undefined ? val : Reflect.get(target, prop);
182
225
  }
183
226
  };
184
227
  return new Proxy(state, handler);
185
228
  }
186
229
 
230
+ function queryOptions(options) {
231
+ return options;
232
+ }
187
233
  function createQuery(options, queryClient) {
188
234
  return createBaseQuery(createMemo(() => options()), QueryObserver, queryClient);
189
235
  }
@@ -221,7 +267,7 @@ function createMutation(options, queryClient) {
221
267
  observer.setOptions(options());
222
268
  });
223
269
  createComputed(on(() => state.status, () => {
224
- if (state.isError && shouldThrowError(observer.options.throwErrors, [state.error])) {
270
+ if (state.isError && shouldThrowError(observer.options.throwOnError, [state.error])) {
225
271
  throw state.error;
226
272
  }
227
273
  }));
@@ -250,6 +296,15 @@ function useIsMutating(filters, queryClient) {
250
296
  return mutations;
251
297
  }
252
298
 
299
+ // This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
300
+ // `placeholderData` function does not have a parameter
301
+ // Avoid TS depth-limit error in case of large array literal
302
+ /**
303
+ * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
304
+ */
305
+ /**
306
+ * QueriesResults reducer recursively maps type param to results
307
+ */
253
308
  function createQueries(queriesOptions, queryClient) {
254
309
  const client = useQueryClient(queryClient?.());
255
310
  const defaultedQueries = queriesOptions().queries.map(options => {
@@ -257,29 +312,32 @@ function createQueries(queriesOptions, queryClient) {
257
312
  defaultedOptions._optimisticResults = 'optimistic';
258
313
  return defaultedOptions;
259
314
  });
260
- const observer = new QueriesObserver(client, defaultedQueries);
261
- const [state, setState] = createStore(observer.getOptimisticResult(defaultedQueries));
315
+ const observer = new QueriesObserver(client, defaultedQueries, queriesOptions().combine ? {
316
+ combine: queriesOptions().combine
317
+ } : undefined);
318
+
319
+ // @ts-expect-error - Types issue with solid-js createStore
320
+ const [state, setState] = createStore(observer.getOptimisticResult(defaultedQueries)[1]());
262
321
  const unsubscribe = observer.subscribe(result => {
263
322
  notifyManager.batchCalls(() => {
264
323
  setState(unwrap(result));
265
324
  })();
266
325
  });
267
326
  onCleanup(unsubscribe);
268
- onMount(() => {
269
- observer.setQueries(defaultedQueries, {
270
- listeners: false
271
- });
272
- });
273
327
  createComputed(() => {
274
328
  const updatedQueries = queriesOptions().queries.map(options => {
275
329
  const defaultedOptions = client.defaultQueryOptions(options);
276
330
  defaultedOptions._optimisticResults = 'optimistic';
277
331
  return defaultedOptions;
278
332
  });
279
- observer.setQueries(updatedQueries);
333
+ observer.setQueries(updatedQueries, queriesOptions().combine ? {
334
+ combine: queriesOptions().combine
335
+ } : undefined, {
336
+ listeners: false
337
+ });
280
338
  });
281
339
  return state;
282
340
  }
283
341
 
284
- export { QueryClientContext, QueryClientProvider, createInfiniteQuery, createMutation, createQueries, createQuery, useIsFetching, useIsMutating, useQueryClient };
342
+ export { QueryClient, QueryClientContext, QueryClientProvider, createInfiniteQuery, createMutation, createQueries, createQuery, queryOptions, useIsFetching, useIsMutating, useQueryClient };
285
343
  //# sourceMappingURL=index.js.map