Skip to content

Commit 0d2c771

Browse files
committed
chore(core): update query core
1 parent eb42635 commit 0d2c771

File tree

13 files changed

+412
-235
lines changed

13 files changed

+412
-235
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@sveltestack/svelte-query",
33
"private": false,
4-
"version": "1.3.2",
4+
"version": "1.4.0",
55
"description": "Hooks for managing, caching and syncing asynchronous and remote data in Svelte",
66
"license": "MIT",
77
"svelte": "svelte/index.js",

src/infiniteQuery/useInfiniteQuery.ts

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,41 @@ export function useInfiniteQuery<
1212
TQueryFnData = unknown,
1313
TError = unknown,
1414
TData = TQueryFnData,
15-
>(
16-
options: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
17-
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData>
15+
TQueryKey extends QueryKey = QueryKey
16+
>(
17+
options: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
18+
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
1819
export function useInfiniteQuery<
1920
TQueryFnData = unknown,
2021
TError = unknown,
2122
TData = TQueryFnData,
22-
>(
23-
queryKey: QueryKey,
24-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
25-
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData>
23+
TQueryKey extends QueryKey = QueryKey
24+
>(
25+
queryKey: TQueryKey,
26+
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
27+
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
2628
export function useInfiniteQuery<
2729
TQueryFnData = unknown,
2830
TError = unknown,
2931
TData = TQueryFnData,
30-
>(
31-
queryKey: QueryKey,
32-
queryFn: QueryFunction<TQueryFnData>,
33-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
34-
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData>
35-
export default function useInfiniteQuery<TQueryFnData, TError, TData = TQueryFnData>(
36-
arg1: QueryKey | UseInfiniteQueryOptions<TQueryFnData, TError, TData>,
32+
TQueryKey extends QueryKey = QueryKey
33+
>(
34+
queryKey: TQueryKey,
35+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
36+
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
37+
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
38+
export default function useInfiniteQuery<TQueryFnData, TError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(
39+
arg1: TQueryKey | UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
3740
arg2?:
38-
| QueryFunction<TQueryFnData>
39-
| UseInfiniteQueryOptions<TQueryFnData, TError, TData>,
40-
arg3?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
41-
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData> {
41+
| QueryFunction<TQueryFnData, TQueryKey>
42+
| UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
43+
arg3?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
44+
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey> {
4245
const options = parseQueryArgs(arg1, arg2, arg3)
4346
const client: QueryClient = useQueryClient()
4447
let defaultedOptions = client.defaultQueryObserverOptions(options)
4548
// Include callbacks in batch renders
46-
defaultedOptions = setBatchCalls<UseInfiniteQueryOptions<TQueryFnData, TError, TData>>(defaultedOptions)
49+
defaultedOptions = setBatchCalls<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>>(defaultedOptions)
4750
const observer = new InfiniteQueryObserver<TQueryFnData, TError, TData>(client, defaultedOptions)
4851

4952
const { subscribe } = readable(observer.getCurrentResult(), set => {
@@ -53,28 +56,28 @@ export default function useInfiniteQuery<TQueryFnData, TError, TData = TQueryFnD
5356
// between creating the observer and subscribing to it.
5457
observer.updateResult()
5558

56-
function setOptions(options: UseInfiniteQueryOptions<TQueryFnData, TError, TData>)
59+
function setOptions(options: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>)
5760
function setOptions(
58-
queryKey: QueryKey,
59-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
61+
queryKey: TQueryKey,
62+
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
6063
)
6164
function setOptions(
62-
queryKey: QueryKey,
63-
queryFn: QueryFunction<TQueryFnData>,
64-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
65+
queryKey: TQueryKey,
66+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
67+
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
6568
)
6669
function setOptions(
67-
arg1: QueryKey | UseInfiniteQueryOptions<TQueryFnData, TError, TData>,
70+
arg1: TQueryKey | UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
6871
arg2?:
69-
| QueryFunction<TQueryFnData>
70-
| UseInfiniteQueryOptions<TQueryFnData, TError, TData>,
71-
arg3?: UseInfiniteQueryOptions<TQueryFnData, TError, TData>
72+
| QueryFunction<TQueryFnData, TQueryKey>
73+
| UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
74+
arg3?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
7275
) {
7376
if (observer.hasListeners()) {
7477
const options = parseQueryArgs(arg1, arg2, arg3)
7578
let defaultedOptions = client.defaultQueryObserverOptions(options)
7679
// Include callbacks in batch renders
77-
defaultedOptions = setBatchCalls<UseInfiniteQueryOptions<TQueryFnData, TError, TData>>(defaultedOptions)
80+
defaultedOptions = setBatchCalls<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>>(defaultedOptions)
7881
observer.setOptions(defaultedOptions)
7982
}
8083
}

src/query/useQuery.ts

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,37 @@ export function useQuery<
1212
TQueryFnData = unknown,
1313
TError = unknown,
1414
TData = TQueryFnData,
15-
>(options: UseQueryOptions<TQueryFnData, TError, TData>): UseQueryStoreResult<TQueryFnData, TError, TData>
15+
TQueryKey extends QueryKey = QueryKey
16+
>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
1617
export function useQuery<
1718
TQueryFnData = unknown,
1819
TError = unknown,
1920
TData = TQueryFnData,
20-
>(queryKey: QueryKey, options?: UseQueryOptions<TQueryFnData, TError, TData>): UseQueryStoreResult<TQueryFnData, TError, TData>
21+
TQueryKey extends QueryKey = QueryKey
22+
>(queryKey: TQueryKey, options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
2123
export function useQuery<
2224
TQueryFnData = unknown,
2325
TError = unknown,
2426
TData = TQueryFnData,
25-
>(
26-
queryKey: QueryKey,
27-
queryFn: QueryFunction<TQueryFnData>,
28-
options?: UseQueryOptions<TQueryFnData, TError, TData>
29-
): UseQueryStoreResult<TQueryFnData, TError, TData>
30-
export default function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData>(
31-
arg1: QueryKey | UseQueryOptions<TQueryFnData, TError, TData>,
27+
TQueryKey extends QueryKey = QueryKey
28+
>(
29+
queryKey: TQueryKey,
30+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
31+
options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
32+
): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
33+
export default function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(
34+
arg1: TQueryKey | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
3235
arg2?:
33-
| QueryFunction<TQueryFnData>
34-
| UseQueryOptions<TQueryFnData, TError, TData>,
35-
arg3?: UseQueryOptions<TQueryFnData, TError, TData>
36-
): UseQueryStoreResult<TQueryFnData, TError, TData> {
36+
| QueryFunction<TQueryFnData, TQueryKey>
37+
| UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
38+
arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
39+
): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey> {
3740
const options = parseQueryArgs(arg1, arg2, arg3)
3841
const client: QueryClient = useQueryClient()
3942
let defaultedOptions = client.defaultQueryObserverOptions(options)
4043
// Include callbacks in batch renders
41-
defaultedOptions = setBatchCalls<UseQueryOptions<TQueryFnData, TError, TData>>(defaultedOptions)
42-
const observer = new QueryObserver<TQueryFnData, TError, TData>(client, defaultedOptions)
44+
defaultedOptions = setBatchCalls<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>(defaultedOptions)
45+
const observer = new QueryObserver<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>(client, defaultedOptions)
4346

4447
const { subscribe } = readable(observer.getCurrentResult(), set => {
4548
return observer.subscribe(notifyManager.batchCalls(set))
@@ -49,27 +52,27 @@ export default function useQuery<TQueryFnData = unknown, TError = unknown, TData
4952
// between creating the observer and subscribing to it.
5053
observer.updateResult()
5154

52-
function setOptions(options: UseQueryOptions<TQueryFnData, TError, TData>)
55+
function setOptions(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>)
5356
function setOptions(
54-
queryKey: QueryKey,
55-
options?: UseQueryOptions<TQueryFnData, TError, TData>
57+
queryKey: TQueryKey,
58+
options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
5659
)
5760
function setOptions(
58-
queryKey: QueryKey,
59-
queryFn: QueryFunction<TQueryFnData>,
60-
options?: UseQueryOptions<TQueryFnData, TError, TData>
61+
queryKey: TQueryKey,
62+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
63+
options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
6164
)
6265
function setOptions(
63-
arg1: QueryKey | UseQueryOptions<TQueryFnData, TError, TData>,
66+
arg1: TQueryKey | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
6467
arg2?:
65-
| QueryFunction<TQueryFnData>
66-
| UseQueryOptions<TQueryFnData, TError, TData>,
67-
arg3?: UseQueryOptions<TQueryFnData, TError, TData>
68+
| QueryFunction<TQueryFnData, TQueryKey>
69+
| UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
70+
arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
6871
) {
6972
const options = parseQueryArgs(arg1, arg2, arg3)
7073
let defaultedOptions = client.defaultQueryObserverOptions(options)
7174
// Include callbacks in batch renders
72-
defaultedOptions = setBatchCalls<UseQueryOptions<TQueryFnData, TError, TData>>(defaultedOptions)
75+
defaultedOptions = setBatchCalls<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>(defaultedOptions)
7376
if (observer.hasListeners()) {
7477
observer.setOptions(defaultedOptions)
7578
}

src/queryCore/core/infiniteQueryObserver.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,25 @@ export class InfiniteQueryObserver<
7171
): void {
7272
super.setOptions({
7373
...options,
74-
behavior: infiniteQueryBehavior<TQueryFnData, TError, TData>(),
74+
behavior: infiniteQueryBehavior(),
7575
})
7676
}
7777

78+
getOptimisticResult(
79+
options: InfiniteQueryObserverOptions<
80+
TQueryFnData,
81+
TError,
82+
TData,
83+
TQueryData
84+
>
85+
): InfiniteQueryObserverResult<TData, TError> {
86+
options.behavior = infiniteQueryBehavior()
87+
return super.getOptimisticResult(options) as InfiniteQueryObserverResult<
88+
TData,
89+
TError
90+
>
91+
}
92+
7893
fetchNextPage(
7994
options?: FetchNextPageOptions
8095
): Promise<InfiniteQueryObserverResult<TData, TError>> {

src/queryCore/core/onlineManager.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class OnlineManager extends Subscribable {
1212
}
1313

1414
setEventListener(
15-
setup: (setOnline: () => void) => (online?: boolean) => void
15+
setup: (setOnline: (online?: boolean) => void) => () => void
1616
): void {
1717
if (this.removeEventListener) {
1818
this.removeEventListener()
@@ -58,14 +58,15 @@ class OnlineManager extends Subscribable {
5858
private setDefaultEventListener() {
5959
if (!isServer && window?.addEventListener) {
6060
this.setEventListener(onOnline => {
61+
const listener = () => onOnline()
6162
// Listen to online
62-
window.addEventListener('online', onOnline, false)
63-
window.addEventListener('offline', onOnline, false)
63+
window.addEventListener('online', listener, false)
64+
window.addEventListener('offline', listener, false)
6465

6566
return () => {
6667
// Be sure to unsubscribe if a new handler is set
67-
window.removeEventListener('online', onOnline)
68-
window.removeEventListener('offline', onOnline)
68+
window.removeEventListener('online', listener)
69+
window.removeEventListener('offline', listener)
6970
}
7071
})
7172
}

0 commit comments

Comments
 (0)