honojs-middleware/packages/trpc-server
Yusuke Wada bd18b966ee
chore: migrate to `yarn v4` (#299)
* changeset

* chore: migrate to `yarn v4`

* remove changeset

* fixed Github Actions for `hello`

* fix gitignore

* add dependencies

* add ci for oauth-providers

* add dependencies

* add `publint`

* update msw
2023-12-13 15:54:00 +09:00
..
src feat(trpc-server): bump up Hono version "v3" (#50) 2023-02-18 23:37:25 +09:00
test feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00
CHANGELOG.md Version Packages (#51) 2023-02-18 23:39:44 +09:00
README.md feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00
jest.config.js feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00
package.json chore: migrate to `yarn v4` (#299) 2023-12-13 15:54:00 +09:00
tsconfig.cjs.json feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00
tsconfig.esm.json feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00
tsconfig.json feat: introduce tRPC server middleware (#36) 2023-02-04 23:37:15 +09:00

README.md

tRPC Server Middleware for Hono

tRPC Server Middleware adapts a tRPC server as middleware for Hono. Hono works on almost any JavaScript runtime, including Cloudflare Workers, Deno, and Bun. So, with this middleware, the same code will run as tRPC server.

Install

npm install @hono/trpc-server

Usage

Router:

import { initTRPC } from '@trpc/server'
import { z } from 'zod'

const t = initTRPC.create()

const publicProcedure = t.procedure
const router = t.router

export const appRouter = router({
  hello: publicProcedure.input(z.string().nullish()).query(({ input }) => {
    return `Hello ${input ?? 'World'}!`
  }),
})

export type AppRouter = typeof appRouter

Hono app using tRPC Server Middleware:

import { Hono } from 'hono'
import { trpcServer } from '@hono/trpc-server' // Deno 'npm:@hono/trpc-server'
import { appRouter } from './router'

const app = new Hono()

app.use(
  '/trpc/*',
  trpcServer({
    router: appRouter,
  })
)

export default app

Client:

import { createTRPCProxyClient, httpBatchLink } from '@trpc/client'
import type { AppRouter } from './router'

const client = createTRPCProxyClient<AppRouter>({
  links: [
    httpBatchLink({
      url: 'http://localhost:8787/trpc',
    }),
  ],
})

console.log(await client.hello.query('Hono'))

Author

Yusuke Wada https://github.com/yusukebe

License

MIT