UNPKG

bun-ws-router

Version:

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

18 lines 1.68 kB
import type { ServerWebSocket } from "bun"; import type { InferOutput, ObjectSchema } from "valibot"; export type SendFunction = <Schema extends MessageSchemaType>(schema: Schema, data: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "payload" extends keyof TEntries ? InferOutput<TEntries["payload"]> : unknown : unknown : unknown, meta?: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "meta" extends keyof TEntries ? InferOutput<TEntries["meta"]> : unknown : unknown : unknown) => void; export type MessageContext<Schema extends MessageSchemaType, Data> = { ws: ServerWebSocket<Data>; meta: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "meta" extends keyof TEntries ? InferOutput<TEntries["meta"]> : unknown : unknown : unknown; send: SendFunction; } & (Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "payload" extends keyof TEntries ? { payload: InferOutput<TEntries["payload"]>; } : Record<string, never> : Record<string, never> : Record<string, never>); export type MessageHandler<Schema extends MessageSchemaType, Data> = (context: MessageContext<Schema, Data>) => void | Promise<void>; export type MessageSchemaType = ObjectSchema<any, any>; 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