pusher-zod
Version:
Pusher with type safety using Zod to parse the data
54 lines (51 loc) • 3.03 kB
TypeScript
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 };