UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

66 lines (65 loc) • 2.58 kB
import { QueryClient, defaultShouldDehydrateQuery, isServer } from "@tanstack/react-query"; import { getErrorStatus } from "./medusa-errors.js"; const defaultQueryClientConfig = { defaultOptions: { queries: { staleTime: 60000, gcTime: 300000, retry: (failureCount, error)=>{ const status = getErrorStatus(error); if (status && status >= 400 && status < 500) return false; return failureCount < 3; }, retryDelay: (attemptIndex)=>Math.min(1000 * 2 ** attemptIndex, 30000) }, mutations: { retry: 1, retryDelay: 1000 }, dehydrate: { shouldDehydrateQuery: (query)=>defaultShouldDehydrateQuery(query) || "pending" === query.state.status, shouldRedactErrors: ()=>true } } }; const mergeQueryClientConfig = (baseConfig, overrides)=>{ if (!overrides) return baseConfig; return { ...baseConfig, ...overrides, defaultOptions: { ...baseConfig.defaultOptions, ...overrides.defaultOptions, queries: { ...baseConfig.defaultOptions?.queries, ...overrides.defaultOptions?.queries }, mutations: { ...baseConfig.defaultOptions?.mutations, ...overrides.defaultOptions?.mutations }, dehydrate: { ...baseConfig.defaultOptions?.dehydrate, ...overrides.defaultOptions?.dehydrate }, hydrate: { ...baseConfig.defaultOptions?.hydrate, ...overrides.defaultOptions?.hydrate } } }; }; function createQueryClientConfig(overrides) { return mergeQueryClientConfig(defaultQueryClientConfig, overrides); } function makeQueryClient(overrides) { return new QueryClient(createQueryClientConfig(overrides)); } let browserQueryClient; function getQueryClient(overrides) { if (isServer) return makeQueryClient(overrides); if (browserQueryClient && overrides && "undefined" != typeof process && process.env?.NODE_ENV !== "production") console.warn("[getQueryClient] Browser QueryClient already exists; overrides will be ignored. Pass overrides only on first initialisation or use makeQueryClient for a fresh instance."); if (!browserQueryClient) browserQueryClient = makeQueryClient(overrides); return browserQueryClient; } export { createQueryClientConfig, getQueryClient, makeQueryClient };