UNPKG

pusher-zod

Version:

Pusher with type safety using Zod to parse the data

54 lines (51 loc) 3.03 kB
import * as pusher_js_types_src_core_events_callback_registry from 'pusher-js/types/src/core/events/callback_registry'; import * as pusher_js_types_src_core_watchlist from 'pusher-js/types/src/core/watchlist'; import * as pusher_js_types_src_core_user from 'pusher-js/types/src/core/user'; import * as PusherClient from 'pusher-js'; import PusherClient__default, { Channel } from 'pusher-js'; import { z } from 'zod'; type TypeSafePusherClientType<S extends Record<string, Record<string, z.ZodType<any, any>>>, P extends Partial<Record<string, z.ZodType<any, any>>> = Record<string, never>> = { joinChannel<K extends keyof S>(channelName: K, id: string | number): Channel & { listen<E extends keyof S[K]>(eventName: E, callback: (data: z.infer<S[K][E]>) => void, context?: any): void; }; leaveChannel<K extends keyof S>(channelName: K, id: string | number): void; member: { bind: <E extends Extract<keyof P, string>>(eventName: E, callback: (data: z.infer<NonNullable<P[E]>>) => void, context?: any) => any; }; subscribe(channelName: string): Channel; unsubscribe(channelName: string): void; user: PusherClient__default["user"]; on(eventName: string, callback: Function): void; }; declare function createPusherClient<S extends Record<string, Record<string, z.ZodType<any, any>>>, P extends Partial<Record<string, z.ZodType<any, any>>> = Record<string, never>>({ setup, channel_id_separator, userEvents, }: { setup: S; channel_id_separator?: "_" | "-" | "=" | "@" | "," | "." | ";"; userEvents?: P; }): { TypeSafePusherClient: { new (app_key: string, options: PusherClient.Options): { pusher: PusherClient__default; member: { bind: <E extends keyof P>(eventName: E, callback: (data: z.TypeOf<NonNullable<P[E]>>) => void, context?: any) => pusher_js_types_src_core_user.default; pusher: PusherClient__default; signin_requested: boolean; user_data: any; serverToUserChannel: Channel; signinDonePromise: Promise<any>; watchlist: pusher_js_types_src_core_watchlist.default; callbacks: pusher_js_types_src_core_events_callback_registry.default; global_callbacks: Function[]; failThrough: Function; }; joinChannel<K extends keyof S>(channelName: K, id: string | number): Channel & { listen<E extends keyof S[K]>(eventName: E, callback: (data: z.infer<S[K][E]>) => void, context?: any): void; }; leaveChannel<K extends keyof S>(channelName: K, id: string | number): void; subscribe(channelName: string): Channel; unsubscribe(channelName: string): void; readonly user: PusherClient__default["user"]; on(eventName: string, callback: Function): void; }; }; }; export { type TypeSafePusherClientType, createPusherClient, createPusherClient as default };