@neabyte/touchid
Version:
Native macOS Touch ID authentication with device identification, TTL caching, and TypeScript support. Features hardware UUID, device serial, and biometric type detection.
67 lines (66 loc) • 1.98 kB
JavaScript
export class TouchIDEventEmitterImpl {
listeners = new Map();
on(event, handler) {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event).push({
handler: handler,
once: false
});
}
off(event, handler) {
const eventListeners = this.listeners.get(event);
if (!eventListeners) {
return;
}
const index = eventListeners.findIndex(listener => listener.handler === handler);
if (index !== -1) {
eventListeners.splice(index, 1);
}
if (eventListeners.length === 0) {
this.listeners.delete(event);
}
}
once(event, handler) {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event).push({
handler: handler,
once: true
});
}
removeAllListeners(event) {
if (event) {
this.listeners.delete(event);
}
else {
this.listeners.clear();
}
}
emit(event, data) {
const eventListeners = this.listeners.get(event);
if (!eventListeners || eventListeners.length === 0) {
return;
}
const listenersToExecute = [...eventListeners];
const remainingListeners = eventListeners.filter(listener => !listener.once);
this.listeners.set(event, remainingListeners);
for (const listener of listenersToExecute) {
try {
listener.handler(data);
}
catch (error) {
console.error(`Error in event handler for ${event}:`, error);
}
}
}
listenerCount(event) {
const eventListeners = this.listeners.get(event);
return eventListeners ? eventListeners.length : 0;
}
eventNames() {
return Array.from(this.listeners.keys());
}
}