Template
Vercel auto-detected the Hydrogen preset from the @shopify/hydrogen dependency and failed building a 'hydrogen' Edge Function. The app is now TanStack Start (SSR via Nitro), and vercel.json pins the tanstack-start preset and installs with Corepack so Yarn 4 is used. - Router factory with per-request QueryClient and SSR query dehydration - Hono API mounted as a Start server route at /api/* - Account reads in loaders go through server functions (cookies on SSR) - Loaders prefetch listing pages so products are in the server HTML - Add graphql peer dependency for gql.tada Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
986 B
TypeScript
31 lines
986 B
TypeScript
import { queryOptions } from '@tanstack/react-query';
|
|
import {
|
|
getAccountCustomer,
|
|
getSessionCustomer,
|
|
} from '@/server/account.functions';
|
|
|
|
// The customer token lives in an httpOnly cookie, so account state always comes
|
|
// from the server (server functions here; mutations via src/server/account.ts).
|
|
|
|
export type SessionCustomer = NonNullable<
|
|
Awaited<ReturnType<typeof getSessionCustomer>>
|
|
>;
|
|
|
|
/** Every account query shares this prefix, so sign-in/out can reset them all. */
|
|
export const ACCOUNT_QUERY_KEY = ['account'] as const;
|
|
|
|
export const sessionQueryOptions = () =>
|
|
queryOptions({
|
|
queryKey: [...ACCOUNT_QUERY_KEY, 'me'],
|
|
// A failed probe reads as signed out.
|
|
queryFn: () => getSessionCustomer().catch(() => null),
|
|
});
|
|
|
|
export const customerQueryOptions = () =>
|
|
queryOptions({
|
|
queryKey: [...ACCOUNT_QUERY_KEY, 'customer'],
|
|
queryFn: () => getAccountCustomer(),
|
|
// Orders should reflect a purchase made a moment ago.
|
|
staleTime: 0,
|
|
});
|