honojs-middleware/packages/trpc-server/src/index.ts

39 lines
1.0 KiB
TypeScript
Raw Normal View History

import type { AnyRouter } from '@trpc/server'
2024-05-04 10:33:29 +08:00
import type {
FetchCreateContextFnOptions,
FetchHandlerRequestOptions,
} from '@trpc/server/adapters/fetch'
import { fetchRequestHandler } from '@trpc/server/adapters/fetch'
import type { Context, MiddlewareHandler } from 'hono'
2024-05-04 10:33:29 +08:00
type tRPCOptions = Omit<
FetchHandlerRequestOptions<AnyRouter>,
'req' | 'endpoint' | 'createContext'
> &
Partial<Pick<FetchHandlerRequestOptions<AnyRouter>, 'endpoint'>> & {
createContext?(
opts: FetchCreateContextFnOptions,
c: Context
): Record<string, unknown> | Promise<Record<string, unknown>>
}
2024-05-04 10:33:29 +08:00
export const trpcServer = ({
endpoint = '/trpc',
createContext,
...rest
}: tRPCOptions): MiddlewareHandler => {
return async (c) => {
const res = fetchRequestHandler({
...rest,
createContext: async (opts) => ({
2024-05-04 10:33:29 +08:00
...(createContext ? await createContext(opts, c) : {}),
// propagate env by default
env: c.env,
}),
endpoint,
req: c.req.raw,
})
return res
}
}