Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function _copy(obj, deep, seen, copies) {
var ret, loc, key;
// primitive data types are immutable, just return them.
if ('object' !== typeof obj || obj===null) return obj;
// avoid cyclical loops
if (deep && (loc=indexOf(seen, obj))>=0) return copies[loc];
Ember.assert('Cannot clone an Ember.Object that does not implement Ember.Copyable', !(obj instanceof EmberObject) || (Copyable && Copyable.detect(obj)));
// IMPORTANT: this specific test will detect a native array only. Any other
// object will need to implement Copyable.
if (typeOf(obj) === 'array') {
ret = obj.slice();
if (deep) {
loc = ret.length;
while(--loc>=0) ret[loc] = _copy(ret[loc], deep, seen, copies);
}
} else if (Copyable && Copyable.detect(obj)) {
ret = obj.copy(deep, seen, copies);
} else if (obj instanceof Date) {
ret = new Date(obj.getTime());
} else {
ret = {};
for(key in obj) {
if ('object' !== typeof obj || obj===null) return obj;
// avoid cyclical loops
if (deep && (loc=indexOf(seen, obj))>=0) return copies[loc];
Ember.assert('Cannot clone an Ember.Object that does not implement Ember.Copyable', !(obj instanceof EmberObject) || (Copyable && Copyable.detect(obj)));
// IMPORTANT: this specific test will detect a native array only. Any other
// object will need to implement Copyable.
if (typeOf(obj) === 'array') {
ret = obj.slice();
if (deep) {
loc = ret.length;
while(--loc>=0) ret[loc] = _copy(ret[loc], deep, seen, copies);
}
} else if (Copyable && Copyable.detect(obj)) {
ret = obj.copy(deep, seen, copies);
} else if (obj instanceof Date) {
ret = new Date(obj.getTime());
} else {
ret = {};
for(key in obj) {
if (!obj.hasOwnProperty(key)) continue;
// Prevents browsers that don't respect non-enumerability from
// copying internal Ember properties
if (key.substring(0,2) === '__') continue;
ret[key] = deep ? _copy(obj[key], deep, seen, copies) : obj[key];
}
}
function copy(obj, deep) {
// fast paths
if ('object' !== typeof obj || obj===null) return obj; // can't copy primitives
if (Copyable && Copyable.detect(obj)) return obj.copy(deep);
return _copy(obj, deep, deep ? [] : null, deep ? [] : null);
};