UNPKG

pusher-zod

Version:

Pusher with type safety using Zod to parse the data

78 lines (77 loc) 2.11 kB
import { __spreadProps, __spreadValues } from "./chunk-FJBZBVPE.mjs"; // src/client.ts import PusherClient from "pusher-js"; function createPusherClient({ setup, channel_id_separator = ".", userEvents = {} }) { class TypeSafePusherClient { constructor(...args) { this.pusher = new PusherClient(...args); this.member = __spreadProps(__spreadValues({}, this.pusher.user), { bind: (eventName, callback, context) => { const parsedCallback = (data) => { const parsedData = parseData(userEvents[eventName], data); if (parsedData !== void 0) callback(parsedData); }; return this.pusher.user.bind( String(eventName), parsedCallback, context ); } }); } joinChannel(channelName, id) { const channel = this.pusher.subscribe( `${String(channelName)}${channel_id_separator}${id}` ); channel.listen = (eventName, callback, context) => { const parsedCallback = (data) => { const parsedData = parseData(setup[channelName][eventName], data); if (parsedData !== void 0) callback(parsedData); }; channel.bind(String(eventName), parsedCallback, context); }; return channel; } leaveChannel(channelName, id) { this.pusher.unsubscribe( `${String(channelName)}${channel_id_separator}${id}` ); } subscribe(channelName) { return this.pusher.subscribe(channelName); } unsubscribe(channelName) { this.pusher.unsubscribe(channelName); } get user() { return this.pusher.user; } on(eventName, callback) { this.pusher.connection.bind(eventName, callback); } } function parseData(zodSchema, data) { try { return zodSchema.parse(data); } catch (error) { console.error(error); return void 0; } } return { TypeSafePusherClient }; } var client_default = createPusherClient; export { createPusherClient, client_default as default }; //# sourceMappingURL=client.mjs.map