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< FetchHandlerRequestOptions, '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 } }