UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

130 lines (129 loc) 4.84 kB
import "./chunk-PXG64RU4.js"; // src/hydration.ts function defaultTransformerFn(data) { return data; } function dehydrateMutation(mutation) { return { mutationKey: mutation.options.mutationKey, state: mutation.state, ...mutation.options.scope && { scope: mutation.options.scope }, ...mutation.meta && { meta: mutation.meta } }; } function dehydrateQuery(query, serializeData, shouldRedactErrors) { var _a; return { state: { ...query.state, ...query.state.data !== void 0 && { data: serializeData(query.state.data) } }, queryKey: query.queryKey, queryHash: query.queryHash, ...query.state.status === "pending" && { promise: (_a = query.promise) == null ? void 0 : _a.then(serializeData).catch((error) => { if (!shouldRedactErrors(error)) { return Promise.reject(error); } if (process.env.NODE_ENV !== "production") { console.error( `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds` ); } return Promise.reject(new Error("redacted")); }) }, ...query.meta && { meta: query.meta } }; } function defaultShouldDehydrateMutation(mutation) { return mutation.state.isPaused; } function defaultShouldDehydrateQuery(query) { return query.state.status === "success"; } function defaultShouldRedactErrors(_) { return true; } function dehydrate(client, options = {}) { var _a, _b, _c, _d; const filterMutation = options.shouldDehydrateMutation ?? ((_a = client.getDefaultOptions().dehydrate) == null ? void 0 : _a.shouldDehydrateMutation) ?? defaultShouldDehydrateMutation; const mutations = client.getMutationCache().getAll().flatMap( (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : [] ); const filterQuery = options.shouldDehydrateQuery ?? ((_b = client.getDefaultOptions().dehydrate) == null ? void 0 : _b.shouldDehydrateQuery) ?? defaultShouldDehydrateQuery; const shouldRedactErrors = options.shouldRedactErrors ?? ((_c = client.getDefaultOptions().dehydrate) == null ? void 0 : _c.shouldRedactErrors) ?? defaultShouldRedactErrors; const serializeData = options.serializeData ?? ((_d = client.getDefaultOptions().dehydrate) == null ? void 0 : _d.serializeData) ?? defaultTransformerFn; const queries = client.getQueryCache().getAll().flatMap( (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData, shouldRedactErrors)] : [] ); return { mutations, queries }; } function hydrate(client, dehydratedState, options) { var _a, _b; if (typeof dehydratedState !== "object" || dehydratedState === null) { return; } const mutationCache = client.getMutationCache(); const queryCache = client.getQueryCache(); const deserializeData = ((_a = options == null ? void 0 : options.defaultOptions) == null ? void 0 : _a.deserializeData) ?? ((_b = client.getDefaultOptions().hydrate) == null ? void 0 : _b.deserializeData) ?? defaultTransformerFn; const mutations = dehydratedState.mutations || []; const queries = dehydratedState.queries || []; mutations.forEach(({ state, ...mutationOptions }) => { var _a2, _b2; mutationCache.build( client, { ...(_a2 = client.getDefaultOptions().hydrate) == null ? void 0 : _a2.mutations, ...(_b2 = options == null ? void 0 : options.defaultOptions) == null ? void 0 : _b2.mutations, ...mutationOptions }, state ); }); queries.forEach(({ queryKey, state, queryHash, meta, promise }) => { var _a2, _b2; let query = queryCache.get(queryHash); const data = state.data === void 0 ? state.data : deserializeData(state.data); if (query) { if (query.state.dataUpdatedAt < state.dataUpdatedAt) { const { fetchStatus: _ignored, ...serializedState } = state; query.setState({ ...serializedState, data }); } } else { query = queryCache.build( client, { ...(_a2 = client.getDefaultOptions().hydrate) == null ? void 0 : _a2.queries, ...(_b2 = options == null ? void 0 : options.defaultOptions) == null ? void 0 : _b2.queries, queryKey, queryHash, meta }, // Reset fetch status to idle to avoid // query being stuck in fetching state upon hydration { ...state, data, fetchStatus: "idle" } ); } if (promise) { const initialPromise = Promise.resolve(promise).then(deserializeData); void query.fetch(void 0, { initialPromise }); } }); } export { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate }; //# sourceMappingURL=hydration.js.map