UNPKG

1.38 kBJavaScriptView Raw
1'use strict';
2
3var forEach = require('es5-ext/object/for-each')
4 , validValue = require('es5-ext/object/valid-object')
5
6 , push = Array.prototype.apply, defineProperty = Object.defineProperty
7 , create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty
8 , d = { configurable: true, enumerable: false, writable: true };
9
10module.exports = function (e1, e2) {
11 var data;
12 (validValue(e1) && validValue(e2));
13 if (!hasOwnProperty.call(e1, '__ee__')) {
14 if (!hasOwnProperty.call(e2, '__ee__')) {
15 d.value = create(null);
16 defineProperty(e1, '__ee__', d);
17 defineProperty(e2, '__ee__', d);
18 d.value = null;
19 return;
20 }
21 d.value = e2.__ee__;
22 defineProperty(e1, '__ee__', d);
23 d.value = null;
24 return;
25 }
26 data = d.value = e1.__ee__;
27 if (!hasOwnProperty.call(e2, '__ee__')) {
28 defineProperty(e2, '__ee__', d);
29 d.value = null;
30 return;
31 }
32 if (data === e2.__ee__) return;
33 forEach(e2.__ee__, function (listener, name) {
34 if (!data[name]) {
35 data[name] = listener;
36 return;
37 }
38 if (typeof data[name] === 'object') {
39 if (typeof listener === 'object') push.apply(data[name], listener);
40 else data[name].push(listener);
41 } else if (typeof listener === 'object') {
42 listener.unshift(data[name]);
43 data[name] = listener;
44 } else {
45 data[name] = [data[name], listener];
46 }
47 });
48 defineProperty(e2, '__ee__', d);
49 d.value = null;
50};