bun-ws-router
Version:
A simple and efficient WebSocket router for Bun with Zod/Valibot message validation.
27 lines • 1.31 kB
TypeScript
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