import type { DehydratedState, VueQueryPluginOptions, } from '@tanstack/vue-query' import { dehydrate, hydrate, QueryCache, QueryClient, VueQueryPlugin, } from '@tanstack/vue-query' export default defineNuxtPlugin((nuxt) => { const vueQueryState = useState('vue-query') const toast = useToast() const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { console.log(error) toast.add({ title: 'Error', description: error?.message || 'An unexpected error occurred.', }) }, }), }) const options: VueQueryPluginOptions = { queryClient } nuxt.vueApp.use(VueQueryPlugin, options) if (import.meta.server) { nuxt.hooks.hook('app:rendered', () => { vueQueryState.value = dehydrate(queryClient) }) } if (import.meta.client) { nuxt.hooks.hook('app:created', () => { hydrate(queryClient, vueQueryState.value) }) } })