UNPKG

@better-auth-ui/core

Version:

Authentication components and data utilities for [Better Auth](https://better-auth.com), available for React and Solid.

76 lines (66 loc) 1.71 kB
import { matchMutation, matchQuery, type QueryClient, type QueryKey } from "@tanstack/query-core" import { authMutationKeys } from "./auth-mutation-keys" type AuthMutationMeta = { invalidates?: Array<QueryKey> awaits?: Array<QueryKey> removes?: Array<QueryKey> } /** * Sets up global mutation invalidation for Better Auth mutations. * * @param queryClient * @returns Cleanup function */ export function setupMutationInvalidation(queryClient: QueryClient) { const mutationCache = queryClient.getMutationCache() const previousOnSuccess = mutationCache.config.onSuccess mutationCache.config.onSuccess = async ( data, variables, onMutateResult, mutation, context ) => { await previousOnSuccess?.( data, variables, onMutateResult, mutation, context ) if (!matchMutation({ mutationKey: authMutationKeys.all }, mutation)) { return } const { invalidates, awaits, removes } = (mutation.meta ?? {}) as AuthMutationMeta if (removes?.length) { queryClient.removeQueries({ predicate: (query) => removes.some((queryKey) => matchQuery({ queryKey }, query)) }) } if (invalidates?.length) { queryClient.invalidateQueries({ predicate: (query) => invalidates.some((queryKey) => matchQuery({ queryKey }, query)) }) } if (awaits?.length) { return queryClient.invalidateQueries( { predicate: (query) => awaits.some((queryKey) => matchQuery({ queryKey }, query)) }, { cancelRefetch: false } ) } } return () => { mutationCache.config.onSuccess = previousOnSuccess } }