@tanstack/react-query-persist-client 4.0.11-beta.0 → 4.2.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/build/cjs/_virtual/_rollupPluginBabelHelpers.js +33 -0
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/build/cjs/query-core/build/esm/index.js +314 -0
- package/build/cjs/query-core/build/esm/index.js.map +1 -0
- package/build/cjs/react-query-persist-client/src/PersistQueryClientProvider.js +83 -0
- package/build/cjs/react-query-persist-client/src/PersistQueryClientProvider.js.map +1 -0
- package/build/cjs/react-query-persist-client/src/index.js +27 -0
- package/build/cjs/react-query-persist-client/src/index.js.map +1 -0
- package/build/{lib/index.mjs → cjs/react-query-persist-client/src/persist.js} +12 -89
- package/build/cjs/react-query-persist-client/src/persist.js.map +1 -0
- package/build/cjs/react-query-persist-client/src/retryStrategies.js +39 -0
- package/build/cjs/react-query-persist-client/src/retryStrategies.js.map +1 -0
- package/build/esm/index.js +492 -0
- package/build/esm/index.js.map +1 -0
- package/build/stats-html.html +2689 -0
- package/build/stats.json +217 -0
- package/build/types/packages/query-core/src/focusManager.d.ts +16 -0
- package/build/types/packages/query-core/src/hydration.d.ts +34 -0
- package/build/types/packages/query-core/src/index.d.ts +20 -0
- package/build/types/packages/query-core/src/infiniteQueryBehavior.d.ts +15 -0
- package/build/types/packages/query-core/src/infiniteQueryObserver.d.ts +18 -0
- package/build/types/packages/query-core/src/logger.d.ts +8 -0
- package/build/types/packages/query-core/src/mutation.d.ts +70 -0
- package/build/types/packages/query-core/src/mutationCache.d.ts +57 -0
- package/build/types/packages/query-core/src/mutationObserver.d.ts +23 -0
- package/build/types/packages/query-core/src/notifyManager.d.ts +18 -0
- package/build/types/packages/query-core/src/onlineManager.d.ts +16 -0
- package/build/types/packages/query-core/src/queriesObserver.d.ts +23 -0
- package/build/types/packages/query-core/src/query.d.ts +119 -0
- package/build/types/packages/query-core/src/queryCache.d.ts +64 -0
- package/build/types/packages/query-core/src/queryClient.d.ts +65 -0
- package/build/types/packages/query-core/src/queryObserver.d.ts +61 -0
- package/build/types/packages/query-core/src/removable.d.ts +9 -0
- package/build/types/packages/query-core/src/retryer.d.ts +33 -0
- package/build/types/packages/query-core/src/subscribable.d.ts +10 -0
- package/build/types/packages/query-core/src/types.d.ts +419 -0
- package/build/types/packages/query-core/src/utils.d.ts +99 -0
- package/build/types/packages/react-query/src/Hydrate.d.ts +10 -0
- package/build/types/packages/react-query/src/QueryClientProvider.d.ts +24 -0
- package/build/types/packages/react-query/src/QueryErrorResetBoundary.d.ts +12 -0
- package/build/types/packages/react-query/src/index.d.ts +17 -0
- package/build/types/packages/react-query/src/isRestoring.d.ts +3 -0
- package/build/types/packages/react-query/src/reactBatchedUpdates.d.ts +2 -0
- package/build/types/packages/react-query/src/setBatchUpdatesFn.d.ts +1 -0
- package/build/types/packages/react-query/src/types.d.ts +34 -0
- package/build/types/packages/react-query/src/useBaseQuery.d.ts +3 -0
- package/build/types/packages/react-query/src/useInfiniteQuery.d.ts +5 -0
- package/build/types/packages/react-query/src/useIsFetching.d.ts +7 -0
- package/build/types/packages/react-query/src/useIsMutating.d.ts +7 -0
- package/build/types/packages/react-query/src/useMutation.d.ts +6 -0
- package/build/types/packages/react-query/src/useQueries.d.ts +49 -0
- package/build/types/packages/react-query/src/useQuery.d.ts +23 -0
- package/build/types/packages/react-query/src/utils.d.ts +1 -0
- package/build/{lib → types/packages/react-query-persist-client/src}/PersistQueryClientProvider.d.ts +0 -0
- package/build/types/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.d.ts +1 -0
- package/build/types/packages/react-query-persist-client/src/__tests__/persist.test.d.ts +1 -0
- package/build/{lib → types/packages/react-query-persist-client/src}/index.d.ts +0 -0
- package/build/{lib → types/packages/react-query-persist-client/src}/persist.d.ts +0 -0
- package/build/{lib → types/packages/react-query-persist-client/src}/retryStrategies.d.ts +0 -0
- package/build/types/tests/utils.d.ts +24 -0
- package/build/umd/index.development.js +303 -6
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +11 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +7 -20
- package/build/lib/index.js +0 -225
- package/build/lib/index.js.map +0 -1
- package/build/lib/index.mjs.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MutationKey, MutationFilters } from '@tanstack/query-core';
|
|
2
|
+
import { ContextOptions } from './types';
|
|
3
|
+
interface Options extends ContextOptions {
|
|
4
|
+
}
|
|
5
|
+
export declare function useIsMutating(filters?: MutationFilters, options?: Options): number;
|
|
6
|
+
export declare function useIsMutating(mutationKey?: MutationKey, filters?: Omit<MutationFilters, 'mutationKey'>, options?: Options): number;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MutationFunction, MutationKey } from '@tanstack/query-core';
|
|
2
|
+
import { UseMutationOptions, UseMutationResult } from './types';
|
|
3
|
+
export declare function useMutation<TData = unknown, TError = unknown, TVariables = void, TContext = unknown>(options: UseMutationOptions<TData, TError, TVariables, TContext>): UseMutationResult<TData, TError, TVariables, TContext>;
|
|
4
|
+
export declare function useMutation<TData = unknown, TError = unknown, TVariables = void, TContext = unknown>(mutationFn: MutationFunction<TData, TVariables>, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationFn'>): UseMutationResult<TData, TError, TVariables, TContext>;
|
|
5
|
+
export declare function useMutation<TData = unknown, TError = unknown, TVariables = void, TContext = unknown>(mutationKey: MutationKey, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey'>): UseMutationResult<TData, TError, TVariables, TContext>;
|
|
6
|
+
export declare function useMutation<TData = unknown, TError = unknown, TVariables = void, TContext = unknown>(mutationKey: MutationKey, mutationFn?: MutationFunction<TData, TVariables>, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey' | 'mutationFn'>): UseMutationResult<TData, TError, TVariables, TContext>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { QueryKey, QueryFunction } from '@tanstack/query-core';
|
|
2
|
+
import { UseQueryOptions, UseQueryResult } from './types';
|
|
3
|
+
declare type UseQueryOptionsForUseQueries<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'context'>;
|
|
4
|
+
declare type MAXIMUM_DEPTH = 20;
|
|
5
|
+
declare type GetOptions<T> = T extends {
|
|
6
|
+
queryFnData: infer TQueryFnData;
|
|
7
|
+
error?: infer TError;
|
|
8
|
+
data: infer TData;
|
|
9
|
+
} ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData> : T extends {
|
|
10
|
+
queryFnData: infer TQueryFnData;
|
|
11
|
+
error?: infer TError;
|
|
12
|
+
} ? UseQueryOptionsForUseQueries<TQueryFnData, TError> : T extends {
|
|
13
|
+
data: infer TData;
|
|
14
|
+
error?: infer TError;
|
|
15
|
+
} ? UseQueryOptionsForUseQueries<unknown, TError, TData> : T extends [infer TQueryFnData, infer TError, infer TData] ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData> : T extends [infer TQueryFnData, infer TError] ? UseQueryOptionsForUseQueries<TQueryFnData, TError> : T extends [infer TQueryFnData] ? UseQueryOptionsForUseQueries<TQueryFnData> : T extends {
|
|
16
|
+
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>;
|
|
17
|
+
select: (data: any) => infer TData;
|
|
18
|
+
} ? UseQueryOptionsForUseQueries<TQueryFnData, unknown, TData, TQueryKey> : T extends {
|
|
19
|
+
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>;
|
|
20
|
+
} ? UseQueryOptionsForUseQueries<TQueryFnData, unknown, TQueryFnData, TQueryKey> : UseQueryOptionsForUseQueries;
|
|
21
|
+
declare type GetResults<T> = T extends {
|
|
22
|
+
queryFnData: any;
|
|
23
|
+
error?: infer TError;
|
|
24
|
+
data: infer TData;
|
|
25
|
+
} ? UseQueryResult<TData, TError> : T extends {
|
|
26
|
+
queryFnData: infer TQueryFnData;
|
|
27
|
+
error?: infer TError;
|
|
28
|
+
} ? UseQueryResult<TQueryFnData, TError> : T extends {
|
|
29
|
+
data: infer TData;
|
|
30
|
+
error?: infer TError;
|
|
31
|
+
} ? UseQueryResult<TData, TError> : T extends [any, infer TError, infer TData] ? UseQueryResult<TData, TError> : T extends [infer TQueryFnData, infer TError] ? UseQueryResult<TQueryFnData, TError> : T extends [infer TQueryFnData] ? UseQueryResult<TQueryFnData> : T extends {
|
|
32
|
+
queryFn?: QueryFunction<unknown, any>;
|
|
33
|
+
select: (data: any) => infer TData;
|
|
34
|
+
} ? UseQueryResult<TData> : T extends {
|
|
35
|
+
queryFn?: QueryFunction<infer TQueryFnData, any>;
|
|
36
|
+
} ? UseQueryResult<TQueryFnData> : UseQueryResult;
|
|
37
|
+
/**
|
|
38
|
+
* QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
|
|
39
|
+
*/
|
|
40
|
+
export declare type QueriesOptions<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : 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 UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>[] ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>[] : UseQueryOptionsForUseQueries[];
|
|
41
|
+
/**
|
|
42
|
+
* QueriesResults reducer recursively maps type param to results
|
|
43
|
+
*/
|
|
44
|
+
export declare type QueriesResults<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryResult[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults<Head>] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]> : T extends UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, any>[] ? UseQueryResult<unknown extends TData ? TQueryFnData : TData, TError>[] : UseQueryResult[];
|
|
45
|
+
export declare function useQueries<T extends any[]>({ queries, context, }: {
|
|
46
|
+
queries: readonly [...QueriesOptions<T>];
|
|
47
|
+
context?: UseQueryOptions['context'];
|
|
48
|
+
}): QueriesResults<T>;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { QueryFunction, QueryKey } from '@tanstack/query-core';
|
|
2
|
+
import { DefinedUseQueryResult, UseQueryOptions, UseQueryResult } from './types';
|
|
3
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
|
|
4
|
+
initialData?: () => undefined;
|
|
5
|
+
}): UseQueryResult<TData, TError>;
|
|
6
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
|
|
7
|
+
initialData: TQueryFnData | (() => TQueryFnData);
|
|
8
|
+
}): DefinedUseQueryResult<TData, TError>;
|
|
9
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryResult<TData, TError>;
|
|
10
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'> & {
|
|
11
|
+
initialData?: () => undefined;
|
|
12
|
+
}): UseQueryResult<TData, TError>;
|
|
13
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'> & {
|
|
14
|
+
initialData: TQueryFnData | (() => TQueryFnData);
|
|
15
|
+
}): DefinedUseQueryResult<TData, TError>;
|
|
16
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>): UseQueryResult<TData, TError>;
|
|
17
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
|
|
18
|
+
initialData?: () => undefined;
|
|
19
|
+
}): UseQueryResult<TData, TError>;
|
|
20
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
|
|
21
|
+
initialData: TQueryFnData | (() => TQueryFnData);
|
|
22
|
+
}): DefinedUseQueryResult<TData, TError>;
|
|
23
|
+
export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn'>): UseQueryResult<TData, TError>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function shouldThrowError<T extends (...args: any[]) => boolean>(_useErrorBoundary: boolean | T | undefined, params: Parameters<T>): boolean;
|
package/build/{lib → types/packages/react-query-persist-client/src}/PersistQueryClientProvider.d.ts
RENAMED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { MutationOptions, QueryClient, QueryClientConfig } from '@tanstack/query-core';
|
|
4
|
+
export declare function createQueryClient(config?: QueryClientConfig): QueryClient;
|
|
5
|
+
export declare function mockVisibilityState(value: DocumentVisibilityState): jest.SpyInstance<DocumentVisibilityState, []>;
|
|
6
|
+
export declare function mockNavigatorOnLine(value: boolean): jest.SpyInstance<boolean, []>;
|
|
7
|
+
export declare const mockLogger: {
|
|
8
|
+
log: jest.Mock<any, any>;
|
|
9
|
+
warn: jest.Mock<any, any>;
|
|
10
|
+
error: jest.Mock<any, any>;
|
|
11
|
+
};
|
|
12
|
+
export declare function queryKey(): Array<string>;
|
|
13
|
+
export declare function sleep(timeout: number): Promise<void>;
|
|
14
|
+
export declare function setActTimeout(fn: () => void, ms?: number): NodeJS.Timeout;
|
|
15
|
+
/**
|
|
16
|
+
* Assert the parameter is of a specific type.
|
|
17
|
+
*/
|
|
18
|
+
export declare const expectType: <T>(_: T) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Assert the parameter is not typed as `any`
|
|
21
|
+
*/
|
|
22
|
+
export declare const expectTypeNotAny: <T>(_: 0 extends 1 & T ? never : T) => void;
|
|
23
|
+
export declare const executeMutation: (queryClient: QueryClient, options: MutationOptions<any, any, any, any>) => Promise<unknown>;
|
|
24
|
+
export declare function setIsServer(isServer: boolean): () => void;
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
11
|
(function (global, factory) {
|
|
12
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('
|
|
13
|
-
typeof define === 'function' && define.amd ? define(['exports', '
|
|
14
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ReactQueryPersistClient = {}, global.
|
|
15
|
-
})(this, (function (exports,
|
|
12
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@tanstack/react-query')) :
|
|
13
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', '@tanstack/react-query'], factory) :
|
|
14
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ReactQueryPersistClient = {}, global.React, global.ReactQuery));
|
|
15
|
+
})(this, (function (exports, React, reactQuery) { 'use strict';
|
|
16
16
|
|
|
17
17
|
function _interopNamespace(e) {
|
|
18
18
|
if (e && e.__esModule) return e;
|
|
@@ -34,6 +34,303 @@
|
|
|
34
34
|
|
|
35
35
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* query-core
|
|
39
|
+
*
|
|
40
|
+
* Copyright (c) TanStack
|
|
41
|
+
*
|
|
42
|
+
* This source code is licensed under the MIT license found in the
|
|
43
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
44
|
+
*
|
|
45
|
+
* @license MIT
|
|
46
|
+
*/
|
|
47
|
+
class Subscribable {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.listeners = [];
|
|
50
|
+
this.subscribe = this.subscribe.bind(this);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
subscribe(listener) {
|
|
54
|
+
this.listeners.push(listener);
|
|
55
|
+
this.onSubscribe();
|
|
56
|
+
return () => {
|
|
57
|
+
this.listeners = this.listeners.filter(x => x !== listener);
|
|
58
|
+
this.onUnsubscribe();
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
hasListeners() {
|
|
63
|
+
return this.listeners.length > 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
onSubscribe() {// Do nothing
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
onUnsubscribe() {// Do nothing
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// TYPES
|
|
75
|
+
// UTILS
|
|
76
|
+
const isServer = typeof window === 'undefined';
|
|
77
|
+
|
|
78
|
+
class FocusManager extends Subscribable {
|
|
79
|
+
constructor() {
|
|
80
|
+
super();
|
|
81
|
+
|
|
82
|
+
this.setup = onFocus => {
|
|
83
|
+
// addEventListener does not exist in React Native, but window does
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
85
|
+
if (!isServer && window.addEventListener) {
|
|
86
|
+
const listener = () => onFocus(); // Listen to visibillitychange and focus
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
window.addEventListener('visibilitychange', listener, false);
|
|
90
|
+
window.addEventListener('focus', listener, false);
|
|
91
|
+
return () => {
|
|
92
|
+
// Be sure to unsubscribe if a new handler is set
|
|
93
|
+
window.removeEventListener('visibilitychange', listener);
|
|
94
|
+
window.removeEventListener('focus', listener);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
onSubscribe() {
|
|
101
|
+
if (!this.cleanup) {
|
|
102
|
+
this.setEventListener(this.setup);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
onUnsubscribe() {
|
|
107
|
+
if (!this.hasListeners()) {
|
|
108
|
+
var _this$cleanup;
|
|
109
|
+
|
|
110
|
+
(_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);
|
|
111
|
+
this.cleanup = undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
setEventListener(setup) {
|
|
116
|
+
var _this$cleanup2;
|
|
117
|
+
|
|
118
|
+
this.setup = setup;
|
|
119
|
+
(_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);
|
|
120
|
+
this.cleanup = setup(focused => {
|
|
121
|
+
if (typeof focused === 'boolean') {
|
|
122
|
+
this.setFocused(focused);
|
|
123
|
+
} else {
|
|
124
|
+
this.onFocus();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
setFocused(focused) {
|
|
130
|
+
this.focused = focused;
|
|
131
|
+
|
|
132
|
+
if (focused) {
|
|
133
|
+
this.onFocus();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
onFocus() {
|
|
138
|
+
this.listeners.forEach(listener => {
|
|
139
|
+
listener();
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
isFocused() {
|
|
144
|
+
if (typeof this.focused === 'boolean') {
|
|
145
|
+
return this.focused;
|
|
146
|
+
} // document global can be unavailable in react native
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
if (typeof document === 'undefined') {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return [undefined, 'visible', 'prerender'].includes(document.visibilityState);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
new FocusManager();
|
|
158
|
+
|
|
159
|
+
class OnlineManager extends Subscribable {
|
|
160
|
+
constructor() {
|
|
161
|
+
super();
|
|
162
|
+
|
|
163
|
+
this.setup = onOnline => {
|
|
164
|
+
// addEventListener does not exist in React Native, but window does
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
166
|
+
if (!isServer && window.addEventListener) {
|
|
167
|
+
const listener = () => onOnline(); // Listen to online
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
window.addEventListener('online', listener, false);
|
|
171
|
+
window.addEventListener('offline', listener, false);
|
|
172
|
+
return () => {
|
|
173
|
+
// Be sure to unsubscribe if a new handler is set
|
|
174
|
+
window.removeEventListener('online', listener);
|
|
175
|
+
window.removeEventListener('offline', listener);
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
onSubscribe() {
|
|
182
|
+
if (!this.cleanup) {
|
|
183
|
+
this.setEventListener(this.setup);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
onUnsubscribe() {
|
|
188
|
+
if (!this.hasListeners()) {
|
|
189
|
+
var _this$cleanup;
|
|
190
|
+
|
|
191
|
+
(_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);
|
|
192
|
+
this.cleanup = undefined;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
setEventListener(setup) {
|
|
197
|
+
var _this$cleanup2;
|
|
198
|
+
|
|
199
|
+
this.setup = setup;
|
|
200
|
+
(_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);
|
|
201
|
+
this.cleanup = setup(online => {
|
|
202
|
+
if (typeof online === 'boolean') {
|
|
203
|
+
this.setOnline(online);
|
|
204
|
+
} else {
|
|
205
|
+
this.onOnline();
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
setOnline(online) {
|
|
211
|
+
this.online = online;
|
|
212
|
+
|
|
213
|
+
if (online) {
|
|
214
|
+
this.onOnline();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
onOnline() {
|
|
219
|
+
this.listeners.forEach(listener => {
|
|
220
|
+
listener();
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
isOnline() {
|
|
225
|
+
if (typeof this.online === 'boolean') {
|
|
226
|
+
return this.online;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return navigator.onLine;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
}
|
|
237
|
+
new OnlineManager();
|
|
238
|
+
|
|
239
|
+
// TYPES
|
|
240
|
+
// FUNCTIONS
|
|
241
|
+
function dehydrateMutation(mutation) {
|
|
242
|
+
return {
|
|
243
|
+
mutationKey: mutation.options.mutationKey,
|
|
244
|
+
state: mutation.state
|
|
245
|
+
};
|
|
246
|
+
} // Most config is not dehydrated but instead meant to configure again when
|
|
247
|
+
// consuming the de/rehydrated data, typically with useQuery on the client.
|
|
248
|
+
// Sometimes it might make sense to prefetch data on the server and include
|
|
249
|
+
// in the html-payload, but not consume it on the initial render.
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
function dehydrateQuery(query) {
|
|
253
|
+
return {
|
|
254
|
+
state: query.state,
|
|
255
|
+
queryKey: query.queryKey,
|
|
256
|
+
queryHash: query.queryHash
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function defaultShouldDehydrateMutation(mutation) {
|
|
261
|
+
return mutation.state.isPaused;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function defaultShouldDehydrateQuery(query) {
|
|
265
|
+
return query.state.status === 'success';
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function dehydrate(client, options = {}) {
|
|
269
|
+
const mutations = [];
|
|
270
|
+
const queries = [];
|
|
271
|
+
|
|
272
|
+
if (options.dehydrateMutations !== false) {
|
|
273
|
+
const shouldDehydrateMutation = options.shouldDehydrateMutation || defaultShouldDehydrateMutation;
|
|
274
|
+
client.getMutationCache().getAll().forEach(mutation => {
|
|
275
|
+
if (shouldDehydrateMutation(mutation)) {
|
|
276
|
+
mutations.push(dehydrateMutation(mutation));
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (options.dehydrateQueries !== false) {
|
|
282
|
+
const shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery;
|
|
283
|
+
client.getQueryCache().getAll().forEach(query => {
|
|
284
|
+
if (shouldDehydrateQuery(query)) {
|
|
285
|
+
queries.push(dehydrateQuery(query));
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
mutations,
|
|
292
|
+
queries
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
function hydrate(client, dehydratedState, options) {
|
|
296
|
+
if (typeof dehydratedState !== 'object' || dehydratedState === null) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const mutationCache = client.getMutationCache();
|
|
301
|
+
const queryCache = client.getQueryCache(); // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
302
|
+
|
|
303
|
+
const mutations = dehydratedState.mutations || []; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
304
|
+
|
|
305
|
+
const queries = dehydratedState.queries || [];
|
|
306
|
+
mutations.forEach(dehydratedMutation => {
|
|
307
|
+
var _options$defaultOptio;
|
|
308
|
+
|
|
309
|
+
mutationCache.build(client, { ...(options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations),
|
|
310
|
+
mutationKey: dehydratedMutation.mutationKey
|
|
311
|
+
}, dehydratedMutation.state);
|
|
312
|
+
});
|
|
313
|
+
queries.forEach(dehydratedQuery => {
|
|
314
|
+
var _options$defaultOptio2;
|
|
315
|
+
|
|
316
|
+
const query = queryCache.get(dehydratedQuery.queryHash); // Do not hydrate if an existing query exists with newer data
|
|
317
|
+
|
|
318
|
+
if (query) {
|
|
319
|
+
if (query.state.dataUpdatedAt < dehydratedQuery.state.dataUpdatedAt) {
|
|
320
|
+
query.setState(dehydratedQuery.state);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
return;
|
|
324
|
+
} // Restore query
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
queryCache.build(client, { ...(options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries),
|
|
328
|
+
queryKey: dehydratedQuery.queryKey,
|
|
329
|
+
queryHash: dehydratedQuery.queryHash
|
|
330
|
+
}, dehydratedQuery.state);
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
|
|
37
334
|
/**
|
|
38
335
|
* Restores persisted data to the QueryCache
|
|
39
336
|
* - data obtained from persister.restoreClient
|
|
@@ -58,7 +355,7 @@
|
|
|
58
355
|
if (expired || busted) {
|
|
59
356
|
persister.removeClient();
|
|
60
357
|
} else {
|
|
61
|
-
|
|
358
|
+
hydrate(queryClient, persistedClient.clientState, hydrateOptions);
|
|
62
359
|
}
|
|
63
360
|
} else {
|
|
64
361
|
persister.removeClient();
|
|
@@ -88,7 +385,7 @@
|
|
|
88
385
|
const persistClient = {
|
|
89
386
|
buster,
|
|
90
387
|
timestamp: Date.now(),
|
|
91
|
-
clientState:
|
|
388
|
+
clientState: dehydrate(queryClient, dehydrateOptions)
|
|
92
389
|
};
|
|
93
390
|
await persister.persistClient(persistClient);
|
|
94
391
|
}
|