shipy-sdk-js
Version:
Shipy Payment Gateway SDK for JavaScript/TypeScript
78 lines (77 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
class EventEmitter {
constructor() {
this.events = new Map();
}
/**
* Subscribe to an event
* @param event The event name to subscribe to
* @param callback The callback function to execute when the event is emitted
* @returns A function to unsubscribe from the event
*/
on(event, callback) {
if (!this.events.has(event)) {
this.events.set(event, new Set());
}
const callbacks = this.events.get(event);
callbacks.add(callback);
// Return unsubscribe function
return () => {
const callbacks = this.events.get(event);
if (callbacks) {
callbacks.delete(callback);
if (callbacks.size === 0) {
this.events.delete(event);
}
}
};
}
/**
* Subscribe to an event once
* @param event The event name to subscribe to
* @param callback The callback function to execute when the event is emitted
*/
once(event, callback) {
const unsubscribe = this.on(event, ((data) => {
unsubscribe();
callback(data);
}));
}
/**
* Emit an event
* @param event The event name to emit
* @param data The data to pass to the event handlers
*/
emit(event, data) {
const callbacks = this.events.get(event);
if (callbacks) {
callbacks.forEach(callback => {
try {
callback(data);
}
catch (error) {
this.emit('error', error instanceof Error ? error : new Error(String(error)));
}
});
}
}
/**
* Remove all listeners for a specific event
* @param event The event name to remove listeners from
*/
removeAllListeners(event) {
this.events.delete(event);
}
/**
* Get the number of listeners for a specific event
* @param event The event name to get listener count for
* @returns The number of listeners for the event
*/
listenerCount(event) {
var _a, _b;
return (_b = (_a = this.events.get(event)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;
}
}
exports.EventEmitter = EventEmitter;