@tanstack/solid-query 5.101.4 → 5.102.1
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/README.md +15 -1
- package/build/dev.cjs +418 -506
- package/build/dev.js +400 -499
- package/build/index.cjs +1 -540
- package/build/index.d.cts +132 -150
- package/build/index.d.cts.map +1 -0
- package/build/index.d.ts +132 -150
- package/build/index.d.ts.map +1 -0
- package/build/index.js +2 -521
- package/build/index.js.map +1 -0
- package/package.json +6 -8
- package/src/QueryClientProvider.tsx +24 -2
- package/src/infiniteQueryOptions.ts +5 -7
- package/src/queryOptions.ts +9 -7
- package/src/useBaseQuery.ts +3 -5
- package/src/useIsFetching.ts +11 -6
- package/src/useIsMutating.ts +11 -6
- package/src/useMutation.ts +5 -4
- package/src/useMutationState.ts +35 -9
- package/src/useQueries.ts +3 -2
package/build/index.js
CHANGED
|
@@ -1,521 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { createContext, useContext, createRenderEffect, onCleanup, createMemo, createComputed, on, mergeProps, createResource, batch, onMount, createSignal, createEffect } from 'solid-js';
|
|
4
|
-
import { createComponent, isServer } from 'solid-js/web';
|
|
5
|
-
import { createStore, unwrap, reconcile } from 'solid-js/store';
|
|
6
|
-
|
|
7
|
-
// src/useQuery.ts
|
|
8
|
-
var QueryClientContext = createContext(void 0);
|
|
9
|
-
var useQueryClient = (queryClient) => {
|
|
10
|
-
if (queryClient) {
|
|
11
|
-
return queryClient;
|
|
12
|
-
}
|
|
13
|
-
const client = useContext(QueryClientContext);
|
|
14
|
-
if (!client) {
|
|
15
|
-
throw new Error("No QueryClient set, use QueryClientProvider to set one");
|
|
16
|
-
}
|
|
17
|
-
return client();
|
|
18
|
-
};
|
|
19
|
-
var QueryClientProvider = (props) => {
|
|
20
|
-
createRenderEffect((unmount) => {
|
|
21
|
-
unmount?.();
|
|
22
|
-
props.client.mount();
|
|
23
|
-
return props.client.unmount.bind(props.client);
|
|
24
|
-
});
|
|
25
|
-
onCleanup(() => props.client.unmount());
|
|
26
|
-
return createComponent(QueryClientContext.Provider, {
|
|
27
|
-
value: () => props.client,
|
|
28
|
-
get children() {
|
|
29
|
-
return props.children;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
var IsRestoringContext = createContext(() => false);
|
|
34
|
-
var useIsRestoring = () => useContext(IsRestoringContext);
|
|
35
|
-
var IsRestoringProvider = IsRestoringContext.Provider;
|
|
36
|
-
|
|
37
|
-
// src/useBaseQuery.ts
|
|
38
|
-
function reconcileFn(store, result, reconcileOption, queryHash) {
|
|
39
|
-
if (reconcileOption === false) return result;
|
|
40
|
-
if (typeof reconcileOption === "function") {
|
|
41
|
-
const newData2 = reconcileOption(store.data, result.data);
|
|
42
|
-
return { ...result, data: newData2 };
|
|
43
|
-
}
|
|
44
|
-
let data = result.data;
|
|
45
|
-
if (store.data === void 0) {
|
|
46
|
-
try {
|
|
47
|
-
data = structuredClone(data);
|
|
48
|
-
} catch (error) {
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
const newData = reconcile(data, { key: reconcileOption })(store.data);
|
|
52
|
-
return { ...result, data: newData };
|
|
53
|
-
}
|
|
54
|
-
var hydratableObserverResult = (query, result) => {
|
|
55
|
-
if (!isServer) return result;
|
|
56
|
-
const obj = {
|
|
57
|
-
...unwrap(result),
|
|
58
|
-
// During SSR, functions cannot be serialized, so we need to remove them
|
|
59
|
-
// This is safe because we will add these functions back when the query is hydrated
|
|
60
|
-
refetch: void 0
|
|
61
|
-
};
|
|
62
|
-
if ("fetchNextPage" in result) {
|
|
63
|
-
obj.fetchNextPage = void 0;
|
|
64
|
-
obj.fetchPreviousPage = void 0;
|
|
65
|
-
}
|
|
66
|
-
obj.hydrationData = {
|
|
67
|
-
state: query.state,
|
|
68
|
-
queryKey: query.queryKey,
|
|
69
|
-
queryHash: query.queryHash,
|
|
70
|
-
...query.meta && { meta: query.meta }
|
|
71
|
-
};
|
|
72
|
-
return obj;
|
|
73
|
-
};
|
|
74
|
-
function useBaseQuery(options, Observer, queryClient) {
|
|
75
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
76
|
-
const isRestoring = useIsRestoring();
|
|
77
|
-
let unsubscribeQueued = false;
|
|
78
|
-
const defaultedOptions = createMemo(() => {
|
|
79
|
-
const defaultOptions = client().defaultQueryOptions(options());
|
|
80
|
-
defaultOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic";
|
|
81
|
-
defaultOptions.structuralSharing = false;
|
|
82
|
-
if (isServer) {
|
|
83
|
-
defaultOptions.retry = false;
|
|
84
|
-
defaultOptions.throwOnError = true;
|
|
85
|
-
defaultOptions.experimental_prefetchInRender = true;
|
|
86
|
-
}
|
|
87
|
-
return defaultOptions;
|
|
88
|
-
});
|
|
89
|
-
const initialOptions = defaultedOptions();
|
|
90
|
-
const [observer, setObserver] = createSignal(
|
|
91
|
-
new Observer(client(), defaultedOptions())
|
|
92
|
-
);
|
|
93
|
-
let observerResult = observer().getOptimisticResult(defaultedOptions());
|
|
94
|
-
const [state, setState] = createStore(observerResult);
|
|
95
|
-
const createServerSubscriber = (resolve, reject) => {
|
|
96
|
-
return observer().subscribe((result) => {
|
|
97
|
-
notifyManager.batchCalls(() => {
|
|
98
|
-
const query = observer().getCurrentQuery();
|
|
99
|
-
const unwrappedResult = hydratableObserverResult(query, result);
|
|
100
|
-
if (result.data !== void 0 && unwrappedResult.isError) {
|
|
101
|
-
reject(unwrappedResult.error);
|
|
102
|
-
unsubscribeIfQueued();
|
|
103
|
-
} else {
|
|
104
|
-
resolve(unwrappedResult);
|
|
105
|
-
unsubscribeIfQueued();
|
|
106
|
-
}
|
|
107
|
-
})();
|
|
108
|
-
});
|
|
109
|
-
};
|
|
110
|
-
const unsubscribeIfQueued = () => {
|
|
111
|
-
if (unsubscribeQueued) {
|
|
112
|
-
unsubscribe?.();
|
|
113
|
-
unsubscribeQueued = false;
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
const createClientSubscriber = () => {
|
|
117
|
-
const obs = observer();
|
|
118
|
-
return obs.subscribe((result) => {
|
|
119
|
-
observerResult = result;
|
|
120
|
-
queueMicrotask(() => {
|
|
121
|
-
if (unsubscribe) {
|
|
122
|
-
refetch();
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
};
|
|
127
|
-
function setStateWithReconciliation(res) {
|
|
128
|
-
const opts = observer().options;
|
|
129
|
-
const reconcileOptions = opts.reconcile;
|
|
130
|
-
setState((store) => {
|
|
131
|
-
return reconcileFn(
|
|
132
|
-
store,
|
|
133
|
-
res,
|
|
134
|
-
reconcileOptions === void 0 ? false : reconcileOptions,
|
|
135
|
-
opts.queryHash
|
|
136
|
-
);
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
function createDeepSignal() {
|
|
140
|
-
return [
|
|
141
|
-
() => state,
|
|
142
|
-
(v) => {
|
|
143
|
-
const unwrapped = unwrap(state);
|
|
144
|
-
if (typeof v === "function") {
|
|
145
|
-
v = v(unwrapped);
|
|
146
|
-
}
|
|
147
|
-
if (v?.hydrationData) {
|
|
148
|
-
const { hydrationData, ...rest } = v;
|
|
149
|
-
v = rest;
|
|
150
|
-
}
|
|
151
|
-
setStateWithReconciliation(v);
|
|
152
|
-
}
|
|
153
|
-
];
|
|
154
|
-
}
|
|
155
|
-
let unsubscribe = null;
|
|
156
|
-
let resolver = null;
|
|
157
|
-
const [queryResource, { refetch }] = createResource(
|
|
158
|
-
() => {
|
|
159
|
-
const obs = observer();
|
|
160
|
-
return new Promise((resolve, reject) => {
|
|
161
|
-
resolver = resolve;
|
|
162
|
-
if (isServer) {
|
|
163
|
-
unsubscribe = createServerSubscriber(resolve, reject);
|
|
164
|
-
} else if (!unsubscribe && !isRestoring()) {
|
|
165
|
-
unsubscribe = createClientSubscriber();
|
|
166
|
-
}
|
|
167
|
-
obs.updateResult();
|
|
168
|
-
if (observerResult.isError && !observerResult.isFetching && !isRestoring() && shouldThrowError(obs.options.throwOnError, [
|
|
169
|
-
observerResult.error,
|
|
170
|
-
obs.getCurrentQuery()
|
|
171
|
-
])) {
|
|
172
|
-
setStateWithReconciliation(observerResult);
|
|
173
|
-
return reject(observerResult.error);
|
|
174
|
-
}
|
|
175
|
-
if (!observerResult.isLoading) {
|
|
176
|
-
resolver = null;
|
|
177
|
-
return resolve(
|
|
178
|
-
hydratableObserverResult(obs.getCurrentQuery(), observerResult)
|
|
179
|
-
);
|
|
180
|
-
}
|
|
181
|
-
setStateWithReconciliation(observerResult);
|
|
182
|
-
});
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
storage: createDeepSignal,
|
|
186
|
-
get deferStream() {
|
|
187
|
-
return options().deferStream;
|
|
188
|
-
},
|
|
189
|
-
/**
|
|
190
|
-
* If this resource was populated on the server (either sync render, or streamed in over time), onHydrated
|
|
191
|
-
* will be called. This is the point at which we can hydrate the query cache state, and setup the query subscriber.
|
|
192
|
-
*
|
|
193
|
-
* Leveraging onHydrated allows us to plug into the async and streaming support that solidjs resources already support.
|
|
194
|
-
*
|
|
195
|
-
* Note that this is only invoked on the client, for queries that were originally run on the server.
|
|
196
|
-
*/
|
|
197
|
-
onHydrated(_k, info) {
|
|
198
|
-
if (info.value && "hydrationData" in info.value) {
|
|
199
|
-
hydrate(client(), {
|
|
200
|
-
// @ts-expect-error - hydrationData is not correctly typed internally
|
|
201
|
-
queries: [{ ...info.value.hydrationData }]
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
if (unsubscribe) return;
|
|
205
|
-
const newOptions = { ...initialOptions };
|
|
206
|
-
if ((initialOptions.staleTime || !initialOptions.initialData) && info.value) {
|
|
207
|
-
newOptions.refetchOnMount = false;
|
|
208
|
-
}
|
|
209
|
-
observer().setOptions(newOptions);
|
|
210
|
-
setStateWithReconciliation(observer().getOptimisticResult(newOptions));
|
|
211
|
-
unsubscribe = createClientSubscriber();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
);
|
|
215
|
-
createComputed(
|
|
216
|
-
on(
|
|
217
|
-
client,
|
|
218
|
-
(c) => {
|
|
219
|
-
if (unsubscribe) {
|
|
220
|
-
unsubscribe();
|
|
221
|
-
}
|
|
222
|
-
const newObserver = new Observer(c, defaultedOptions());
|
|
223
|
-
unsubscribe = createClientSubscriber();
|
|
224
|
-
setObserver(newObserver);
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
defer: true
|
|
228
|
-
}
|
|
229
|
-
)
|
|
230
|
-
);
|
|
231
|
-
createComputed(
|
|
232
|
-
on(
|
|
233
|
-
isRestoring,
|
|
234
|
-
(restoring) => {
|
|
235
|
-
if (!restoring && !isServer) {
|
|
236
|
-
refetch();
|
|
237
|
-
}
|
|
238
|
-
},
|
|
239
|
-
{ defer: true }
|
|
240
|
-
)
|
|
241
|
-
);
|
|
242
|
-
onCleanup(() => {
|
|
243
|
-
if (isServer && queryResource.loading) {
|
|
244
|
-
unsubscribeQueued = true;
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
if (unsubscribe) {
|
|
248
|
-
unsubscribe();
|
|
249
|
-
unsubscribe = null;
|
|
250
|
-
}
|
|
251
|
-
if (resolver && !isServer) {
|
|
252
|
-
resolver(observerResult);
|
|
253
|
-
resolver = null;
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
createComputed(
|
|
257
|
-
on(
|
|
258
|
-
[observer, defaultedOptions],
|
|
259
|
-
([obs, opts]) => {
|
|
260
|
-
obs.setOptions(opts);
|
|
261
|
-
setStateWithReconciliation(obs.getOptimisticResult(opts));
|
|
262
|
-
refetch();
|
|
263
|
-
},
|
|
264
|
-
{ defer: true }
|
|
265
|
-
)
|
|
266
|
-
);
|
|
267
|
-
const handler = {
|
|
268
|
-
get(target, prop) {
|
|
269
|
-
if (prop === "data") {
|
|
270
|
-
if (state.data !== void 0) {
|
|
271
|
-
return queryResource.latest?.data;
|
|
272
|
-
}
|
|
273
|
-
return queryResource()?.data;
|
|
274
|
-
}
|
|
275
|
-
return Reflect.get(target, prop);
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
return new Proxy(state, handler);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// src/useQuery.ts
|
|
282
|
-
function useQuery(options, queryClient) {
|
|
283
|
-
return useBaseQuery(
|
|
284
|
-
createMemo(() => options()),
|
|
285
|
-
QueryObserver,
|
|
286
|
-
queryClient
|
|
287
|
-
);
|
|
288
|
-
}
|
|
289
|
-
function useInfiniteQuery(options, queryClient) {
|
|
290
|
-
return useBaseQuery(
|
|
291
|
-
createMemo(() => options()),
|
|
292
|
-
InfiniteQueryObserver,
|
|
293
|
-
queryClient
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
function useMutation(options, queryClient) {
|
|
297
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
298
|
-
const observer = new MutationObserver(client(), options());
|
|
299
|
-
const mutate = (variables, mutateOptions) => {
|
|
300
|
-
observer.mutate(variables, mutateOptions).catch(noop);
|
|
301
|
-
};
|
|
302
|
-
const [state, setState] = createStore({
|
|
303
|
-
...observer.getCurrentResult(),
|
|
304
|
-
mutate,
|
|
305
|
-
mutateAsync: observer.getCurrentResult().mutate
|
|
306
|
-
});
|
|
307
|
-
createComputed(() => {
|
|
308
|
-
observer.setOptions(options());
|
|
309
|
-
});
|
|
310
|
-
createComputed(
|
|
311
|
-
on(
|
|
312
|
-
() => state.status,
|
|
313
|
-
() => {
|
|
314
|
-
if (state.isError && shouldThrowError(observer.options.throwOnError, [state.error])) {
|
|
315
|
-
throw state.error;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
)
|
|
319
|
-
);
|
|
320
|
-
const unsubscribe = observer.subscribe((result) => {
|
|
321
|
-
setState({
|
|
322
|
-
...result,
|
|
323
|
-
mutate,
|
|
324
|
-
mutateAsync: result.mutate
|
|
325
|
-
});
|
|
326
|
-
});
|
|
327
|
-
onCleanup(unsubscribe);
|
|
328
|
-
return state;
|
|
329
|
-
}
|
|
330
|
-
function useQueries(queriesOptions, queryClient) {
|
|
331
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
332
|
-
const isRestoring = useIsRestoring();
|
|
333
|
-
const defaultedQueries = createMemo(
|
|
334
|
-
() => queriesOptions().queries.map(
|
|
335
|
-
(options) => mergeProps(
|
|
336
|
-
client().defaultQueryOptions(options),
|
|
337
|
-
{
|
|
338
|
-
get _optimisticResults() {
|
|
339
|
-
return isRestoring() ? "isRestoring" : "optimistic";
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
)
|
|
343
|
-
)
|
|
344
|
-
);
|
|
345
|
-
const observer = new QueriesObserver(
|
|
346
|
-
client(),
|
|
347
|
-
defaultedQueries(),
|
|
348
|
-
queriesOptions().combine ? {
|
|
349
|
-
combine: queriesOptions().combine
|
|
350
|
-
} : void 0
|
|
351
|
-
);
|
|
352
|
-
const [state, setState] = createStore(
|
|
353
|
-
observer.getOptimisticResult(
|
|
354
|
-
defaultedQueries(),
|
|
355
|
-
queriesOptions().combine
|
|
356
|
-
)[1]()
|
|
357
|
-
);
|
|
358
|
-
createRenderEffect(
|
|
359
|
-
on(
|
|
360
|
-
() => queriesOptions().queries.length,
|
|
361
|
-
() => setState(
|
|
362
|
-
observer.getOptimisticResult(
|
|
363
|
-
defaultedQueries(),
|
|
364
|
-
queriesOptions().combine
|
|
365
|
-
)[1]()
|
|
366
|
-
)
|
|
367
|
-
)
|
|
368
|
-
);
|
|
369
|
-
const dataResources = createMemo(
|
|
370
|
-
on(
|
|
371
|
-
() => state.length,
|
|
372
|
-
() => state.map((queryRes) => {
|
|
373
|
-
const dataPromise = () => new Promise((resolve) => {
|
|
374
|
-
if (queryRes.isFetching && queryRes.isLoading) return;
|
|
375
|
-
resolve(unwrap(queryRes.data));
|
|
376
|
-
});
|
|
377
|
-
return createResource(dataPromise);
|
|
378
|
-
})
|
|
379
|
-
)
|
|
380
|
-
);
|
|
381
|
-
batch(() => {
|
|
382
|
-
const dataResources_ = dataResources();
|
|
383
|
-
for (let index = 0; index < dataResources_.length; index++) {
|
|
384
|
-
const dataResource = dataResources_[index];
|
|
385
|
-
dataResource[1].mutate(() => unwrap(state[index].data));
|
|
386
|
-
dataResource[1].refetch();
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
let taskQueue = [];
|
|
390
|
-
const subscribeToObserver = () => observer.subscribe((result) => {
|
|
391
|
-
taskQueue.push(() => {
|
|
392
|
-
batch(() => {
|
|
393
|
-
const dataResources_ = dataResources();
|
|
394
|
-
for (let index = 0; index < dataResources_.length; index++) {
|
|
395
|
-
const dataResource = dataResources_[index];
|
|
396
|
-
const unwrappedResult = { ...unwrap(result[index]) };
|
|
397
|
-
setState(index, unwrap(unwrappedResult));
|
|
398
|
-
dataResource[1].mutate(() => unwrap(state[index].data));
|
|
399
|
-
dataResource[1].refetch();
|
|
400
|
-
}
|
|
401
|
-
});
|
|
402
|
-
});
|
|
403
|
-
queueMicrotask(() => {
|
|
404
|
-
const taskToRun = taskQueue.pop();
|
|
405
|
-
if (taskToRun) taskToRun();
|
|
406
|
-
taskQueue = [];
|
|
407
|
-
});
|
|
408
|
-
});
|
|
409
|
-
let unsubscribe = noop;
|
|
410
|
-
createComputed((cleanup) => {
|
|
411
|
-
cleanup?.();
|
|
412
|
-
unsubscribe = isRestoring() ? noop : subscribeToObserver();
|
|
413
|
-
return () => queueMicrotask(unsubscribe);
|
|
414
|
-
});
|
|
415
|
-
onCleanup(unsubscribe);
|
|
416
|
-
onMount(() => {
|
|
417
|
-
observer.setQueries(
|
|
418
|
-
defaultedQueries(),
|
|
419
|
-
queriesOptions().combine ? {
|
|
420
|
-
combine: queriesOptions().combine
|
|
421
|
-
} : void 0
|
|
422
|
-
);
|
|
423
|
-
});
|
|
424
|
-
createComputed(() => {
|
|
425
|
-
observer.setQueries(
|
|
426
|
-
defaultedQueries(),
|
|
427
|
-
queriesOptions().combine ? {
|
|
428
|
-
combine: queriesOptions().combine
|
|
429
|
-
} : void 0
|
|
430
|
-
);
|
|
431
|
-
});
|
|
432
|
-
const handler = (index) => ({
|
|
433
|
-
get(target, prop) {
|
|
434
|
-
if (prop === "data") {
|
|
435
|
-
return dataResources()[index][0]();
|
|
436
|
-
}
|
|
437
|
-
return Reflect.get(target, prop);
|
|
438
|
-
}
|
|
439
|
-
});
|
|
440
|
-
const getProxies = () => state.map((s, index) => {
|
|
441
|
-
return new Proxy(s, handler(index));
|
|
442
|
-
});
|
|
443
|
-
const [proxyState, setProxyState] = createStore(getProxies());
|
|
444
|
-
createRenderEffect(() => setProxyState(getProxies()));
|
|
445
|
-
return proxyState;
|
|
446
|
-
}
|
|
447
|
-
var QueryClient = class extends QueryClient$1 {
|
|
448
|
-
constructor(config = {}) {
|
|
449
|
-
super(config);
|
|
450
|
-
}
|
|
451
|
-
};
|
|
452
|
-
|
|
453
|
-
// src/queryOptions.ts
|
|
454
|
-
function queryOptions(options) {
|
|
455
|
-
return options;
|
|
456
|
-
}
|
|
457
|
-
function useIsFetching(filters, queryClient) {
|
|
458
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
459
|
-
const queryCache = createMemo(() => client().getQueryCache());
|
|
460
|
-
const [fetches, setFetches] = createSignal(client().isFetching(filters?.()));
|
|
461
|
-
const unsubscribe = queryCache().subscribe(() => {
|
|
462
|
-
setFetches(client().isFetching(filters?.()));
|
|
463
|
-
});
|
|
464
|
-
onCleanup(unsubscribe);
|
|
465
|
-
return fetches;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// src/infiniteQueryOptions.ts
|
|
469
|
-
function infiniteQueryOptions(options) {
|
|
470
|
-
return options;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
// src/mutationOptions.ts
|
|
474
|
-
function mutationOptions(options) {
|
|
475
|
-
return options;
|
|
476
|
-
}
|
|
477
|
-
function useIsMutating(filters, queryClient) {
|
|
478
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
479
|
-
const mutationCache = createMemo(() => client().getMutationCache());
|
|
480
|
-
const [mutations, setMutations] = createSignal(
|
|
481
|
-
client().isMutating(filters?.())
|
|
482
|
-
);
|
|
483
|
-
const unsubscribe = mutationCache().subscribe((_result) => {
|
|
484
|
-
setMutations(client().isMutating(filters?.()));
|
|
485
|
-
});
|
|
486
|
-
onCleanup(unsubscribe);
|
|
487
|
-
return mutations;
|
|
488
|
-
}
|
|
489
|
-
function getResult(mutationCache, options) {
|
|
490
|
-
return mutationCache.findAll(options.filters).map(
|
|
491
|
-
(mutation) => options.select ? options.select(mutation) : mutation.state
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
function useMutationState(options = () => ({}), queryClient) {
|
|
495
|
-
const client = createMemo(() => useQueryClient(queryClient?.()));
|
|
496
|
-
const mutationCache = createMemo(() => client().getMutationCache());
|
|
497
|
-
const [result, setResult] = createSignal(
|
|
498
|
-
getResult(mutationCache(), options())
|
|
499
|
-
);
|
|
500
|
-
createEffect(() => {
|
|
501
|
-
const unsubscribe = mutationCache().subscribe(() => {
|
|
502
|
-
const nextResult = replaceEqualDeep(
|
|
503
|
-
result(),
|
|
504
|
-
getResult(mutationCache(), options())
|
|
505
|
-
);
|
|
506
|
-
if (result() !== nextResult) {
|
|
507
|
-
setResult(nextResult);
|
|
508
|
-
}
|
|
509
|
-
});
|
|
510
|
-
onCleanup(unsubscribe);
|
|
511
|
-
});
|
|
512
|
-
return result;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
// src/index.ts
|
|
516
|
-
var createQuery = useQuery;
|
|
517
|
-
var createInfiniteQuery = useInfiniteQuery;
|
|
518
|
-
var createMutation = useMutation;
|
|
519
|
-
var createQueries = useQueries;
|
|
520
|
-
|
|
521
|
-
export { IsRestoringProvider, QueryClient, QueryClientContext, QueryClientProvider, createInfiniteQuery, useIsFetching as createIsFetching, useIsMutating as createIsMutating, createMutation, useMutationState as createMutationState, createQueries, createQuery, infiniteQueryOptions, mutationOptions, queryOptions, useInfiniteQuery, useIsFetching, useIsMutating, useIsRestoring, useMutation, useMutationState, useQueries, useQuery, useQueryClient };
|
|
1
|
+
import{InfiniteQueryObserver as e,MutationObserver as t,QueriesObserver as n,QueryClient as r,QueryObserver as i,hydrate as a,noop as o,notifyManager as s,replaceEqualDeep as c,shouldThrowError as l}from"@tanstack/query-core";import{batch as u,createComputed as d,createContext as f,createEffect as p,createMemo as m,createRenderEffect as h,createResource as g,createSignal as _,mergeProps as v,on as y,onCleanup as b,onMount as x,useContext as S}from"solid-js";import{createComponent as C,isServer as w}from"solid-js/web";import{createStore as T,reconcile as E,unwrap as D}from"solid-js/store";export*from"@tanstack/query-core";const O=f(void 0),k=`No QueryClient set, use QueryClientProvider to set one`,A=e=>{if(e)return e;let t=S(O);if(!t)throw Error(k);return t()},j=e=>{let t=S(O);return()=>{let n=e?.();if(n)return n;if(!t)throw Error(k);return t()}},M=e=>(h(t=>(t?.(),e.client.mount(),e.client.unmount.bind(e.client))),b(()=>e.client.unmount()),C(O.Provider,{value:()=>e.client,get children(){return e.children}})),N=f(()=>!1),P=()=>S(N),F=N.Provider;function I(e,t,n,r){if(n===!1)return t;if(typeof n==`function`){let r=n(e.data,t.data);return{...t,data:r}}let i=t.data;if(e.data===void 0)try{i=structuredClone(i)}catch{}let a=E(i,{key:n})(e.data);return{...t,data:a}}const L=(e,t)=>{if(!w)return t;let n={...D(t),refetch:void 0};return`fetchNextPage`in t&&(n.fetchNextPage=void 0,n.fetchPreviousPage=void 0),n.hydrationData={state:e.state,queryKey:e.queryKey,queryHash:e.queryHash,...e.meta&&{meta:e.meta}},n};function R(e,t,n){let r=j(n),i=m(()=>r()),o=P(),c=!1,u=m(()=>{let t=i().defaultQueryOptions(e());return t._optimisticResults=o()?`isRestoring`:`optimistic`,t.structuralSharing=!1,w&&(t.retry=!1,t.throwOnError=!0),t}),f=u(),[p,h]=_(new t(i(),u())),v=p().getOptimisticResult(u()),[x,S]=T(v),C=(e,t)=>p().subscribe(n=>{s.batchCalls(()=>{let r=p().getCurrentQuery(),i=L(r,n);n.data!==void 0&&i.isError?(t(i.error),E()):(e(i),E())})()}),E=()=>{c&&=(M?.(),!1)},O=()=>p().subscribe(e=>{v=e,queueMicrotask(()=>{M&&R()})});function k(e){let t=p().options,n=t.reconcile;S(r=>I(r,e,n!==void 0&&n,t.queryHash))}function A(){return[()=>x,e=>{let t=D(x);if(typeof e==`function`&&(e=e(t)),e?.hydrationData){let{hydrationData:t,...n}=e;e=n}k(e)}]}let M=null,N=null,[F,{refetch:R}]=g(()=>{let e=p();return new Promise((t,n)=>{if(N=t,w?M=C(t,n):!M&&!o()&&(M=O()),e.updateResult(),v.isError&&!v.isFetching&&!o()&&l(e.options.throwOnError,[v.error,e.getCurrentQuery()]))return k(v),n(v.error);if(!v.isLoading)return N=null,t(L(e.getCurrentQuery(),v));k(v)})},{storage:A,get deferStream(){return e().deferStream},onHydrated(e,t){if(t.value&&`hydrationData`in t.value&&a(i(),{queries:[{...t.value.hydrationData}]}),M)return;let n={...f};(f.staleTime||!f.initialData)&&t.value&&(n.refetchOnMount=!1),p().setOptions(n),k(p().getOptimisticResult(n)),M=O()}});return d(y(i,e=>{M&&M();let n=new t(e,u());M=O(),h(n)},{defer:!0})),d(y(o,e=>{!e&&!w&&R()},{defer:!0})),b(()=>{if(w&&F.loading){c=!0;return}M&&=(M(),null),N&&!w&&(N(v),N=null)}),d(y([p,u],([e,t])=>{e.setOptions(t),k(e.getOptimisticResult(t)),R()},{defer:!0})),new Proxy(x,{get(e,t){return t===`data`?x.data===void 0?F()?.data:F.latest?.data:Reflect.get(e,t)}})}function z(e,t){return R(m(()=>e()),i,t)}function B(t,n){return R(m(()=>t()),e,n)}function V(e,n){let r=j(n),i=m(()=>r()),a=new t(i(),e()),s=(...e)=>{a.mutate(e[0],e[1]).catch(o)},[c,u]=T({...a.getCurrentResult(),mutate:s,mutateAsync:a.getCurrentResult().mutate});d(()=>{a.setOptions(e())}),d(y(()=>c.status,()=>{if(c.isError&&l(a.options.throwOnError,[c.error]))throw c.error}));let f=a.subscribe(e=>{u({...e,mutate:s,mutateAsync:e.mutate})});return b(f),c}function H(e,t){let r=j(t),i=m(()=>r()),a=P(),s=m(()=>e().queries.map(e=>v(i().defaultQueryOptions(e),{get _optimisticResults(){return a()?`isRestoring`:`optimistic`}}))),c=new n(i(),s(),e().combine?{combine:e().combine}:void 0),[l,f]=T(c.getOptimisticResult(s(),e().combine)[1]());h(y(()=>e().queries.length,()=>f(c.getOptimisticResult(s(),e().combine)[1]())));let p=m(y(()=>l.length,()=>l.map(e=>g(()=>new Promise(t=>{e.isFetching&&e.isLoading||t(D(e.data))})))));u(()=>{let e=p();for(let t=0;t<e.length;t++){let n=e[t];n[1].mutate(()=>D(l[t].data)),n[1].refetch()}});let _=[],S=()=>c.subscribe(e=>{_.push(()=>{u(()=>{let t=p();for(let n=0;n<t.length;n++){let r=t[n],i={...D(e[n])};f(n,D(i)),r[1].mutate(()=>D(l[n].data)),r[1].refetch()}})}),queueMicrotask(()=>{let e=_.pop();e&&e(),_=[]})}),C=o;d(e=>(e?.(),C=a()?o:S(),()=>queueMicrotask(C))),b(C),x(()=>{c.setQueries(s(),e().combine?{combine:e().combine}:void 0)}),d(()=>{c.setQueries(s(),e().combine?{combine:e().combine}:void 0)});let w=e=>({get(t,n){return n===`data`?p()[e][0]():Reflect.get(t,n)}}),E=()=>l.map((e,t)=>new Proxy(e,w(t))),[O,k]=T(E());return h(()=>k(E())),O}var U=class extends r{constructor(e={}){super(e)}};function W(e){return e}function G(e,t){let n=j(t),r=m(()=>n()),i=m(()=>r().getQueryCache()),[a,o]=_(r().isFetching(e?.()));return p(()=>{o(r().isFetching(e?.()));let t=i().subscribe(()=>{o(r().isFetching(e?.()))});b(t)}),a}function K(e){return e}function q(e){return e}function J(e,t){let n=j(t),r=m(()=>n()),i=m(()=>r().getMutationCache()),[a,o]=_(r().isMutating(e?.()));return p(()=>{o(r().isMutating(e?.()));let t=i().subscribe(()=>{o(r().isMutating(e?.()))});b(t)}),a}function Y(e,t){return e.findAll(t.filters).map(e=>t.select?t.select(e):e.state)}function X(e=()=>({}),t){let n=j(t),r=m(()=>n()),i=m(()=>r().getMutationCache()),[a,o]=_(Y(i(),e()));return p(()=>{let t=i().subscribe(()=>{let t=c(a(),Y(i(),e()));a()!==t&&o(t)});b(t)}),a}const Z=z,Q=B,$=V,ee=H;export{F as IsRestoringProvider,U as QueryClient,O as QueryClientContext,M as QueryClientProvider,Q as createInfiniteQuery,G as createIsFetching,G as useIsFetching,J as createIsMutating,J as useIsMutating,$ as createMutation,X as createMutationState,X as useMutationState,ee as createQueries,Z as createQuery,K as infiniteQueryOptions,q as mutationOptions,W as queryOptions,B as useInfiniteQuery,P as useIsRestoring,V as useMutation,H as useQueries,z as useQuery,A as useQueryClient};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createContext","createRenderEffect","onCleanup","useContext","QueryClient","Accessor","JSX","QueryClientContext","undefined","queryClientContextError","useQueryClient","queryClient","client","Error","useQueryClientResolver","contextClient","resolvedClient","QueryClientProviderProps","children","Element","QueryClientProvider","props","unmount","mount","bind","_$createComponent","Provider","value","QueryCoreClient"],"sources":["../src/QueryClientProvider.tsx","../src/isRestoring.ts","../src/useBaseQuery.ts","../src/useQuery.ts","../src/useInfiniteQuery.ts","../src/useMutation.ts","../src/useQueries.ts","../src/QueryClient.ts","../src/queryOptions.ts","../src/useIsFetching.ts","../src/infiniteQueryOptions.ts","../src/mutationOptions.ts","../src/useIsMutating.ts","../src/useMutationState.ts","../src/index.ts"],"sourcesContent":["import {\n createContext,\n createRenderEffect,\n onCleanup,\n useContext,\n} from 'solid-js'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor, JSX } from 'solid-js'\n\nexport const QueryClientContext = createContext<\n (() => QueryClient) | undefined\n>(undefined)\n\nconst queryClientContextError =\n 'No QueryClient set, use QueryClientProvider to set one'\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(queryClientContextError)\n }\n\n return client()\n}\n\nexport const useQueryClientResolver = (\n queryClient?: Accessor<QueryClient | undefined>,\n): Accessor<QueryClient> => {\n const contextClient = useContext(QueryClientContext)\n\n return () => {\n const resolvedClient = queryClient?.()\n if (resolvedClient) {\n return resolvedClient\n }\n\n if (!contextClient) {\n throw new Error(queryClientContextError)\n }\n\n return contextClient()\n }\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: JSX.Element\n}\n\nexport const QueryClientProvider = (\n props: QueryClientProviderProps,\n): JSX.Element => {\n createRenderEffect<() => void>((unmount) => {\n unmount?.()\n props.client.mount()\n return props.client.unmount.bind(props.client)\n })\n onCleanup(() => props.client.unmount())\n\n return (\n <QueryClientContext.Provider value={() => props.client}>\n {props.children}\n </QueryClientContext.Provider>\n )\n}\n","import { createContext, useContext } from 'solid-js'\nimport type { Accessor } from 'solid-js'\n\nconst IsRestoringContext = createContext<Accessor<boolean>>(() => false)\n\nexport const useIsRestoring = () => useContext(IsRestoringContext)\nexport const IsRestoringProvider = IsRestoringContext.Provider\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 { hydrate, notifyManager, shouldThrowError } from '@tanstack/query-core'\nimport { isServer } from 'solid-js/web'\nimport {\n createComputed,\n createMemo,\n createResource,\n createSignal,\n on,\n onCleanup,\n} from 'solid-js'\nimport { createStore, reconcile, unwrap } from 'solid-js/store'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport type { UseBaseQueryOptions } from './types'\nimport type { Accessor, Signal } from 'solid-js'\nimport type { QueryClient } from './QueryClient'\nimport type {\n Query,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\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 queryHash?: string,\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 let data = result.data\n if (store.data === undefined) {\n try {\n data = structuredClone(data)\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n if (error instanceof Error) {\n console.warn(\n `Unable to correctly reconcile data for query key: ${queryHash}. ` +\n `Possibly because the query data contains data structures that aren't supported ` +\n `by the 'structuredClone' algorithm. Consider using a callback function instead ` +\n `to manage the reconciliation manually.\\n\\n Error Received: ${error.name} - ${error.message}`,\n )\n }\n }\n }\n }\n const newData = reconcile(data, { key: reconcileOption })(store.data)\n return { ...result, data: newData } as typeof result\n}\n\n/**\n * Solid's `onHydrated` functionality will silently \"fail\" (hydrate with an empty object)\n * if the resource data is not serializable.\n */\nconst hydratableObserverResult = <\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n TDataHydratable,\n>(\n query: Query<TQueryFnData, TError, TData, TQueryKey>,\n result: QueryObserverResult<TDataHydratable, TError>,\n) => {\n if (!isServer) return result\n const obj: any = {\n ...unwrap(result),\n // During SSR, functions cannot be serialized, so we need to remove them\n // This is safe because we will add these functions back when the query is hydrated\n refetch: undefined,\n }\n\n // If the query is an infinite query, we need to remove additional properties\n if ('fetchNextPage' in result) {\n obj.fetchNextPage = undefined\n obj.fetchPreviousPage = undefined\n }\n\n // We will also attach the dehydrated state of the query to the result\n // This will be removed on client after hydration\n obj.hydrationData = {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.meta && { meta: query.meta }),\n }\n\n return obj\n}\n\n// Base Query Function that is used to create the query.\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: Accessor<\n UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n Observer: typeof QueryObserver,\n queryClient?: Accessor<QueryClient>,\n) {\n type ResourceData = QueryObserverResult<TData, TError>\n\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n const isRestoring = useIsRestoring()\n // There are times when we run a query on the server but the resource is never read\n // This could lead to times when the queryObserver is unsubscribed before the resource has loaded\n // Causing a time out error. To prevent this we will queue the unsubscribe if the cleanup is called\n // before the resource has loaded\n let unsubscribeQueued = false\n\n const defaultedOptions = createMemo(() => {\n const defaultOptions = client().defaultQueryOptions(options())\n defaultOptions._optimisticResults = isRestoring()\n ? 'isRestoring'\n : 'optimistic'\n defaultOptions.structuralSharing = false\n if (isServer) {\n defaultOptions.retry = false\n defaultOptions.throwOnError = true\n }\n return defaultOptions\n })\n const initialOptions = defaultedOptions()\n\n const [observer, setObserver] = createSignal(\n new Observer(client(), defaultedOptions()),\n )\n\n let observerResult = observer().getOptimisticResult(defaultedOptions())\n const [state, setState] =\n createStore<QueryObserverResult<TData, TError>>(observerResult)\n\n const createServerSubscriber = (\n resolve: (\n data: ResourceData | PromiseLike<ResourceData | undefined> | undefined,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n return observer().subscribe((result) => {\n notifyManager.batchCalls(() => {\n const query = observer().getCurrentQuery()\n const unwrappedResult = hydratableObserverResult(query, result)\n\n if (result.data !== undefined && unwrappedResult.isError) {\n reject(unwrappedResult.error)\n unsubscribeIfQueued()\n } else {\n resolve(unwrappedResult)\n unsubscribeIfQueued()\n }\n })()\n })\n }\n\n const unsubscribeIfQueued = () => {\n if (unsubscribeQueued) {\n unsubscribe?.()\n unsubscribeQueued = false\n }\n }\n\n const createClientSubscriber = () => {\n const obs = observer()\n return obs.subscribe((result) => {\n observerResult = result\n queueMicrotask(() => {\n if (unsubscribe) {\n refetch()\n }\n })\n })\n }\n\n function setStateWithReconciliation(res: typeof observerResult) {\n const opts = observer().options\n // @ts-expect-error - Reconcile option is not correctly typed internally\n const reconcileOptions = opts.reconcile\n\n setState((store) => {\n return reconcileFn(\n store,\n res,\n reconcileOptions === undefined ? false : reconcileOptions,\n opts.queryHash,\n )\n })\n }\n\n function createDeepSignal<T>(): Signal<T> {\n return [\n () => state,\n (v: any) => {\n const unwrapped = unwrap(state)\n if (typeof v === 'function') {\n v = v(unwrapped)\n }\n // Hydration data exists on first load after SSR,\n // and should be removed from the observer result\n if (v?.hydrationData) {\n const { hydrationData, ...rest } = v\n v = rest\n }\n setStateWithReconciliation(v)\n },\n ] as Signal<T>\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 /*\n Fixes #7275\n In a few cases, the observer could unmount before the resource is loaded.\n This leads to Suspense boundaries to be suspended indefinitely.\n This resolver will be called when the observer is unmounting\n but the resource is still in a loading state\n */\n let resolver: ((value: ResourceData) => void) | null = null\n const [queryResource, { refetch }] = createResource<ResourceData | undefined>(\n () => {\n const obs = observer()\n return new Promise((resolve, reject) => {\n resolver = resolve\n if (isServer) {\n unsubscribe = createServerSubscriber(resolve, reject)\n } else if (!unsubscribe && !isRestoring()) {\n unsubscribe = createClientSubscriber()\n }\n obs.updateResult()\n\n if (\n observerResult.isError &&\n !observerResult.isFetching &&\n !isRestoring() &&\n shouldThrowError(obs.options.throwOnError, [\n observerResult.error,\n obs.getCurrentQuery(),\n ])\n ) {\n setStateWithReconciliation(observerResult)\n return reject(observerResult.error)\n }\n if (!observerResult.isLoading) {\n resolver = null\n return resolve(\n hydratableObserverResult(obs.getCurrentQuery(), observerResult),\n )\n }\n\n setStateWithReconciliation(observerResult)\n })\n },\n {\n storage: createDeepSignal,\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 && 'hydrationData' in info.value) {\n hydrate(client(), {\n // @ts-expect-error - hydrationData is not correctly typed internally\n queries: [{ ...info.value.hydrationData }],\n })\n }\n\n if (unsubscribe) return\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 = { ...initialOptions }\n if (\n (initialOptions.staleTime || !initialOptions.initialData) &&\n info.value\n ) {\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 setStateWithReconciliation(observer().getOptimisticResult(newOptions))\n unsubscribe = createClientSubscriber()\n },\n },\n )\n\n createComputed(\n on(\n client,\n (c) => {\n if (unsubscribe) {\n unsubscribe()\n }\n const newObserver = new Observer(c, defaultedOptions())\n unsubscribe = createClientSubscriber()\n setObserver(newObserver)\n },\n {\n defer: true,\n },\n ),\n )\n\n createComputed(\n on(\n isRestoring,\n (restoring) => {\n if (!restoring && !isServer) {\n refetch()\n }\n },\n { defer: true },\n ),\n )\n\n onCleanup(() => {\n if (isServer && queryResource.loading) {\n unsubscribeQueued = true\n return\n }\n if (unsubscribe) {\n unsubscribe()\n unsubscribe = null\n }\n if (resolver && !isServer) {\n resolver(observerResult)\n resolver = null\n }\n })\n\n createComputed(\n on(\n [observer, defaultedOptions],\n ([obs, opts]) => {\n obs.setOptions(opts)\n setStateWithReconciliation(obs.getOptimisticResult(opts))\n refetch()\n },\n { defer: true },\n ),\n )\n\n const handler = {\n get(\n target: QueryObserverResult<TData, TError>,\n prop: keyof QueryObserverResult<TData, TError>,\n ): any {\n if (prop === 'data') {\n if (state.data !== undefined) {\n return queryResource.latest?.data\n }\n return queryResource()?.data\n }\n return Reflect.get(target, prop)\n },\n }\n\n return new Proxy(state, handler)\n}\n","import { QueryObserver } from '@tanstack/query-core'\nimport { createMemo } from 'solid-js'\nimport { useBaseQuery } from './useBaseQuery'\nimport type { DefaultError, QueryKey } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './queryOptions'\n\nexport function useQuery<\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): UseQueryResult<TData, TError>\n\nexport function useQuery<\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): DefinedUseQueryResult<TData, TError>\nexport function useQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: Accessor<QueryClient>,\n) {\n return useBaseQuery(\n createMemo(() => options()),\n QueryObserver,\n queryClient,\n )\n}\n","import { InfiniteQueryObserver } from '@tanstack/query-core'\nimport { createMemo } from 'solid-js'\nimport { useBaseQuery } from './useBaseQuery'\nimport type {\n DefaultError,\n InfiniteData,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type {\n DefinedUseInfiniteQueryResult,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n} from './types'\nimport type { Accessor } from 'solid-js'\nimport type {\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './infiniteQueryOptions'\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): DefinedUseInfiniteQueryResult<TData, TError>\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): UseInfiniteQueryResult<TData, TError>\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): UseInfiniteQueryResult<TData, TError> {\n return useBaseQuery(\n createMemo(() => options()),\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as UseInfiniteQueryResult<TData, TError>\n}\n","import { MutationObserver, noop, shouldThrowError } from '@tanstack/query-core'\nimport { createComputed, createMemo, on, onCleanup } from 'solid-js'\nimport { createStore } from 'solid-js/store'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport type { DefaultError } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type {\n UseMutateFunction,\n UseMutationOptions,\n UseMutationResult,\n} from './types'\nimport type { Accessor } from 'solid-js'\n\n// HOOK\nexport function useMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n queryClient?: Accessor<QueryClient>,\n): UseMutationResult<TData, TError, TVariables, TOnMutateResult> {\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n\n const observer = new MutationObserver<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >(client(), options())\n\n const mutate: UseMutateFunction<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n > = (...args) => {\n observer.mutate(args[0] as TVariables, args[1]).catch(noop)\n }\n\n const [state, setState] = createStore<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>\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","import { QueriesObserver, noop } from '@tanstack/query-core'\nimport { createStore, unwrap } from 'solid-js/store'\nimport {\n batch,\n createComputed,\n createMemo,\n createRenderEffect,\n createResource,\n mergeProps,\n on,\n onCleanup,\n onMount,\n} from 'solid-js'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport type { QueryOptions, UseQueryResult } from './types'\nimport type { Accessor } from 'solid-js'\nimport type { QueryClient } from './QueryClient'\nimport type {\n DefaultError,\n OmitKeyof,\n QueriesObserverOptions,\n QueriesPlaceholderDataFunction,\n QueryFunction,\n QueryKey,\n QueryObserverOptions,\n QueryObserverResult,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData' | 'suspense'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n /**\n * @deprecated The `suspense` option has been deprecated in v5 and will be removed in the next major version.\n * The `data` property on useQueries is a plain object and not a SolidJS Resource.\n * It will not suspend when the data is loading.\n * Setting `suspense` to `true` will be a no-op.\n */\n suspense?: boolean\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\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 ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<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 ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, infer TQueryKey>\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? UseQueryOptionsForUseQueries<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey\n >\n : // Fallback\n UseQueryOptionsForUseQueries\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 ? UseQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryResult<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 ? UseQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, any>\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? UseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\ntype QueriesOptions<\n T extends Array<any>,\n TResult extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<UseQueryOptionsForUseQueries>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResult, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<\n [...Tail],\n [...TResult, GetOptions<Head>],\n [...TDepth, 1]\n >\n : ReadonlyArray<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/homogeneous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseQueryOptionsForUseQueries<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n >\n : // Fallback\n Array<UseQueryOptionsForUseQueries>\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\ntype QueriesResults<\n T extends Array<any>,\n TResult extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<UseQueryResult>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResult, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<\n [...Tail],\n [...TResult, GetResults<Head>],\n [...TDepth, 1]\n >\n : { [K in keyof T]: GetResults<T[K]> }\n\nexport function useQueries<\n T extends Array<any>,\n TCombinedResult extends QueriesResults<T> = QueriesResults<T>,\n>(\n queriesOptions: Accessor<{\n queries:\n | readonly [...QueriesOptions<T>]\n | readonly [...{ [K in keyof T]: GetOptions<T[K]> }]\n combine?: (result: QueriesResults<T>) => TCombinedResult\n }>,\n queryClient?: Accessor<QueryClient>,\n): TCombinedResult {\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n const isRestoring = useIsRestoring()\n\n const defaultedQueries = createMemo(() =>\n queriesOptions().queries.map((options) =>\n mergeProps(\n client().defaultQueryOptions(options as QueryObserverOptions),\n {\n get _optimisticResults() {\n return isRestoring() ? 'isRestoring' : 'optimistic'\n },\n },\n ),\n ),\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 const [state, setState] = createStore<TCombinedResult>(\n observer.getOptimisticResult(\n defaultedQueries(),\n (queriesOptions() as QueriesObserverOptions<TCombinedResult>).combine,\n )[1](),\n )\n\n createRenderEffect(\n on(\n () => queriesOptions().queries.length,\n () =>\n setState(\n observer.getOptimisticResult(\n defaultedQueries(),\n (queriesOptions() as QueriesObserverOptions<TCombinedResult>)\n .combine,\n )[1](),\n ),\n ),\n )\n\n const dataResources = createMemo(\n on(\n () => state.length,\n () =>\n state.map((queryRes) => {\n const dataPromise = () =>\n new Promise((resolve) => {\n if (queryRes.isFetching && queryRes.isLoading) return\n resolve(unwrap(queryRes.data))\n })\n return createResource(dataPromise)\n }),\n ),\n )\n\n batch(() => {\n const dataResources_ = dataResources()\n for (let index = 0; index < dataResources_.length; index++) {\n const dataResource = dataResources_[index]!\n dataResource[1].mutate(() => unwrap(state[index]!.data))\n dataResource[1].refetch()\n }\n })\n\n let taskQueue: Array<() => void> = []\n const subscribeToObserver = () =>\n observer.subscribe((result) => {\n taskQueue.push(() => {\n batch(() => {\n const dataResources_ = dataResources()\n for (let index = 0; index < dataResources_.length; index++) {\n const dataResource = dataResources_[index]!\n const unwrappedResult = { ...unwrap(result[index]) }\n // @ts-expect-error typescript pedantry regarding the possible range of index\n setState(index, unwrap(unwrappedResult))\n dataResource[1].mutate(() => unwrap(state[index]!.data))\n dataResource[1].refetch()\n }\n })\n })\n\n queueMicrotask(() => {\n const taskToRun = taskQueue.pop()\n if (taskToRun) taskToRun()\n taskQueue = []\n })\n })\n\n let unsubscribe: () => void = noop\n createComputed<() => void>((cleanup) => {\n cleanup?.()\n unsubscribe = isRestoring() ? noop : subscribeToObserver()\n // cleanup needs to be scheduled after synchronous effects take place\n return () => queueMicrotask(unsubscribe)\n })\n onCleanup(unsubscribe)\n\n onMount(() => {\n observer.setQueries(\n defaultedQueries(),\n queriesOptions().combine\n ? ({\n combine: queriesOptions().combine,\n } as QueriesObserverOptions<TCombinedResult>)\n : undefined,\n )\n })\n\n createComputed(() => {\n observer.setQueries(\n defaultedQueries(),\n queriesOptions().combine\n ? ({\n combine: queriesOptions().combine,\n } as QueriesObserverOptions<TCombinedResult>)\n : undefined,\n )\n })\n\n const handler = (index: number) => ({\n get(target: QueryObserverResult, prop: keyof QueryObserverResult): any {\n if (prop === 'data') {\n return dataResources()[index]![0]()\n }\n return Reflect.get(target, prop)\n },\n })\n\n const getProxies = () =>\n state.map((s, index) => {\n return new Proxy(s, handler(index))\n })\n\n const [proxyState, setProxyState] = createStore(getProxies())\n createRenderEffect(() => setProxyState(getProxies()))\n\n return proxyState as TCombinedResult\n}\n","import { QueryClient as QueryCoreClient } from '@tanstack/query-core'\nimport type {\n DefaultOptions as CoreDefaultOptions,\n DefaultError,\n OmitKeyof,\n QueryClientConfig as QueryCoreClientConfig,\n InfiniteQueryObserverOptions as QueryCoreInfiniteQueryObserverOptions,\n QueryObserverOptions as QueryCoreObserverOptions,\n QueryKey,\n} 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 OmitKeyof<\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 to false.\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 TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends OmitKeyof<\n QueryCoreInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\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 to false.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface DefaultOptions<\n TError = DefaultError,\n> extends CoreDefaultOptions<TError> {\n queries?: OmitKeyof<QueryObserverOptions<unknown, TError>, 'queryKey'>\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 {\n DefaultError,\n QueryKey,\n QueryKeyWithDataTag,\n} from '@tanstack/query-core'\nimport type { QueryOptions } from './types'\nimport type { Accessor } from 'solid-js'\n\nexport type UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Accessor<\n QueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n }\n>\n\nexport type DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Accessor<\n QueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n }\n>\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: ReturnType<\n UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n >,\n): ReturnType<\n UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n> &\n QueryKeyWithDataTag<TQueryKey, TQueryFnData, TError>\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: ReturnType<\n DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n >,\n): ReturnType<\n DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>\n> &\n QueryKeyWithDataTag<TQueryKey, TQueryFnData, TError>\n\nexport function queryOptions(options: unknown) {\n return options\n}\n","import { createEffect, createMemo, createSignal, onCleanup } from 'solid-js'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport type { QueryFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\n\nexport function useIsFetching(\n filters?: Accessor<QueryFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n const queryCache = createMemo(() => client().getQueryCache())\n\n const [fetches, setFetches] = createSignal(client().isFetching(filters?.()))\n\n createEffect(() => {\n setFetches(client().isFetching(filters?.()))\n\n const unsubscribe = queryCache().subscribe(() => {\n setFetches(client().isFetching(filters?.()))\n })\n\n onCleanup(unsubscribe)\n })\n\n return fetches\n}\n","import type {\n DefaultError,\n InfiniteData,\n NonUndefinedGuard,\n QueryKey,\n QueryKeyWithDataTag,\n} from '@tanstack/query-core'\nimport type { InfiniteQueryOptions } from './types'\nimport type { Accessor } from 'solid-js'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = Accessor<\n InfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam> & {\n initialData?: undefined\n }\n>\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n // should we handle page param correctly\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = Accessor<\n InfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam> & {\n initialData:\n | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)\n }\n>\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: ReturnType<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >,\n): ReturnType<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n> &\n QueryKeyWithDataTag<TQueryKey, InfiniteData<TQueryFnData>, TError>\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: ReturnType<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >,\n): ReturnType<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n> &\n QueryKeyWithDataTag<TQueryKey, InfiniteData<TQueryFnData>, TError>\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n","import type { DefaultError, WithRequired } from '@tanstack/query-core'\nimport type { MutationOptions } from './types'\n\nexport function mutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: WithRequired<\n MutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationKey'\n >,\n): WithRequired<\n MutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationKey'\n>\nexport function mutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: Omit<\n MutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationKey'\n >,\n): Omit<\n MutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationKey'\n>\nexport function mutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: MutationOptions<TData, TError, TVariables, TOnMutateResult>,\n): MutationOptions<TData, TError, TVariables, TOnMutateResult> {\n return options\n}\n","import { createEffect, createMemo, createSignal, onCleanup } from 'solid-js'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport type { MutationFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\n\nexport function useIsMutating(\n filters?: Accessor<MutationFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n const mutationCache = createMemo(() => client().getMutationCache())\n\n const [mutations, setMutations] = createSignal(\n client().isMutating(filters?.()),\n )\n\n createEffect(() => {\n setMutations(client().isMutating(filters?.()))\n\n const unsubscribe = mutationCache().subscribe(() => {\n setMutations(client().isMutating(filters?.()))\n })\n\n onCleanup(unsubscribe)\n })\n\n return mutations\n}\n","import { createEffect, createMemo, createSignal, onCleanup } from 'solid-js'\nimport { replaceEqualDeep } from '@tanstack/query-core'\nimport { useQueryClientResolver } from './QueryClientProvider'\nimport type {\n Mutation,\n MutationCache,\n MutationFilters,\n MutationState,\n} from '@tanstack/query-core'\nimport type { Accessor } from 'solid-js'\nimport type { QueryClient } from './QueryClient'\n\ntype MutationTypeFromResult<TResult> = [TResult] extends [\n MutationState<\n infer TData,\n infer TError,\n infer TVariables,\n infer TOnMutateResult\n >,\n]\n ? Mutation<TData, TError, TVariables, TOnMutateResult>\n : Mutation\n\ntype MutationStateOptions<\n TResult = MutationState,\n TMutation extends Mutation<any, any, any, any> =\n MutationTypeFromResult<TResult>,\n> = {\n filters?: MutationFilters\n select?: (mutation: TMutation) => TResult\n}\n\nfunction getResult<\n TResult = MutationState,\n TMutation extends Mutation<any, any, any, any> =\n MutationTypeFromResult<TResult>,\n>(\n mutationCache: MutationCache,\n options: MutationStateOptions<TResult, TMutation>,\n): Array<TResult> {\n return mutationCache\n .findAll(options.filters)\n .map(\n (mutation): TResult =>\n (options.select\n ? options.select(mutation as TMutation)\n : mutation.state) as TResult,\n )\n}\n\nexport function useMutationState<\n TResult = MutationState,\n TMutation extends Mutation<any, any, any, any> =\n MutationTypeFromResult<TResult>,\n>(\n options: Accessor<MutationStateOptions<TResult, TMutation>> = () => ({}),\n queryClient?: Accessor<QueryClient>,\n): Accessor<Array<TResult>> {\n const resolveClient = useQueryClientResolver(queryClient)\n const client = createMemo(() => resolveClient())\n const mutationCache = createMemo(() => client().getMutationCache())\n\n const [result, setResult] = createSignal(\n getResult(mutationCache(), options()),\n )\n\n createEffect(() => {\n const unsubscribe = mutationCache().subscribe(() => {\n const nextResult = replaceEqualDeep(\n result(),\n getResult(mutationCache(), options()),\n )\n if (result() !== nextResult) {\n setResult(nextResult)\n }\n })\n\n onCleanup(unsubscribe)\n })\n\n return result\n}\n","/* istanbul ignore file */\n\nimport { useQuery } from './useQuery'\nimport { useInfiniteQuery } from './useInfiniteQuery'\nimport { useMutation } from './useMutation'\nimport { useQueries } from './useQueries'\n\n// Re-export core\nexport * from '@tanstack/query-core'\n\n// Solid Query\nexport * from './types'\n\nexport type {\n DefinedUseBaseQueryResult,\n DefinedUseInfiniteQueryResult,\n DefinedUseQueryResult,\n InfiniteQueryOptions,\n MutationOptions,\n QueryOptions,\n UseBaseMutationResult,\n UseBaseQueryOptions,\n UseBaseQueryResult,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n UseMutateAsyncFunction,\n UseMutateFunction,\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n // Aliases (create* and use* are both supported)\n UseBaseQueryOptions as CreateBaseQueryOptions,\n UseBaseQueryResult as CreateBaseQueryResult,\n UseInfiniteQueryOptions as CreateInfiniteQueryOptions,\n UseInfiniteQueryResult as CreateInfiniteQueryResult,\n UseMutateAsyncFunction as CreateMutateAsyncFunction,\n UseMutateFunction as CreateMutateFunction,\n UseMutationOptions as CreateMutationOptions,\n UseMutationResult as CreateMutationResult,\n UseBaseMutationResult as CreateBaseMutationResult,\n UseQueryOptions as CreateQueryOptions,\n UseQueryResult as CreateQueryResult,\n DefinedUseBaseQueryResult as DefinedCreateBaseQueryResult,\n DefinedUseInfiniteQueryResult as DefinedCreateInfiniteQueryResult,\n DefinedUseQueryResult as DefinedCreateQueryResult,\n} from './types'\n\nexport { QueryClient } from './QueryClient'\nexport type {\n QueryObserverOptions,\n DefaultOptions,\n QueryClientConfig,\n InfiniteQueryObserverOptions,\n} from './QueryClient'\nexport { useQuery } from './useQuery'\nexport const createQuery = useQuery\nexport { queryOptions } from './queryOptions'\nexport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './queryOptions'\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient,\n} from './QueryClientProvider'\nexport type { QueryClientProviderProps } from './QueryClientProvider'\nexport { useIsFetching } from './useIsFetching'\nexport { useIsFetching as createIsFetching } from './useIsFetching'\nexport { useInfiniteQuery }\nexport const createInfiniteQuery = useInfiniteQuery\nexport { infiniteQueryOptions } from './infiniteQueryOptions'\nexport type {\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './infiniteQueryOptions'\nexport { useMutation } from './useMutation'\nexport { mutationOptions } from './mutationOptions'\nexport const createMutation = useMutation\nexport { useIsMutating } from './useIsMutating'\nexport { useIsMutating as createIsMutating } from './useIsMutating'\nexport { useMutationState } from './useMutationState'\nexport { useMutationState as createMutationState } from './useMutationState'\nexport { useQueries } from './useQueries'\nexport const createQueries = useQueries\nexport { useIsRestoring, IsRestoringProvider } from './isRestoring'\n"],"mappings":"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"}
|