Blame view

node_modules/es5-ext/object/copy-deep.js 939 Bytes
f7563de62   Palak Handa   first commit
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
  'use strict';
  
  var forEach       = require('./for-each')
    , isPlainObject = require('./is-plain-object')
    , value         = require('./valid-value')
  
    , isArray = Array.isArray
    , copy, copyItem;
  
  copyItem = function (value, key) {
  	var index;
  	if (!isPlainObject(value) && !isArray(value)) return value;
  	index = this[0].indexOf(value);
  	if (index === -1) return copy.call(this, value);
  	return this[1][index];
  };
  
  copy = function (source) {
  	var target = isArray(source) ? [] : {};
  	this[0].push(source);
  	this[1].push(target);
  	if (isArray(source)) {
  		source.forEach(function (value, key) {
  			target[key] = copyItem.call(this, value, key);
  		}, this);
  	} else {
  		forEach(source, function (value, key) {
  			target[key] = copyItem.call(this, value, key);
  		}, this);
  	}
  	return target;
  };
  
  module.exports = function (source) {
  	var obj = Object(value(source));
  	if (obj !== source) return obj;
  	return copy.call([[], []], obj);
  };