Spaces:
Runtime error
Runtime error
; | |
var forEach = require('es5-ext/object/for-each') | |
, validValue = require('es5-ext/object/valid-object') | |
, push = Array.prototype.apply, defineProperty = Object.defineProperty | |
, create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty | |
, d = { configurable: true, enumerable: false, writable: true }; | |
module.exports = function (e1, e2) { | |
var data; | |
(validValue(e1) && validValue(e2)); | |
if (!hasOwnProperty.call(e1, '__ee__')) { | |
if (!hasOwnProperty.call(e2, '__ee__')) { | |
d.value = create(null); | |
defineProperty(e1, '__ee__', d); | |
defineProperty(e2, '__ee__', d); | |
d.value = null; | |
return; | |
} | |
d.value = e2.__ee__; | |
defineProperty(e1, '__ee__', d); | |
d.value = null; | |
return; | |
} | |
data = d.value = e1.__ee__; | |
if (!hasOwnProperty.call(e2, '__ee__')) { | |
defineProperty(e2, '__ee__', d); | |
d.value = null; | |
return; | |
} | |
if (data === e2.__ee__) return; | |
forEach(e2.__ee__, function (listener, name) { | |
if (!data[name]) { | |
data[name] = listener; | |
return; | |
} | |
if (typeof data[name] === 'object') { | |
if (typeof listener === 'object') push.apply(data[name], listener); | |
else data[name].push(listener); | |
} else if (typeof listener === 'object') { | |
listener.unshift(data[name]); | |
data[name] = listener; | |
} else { | |
data[name] = [data[name], listener]; | |
} | |
}); | |
defineProperty(e2, '__ee__', d); | |
d.value = null; | |
}; | |