UNPKG

pusher-zod

Version:

Pusher with type safety using Zod to parse the data

69 lines (68 loc) 1.85 kB
import "./chunk-FJBZBVPE.mjs"; // src/server.ts import PusherServer from "pusher"; function createPusherServer({ setup, channel_id_separator = ".", userEvents = {} }) { class TypeSafePusherServer extends PusherServer { invoke(channelName, channel_id, eventName, data) { return super.trigger( `${channelName}${channel_id_separator}${channel_id}`, eventName, data ); } invokeBatch(batch) { return super.triggerBatch( batch.map((b) => ({ channel: `${String(b.channel)}${channel_id_separator}${b.channel_id}`, name: String(b.name), data: b.data, socket_id: b.socket_id, info: b.info })) ); } sendToUser(userId, event, data) { const parsedData = parseData(userEvents[event], data); if (parsedData === void 0) { throw new Error(`Invalid data for user event ${String(event)}`); } return super.sendToUser(userId, String(event), parsedData); } getChannels() { return Object.keys(setup); } getPrivateChannels() { return this.getChannels().filter(this.isPrivateChannel); } getPresenceChannels() { return this.getChannels().filter(this.isPresenceChannel); } isPrivateChannel(channel) { return typeof channel === "string" && channel.startsWith("private-"); } isPresenceChannel(channel) { return typeof channel === "string" && channel.startsWith("presence-"); } } function parseData(zodSchema, data) { try { return zodSchema.parse(data); } catch (error) { console.error(error); return void 0; } } return { TypeSafePusherServer }; } var server_default = createPusherServer; export { createPusherServer, server_default as default }; //# sourceMappingURL=server.mjs.map