parent
87fc44c45a
commit
b654eb9b1f
@ -0,0 +1,31 @@ |
||||
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 |
||||
} |
Loading…
Reference in new issue