UNPKG

bun-ws-router

Version:

A simple and efficient WebSocket router for Bun with Zod/Valibot message validation.

27 lines 1.31 kB
import type { ServerWebSocket } from "bun"; import type { ZodObject, ZodType, ZodTypeAny } from "zod"; import { z, ZodLiteral } from "zod"; export type SendFunction = <Schema extends MessageSchemaType>(schema: Schema, data: Schema["shape"] extends { payload: infer P; } ? P extends ZodTypeAny ? z.infer<P> : unknown : unknown, meta?: z.infer<Schema["shape"]["meta"]>) => void; export type MessageContext<Schema extends MessageSchemaType, Data> = { ws: ServerWebSocket<Data>; meta: z.infer<Schema["shape"]["meta"]>; send: SendFunction; } & (Schema["shape"] extends { payload: infer P; } ? P extends ZodTypeAny ? { payload: z.infer<P>; } : Record<string, never> : Record<string, never>); export type MessageHandler<Schema extends MessageSchemaType, Data> = (context: MessageContext<Schema, Data>) => void | Promise<void>; export type MessageSchemaType = ZodObject<{ type: ZodLiteral<string>; meta: ZodType<any>; payload?: ZodTypeAny; }>; export interface MessageHandlerEntry<Data = unknown> { schema: MessageSchemaType; handler: MessageHandler<MessageSchemaType, Data>; } export type { WebSocketRouterOptions, WebSocketData, UpgradeOptions, OpenHandlerContext, OpenHandler, CloseHandlerContext, CloseHandler, } from "../shared/types"; //# sourceMappingURL=types.d.ts.map