41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
// events/eventEmitter.js
|
|
const EventEmitter = require('events')
|
|
|
|
class SafeEventEmitter extends EventEmitter {
|
|
emit(event, ...args) {
|
|
try {
|
|
return super.emit(event, ...args)
|
|
} catch (error) {
|
|
console.error(`Error emitting event '${event}':`, error)
|
|
this.emit('error', error)
|
|
return false
|
|
}
|
|
}
|
|
|
|
on(event, listener) {
|
|
const wrappedListener = async (...args) => {
|
|
try {
|
|
await listener(...args)
|
|
} catch (error) {
|
|
console.error(`Error in event handler '${event}':`, error)
|
|
this.emit('error', error)
|
|
}
|
|
}
|
|
return super.on(event, wrappedListener)
|
|
}
|
|
}
|
|
|
|
const eventEmitter = new SafeEventEmitter()
|
|
|
|
// Add default error handler
|
|
eventEmitter.on('error', (error) => {
|
|
console.error('Event Error:', {
|
|
name: error.name,
|
|
message: error.message,
|
|
stack: error.stack,
|
|
timestamp: new Date().toISOString(),
|
|
})
|
|
})
|
|
|
|
module.exports = { eventEmitter }
|