summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js')
-rw-r--r--tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js
new file mode 100644
index 0000000000..c6a858a0be
--- /dev/null
+++ b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/event-emitter/unify.js
@@ -0,0 +1,50 @@
+'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;
+};