@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 +5 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +13 -0
- package/dist/createBaseQuery.d.ts.map +1 -1
- package/dist/createBaseQuery.js +12 -4
- package/dist/createQueries.d.ts +3 -3
- package/dist/createQueries.d.ts.map +1 -1
- package/dist/createQueries.js +22 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/useIsRestoring.d.ts +3 -0
- package/dist/useIsRestoring.d.ts.map +1 -0
- package/dist/useIsRestoring.js +4 -0
- package/package.json +7 -3
- package/src/context.ts +16 -0
- package/src/createBaseQuery.ts +27 -9
- package/src/createQueries.ts +86 -46
- package/src/index.ts +1 -0
- package/src/useIsRestoring.ts +6 -0
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
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"
|
|
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":"
|
|
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"}
|
package/dist/createBaseQuery.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
24
|
-
|
|
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]) => {
|
package/dist/createQueries.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
48
|
-
export declare function createQueries<T extends any
|
|
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":"
|
|
1
|
+
{"version":3,"file":"createQueries.d.ts","sourceRoot":"","sources":["../../src/createQueries.ts"],"names":[],"mappings":"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"}
|
package/dist/createQueries.js
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
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
|
|
25
|
-
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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 @@
|
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/svelte-query",
|
|
3
|
-
"version": "5.0.0-
|
|
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":
|
|
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-
|
|
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
|
+
}
|
package/src/createBaseQuery.ts
CHANGED
|
@@ -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 {
|
|
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(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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 =
|
|
54
|
-
|
|
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 */
|
package/src/createQueries.ts
CHANGED
|
@@ -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
|
|
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
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
187
|
+
const isRestoring = useIsRestoring()
|
|
179
188
|
|
|
180
189
|
const queriesStore = isSvelteStore(queries) ? queries : readable(queries)
|
|
181
190
|
|
|
182
|
-
const defaultedQueriesStore = derived(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
|
212
|
-
|
|
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'
|