import { initTRPC } from "@trpc/server"; import { type CreateNextContextOptions } from "@trpc/server/adapters/next"; import superjson from "superjson"; import { ZodError } from "zod"; import { db } from "~/server/db"; /** * 1. CONTEXT */ type CreateContextOptions = Record; const createInnerTRPCContext = (_opts: CreateContextOptions) => { return { db, }; }; export const createTRPCContext = (_opts: CreateNextContextOptions) => { return createInnerTRPCContext({}); }; /** * 2. INITIALIZATION */ const t = initTRPC.context().create({ transformer: superjson, errorFormatter({ shape, error }) { return { ...shape, data: { ...shape.data, zodError: error.cause instanceof ZodError ? error.cause.flatten() : null, }, }; }, }); /** * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT) */ export const createTRPCRouter = t.router; export const publicProcedure = t.procedure;