@tanstack/react-query-persist-client 5.0.0-alpha.1 → 5.0.0-alpha.12
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/lib/PersistQueryClientProvider.esm.js +2 -1
- package/build/lib/PersistQueryClientProvider.esm.js.map +1 -1
- package/build/lib/PersistQueryClientProvider.js +2 -1
- package/build/lib/PersistQueryClientProvider.js.map +1 -1
- package/build/lib/PersistQueryClientProvider.mjs +1 -0
- package/build/lib/PersistQueryClientProvider.mjs.map +1 -1
- package/build/umd/index.development.js +4 -18
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/PersistQueryClientProvider.test.tsx +8 -7
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.esm.js';
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import { persistQueryClient } from '@tanstack/query-persist-client-core';
|
|
@@ -30,7 +31,7 @@ const PersistQueryClientProvider = ({
|
|
|
30
31
|
});
|
|
31
32
|
promise.then(() => {
|
|
32
33
|
if (!isStale) {
|
|
33
|
-
refs.current.onSuccess
|
|
34
|
+
refs.current.onSuccess == null ? void 0 : refs.current.onSuccess();
|
|
34
35
|
setIsRestoring(false);
|
|
35
36
|
}
|
|
36
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistQueryClientProvider.esm.js","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["
|
|
1
|
+
{"version":3,"file":"PersistQueryClientProvider.esm.js","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["onSuccess","queryClient","isStale","unsubscribe"],"mappings":";;;;;;AAaO;;;;;;AAM0B;;AAE/B;;AAA4CA;AAAU;;;;AAGnBA;;AACnC;;;;AAKE;AACE;AACAC;AACF;;;;;AAME;AACF;AAEA;AACEC;AACAC;;AAEJ;AAEA;AACuB;;AACE;;AAG3B;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
|
|
@@ -51,7 +52,7 @@ const PersistQueryClientProvider = ({
|
|
|
51
52
|
});
|
|
52
53
|
promise.then(() => {
|
|
53
54
|
if (!isStale) {
|
|
54
|
-
refs.current.onSuccess
|
|
55
|
+
refs.current.onSuccess == null ? void 0 : refs.current.onSuccess();
|
|
55
56
|
setIsRestoring(false);
|
|
56
57
|
}
|
|
57
58
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistQueryClientProvider.js","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["
|
|
1
|
+
{"version":3,"file":"PersistQueryClientProvider.js","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["onSuccess","queryClient","isStale","unsubscribe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO;;;;;;AAM0B;;AAE/B;;AAA4CA;AAAU;;;;AAGnBA;;AACnC;;;;AAKE;AACE;AACAC;AACF;;;;;AAME;AACF;AAEA;AACEC;AACAC;;AAEJ;AAEA;AACuB;;AACE;;AAG3B;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistQueryClientProvider.mjs","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["
|
|
1
|
+
{"version":3,"file":"PersistQueryClientProvider.mjs","sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["onSuccess","queryClient","refs","isStale","unsubscribe"],"mappings":";;;;;;AAaO;;;;;;AAM0B;;AAE/B;;AAA4CA;AAAU;;;;AAGnBA;;AACnC;;;;AAKE;AACE;AACAC;AACF;;;AAIIC;;AAEF;AACF;AAEA;AACEC;AACAC;;AAEJ;AAEA;AACuB;;AACE;;AAG3B;;"}
|
|
@@ -52,24 +52,10 @@
|
|
|
52
52
|
return query.state.status === 'success';
|
|
53
53
|
}
|
|
54
54
|
function dehydrate(client, options = {}) {
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
client.getMutationCache().getAll().forEach(mutation => {
|
|
60
|
-
if (shouldDehydrateMutation(mutation)) {
|
|
61
|
-
mutations.push(dehydrateMutation(mutation));
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
if (options.dehydrateQueries !== false) {
|
|
66
|
-
const shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery;
|
|
67
|
-
client.getQueryCache().getAll().forEach(query => {
|
|
68
|
-
if (shouldDehydrateQuery(query)) {
|
|
69
|
-
queries.push(dehydrateQuery(query));
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
55
|
+
const filterMutation = options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;
|
|
56
|
+
const mutations = client.getMutationCache().getAll().flatMap(mutation => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []);
|
|
57
|
+
const filterQuery = options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;
|
|
58
|
+
const queries = client.getQueryCache().getAll().flatMap(query => filterQuery(query) ? [dehydrateQuery(query)] : []);
|
|
73
59
|
return {
|
|
74
60
|
mutations,
|
|
75
61
|
queries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../../../query-core/build/lib/hydration.mjs","../../../query-persist-client-core/build/lib/persist.mjs","../../../query-persist-client-core/build/lib/retryStrategies.mjs","../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["// TYPES\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state\n };\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query) {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === 'success';\n}\nfunction dehydrate(client, options = {}) {\n const mutations = [];\n const queries = [];\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation = options.shouldDehydrateMutation || defaultShouldDehydrateMutation;\n client.getMutationCache().getAll().forEach(mutation => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation));\n }\n });\n }\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery;\n client.getQueryCache().getAll().forEach(query => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query));\n }\n });\n }\n return {\n mutations,\n queries\n };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = dehydratedState.mutations || [];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = dehydratedState.queries || [];\n mutations.forEach(dehydratedMutation => {\n mutationCache.build(client, {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey\n }, dehydratedMutation.state);\n });\n queries.forEach(dehydratedQuery => {\n const query = queryCache.get(dehydratedQuery.queryHash);\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle'\n };\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState);\n }\n return;\n }\n\n // Restore query\n queryCache.build(client, {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash\n }, dehydratedQueryState);\n });\n}\n\nexport { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate };\n//# sourceMappingURL=hydration.mjs.map\n","import { hydrate, dehydrate } from '@tanstack/query-core';\n\n/**\n * Checks if emitted event is about cache change and not about observers.\n * Useful for persist, where we only want to trigger save when cache is changed.\n */\nconst cacheableEventTypes = ['added', 'removed', 'updated'];\nfunction isCacheableEventType(eventType) {\n return cacheableEventTypes.includes(eventType);\n}\n\n/**\n * Restores persisted data to the QueryCache\n * - data obtained from persister.restoreClient\n * - data is hydrated using hydrateOptions\n * If data is expired, busted, empty, or throws, it runs persister.removeClient\n */\nasync function persistQueryClientRestore({\n queryClient,\n persister,\n maxAge = 1000 * 60 * 60 * 24,\n buster = '',\n hydrateOptions\n}) {\n try {\n const persistedClient = await persister.restoreClient();\n if (persistedClient) {\n if (persistedClient.timestamp) {\n const expired = Date.now() - persistedClient.timestamp > maxAge;\n const busted = persistedClient.buster !== buster;\n if (expired || busted) {\n persister.removeClient();\n } else {\n hydrate(queryClient, persistedClient.clientState, hydrateOptions);\n }\n } else {\n persister.removeClient();\n }\n }\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(err);\n console.warn('Encountered an error attempting to restore client cache from persisted location. As a precaution, the persisted cache will be discarded.');\n }\n persister.removeClient();\n }\n}\n\n/**\n * Persists data from the QueryCache\n * - data dehydrated using dehydrateOptions\n * - data is persisted using persister.persistClient\n */\nasync function persistQueryClientSave({\n queryClient,\n persister,\n buster = '',\n dehydrateOptions\n}) {\n const persistClient = {\n buster,\n timestamp: Date.now(),\n clientState: dehydrate(queryClient, dehydrateOptions)\n };\n await persister.persistClient(persistClient);\n}\n\n/**\n * Subscribe to QueryCache and MutationCache updates (for persisting)\n * @returns an unsubscribe function (to discontinue monitoring)\n */\nfunction persistQueryClientSubscribe(props) {\n const unsubscribeQueryCache = props.queryClient.getQueryCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n const unusbscribeMutationCache = props.queryClient.getMutationCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n return () => {\n unsubscribeQueryCache();\n unusbscribeMutationCache();\n };\n}\n\n/**\n * Restores persisted data to QueryCache and persists further changes.\n */\nfunction persistQueryClient(props) {\n let hasUnsubscribed = false;\n let persistQueryClientUnsubscribe;\n const unsubscribe = () => {\n hasUnsubscribed = true;\n persistQueryClientUnsubscribe?.();\n };\n\n // Attempt restore\n const restorePromise = persistQueryClientRestore(props).then(() => {\n if (!hasUnsubscribed) {\n // Subscribe to changes in the query cache to trigger the save\n persistQueryClientUnsubscribe = persistQueryClientSubscribe(props);\n }\n });\n return [unsubscribe, restorePromise];\n}\n\nexport { persistQueryClient, persistQueryClientRestore, persistQueryClientSave, persistQueryClientSubscribe };\n//# sourceMappingURL=persist.mjs.map\n","const removeOldestQuery = ({\n persistedClient\n}) => {\n const mutations = [...persistedClient.clientState.mutations];\n const queries = [...persistedClient.clientState.queries];\n const client = {\n ...persistedClient,\n clientState: {\n mutations,\n queries\n }\n };\n\n // sort queries by dataUpdatedAt (oldest first)\n const sortedQueries = [...queries].sort((a, b) => a.state.dataUpdatedAt - b.state.dataUpdatedAt);\n\n // clean oldest query\n if (sortedQueries.length > 0) {\n const oldestData = sortedQueries.shift();\n client.clientState.queries = queries.filter(q => q !== oldestData);\n return client;\n }\n return undefined;\n};\n\nexport { removeOldestQuery };\n//# sourceMappingURL=retryStrategies.mjs.map\n","'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["PersistQueryClientProvider","client","children","persistOptions","onSuccess","props","isRestoring","setIsRestoring","React","useState","refs","useRef","useEffect","current","isStale","unsubscribe","promise","persistQueryClient","queryClient","then","QueryClientProvider","IsRestoringProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../../../query-core/build/lib/hydration.mjs","../../../query-persist-client-core/build/lib/persist.mjs","../../../query-persist-client-core/build/lib/retryStrategies.mjs","../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["// TYPES\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state\n };\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query) {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === 'success';\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(mutation => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []);\n const filterQuery = options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const queries = client.getQueryCache().getAll().flatMap(query => filterQuery(query) ? [dehydrateQuery(query)] : []);\n return {\n mutations,\n queries\n };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = dehydratedState.mutations || [];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = dehydratedState.queries || [];\n mutations.forEach(dehydratedMutation => {\n mutationCache.build(client, {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey\n }, dehydratedMutation.state);\n });\n queries.forEach(dehydratedQuery => {\n const query = queryCache.get(dehydratedQuery.queryHash);\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle'\n };\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState);\n }\n return;\n }\n\n // Restore query\n queryCache.build(client, {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash\n }, dehydratedQueryState);\n });\n}\n\nexport { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate };\n//# sourceMappingURL=hydration.mjs.map\n","import { hydrate, dehydrate } from '@tanstack/query-core';\n\n/**\n * Checks if emitted event is about cache change and not about observers.\n * Useful for persist, where we only want to trigger save when cache is changed.\n */\nconst cacheableEventTypes = ['added', 'removed', 'updated'];\nfunction isCacheableEventType(eventType) {\n return cacheableEventTypes.includes(eventType);\n}\n\n/**\n * Restores persisted data to the QueryCache\n * - data obtained from persister.restoreClient\n * - data is hydrated using hydrateOptions\n * If data is expired, busted, empty, or throws, it runs persister.removeClient\n */\nasync function persistQueryClientRestore({\n queryClient,\n persister,\n maxAge = 1000 * 60 * 60 * 24,\n buster = '',\n hydrateOptions\n}) {\n try {\n const persistedClient = await persister.restoreClient();\n if (persistedClient) {\n if (persistedClient.timestamp) {\n const expired = Date.now() - persistedClient.timestamp > maxAge;\n const busted = persistedClient.buster !== buster;\n if (expired || busted) {\n persister.removeClient();\n } else {\n hydrate(queryClient, persistedClient.clientState, hydrateOptions);\n }\n } else {\n persister.removeClient();\n }\n }\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(err);\n console.warn('Encountered an error attempting to restore client cache from persisted location. As a precaution, the persisted cache will be discarded.');\n }\n persister.removeClient();\n }\n}\n\n/**\n * Persists data from the QueryCache\n * - data dehydrated using dehydrateOptions\n * - data is persisted using persister.persistClient\n */\nasync function persistQueryClientSave({\n queryClient,\n persister,\n buster = '',\n dehydrateOptions\n}) {\n const persistClient = {\n buster,\n timestamp: Date.now(),\n clientState: dehydrate(queryClient, dehydrateOptions)\n };\n await persister.persistClient(persistClient);\n}\n\n/**\n * Subscribe to QueryCache and MutationCache updates (for persisting)\n * @returns an unsubscribe function (to discontinue monitoring)\n */\nfunction persistQueryClientSubscribe(props) {\n const unsubscribeQueryCache = props.queryClient.getQueryCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n const unusbscribeMutationCache = props.queryClient.getMutationCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n return () => {\n unsubscribeQueryCache();\n unusbscribeMutationCache();\n };\n}\n\n/**\n * Restores persisted data to QueryCache and persists further changes.\n */\nfunction persistQueryClient(props) {\n let hasUnsubscribed = false;\n let persistQueryClientUnsubscribe;\n const unsubscribe = () => {\n hasUnsubscribed = true;\n persistQueryClientUnsubscribe?.();\n };\n\n // Attempt restore\n const restorePromise = persistQueryClientRestore(props).then(() => {\n if (!hasUnsubscribed) {\n // Subscribe to changes in the query cache to trigger the save\n persistQueryClientUnsubscribe = persistQueryClientSubscribe(props);\n }\n });\n return [unsubscribe, restorePromise];\n}\n\nexport { persistQueryClient, persistQueryClientRestore, persistQueryClientSave, persistQueryClientSubscribe };\n//# sourceMappingURL=persist.mjs.map\n","const removeOldestQuery = ({\n persistedClient\n}) => {\n const mutations = [...persistedClient.clientState.mutations];\n const queries = [...persistedClient.clientState.queries];\n const client = {\n ...persistedClient,\n clientState: {\n mutations,\n queries\n }\n };\n\n // sort queries by dataUpdatedAt (oldest first)\n const sortedQueries = [...queries].sort((a, b) => a.state.dataUpdatedAt - b.state.dataUpdatedAt);\n\n // clean oldest query\n if (sortedQueries.length > 0) {\n const oldestData = sortedQueries.shift();\n client.clientState.queries = queries.filter(q => q !== oldestData);\n return client;\n }\n return undefined;\n};\n\nexport { removeOldestQuery };\n//# sourceMappingURL=retryStrategies.mjs.map\n","'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["PersistQueryClientProvider","client","children","persistOptions","onSuccess","props","isRestoring","setIsRestoring","React","useState","refs","useRef","useEffect","current","isStale","unsubscribe","promise","persistQueryClient","queryClient","then","QueryClientProvider","IsRestoringProvider"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tanstack/react-query")):"function"==typeof define&&define.amd?define(["exports","react","@tanstack/react-query"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactQueryPersistClient={},e.React,e.ReactQuery)}(this,(function(e,t,r){"use strict";function n(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=n(t);function i(e){return e.state.isPaused}function
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tanstack/react-query")):"function"==typeof define&&define.amd?define(["exports","react","@tanstack/react-query"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactQueryPersistClient={},e.React,e.ReactQuery)}(this,(function(e,t,r){"use strict";function n(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=n(t);function i(e){return{mutationKey:e.options.mutationKey,state:e.state}}function u(e){return{state:e.state,queryKey:e.queryKey,queryHash:e.queryHash}}function a(e){return e.state.isPaused}function c(e){return"success"===e.state.status}function o(e,t={}){const r=t.shouldDehydrateMutation??a,n=e.getMutationCache().getAll().flatMap((e=>r(e)?[i(e)]:[])),s=t.shouldDehydrateQuery??c;return{mutations:n,queries:e.getQueryCache().getAll().flatMap((e=>s(e)?[u(e)]:[]))}}const l=["added","removed","updated"];function y(e){return l.includes(e)}async function f({queryClient:e,persister:t,maxAge:r=864e5,buster:n="",hydrateOptions:s}){try{const i=await t.restoreClient();if(i)if(i.timestamp){const u=Date.now()-i.timestamp>r,a=i.buster!==n;u||a?t.removeClient():function(e,t,r){if("object"!=typeof t||null===t)return;const n=e.getMutationCache(),s=e.getQueryCache(),i=t.mutations||[],u=t.queries||[];i.forEach((t=>{n.build(e,{...r?.defaultOptions?.mutations,mutationKey:t.mutationKey},t.state)})),u.forEach((t=>{const n=s.get(t.queryHash),i={...t.state,fetchStatus:"idle"};n?n.state.dataUpdatedAt<i.dataUpdatedAt&&n.setState(i):s.build(e,{...r?.defaultOptions?.queries,queryKey:t.queryKey,queryHash:t.queryHash},i)}))}(e,i.clientState,s)}else t.removeClient()}catch(e){t.removeClient()}}async function d({queryClient:e,persister:t,buster:r="",dehydrateOptions:n}){const s={buster:r,timestamp:Date.now(),clientState:o(e,n)};await t.persistClient(s)}function p(e){const t=e.queryClient.getQueryCache().subscribe((t=>{y(t.type)&&d(e)})),r=e.queryClient.getMutationCache().subscribe((t=>{y(t.type)&&d(e)}));return()=>{t(),r()}}function h(e){let t,r=!1;return[()=>{r=!0,t?.()},f(e).then((()=>{r||(t=p(e))}))]}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},b.apply(this,arguments)}e.PersistQueryClientProvider=({client:e,children:t,persistOptions:n,onSuccess:i,...u})=>{const[a,c]=s.useState(!0),o=s.useRef({persistOptions:n,onSuccess:i});return s.useEffect((()=>{o.current={persistOptions:n,onSuccess:i}})),s.useEffect((()=>{let t=!1;c(!0);const[r,n]=h({...o.current.persistOptions,queryClient:e});return n.then((()=>{t||(o.current.onSuccess?.(),c(!1))})),()=>{t=!0,r()}}),[e]),s.createElement(r.QueryClientProvider,b({client:e},u),s.createElement(r.IsRestoringProvider,{value:a},t))},e.persistQueryClient=h,e.persistQueryClientRestore=f,e.persistQueryClientSave=d,e.persistQueryClientSubscribe=p,e.removeOldestQuery=({persistedClient:e})=>{const t=[...e.clientState.mutations],r=[...e.clientState.queries],n={...e,clientState:{mutations:t,queries:r}},s=[...r].sort(((e,t)=>e.state.dataUpdatedAt-t.state.dataUpdatedAt));if(s.length>0){const e=s.shift();return n.clientState.queries=r.filter((t=>t!==e)),n}}}));
|
|
2
2
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../../../query-core/build/lib/hydration.mjs","../../../query-persist-client-core/build/lib/persist.mjs","../../src/PersistQueryClientProvider.tsx","../../../query-persist-client-core/build/lib/retryStrategies.mjs"],"sourcesContent":["// TYPES\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state\n };\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query) {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === 'success';\n}\nfunction dehydrate(client, options = {}) {\n const mutations = [];\n const queries = [];\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation = options.shouldDehydrateMutation || defaultShouldDehydrateMutation;\n client.getMutationCache().getAll().forEach(mutation => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation));\n }\n });\n }\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery;\n client.getQueryCache().getAll().forEach(query => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query));\n }\n });\n }\n return {\n mutations,\n queries\n };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = dehydratedState.mutations || [];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = dehydratedState.queries || [];\n mutations.forEach(dehydratedMutation => {\n mutationCache.build(client, {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey\n }, dehydratedMutation.state);\n });\n queries.forEach(dehydratedQuery => {\n const query = queryCache.get(dehydratedQuery.queryHash);\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle'\n };\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState);\n }\n return;\n }\n\n // Restore query\n queryCache.build(client, {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash\n }, dehydratedQueryState);\n });\n}\n\nexport { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate };\n//# sourceMappingURL=hydration.mjs.map\n","import { hydrate, dehydrate } from '@tanstack/query-core';\n\n/**\n * Checks if emitted event is about cache change and not about observers.\n * Useful for persist, where we only want to trigger save when cache is changed.\n */\nconst cacheableEventTypes = ['added', 'removed', 'updated'];\nfunction isCacheableEventType(eventType) {\n return cacheableEventTypes.includes(eventType);\n}\n\n/**\n * Restores persisted data to the QueryCache\n * - data obtained from persister.restoreClient\n * - data is hydrated using hydrateOptions\n * If data is expired, busted, empty, or throws, it runs persister.removeClient\n */\nasync function persistQueryClientRestore({\n queryClient,\n persister,\n maxAge = 1000 * 60 * 60 * 24,\n buster = '',\n hydrateOptions\n}) {\n try {\n const persistedClient = await persister.restoreClient();\n if (persistedClient) {\n if (persistedClient.timestamp) {\n const expired = Date.now() - persistedClient.timestamp > maxAge;\n const busted = persistedClient.buster !== buster;\n if (expired || busted) {\n persister.removeClient();\n } else {\n hydrate(queryClient, persistedClient.clientState, hydrateOptions);\n }\n } else {\n persister.removeClient();\n }\n }\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(err);\n console.warn('Encountered an error attempting to restore client cache from persisted location. As a precaution, the persisted cache will be discarded.');\n }\n persister.removeClient();\n }\n}\n\n/**\n * Persists data from the QueryCache\n * - data dehydrated using dehydrateOptions\n * - data is persisted using persister.persistClient\n */\nasync function persistQueryClientSave({\n queryClient,\n persister,\n buster = '',\n dehydrateOptions\n}) {\n const persistClient = {\n buster,\n timestamp: Date.now(),\n clientState: dehydrate(queryClient, dehydrateOptions)\n };\n await persister.persistClient(persistClient);\n}\n\n/**\n * Subscribe to QueryCache and MutationCache updates (for persisting)\n * @returns an unsubscribe function (to discontinue monitoring)\n */\nfunction persistQueryClientSubscribe(props) {\n const unsubscribeQueryCache = props.queryClient.getQueryCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n const unusbscribeMutationCache = props.queryClient.getMutationCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n return () => {\n unsubscribeQueryCache();\n unusbscribeMutationCache();\n };\n}\n\n/**\n * Restores persisted data to QueryCache and persists further changes.\n */\nfunction persistQueryClient(props) {\n let hasUnsubscribed = false;\n let persistQueryClientUnsubscribe;\n const unsubscribe = () => {\n hasUnsubscribed = true;\n persistQueryClientUnsubscribe?.();\n };\n\n // Attempt restore\n const restorePromise = persistQueryClientRestore(props).then(() => {\n if (!hasUnsubscribed) {\n // Subscribe to changes in the query cache to trigger the save\n persistQueryClientUnsubscribe = persistQueryClientSubscribe(props);\n }\n });\n return [unsubscribe, restorePromise];\n}\n\nexport { persistQueryClient, persistQueryClientRestore, persistQueryClientSave, persistQueryClientSubscribe };\n//# sourceMappingURL=persist.mjs.map\n","'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n","const removeOldestQuery = ({\n persistedClient\n}) => {\n const mutations = [...persistedClient.clientState.mutations];\n const queries = [...persistedClient.clientState.queries];\n const client = {\n ...persistedClient,\n clientState: {\n mutations,\n queries\n }\n };\n\n // sort queries by dataUpdatedAt (oldest first)\n const sortedQueries = [...queries].sort((a, b) => a.state.dataUpdatedAt - b.state.dataUpdatedAt);\n\n // clean oldest query\n if (sortedQueries.length > 0) {\n const oldestData = sortedQueries.shift();\n client.clientState.queries = queries.filter(q => q !== oldestData);\n return client;\n }\n return undefined;\n};\n\nexport { removeOldestQuery };\n//# sourceMappingURL=retryStrategies.mjs.map\n"],"names":["defaultShouldDehydrateMutation","mutation","state","isPaused","defaultShouldDehydrateQuery","query","status","dehydrate","client","options","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","mutationKey","dehydrateMutation","dehydrateQueries","shouldDehydrateQuery","getQueryCache","queryKey","queryHash","dehydrateQuery","cacheableEventTypes","isCacheableEventType","eventType","includes","async","persistQueryClientRestore","queryClient","persister","maxAge","buster","hydrateOptions","persistedClient","restoreClient","timestamp","expired","Date","now","busted","removeClient","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState","hydrate","clientState","err","persistQueryClientSave","dehydrateOptions","persistClient","persistQueryClientSubscribe","props","unsubscribeQueryCache","subscribe","event","type","unusbscribeMutationCache","persistQueryClient","persistQueryClientUnsubscribe","hasUnsubscribed","then","children","persistOptions","onSuccess","isRestoring","setIsRestoring","React","useState","refs","useRef","useEffect","current","isStale","unsubscribe","promise","QueryClientProvider","_extends","createElement","IsRestoringProvider","value","sortedQueries","sort","a","b","length","oldestData","shift","filter","q"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../../../query-core/build/lib/hydration.mjs","../../../query-persist-client-core/build/lib/persist.mjs","../../src/PersistQueryClientProvider.tsx","../../../query-persist-client-core/build/lib/retryStrategies.mjs"],"sourcesContent":["// TYPES\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state\n };\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query) {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === 'success';\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(mutation => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []);\n const filterQuery = options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const queries = client.getQueryCache().getAll().flatMap(query => filterQuery(query) ? [dehydrateQuery(query)] : []);\n return {\n mutations,\n queries\n };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = dehydratedState.mutations || [];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = dehydratedState.queries || [];\n mutations.forEach(dehydratedMutation => {\n mutationCache.build(client, {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey\n }, dehydratedMutation.state);\n });\n queries.forEach(dehydratedQuery => {\n const query = queryCache.get(dehydratedQuery.queryHash);\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle'\n };\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState);\n }\n return;\n }\n\n // Restore query\n queryCache.build(client, {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash\n }, dehydratedQueryState);\n });\n}\n\nexport { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate };\n//# sourceMappingURL=hydration.mjs.map\n","import { hydrate, dehydrate } from '@tanstack/query-core';\n\n/**\n * Checks if emitted event is about cache change and not about observers.\n * Useful for persist, where we only want to trigger save when cache is changed.\n */\nconst cacheableEventTypes = ['added', 'removed', 'updated'];\nfunction isCacheableEventType(eventType) {\n return cacheableEventTypes.includes(eventType);\n}\n\n/**\n * Restores persisted data to the QueryCache\n * - data obtained from persister.restoreClient\n * - data is hydrated using hydrateOptions\n * If data is expired, busted, empty, or throws, it runs persister.removeClient\n */\nasync function persistQueryClientRestore({\n queryClient,\n persister,\n maxAge = 1000 * 60 * 60 * 24,\n buster = '',\n hydrateOptions\n}) {\n try {\n const persistedClient = await persister.restoreClient();\n if (persistedClient) {\n if (persistedClient.timestamp) {\n const expired = Date.now() - persistedClient.timestamp > maxAge;\n const busted = persistedClient.buster !== buster;\n if (expired || busted) {\n persister.removeClient();\n } else {\n hydrate(queryClient, persistedClient.clientState, hydrateOptions);\n }\n } else {\n persister.removeClient();\n }\n }\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(err);\n console.warn('Encountered an error attempting to restore client cache from persisted location. As a precaution, the persisted cache will be discarded.');\n }\n persister.removeClient();\n }\n}\n\n/**\n * Persists data from the QueryCache\n * - data dehydrated using dehydrateOptions\n * - data is persisted using persister.persistClient\n */\nasync function persistQueryClientSave({\n queryClient,\n persister,\n buster = '',\n dehydrateOptions\n}) {\n const persistClient = {\n buster,\n timestamp: Date.now(),\n clientState: dehydrate(queryClient, dehydrateOptions)\n };\n await persister.persistClient(persistClient);\n}\n\n/**\n * Subscribe to QueryCache and MutationCache updates (for persisting)\n * @returns an unsubscribe function (to discontinue monitoring)\n */\nfunction persistQueryClientSubscribe(props) {\n const unsubscribeQueryCache = props.queryClient.getQueryCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n const unusbscribeMutationCache = props.queryClient.getMutationCache().subscribe(event => {\n if (isCacheableEventType(event.type)) {\n persistQueryClientSave(props);\n }\n });\n return () => {\n unsubscribeQueryCache();\n unusbscribeMutationCache();\n };\n}\n\n/**\n * Restores persisted data to QueryCache and persists further changes.\n */\nfunction persistQueryClient(props) {\n let hasUnsubscribed = false;\n let persistQueryClientUnsubscribe;\n const unsubscribe = () => {\n hasUnsubscribed = true;\n persistQueryClientUnsubscribe?.();\n };\n\n // Attempt restore\n const restorePromise = persistQueryClientRestore(props).then(() => {\n if (!hasUnsubscribed) {\n // Subscribe to changes in the query cache to trigger the save\n persistQueryClientUnsubscribe = persistQueryClientSubscribe(props);\n }\n });\n return [unsubscribe, restorePromise];\n}\n\nexport { persistQueryClient, persistQueryClientRestore, persistQueryClientSave, persistQueryClientSubscribe };\n//# sourceMappingURL=persist.mjs.map\n","'use client'\nimport * as React from 'react'\n\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\nimport { QueryClientProvider, IsRestoringProvider } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => void\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(() => {\n if (!isStale) {\n refs.current.onSuccess?.()\n setIsRestoring(false)\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n","const removeOldestQuery = ({\n persistedClient\n}) => {\n const mutations = [...persistedClient.clientState.mutations];\n const queries = [...persistedClient.clientState.queries];\n const client = {\n ...persistedClient,\n clientState: {\n mutations,\n queries\n }\n };\n\n // sort queries by dataUpdatedAt (oldest first)\n const sortedQueries = [...queries].sort((a, b) => a.state.dataUpdatedAt - b.state.dataUpdatedAt);\n\n // clean oldest query\n if (sortedQueries.length > 0) {\n const oldestData = sortedQueries.shift();\n client.clientState.queries = queries.filter(q => q !== oldestData);\n return client;\n }\n return undefined;\n};\n\nexport { removeOldestQuery };\n//# sourceMappingURL=retryStrategies.mjs.map\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","cacheableEventTypes","isCacheableEventType","eventType","includes","async","persistQueryClientRestore","queryClient","persister","maxAge","buster","hydrateOptions","persistedClient","restoreClient","timestamp","expired","Date","now","busted","removeClient","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState","hydrate","clientState","err","persistQueryClientSave","dehydrateOptions","persistClient","persistQueryClientSubscribe","props","unsubscribeQueryCache","subscribe","event","type","unusbscribeMutationCache","persistQueryClient","persistQueryClientUnsubscribe","hasUnsubscribed","then","children","persistOptions","onSuccess","isRestoring","setIsRestoring","React","useState","refs","useRef","useEffect","current","isStale","unsubscribe","promise","QueryClientProvider","_extends","createElement","IsRestoringProvider","value","sortedQueries","sort","a","b","length","oldestData","shift","filter","q"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-query-persist-client",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.12",
|
|
4
4
|
"description": "React bindings to work with persisters in TanStack/react-query",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
"@types/react-dom": "^18.0.5",
|
|
33
33
|
"react": "^18.2.0",
|
|
34
34
|
"react-dom": "^18.2.0",
|
|
35
|
-
"@tanstack/react-query": "5.0.0-alpha.
|
|
35
|
+
"@tanstack/react-query": "5.0.0-alpha.12"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@tanstack/query-persist-client-core": "5.0.0-alpha.
|
|
38
|
+
"@tanstack/query-persist-client-core": "5.0.0-alpha.12"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@tanstack/react-query": "5.0.0-alpha.
|
|
41
|
+
"@tanstack/react-query": "5.0.0-alpha.12"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"clean": "rimraf ./build",
|
|
45
45
|
"test:eslint": "eslint --ext .ts,.tsx ./src",
|
|
46
46
|
"test:types": "tsc",
|
|
47
|
-
"test:lib": "
|
|
47
|
+
"test:lib": "vitest run --coverage",
|
|
48
48
|
"test:lib:dev": "pnpm run test:lib --watch",
|
|
49
49
|
"build:types": "tsc --build"
|
|
50
50
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
2
|
import { render, waitFor } from '@testing-library/react'
|
|
3
|
+
import { vi } from 'vitest'
|
|
3
4
|
|
|
4
5
|
import type {
|
|
5
6
|
UseQueryResult,
|
|
@@ -382,7 +383,7 @@ describe('PersistQueryClientProvider', () => {
|
|
|
382
383
|
)
|
|
383
384
|
}
|
|
384
385
|
|
|
385
|
-
const onSuccess =
|
|
386
|
+
const onSuccess = vi.fn()
|
|
386
387
|
|
|
387
388
|
const rendered = render(
|
|
388
389
|
<PersistQueryClientProvider
|
|
@@ -402,14 +403,14 @@ describe('PersistQueryClientProvider', () => {
|
|
|
402
403
|
|
|
403
404
|
test('should remove cache after non-successful restoring', async () => {
|
|
404
405
|
const key = queryKey()
|
|
405
|
-
const consoleMock =
|
|
406
|
-
const consoleWarn =
|
|
406
|
+
const consoleMock = vi.spyOn(console, 'error')
|
|
407
|
+
const consoleWarn = vi
|
|
407
408
|
.spyOn(console, 'warn')
|
|
408
409
|
.mockImplementation(() => undefined)
|
|
409
410
|
consoleMock.mockImplementation(() => undefined)
|
|
410
411
|
|
|
411
412
|
const queryClient = createQueryClient()
|
|
412
|
-
const removeClient =
|
|
413
|
+
const removeClient = vi.fn()
|
|
413
414
|
|
|
414
415
|
const [error, persister] = createMockErrorPersister(removeClient)
|
|
415
416
|
|
|
@@ -463,13 +464,13 @@ describe('PersistQueryClientProvider', () => {
|
|
|
463
464
|
|
|
464
465
|
queryClient.clear()
|
|
465
466
|
|
|
466
|
-
const onSuccess =
|
|
467
|
+
const onSuccess = vi.fn()
|
|
467
468
|
|
|
468
|
-
const queryFn1 =
|
|
469
|
+
const queryFn1 = vi.fn().mockImplementation(async () => {
|
|
469
470
|
await sleep(10)
|
|
470
471
|
return 'queryFn1'
|
|
471
472
|
})
|
|
472
|
-
const queryFn2 =
|
|
473
|
+
const queryFn2 = vi.fn().mockImplementation(async () => {
|
|
473
474
|
await sleep(10)
|
|
474
475
|
return 'queryFn2'
|
|
475
476
|
})
|