@tanstack/svelte-query 5.0.0-beta.6 → 5.0.0-rc.0

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/dist/context.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  import type { QueryClient } from '@tanstack/query-core';
2
+ import type { Readable } from 'svelte/store';
2
3
  /** Retrieves a Client from Svelte's context */
3
4
  export declare const getQueryClientContext: () => QueryClient;
4
5
  /** Sets a QueryClient on Svelte's context */
5
6
  export declare const setQueryClientContext: (client: QueryClient) => void;
7
+ /** Retrieves a `isRestoring` from Svelte's context */
8
+ export declare const getIsRestoringContext: () => Readable<boolean>;
9
+ /** Sets a `isRestoring` on Svelte's context */
10
+ export declare const setIsRestoringContext: (isRestoring: Readable<boolean>) => void;
6
11
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,QAAO,WASxC,CAAA;AAED,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,WAAY,WAAW,KAAG,IAE3D,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAI5C,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,QAAO,WASxC,CAAA;AAED,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,WAAY,WAAW,KAAG,IAE3D,CAAA;AAID,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,QAAO,SAAS,OAAO,CAIxD,CAAA;AAED,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,gBAAiB,SAAS,OAAO,CAAC,KAAG,IAEtE,CAAA"}
package/dist/context.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { getContext, setContext } from 'svelte';
2
+ import { readable } from 'svelte/store';
2
3
  const _contextKey = '$$_queryClient';
3
4
  /** Retrieves a Client from Svelte's context */
4
5
  export const getQueryClientContext = () => {
@@ -12,3 +13,15 @@ export const getQueryClientContext = () => {
12
13
  export const setQueryClientContext = (client) => {
13
14
  setContext(_contextKey, client);
14
15
  };
16
+ const _isRestoringContextKey = '$$_isRestoring';
17
+ /** Retrieves a `isRestoring` from Svelte's context */
18
+ export const getIsRestoringContext = () => {
19
+ const isRestoring = getContext(_isRestoringContextKey);
20
+ if (!isRestoring)
21
+ return readable(false);
22
+ return isRestoring;
23
+ };
24
+ /** Sets a `isRestoring` on Svelte's context */
25
+ export const setIsRestoringContext = (isRestoring) => {
26
+ setContext(_isRestoringContextKey, isRestoring);
27
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"createBaseQuery.d.ts","sourceRoot":"","sources":["../../src/createBaseQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE5E,wBAAgB,eAAe,CAC7B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,SAAS,QAAQ,EAE1B,OAAO,EAAE,sBAAsB,CAC7B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,CACV,EACD,QAAQ,EAAE,OAAO,aAAa,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CA6CtC"}
1
+ {"version":3,"file":"createBaseQuery.d.ts","sourceRoot":"","sources":["../../src/createBaseQuery.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE5E,wBAAgB,eAAe,CAC7B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,SAAS,QAAQ,EAE1B,OAAO,EAAE,sBAAsB,CAC7B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,CACV,EACD,QAAQ,EAAE,OAAO,aAAa,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAyDtC"}
@@ -1,16 +1,20 @@
1
1
  import { derived, get, readable } from 'svelte/store';
2
2
  import { notifyManager } from '@tanstack/query-core';
3
+ import { useIsRestoring } from './useIsRestoring';
3
4
  import { useQueryClient } from './useQueryClient';
4
5
  import { isSvelteStore } from './utils';
5
6
  export function createBaseQuery(options, Observer, queryClient) {
6
7
  /** Load query client */
7
8
  const client = useQueryClient(queryClient);
9
+ const isRestoring = useIsRestoring();
8
10
  /** Converts options to a svelte store if not already a store object */
9
11
  const optionsStore = isSvelteStore(options) ? options : readable(options);
10
12
  /** Creates a store that has the default options applied */
11
- const defaultedOptionsStore = derived(optionsStore, ($optionsStore) => {
13
+ const defaultedOptionsStore = derived([optionsStore, isRestoring], ([$optionsStore, $isRestoring]) => {
12
14
  const defaultedOptions = client.defaultQueryOptions($optionsStore);
13
- defaultedOptions._optimisticResults = 'optimistic';
15
+ defaultedOptions._optimisticResults = $isRestoring
16
+ ? 'isRestoring'
17
+ : 'optimistic';
14
18
  return defaultedOptions;
15
19
  });
16
20
  /** Creates the observer */
@@ -20,8 +24,12 @@ export function createBaseQuery(options, Observer, queryClient) {
20
24
  // these changes should already be reflected in the optimistic result.
21
25
  observer.setOptions($defaultedOptions, { listeners: false });
22
26
  });
23
- const result = readable(observer.getCurrentResult(), (set) => {
24
- return observer.subscribe(notifyManager.batchCalls(set));
27
+ const result = derived(isRestoring, ($isRestoring, set) => {
28
+ const unsubscribe = $isRestoring
29
+ ? () => undefined
30
+ : observer.subscribe(notifyManager.batchCalls(set));
31
+ observer.updateResult();
32
+ return unsubscribe;
25
33
  });
26
34
  /** Subscribe to changes in result and defaultedOptionsStore */
27
35
  const { subscribe } = derived([result, defaultedOptionsStore], ([$result, $defaultedOptionsStore]) => {
@@ -40,12 +40,12 @@ type GetResults<T> = T extends {
40
40
  /**
41
41
  * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
42
42
  */
43
- export type QueriesOptions<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? QueryObserverOptionsForCreateQueries[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetOptions<Head>] : T extends [infer Head, ...infer Tail] ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]> : unknown[] extends T ? T : T extends QueryObserverOptionsForCreateQueries<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>[] ? QueryObserverOptionsForCreateQueries<TQueryFnData, TError, TData, TQueryKey>[] : QueryObserverOptionsForCreateQueries[];
43
+ export type QueriesOptions<T extends Array<any>, Result extends Array<any> = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? Array<QueryObserverOptionsForCreateQueries> : T extends [] ? [] : T extends [infer Head] ? [...Result, GetOptions<Head>] : T extends [infer Head, ...infer Tail] ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]> : Array<unknown> extends T ? T : T extends Array<QueryObserverOptionsForCreateQueries<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>> ? Array<QueryObserverOptionsForCreateQueries<TQueryFnData, TError, TData, TQueryKey>> : Array<QueryObserverOptionsForCreateQueries>;
44
44
  /**
45
45
  * QueriesResults reducer recursively maps type param to results
46
46
  */
47
- export type QueriesResults<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? QueryObserverResult[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults<Head>] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]> : T extends QueryObserverOptionsForCreateQueries<infer TQueryFnData, infer TError, infer TData, any>[] ? QueryObserverResult<unknown extends TData ? TQueryFnData : TData, unknown extends TError ? DefaultError : TError>[] : QueryObserverResult[];
48
- export declare function createQueries<T extends any[], TCombinedResult = QueriesResults<T>>({ queries, ...options }: {
47
+ export type QueriesResults<T extends Array<any>, Result extends Array<any> = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? Array<QueryObserverResult> : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults<Head>] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]> : T extends Array<QueryObserverOptionsForCreateQueries<infer TQueryFnData, infer TError, infer TData, any>> ? Array<QueryObserverResult<unknown extends TData ? TQueryFnData : TData, unknown extends TError ? DefaultError : TError>> : Array<QueryObserverResult>;
48
+ export declare function createQueries<T extends Array<any>, TCombinedResult = QueriesResults<T>>({ queries, ...options }: {
49
49
  queries: StoreOrVal<[...QueriesOptions<T>]>;
50
50
  combine?: (result: QueriesResults<T>) => TCombinedResult;
51
51
  }, queryClient?: QueryClient): Readable<TCombinedResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"createQueries.d.ts","sourceRoot":"","sources":["../../src/createQueries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createQueries.d.ts","sourceRoot":"","sources":["../../src/createQueries.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
1
  import { QueriesObserver, notifyManager } from '@tanstack/query-core';
2
2
  import { derived, get, readable } from 'svelte/store';
3
+ import { useIsRestoring } from './useIsRestoring';
3
4
  import { useQueryClient } from './useQueryClient';
4
5
  import { isSvelteStore } from './utils';
5
6
  export function createQueries({ queries, ...options }, queryClient) {
6
7
  const client = useQueryClient(queryClient);
7
- // const isRestoring = useIsRestoring()
8
+ const isRestoring = useIsRestoring();
8
9
  const queriesStore = isSvelteStore(queries) ? queries : readable(queries);
9
- const defaultedQueriesStore = derived(queriesStore, ($queries) => {
10
+ const defaultedQueriesStore = derived([queriesStore, isRestoring], ([$queries, $isRestoring]) => {
10
11
  return $queries.map((opts) => {
11
12
  const defaultedOptions = client.defaultQueryOptions(opts);
12
13
  // Make sure the results are already in fetching state before subscribing or updating options
13
- defaultedOptions._optimisticResults = 'optimistic';
14
+ defaultedOptions._optimisticResults = $isRestoring
15
+ ? 'isRestoring'
16
+ : 'optimistic';
14
17
  return defaultedOptions;
15
18
  });
16
19
  });
@@ -20,9 +23,22 @@ export function createQueries({ queries, ...options }, queryClient) {
20
23
  // these changes should already be reflected in the optimistic result.
21
24
  observer.setQueries($defaultedQueries, options, { listeners: false });
22
25
  });
23
- const [, getCombinedResult] = observer.getOptimisticResult(get(defaultedQueriesStore));
24
- const { subscribe } = readable(getCombinedResult(), (set) => {
25
- return observer.subscribe(notifyManager.batchCalls(set));
26
+ const [, getCombinedResult, trackResult] = observer.getOptimisticResult(get(defaultedQueriesStore));
27
+ const result = derived(isRestoring, ($isRestoring, set) => {
28
+ const unsubscribe = $isRestoring
29
+ ? () => undefined
30
+ : observer.subscribe(notifyManager.batchCalls(set));
31
+ return () => unsubscribe();
32
+ }, getCombinedResult(trackResult()));
33
+ const { subscribe } = derived([result, defaultedQueriesStore], ([$result, $defaultedQueries]) => {
34
+ $result = observer.getOptimisticResult($defaultedQueries)[0];
35
+ const observers = observer.getObservers();
36
+ return $defaultedQueries.map((query, index) => query.notifyOnChangeProps
37
+ ? // @ts-expect-error TCombinedResult should be an array
38
+ $result[index]
39
+ : // @ts-expect-error TCombinedResult should be an array
40
+ observers[index].trackResult($result[index]));
26
41
  });
42
+ // @ts-expect-error TCombinedResult should be an array
27
43
  return { subscribe };
28
44
  }
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { createMutation } from './createMutation';
8
8
  export { useQueryClient } from './useQueryClient';
9
9
  export { useIsFetching } from './useIsFetching';
10
10
  export { useIsMutating } from './useIsMutating';
11
+ export { useIsRestoring } from './useIsRestoring';
11
12
  export { useHydrate } from './useHydrate';
12
13
  export { default as HydrationBoundary } from './HydrationBoundary.svelte';
13
14
  export { default as QueryClientProvider } from './QueryClientProvider.svelte';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAA;AAGpC,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAA;AAGpC,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ export { createMutation } from './createMutation';
11
11
  export { useQueryClient } from './useQueryClient';
12
12
  export { useIsFetching } from './useIsFetching';
13
13
  export { useIsMutating } from './useIsMutating';
14
+ export { useIsRestoring } from './useIsRestoring';
14
15
  export { useHydrate } from './useHydrate';
15
16
  export { default as HydrationBoundary } from './HydrationBoundary.svelte';
16
17
  export { default as QueryClientProvider } from './QueryClientProvider.svelte';
@@ -0,0 +1,3 @@
1
+ import type { Readable } from 'svelte/store';
2
+ export declare function useIsRestoring(): Readable<boolean>;
3
+ //# sourceMappingURL=useIsRestoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsRestoring.d.ts","sourceRoot":"","sources":["../../src/useIsRestoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,wBAAgB,cAAc,IAAI,QAAQ,CAAC,OAAO,CAAC,CAElD"}
@@ -0,0 +1,4 @@
1
+ import { getIsRestoringContext } from './context';
2
+ export function useIsRestoring() {
3
+ return getIsRestoringContext();
4
+ }
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@tanstack/svelte-query",
3
- "version": "5.0.0-beta.6",
3
+ "version": "5.0.0-rc.0",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Svelte",
5
5
  "author": "Lachlan Collins",
6
6
  "license": "MIT",
7
- "repository": "tanstack/query",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/TanStack/query.git",
10
+ "directory": "packages/svelte-query"
11
+ },
8
12
  "homepage": "https://tanstack.com/query",
9
13
  "funding": {
10
14
  "type": "github",
@@ -30,7 +34,7 @@
30
34
  "!src/__tests__"
31
35
  ],
32
36
  "dependencies": {
33
- "@tanstack/query-core": "5.0.0-beta.6"
37
+ "@tanstack/query-core": "5.0.0-rc.0"
34
38
  },
35
39
  "devDependencies": {
36
40
  "@sveltejs/package": "^2.2.0",
package/src/context.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { getContext, setContext } from 'svelte'
2
+ import { readable } from 'svelte/store'
2
3
  import type { QueryClient } from '@tanstack/query-core'
4
+ import type { Readable } from 'svelte/store'
3
5
 
4
6
  const _contextKey = '$$_queryClient'
5
7
 
@@ -19,3 +21,17 @@ export const getQueryClientContext = (): QueryClient => {
19
21
  export const setQueryClientContext = (client: QueryClient): void => {
20
22
  setContext(_contextKey, client)
21
23
  }
24
+
25
+ const _isRestoringContextKey = '$$_isRestoring'
26
+
27
+ /** Retrieves a `isRestoring` from Svelte's context */
28
+ export const getIsRestoringContext = (): Readable<boolean> => {
29
+ const isRestoring = getContext(_isRestoringContextKey)
30
+ if (!isRestoring) return readable(false)
31
+ return isRestoring as Readable<boolean>
32
+ }
33
+
34
+ /** Sets a `isRestoring` on Svelte's context */
35
+ export const setIsRestoringContext = (isRestoring: Readable<boolean>): void => {
36
+ setContext(_isRestoringContextKey, isRestoring)
37
+ }
@@ -1,8 +1,14 @@
1
1
  import { derived, get, readable } from 'svelte/store'
2
2
  import { notifyManager } from '@tanstack/query-core'
3
+ import { useIsRestoring } from './useIsRestoring'
3
4
  import { useQueryClient } from './useQueryClient'
4
5
  import { isSvelteStore } from './utils'
5
- import type { QueryClient, QueryKey, QueryObserver } from '@tanstack/query-core'
6
+ import type {
7
+ QueryClient,
8
+ QueryKey,
9
+ QueryObserver,
10
+ QueryObserverResult,
11
+ } from '@tanstack/query-core'
6
12
  import type { CreateBaseQueryOptions, CreateBaseQueryResult } from './types'
7
13
 
8
14
  export function createBaseQuery<
@@ -24,16 +30,21 @@ export function createBaseQuery<
24
30
  ): CreateBaseQueryResult<TData, TError> {
25
31
  /** Load query client */
26
32
  const client = useQueryClient(queryClient)
27
-
33
+ const isRestoring = useIsRestoring()
28
34
  /** Converts options to a svelte store if not already a store object */
29
35
  const optionsStore = isSvelteStore(options) ? options : readable(options)
30
36
 
31
37
  /** Creates a store that has the default options applied */
32
- const defaultedOptionsStore = derived(optionsStore, ($optionsStore) => {
33
- const defaultedOptions = client.defaultQueryOptions($optionsStore)
34
- defaultedOptions._optimisticResults = 'optimistic'
35
- return defaultedOptions
36
- })
38
+ const defaultedOptionsStore = derived(
39
+ [optionsStore, isRestoring],
40
+ ([$optionsStore, $isRestoring]) => {
41
+ const defaultedOptions = client.defaultQueryOptions($optionsStore)
42
+ defaultedOptions._optimisticResults = $isRestoring
43
+ ? 'isRestoring'
44
+ : 'optimistic'
45
+ return defaultedOptions
46
+ },
47
+ )
37
48
 
38
49
  /** Creates the observer */
39
50
  const observer = new Observer<
@@ -50,8 +61,15 @@ export function createBaseQuery<
50
61
  observer.setOptions($defaultedOptions, { listeners: false })
51
62
  })
52
63
 
53
- const result = readable(observer.getCurrentResult(), (set) => {
54
- return observer.subscribe(notifyManager.batchCalls(set))
64
+ const result = derived<
65
+ typeof isRestoring,
66
+ QueryObserverResult<TData, TError>
67
+ >(isRestoring, ($isRestoring, set) => {
68
+ const unsubscribe = $isRestoring
69
+ ? () => undefined
70
+ : observer.subscribe(notifyManager.batchCalls(set))
71
+ observer.updateResult()
72
+ return unsubscribe
55
73
  })
56
74
 
57
75
  /** Subscribe to changes in result and defaultedOptionsStore */
@@ -1,5 +1,6 @@
1
1
  import { QueriesObserver, notifyManager } from '@tanstack/query-core'
2
2
  import { derived, get, readable } from 'svelte/store'
3
+ import { useIsRestoring } from './useIsRestoring'
3
4
  import { useQueryClient } from './useQueryClient'
4
5
  import { isSvelteStore } from './utils'
5
6
  import type { Readable } from 'svelte/store'
@@ -102,67 +103,75 @@ type GetResults<T> =
102
103
  * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
103
104
  */
104
105
  export type QueriesOptions<
105
- T extends any[],
106
- Result extends any[] = [],
106
+ T extends Array<any>,
107
+ Result extends Array<any> = [],
107
108
  Depth extends ReadonlyArray<number> = [],
108
109
  > = Depth['length'] extends MAXIMUM_DEPTH
109
- ? QueryObserverOptionsForCreateQueries[]
110
+ ? Array<QueryObserverOptionsForCreateQueries>
110
111
  : T extends []
111
112
  ? []
112
113
  : T extends [infer Head]
113
114
  ? [...Result, GetOptions<Head>]
114
115
  : T extends [infer Head, ...infer Tail]
115
116
  ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>
116
- : unknown[] extends T
117
+ : Array<unknown> extends T
117
118
  ? T
118
119
  : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
119
120
  // use this to infer the param types in the case of Array.map() argument
120
- T extends QueryObserverOptionsForCreateQueries<
121
- infer TQueryFnData,
122
- infer TError,
123
- infer TData,
124
- infer TQueryKey
125
- >[]
126
- ? QueryObserverOptionsForCreateQueries<
127
- TQueryFnData,
128
- TError,
129
- TData,
130
- TQueryKey
131
- >[]
121
+ T extends Array<
122
+ QueryObserverOptionsForCreateQueries<
123
+ infer TQueryFnData,
124
+ infer TError,
125
+ infer TData,
126
+ infer TQueryKey
127
+ >
128
+ >
129
+ ? Array<
130
+ QueryObserverOptionsForCreateQueries<
131
+ TQueryFnData,
132
+ TError,
133
+ TData,
134
+ TQueryKey
135
+ >
136
+ >
132
137
  : // Fallback
133
- QueryObserverOptionsForCreateQueries[]
138
+ Array<QueryObserverOptionsForCreateQueries>
134
139
 
135
140
  /**
136
141
  * QueriesResults reducer recursively maps type param to results
137
142
  */
138
143
  export type QueriesResults<
139
- T extends any[],
140
- Result extends any[] = [],
144
+ T extends Array<any>,
145
+ Result extends Array<any> = [],
141
146
  Depth extends ReadonlyArray<number> = [],
142
147
  > = Depth['length'] extends MAXIMUM_DEPTH
143
- ? QueryObserverResult[]
148
+ ? Array<QueryObserverResult>
144
149
  : T extends []
145
150
  ? []
146
151
  : T extends [infer Head]
147
152
  ? [...Result, GetResults<Head>]
148
153
  : T extends [infer Head, ...infer Tail]
149
154
  ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>
150
- : T extends QueryObserverOptionsForCreateQueries<
151
- infer TQueryFnData,
152
- infer TError,
153
- infer TData,
154
- any
155
- >[]
155
+ : T extends Array<
156
+ QueryObserverOptionsForCreateQueries<
157
+ infer TQueryFnData,
158
+ infer TError,
159
+ infer TData,
160
+ any
161
+ >
162
+ >
156
163
  ? // Dynamic-size (homogenous) CreateQueryOptions array: map directly to array of results
157
- QueryObserverResult<
158
- unknown extends TData ? TQueryFnData : TData,
159
- unknown extends TError ? DefaultError : TError
160
- >[]
164
+ Array<
165
+ QueryObserverResult<
166
+ unknown extends TData ? TQueryFnData : TData,
167
+ unknown extends TError ? DefaultError : TError
168
+ >
169
+ >
161
170
  : // Fallback
162
- QueryObserverResult[]
171
+ Array<QueryObserverResult>
163
172
 
164
173
  export function createQueries<
165
- T extends any[],
174
+ T extends Array<any>,
166
175
  TCombinedResult = QueriesResults<T>,
167
176
  >(
168
177
  {
@@ -175,19 +184,23 @@ export function createQueries<
175
184
  queryClient?: QueryClient,
176
185
  ): Readable<TCombinedResult> {
177
186
  const client = useQueryClient(queryClient)
178
- // const isRestoring = useIsRestoring()
187
+ const isRestoring = useIsRestoring()
179
188
 
180
189
  const queriesStore = isSvelteStore(queries) ? queries : readable(queries)
181
190
 
182
- const defaultedQueriesStore = derived(queriesStore, ($queries) => {
183
- return $queries.map((opts) => {
184
- const defaultedOptions = client.defaultQueryOptions(opts)
185
- // Make sure the results are already in fetching state before subscribing or updating options
186
- defaultedOptions._optimisticResults = 'optimistic'
187
-
188
- return defaultedOptions
189
- })
190
- })
191
+ const defaultedQueriesStore = derived(
192
+ [queriesStore, isRestoring],
193
+ ([$queries, $isRestoring]) => {
194
+ return $queries.map((opts) => {
195
+ const defaultedOptions = client.defaultQueryOptions(opts)
196
+ // Make sure the results are already in fetching state before subscribing or updating options
197
+ defaultedOptions._optimisticResults = $isRestoring
198
+ ? 'isRestoring'
199
+ : 'optimistic'
200
+ return defaultedOptions
201
+ })
202
+ },
203
+ )
191
204
  const observer = new QueriesObserver<TCombinedResult>(
192
205
  client,
193
206
  get(defaultedQueriesStore),
@@ -204,13 +217,40 @@ export function createQueries<
204
217
  )
205
218
  })
206
219
 
207
- const [, getCombinedResult] = observer.getOptimisticResult(
220
+ const [, getCombinedResult, trackResult] = observer.getOptimisticResult(
208
221
  get(defaultedQueriesStore),
209
222
  )
210
223
 
211
- const { subscribe } = readable(getCombinedResult() as any, (set) => {
212
- return observer.subscribe(notifyManager.batchCalls(set))
213
- })
224
+ const result = derived<
225
+ typeof isRestoring,
226
+ | Parameters<Parameters<typeof observer.subscribe>[0]>[0]
227
+ | ReturnType<typeof getCombinedResult>
228
+ >(
229
+ isRestoring,
230
+ ($isRestoring, set) => {
231
+ const unsubscribe = $isRestoring
232
+ ? () => undefined
233
+ : observer.subscribe(notifyManager.batchCalls(set))
214
234
 
235
+ return () => unsubscribe()
236
+ },
237
+ getCombinedResult(trackResult()),
238
+ )
239
+
240
+ const { subscribe } = derived(
241
+ [result, defaultedQueriesStore],
242
+ ([$result, $defaultedQueries]) => {
243
+ $result = observer.getOptimisticResult($defaultedQueries)[0]
244
+ const observers = observer.getObservers()
245
+ return $defaultedQueries.map((query, index) =>
246
+ query.notifyOnChangeProps
247
+ ? // @ts-expect-error TCombinedResult should be an array
248
+ $result[index]
249
+ : // @ts-expect-error TCombinedResult should be an array
250
+ observers[index]!.trackResult($result[index]),
251
+ )
252
+ },
253
+ )
254
+ // @ts-expect-error TCombinedResult should be an array
215
255
  return { subscribe }
216
256
  }
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export { createMutation } from './createMutation'
13
13
  export { useQueryClient } from './useQueryClient'
14
14
  export { useIsFetching } from './useIsFetching'
15
15
  export { useIsMutating } from './useIsMutating'
16
+ export { useIsRestoring } from './useIsRestoring'
16
17
  export { useHydrate } from './useHydrate'
17
18
  export { default as HydrationBoundary } from './HydrationBoundary.svelte'
18
19
  export { default as QueryClientProvider } from './QueryClientProvider.svelte'
@@ -0,0 +1,6 @@
1
+ import { getIsRestoringContext } from './context'
2
+ import type { Readable } from 'svelte/store'
3
+
4
+ export function useIsRestoring(): Readable<boolean> {
5
+ return getIsRestoringContext()
6
+ }