import type { AnyRouter } from '@trpc/server' import type { FetchCreateContextFnOptions, FetchHandlerRequestOptions } from '@trpc/server/adapters/fetch' import { fetchRequestHandler } from '@trpc/server/adapters/fetch' import type { Context, MiddlewareHandler } from 'hono' type tRPCOptions = Omit, 'req' | 'endpoint' | 'createContext'> & Partial, 'endpoint'>> & { createContext? (opts: FetchCreateContextFnOptions, c: Context): Record | Promise> } export const trpcServer = ({ endpoint = '/trpc', createContext, ...rest }: tRPCOptions): MiddlewareHandler => { return async (c) => { const res = fetchRequestHandler({ ...rest, createContext: async (opts) => ({ ...createContext ? await createContext(opts, c) : {}, // propagate env by default env: c.env, }), endpoint, req: c.req.raw, }) return res } }