summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js')
-rw-r--r--tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js
new file mode 100644
index 0000000000..548e3ee4b6
--- /dev/null
+++ b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es5-ext/object/copy-deep.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var isPlainObject = require('./is-plain-object')
+ , value = require('./valid-value')
+
+ , keys = Object.keys
+ , copy;
+
+copy = function (source) {
+ var target = {};
+ this[0].push(source);
+ this[1].push(target);
+ keys(source).forEach(function (key) {
+ var index;
+ if (!isPlainObject(source[key])) {
+ target[key] = source[key];
+ return;
+ }
+ index = this[0].indexOf(source[key]);
+ if (index === -1) target[key] = copy.call(this, source[key]);
+ else target[key] = this[1][index];
+ }, this);
+ return target;
+};
+
+module.exports = function (source) {
+ var obj = Object(value(source));
+ if (obj !== source) return obj;
+ return copy.call([[], []], obj);
+};