mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-27 21:00:13 +01:00
31 lines
964 B
JavaScript
31 lines
964 B
JavaScript
|
module.exports = function createEventEmitterProxy(eventEmitter, listeners) {
|
||
|
let target = eventEmitter
|
||
|
const eventHandlers = listeners || {}
|
||
|
const proxy = new Proxy({}, {
|
||
|
get: (obj, name) => {
|
||
|
// intercept listeners
|
||
|
if (name === 'on') return addListener
|
||
|
if (name === 'setTarget') return setTarget
|
||
|
if (name === 'proxyEventHandlers') return eventHandlers
|
||
|
return target[name]
|
||
|
},
|
||
|
set: (obj, name, value) => {
|
||
|
target[name] = value
|
||
|
return true
|
||
|
},
|
||
|
})
|
||
|
function setTarget (eventEmitter) {
|
||
|
target = eventEmitter
|
||
|
// migrate listeners
|
||
|
Object.keys(eventHandlers).forEach((name) => {
|
||
|
eventHandlers[name].forEach((handler) => target.on(name, handler))
|
||
|
})
|
||
|
}
|
||
|
function addListener (name, handler) {
|
||
|
if (!eventHandlers[name]) eventHandlers[name] = []
|
||
|
eventHandlers[name].push(handler)
|
||
|
target.on(name, handler)
|
||
|
}
|
||
|
if (listeners) proxy.setTarget(eventEmitter)
|
||
|
return proxy
|
||
|
}
|