Spaces:
Runtime error
Runtime error
File size: 1,381 Bytes
b5ea024 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
'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;
};
|