49 lines
984 B
TypeScript
49 lines
984 B
TypeScript
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<string, never>;
|
|
|
|
const createInnerTRPCContext = (_opts: CreateContextOptions) => {
|
|
return {
|
|
db,
|
|
};
|
|
};
|
|
|
|
export const createTRPCContext = (_opts: CreateNextContextOptions) => {
|
|
return createInnerTRPCContext({});
|
|
};
|
|
|
|
/**
|
|
* 2. INITIALIZATION
|
|
*/
|
|
|
|
const t = initTRPC.context<typeof createTRPCContext>().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;
|