pusher-zod
Version:
Pusher with type safety using Zod to parse the data
78 lines (77 loc) • 2.11 kB
JavaScript
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