native-update
Version:
Foundation package for building a comprehensive update system for Capacitor apps. Provides architecture and interfaces but requires backend implementation.
75 lines • 2.03 kB
JavaScript
/**
* Centralized event emitter for the Native Update plugin
*/
export class EventEmitter {
constructor() {
this.listeners = new Map();
}
static getInstance() {
if (!EventEmitter.instance) {
EventEmitter.instance = new EventEmitter();
}
return EventEmitter.instance;
}
/**
* Add a listener for an event
*/
addListener(eventName, listener) {
if (!this.listeners.has(eventName)) {
this.listeners.set(eventName, new Set());
}
this.listeners.get(eventName).add(listener);
// Return remove function
return () => {
const listeners = this.listeners.get(eventName);
if (listeners) {
listeners.delete(listener);
if (listeners.size === 0) {
this.listeners.delete(eventName);
}
}
};
}
/**
* Emit an event to all listeners
*/
emit(eventName, data) {
const listeners = this.listeners.get(eventName);
if (listeners) {
listeners.forEach(listener => {
try {
listener(data);
}
catch (error) {
console.error(`Error in event listener for ${eventName}:`, error);
}
});
}
}
/**
* Remove all listeners for a specific event
*/
removeListeners(eventName) {
this.listeners.delete(eventName);
}
/**
* Remove all listeners
*/
removeAllListeners() {
this.listeners.clear();
}
/**
* Get the number of listeners for an event
*/
listenerCount(eventName) {
var _a;
return ((_a = this.listeners.get(eventName)) === null || _a === void 0 ? void 0 : _a.size) || 0;
}
/**
* Get all event names that have listeners
*/
eventNames() {
return Array.from(this.listeners.keys());
}
}
//# sourceMappingURL=event-emitter.js.map