/
githubmirror
/
trpc
Обзор
Документация
Войти
/
githubmirror
/
trpc
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
examples/standalone-server/src/server.ts
87 строк
2 KB
Alex / KATT
chore: add `consistent-type-(imports|exports)` lint rules (#5274)
08 янв 2024, 01:33
Не верифицирован
08 янв 2024, 01:33
b93149c
Код
Авторство
О чём код?
import { initTRPC } from '@trpc/server'; import type { CreateHTTPContextOptions } from '@trpc/server/adapters/standalone'; import { createHTTPServer } from '@trpc/server/adapters/standalone'; import type { CreateWSSContextFnOptions } from '@trpc/server/adapters/ws'; import { applyWSSHandler } from '@trpc/server/adapters/ws'; import { observable } from '@trpc/server/observable'; import { WebSocketServer } from 'ws'; import { z } from 'zod'; // This is how you initialize a context for the server function createContext( opts: CreateHTTPContextOptions | CreateWSSContextFnOptions, ) { return {}; } type Context = Awaited<ReturnType<typeof createContext>>; const t = initTRPC.context<Context>().create(); const publicProcedure = t.procedure; const router = t.router; const greetingRouter = router({ hello: publicProcedure .input( z.object({ name: z.string(), }), ) .query(({ input }) => `Hello, ${input.name}!`), }); const postRouter = router({ createPost: publicProcedure .input( z.object({ title: z.string(), text: z.string(), }), ) .mutation(({ input }) => { // imagine db call here return { id: `${Math.random()}`, ...input, }; }), randomNumber: publicProcedure.subscription(() => { return observable<{ randomNumber: number }>((emit) => { const timer = setInterval(() => { // emits a number every second emit.next({ randomNumber: Math.random() }); }, 200); return () => { clearInterval(timer); }; }); }), }); // Merge routers together const appRouter = router({ greeting: greetingRouter, post: postRouter, }); export type AppRouter = typeof appRouter; // http server const server = createHTTPServer({ router: appRouter, createContext, }); // ws server const wss = new WebSocketServer({ server }); applyWSSHandler<AppRouter>({ wss, router: appRouter, createContext, }); // setInterval(() => { // console.log('Connected clients', wss.clients.size); // }, 1000); server.listen(2022);