Skip to content

Commit 76d0591

Browse files
authored
chore(Core): upgrade query core (#69)
* chore(QueryCore): upgrade query core * chore(QueryCore): fix TS, format * chore(Version): upgrade version 1.6.0 * test(Timeout): ignore TS * test(Timeout): ignore TS * test(Stores): fix ts
1 parent d4fa908 commit 76d0591

File tree

36 files changed

+16106
-40725
lines changed

36 files changed

+16106
-40725
lines changed

package-lock.json

Lines changed: 53 additions & 17019 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@sveltestack/svelte-query",
33
"homepage": "https://github.com/SvelteStack/svelte-query",
44
"private": false,
5-
"version": "1.5.0",
5+
"version": "1.6.0",
66
"description": "Hooks for managing, caching and syncing asynchronous and remote data in Svelte",
77
"license": "MIT",
88
"svelte": "svelte/index.js",
@@ -82,7 +82,7 @@
8282
"svelte-jester": "^1.0.5",
8383
"svelte2tsx": "^0.4.8",
8484
"ts-jest": "^26.5.4",
85-
"type-fest": "^0.21.1",
85+
"type-fest": "^2.10.0",
8686
"typescript": "^4.0.3"
8787
},
8888
"peerDependencies": {

src/infiniteQuery/useInfiniteQuery.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export function useInfiniteQuery<
2323
TQueryKey extends QueryKey = QueryKey
2424
>(
2525
queryKey: TQueryKey,
26-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
26+
options?: Omit<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>, 'queryKey'>
2727
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
2828
export function useInfiniteQuery<
2929
TQueryFnData = unknown,
@@ -33,7 +33,7 @@ export function useInfiniteQuery<
3333
>(
3434
queryKey: TQueryKey,
3535
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
36-
options?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
36+
options?: Omit<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>, 'queryKey' | 'queryFn'>
3737
): UseInfiniteQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
3838
export default function useInfiniteQuery<TQueryFnData, TError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(
3939
arg1: TQueryKey | UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
@@ -78,7 +78,7 @@ export default function useInfiniteQuery<TQueryFnData, TError, TData = TQueryFnD
7878
let defaultedOptions = client.defaultQueryObserverOptions(options)
7979
// Include callbacks in batch renders
8080
defaultedOptions = setBatchCalls<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>>(defaultedOptions)
81-
observer.setOptions(defaultedOptions)
81+
observer.setOptions(defaultedOptions, { listeners: false })
8282
}
8383
}
8484

src/mutation/useMutation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export function useMutation<
2828
TContext = unknown
2929
>(
3030
mutationFn: MutationFunction<TData, TVariables>,
31-
options?: UseMutationOptions<TData, TError, TVariables, TContext>
31+
options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationFn'>
3232
): MutationStoreResult<TData, TError, TVariables, TContext>
3333
export function useMutation<
3434
TData = unknown,
@@ -37,7 +37,7 @@ export function useMutation<
3737
TContext = unknown
3838
>(
3939
mutationKey: MutationKey,
40-
options?: UseMutationOptions<TData, TError, TVariables, TContext>
40+
options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey'>
4141
): MutationStoreResult<TData, TError, TVariables, TContext>
4242
export function useMutation<
4343
TData = unknown,
@@ -47,7 +47,7 @@ export function useMutation<
4747
>(
4848
mutationKey: MutationKey,
4949
mutationFn?: MutationFunction<TData, TVariables>,
50-
options?: UseMutationOptions<TData, TError, TVariables, TContext>
50+
options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey' | 'mutationFn'>
5151
): MutationStoreResult<TData, TError, TVariables, TContext>
5252
export default function useMutation<
5353
TData = unknown,

src/queries/useQueries.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
import { readable } from 'svelte/store';
22

3-
import { notifyManager, QueriesObserver, QueryClient, QueryKey } from "../queryCore/core";
3+
import { notifyManager, QueriesObserver, QueryClient } from "../queryCore/core";
44
import { useQueryClient } from "../queryClientProvider";
5-
import type { UseQueryOptions, UseQueriesStoreResult } from "../types";
6-
7-
export default function useQueries<
8-
TQueryFnData = unknown,
9-
TError = unknown,
10-
TData = TQueryFnData,
11-
TQueryKey extends QueryKey = QueryKey
12-
>(queries: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]): UseQueriesStoreResult<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]>;
13-
export default function useQueries<
14-
TQueryFnData = unknown,
15-
TError = unknown,
16-
TData = TQueryFnData,
17-
TQueryKey extends QueryKey = QueryKey
18-
>(queries: []): UseQueriesStoreResult<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]>;
19-
export default function useQueries<
20-
T extends readonly [...UseQueryOptions[]]
21-
>(queries: T): UseQueriesStoreResult<T>;
22-
export default function useQueries<
23-
T extends readonly [...UseQueryOptions[]]
24-
>(queries: T): UseQueriesStoreResult<T> {
5+
import type { UseQueriesStoreResult, QueriesOptions, QueriesResults } from "../types";
6+
7+
export default function useQueries<T extends any[]>(
8+
queries: readonly [...QueriesOptions<T>]
9+
): UseQueriesStoreResult<T> {
2510
const client: QueryClient = useQueryClient();
26-
const observer = new QueriesObserver(client, queries);
2711

28-
const { subscribe } = readable(observer.getCurrentResult(), (set) => {
12+
function getDefaultQuery(newQueries: readonly [...QueriesOptions<T>]) {
13+
return newQueries.map(options => {
14+
const defaultedOptions = client.defaultQueryObserverOptions(
15+
options
16+
)
17+
// Make sure the results are already in fetching state before subscribing or updating options
18+
defaultedOptions.optimisticResults = true
19+
20+
return defaultedOptions
21+
})
22+
}
23+
24+
const defaultedQueries = getDefaultQuery(queries)
25+
const observer = new QueriesObserver(client, defaultedQueries);
26+
27+
const { subscribe } = readable((observer.getCurrentResult() as QueriesResults<T>), (set) => {
2928
return observer.subscribe(notifyManager.batchCalls(set));
3029
});
3130

32-
const setQueries = (newQueries: T) => {
31+
const setQueries = (newQueries: readonly [...QueriesOptions<T>]) => {
3332
if (observer.hasListeners()) {
34-
observer.setQueries(newQueries)
33+
const defaultedNewQueries = getDefaultQuery(newQueries)
34+
observer.setQueries(defaultedNewQueries, { listeners: false })
3535
}
3636
}
3737

src/query/useQuery.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function useQuery<
1919
TError = unknown,
2020
TData = TQueryFnData,
2121
TQueryKey extends QueryKey = QueryKey
22-
>(queryKey: TQueryKey, options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
22+
>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
2323
export function useQuery<
2424
TQueryFnData = unknown,
2525
TError = unknown,
@@ -28,7 +28,7 @@ export function useQuery<
2828
>(
2929
queryKey: TQueryKey,
3030
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
31-
options?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
31+
options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn'>
3232
): UseQueryStoreResult<TQueryFnData, TError, TData, TQueryKey>
3333
export default function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(
3434
arg1: TQueryKey | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
@@ -74,7 +74,7 @@ export default function useQuery<TQueryFnData = unknown, TError = unknown, TData
7474
// Include callbacks in batch renders
7575
defaultedOptions = setBatchCalls<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>(defaultedOptions)
7676
if (observer.hasListeners()) {
77-
observer.setOptions(defaultedOptions)
77+
observer.setOptions(defaultedOptions, { listeners: false })
7878
}
7979
}
8080

src/queryCore/broadcastQueryClient-experimental/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1+
import { BroadcastChannel } from 'broadcast-channel'
12
import { QueryClient } from '../core'
23

34
interface BroadcastQueryClientOptions {
45
queryClient: QueryClient
5-
broadcastChannel: string
6+
broadcastChannel?: string
67
}
78

8-
export async function broadcastQueryClient({
9+
export function broadcastQueryClient({
910
queryClient,
1011
broadcastChannel = 'svelte-query',
1112
}: BroadcastQueryClientOptions) {
12-
const { BroadcastChannel } = await import('broadcast-channel')
13-
1413
let transaction = false
1514
const tx = (cb: () => void) => {
1615
transaction = true

src/queryCore/core/focusManager.ts

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,51 @@
11
import { Subscribable } from './subscribable'
22
import { isServer } from './utils'
33

4-
class FocusManager extends Subscribable {
4+
type SetupFn = (
5+
setFocused: (focused?: boolean) => void
6+
) => (() => void) | undefined
7+
8+
export class FocusManager extends Subscribable {
59
private focused?: boolean
6-
private removeEventListener?: () => void
10+
private cleanup?: () => void
11+
12+
private setup: SetupFn
13+
14+
constructor() {
15+
super()
16+
this.setup = onFocus => {
17+
if (!isServer && window?.addEventListener) {
18+
const listener = () => onFocus()
19+
// Listen to visibillitychange and focus
20+
window.addEventListener('visibilitychange', listener, false)
21+
window.addEventListener('focus', listener, false)
22+
23+
return () => {
24+
// Be sure to unsubscribe if a new handler is set
25+
window.removeEventListener('visibilitychange', listener)
26+
window.removeEventListener('focus', listener)
27+
}
28+
}
29+
}
30+
}
731

832
protected onSubscribe(): void {
9-
if (!this.removeEventListener) {
10-
this.setDefaultEventListener()
33+
if (!this.cleanup) {
34+
this.setEventListener(this.setup)
1135
}
1236
}
1337

14-
setEventListener(
15-
setup: (onFocus: () => void) => (focused?: boolean) => void
16-
): void {
17-
if (this.removeEventListener) {
18-
this.removeEventListener()
38+
protected onUnsubscribe() {
39+
if (!this.hasListeners()) {
40+
this.cleanup?.()
41+
this.cleanup = undefined
1942
}
20-
this.removeEventListener = setup((focused?: boolean) => {
43+
}
44+
45+
setEventListener(setup: SetupFn): void {
46+
this.setup = setup
47+
this.cleanup?.()
48+
this.cleanup = setup(focused => {
2149
if (typeof focused === 'boolean') {
2250
this.setFocused(focused)
2351
} else {
@@ -54,22 +82,6 @@ class FocusManager extends Subscribable {
5482
document.visibilityState
5583
)
5684
}
57-
58-
private setDefaultEventListener() {
59-
if (!isServer && window?.addEventListener) {
60-
this.setEventListener(onFocus => {
61-
// Listen to visibillitychange and focus
62-
window.addEventListener('visibilitychange', onFocus, false)
63-
window.addEventListener('focus', onFocus, false)
64-
65-
return () => {
66-
// Be sure to unsubscribe if a new handler is set
67-
window.removeEventListener('visibilitychange', onFocus)
68-
window.removeEventListener('focus', onFocus)
69-
}
70-
})
71-
}
72-
}
7385
}
7486

7587
export const focusManager = new FocusManager()

src/queryCore/hydration/hydration.ts renamed to src/queryCore/core/hydration.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import type { QueryClient } from '../core/queryClient'
2-
import type { Query, QueryState } from '../core/query'
1+
import type { QueryClient } from './queryClient'
2+
import type { Query, QueryState } from './query'
33
import type {
44
MutationKey,
55
MutationOptions,
66
QueryKey,
77
QueryOptions,
8-
} from '../core/types'
9-
import type { Mutation, MutationState } from '../core/mutation'
8+
} from './types'
9+
import type { Mutation, MutationState } from './mutation'
1010

1111
// TYPES
1212

src/queryCore/core/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,17 @@ export { focusManager } from './focusManager'
1212
export { onlineManager } from './onlineManager'
1313
export { hashQueryKey, isError } from './utils'
1414
export { isCancelledError } from './retryer'
15+
export { dehydrate, hydrate } from './hydration'
1516

1617
// Types
1718
export * from './types'
18-
export type { Query as QueryCore } from './query'
19+
export type { Query as QueryCore} from './query'
20+
export type { Mutation as MutationCore} from './mutation'
1921
export type { Logger } from './logger'
22+
export type {
23+
DehydrateOptions,
24+
DehydratedState,
25+
HydrateOptions,
26+
ShouldDehydrateMutationFunction,
27+
ShouldDehydrateQueryFunction,
28+
} from './hydration'

0 commit comments

Comments
 (0)