pusher-zod
Version:
Pusher with type safety using Zod to parse the data
69 lines (65 loc) • 2.09 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }require('./chunk-DDAAVRWG.js');
// src/server.ts
var _pusher = require('pusher'); var _pusher2 = _interopRequireDefault(_pusher);
function createPusherServer({
setup,
channel_id_separator = ".",
userEvents = {}
}) {
class TypeSafePusherServer extends _pusher2.default {
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;
exports.createPusherServer = createPusherServer; exports.default = server_default;
//# sourceMappingURL=server.js.map