'use strict'; 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; };