Socket
Socket
Sign inDemoInstall

clone

Package Overview
Dependencies
0
Maintainers
1
Versions
38
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.4 to 0.0.5

LICENSE

76

clone.js
module.exports = clone;
/** Clones an Object using deep cloning.
This function supports circular references by default, but if you are certain
there are no circular references in your object, you can save some CPU time
by calling clone(obj, false).
Caution: if `circular` is false and `parent` contains circular references,
your program may enter an infinite loop and crash.
@param `parent` - the object to be cloned
@param `circular` - set to true if the object to be cloned may contain
circular references. (optional - true by default)
/**
* Clones an Object using deep cloning.
*
* This function supports circular references by default, but if you are certain
* there are no circular references in your object, you can save some CPU time
* by calling clone(obj, false).
*
* Caution: if `circular` is false and `parent` contains circular references,
* your program may enter an infinite loop and crash.
*
* @param `parent` - the object to be cloned
* @param `circular` - set to true if the object to be cloned may contain
* circular references. (optional - true by default)
*/
function clone(parent, circular) {
if (circular == undefined) circular = true;
if (typeof circular == 'undefined')
circular = true;
if (circular) {

@@ -22,24 +25,25 @@ var circularParent = {};

function _clone(parent, context, child, cIndex) {
//Deep clone all properties of parent into child
if (typeof parent == "object") {
if (parent == null) //works for undefined, too
// Deep clone all properties of parent into child
if (typeof parent == 'object') {
if (parent == null)
return parent;
//Check for circular references
// Check for circular references
for(i in circularParent)
if (circularParent[i] === parent) {
//We found a circular reference
// We found a circular reference
circularReplace.push({'resolveTo': i, 'child': child, 'i': cIndex});
return null; //Just return null for now...
//we will resolve circular references later...
// we will resolve circular references later
}
//Add to list of all parent objects
// Add to list of all parent objects
circularParent[context] = parent;
//Now continue cloning...
// Now continue cloning...
if (parent instanceof Array) {
child = [];
for(i in parent)
child[i] = _clone(parent[i], context + "[" + i + "]", child, i);
child[i] = _clone(parent[i], context + '[' + i + ']', child, i);
}
else if (parent instanceof Date)
child = new Date(parent.getTime() );
child = new Date(parent.getTime());
else if (parent instanceof RegExp)

@@ -49,8 +53,10 @@ child = new RegExp(parent.source);

child = {};
//Also copy prototype over to new cloned object
// Also copy prototype over to new cloned object
child.__proto__ = parent.__proto__;
for(i in parent)
child[i] = _clone(parent[i], context + "[" + i + "]", child, i);
child[i] = _clone(parent[i], context + '[' + i + ']', child, i);
}
//Add to list of all cloned objects
// Add to list of all cloned objects
circularResolved[context] = child;

@@ -62,8 +68,12 @@ }

}
var cloned = _clone(parent, "*");
/* Now this object has been cloned. Let's check to see if there are any
circular references for it */
var cloned = _clone(parent, '*');
// Now this object has been cloned. Let's check to see if there are any
// circular references for it
for(i in circularReplace) {
var c = circularReplace[i];
c.child[c.i] = circularResolved[c.resolveTo];
if (c && c.child && c.i in c.child) {
c.child[c.i] = circularResolved[c.resolveTo];
}
}

@@ -73,5 +83,5 @@ return cloned;

else {
//Deep clone all properties of parent into child
// Deep clone all properties of parent into child
var child;
if (typeof parent == "object") {
if (typeof parent == 'object') {
if (parent == null)

@@ -96,5 +106,5 @@ return parent;

else
child = parent; //Just a simple shallow clone will do
child = parent; // Just a simple shallow clone will do
return child;
}
}
}
{
"author": "Paul Vorbach <paul@vorb.de> (http://vorb.de)",
"name": "clone",
"description": "deep cloning of objects and arrays",
"tags": [ "clone", "object", "array", "function", "date" ],
"version": "0.0.4",
"tags": [
"clone",
"object",
"array",
"function",
"date"
],
"version": "0.0.5",
"repository": {

@@ -15,9 +20,14 @@ "type": "git",

"main": "clone.js",
"author": "Paul Vorbach <paul@vorb.de> (http://vorb.de)",
"contributors": [
"Blake Miner <miner.blake@gmail.com> (http://www.blakeminer.com)",
"Tian You <axqd001@gmail.com> (http://blog.axqd.net/)"
"Blake Miner <miner.blake@gmail.com> (http://www.blakeminer.com/)",
"Tian You <axqd001@gmail.com> (http://blog.axqd.net/)",
"George Stagas <gstagas@gmail.com> (http://stagas.com/)"
],
"engines": {
"node": "*"
}
}
},
"dependencies": {},
"devDependencies": {},
"optionalDependencies": {}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc