pusher-zod
Version:
Pusher with type safety using Zod to parse the data
78 lines (72 loc) • 2.41 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _chunkDDAAVRWGjs = require('./chunk-DDAAVRWG.js');
// src/client.ts
var _pusherjs = require('pusher-js'); var _pusherjs2 = _interopRequireDefault(_pusherjs);
function createPusherClient({
setup,
channel_id_separator = ".",
userEvents = {}
}) {
class TypeSafePusherClient {
constructor(...args) {
this.pusher = new (0, _pusherjs2.default)(...args);
this.member = _chunkDDAAVRWGjs.__spreadProps.call(void 0, _chunkDDAAVRWGjs.__spreadValues.call(void 0, {}, 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;
exports.createPusherClient = createPusherClient; exports.default = client_default;
//# sourceMappingURL=client.js.map