| 12345678910111213141516171819202122232425262728293031323334353637 | "use strict";var forEach       = require("./for-each")  , isPlainObject = require("./is-plain-object")  , ensureValue   = require("./valid-value")  , isArray       = Array.isArray;var copyValue = function (value, ancestors, ancestorsCopy) {	var mode;	if (isPlainObject(value)) mode = "object";	else if (isArray(value)) mode = "array";	if (!mode) return value;	var copy = ancestorsCopy[ancestors.indexOf(value)];	if (copy) return copy;	copy = mode === "object" ? {} : [];	ancestors.push(value);	ancestorsCopy.push(copy);	if (mode === "object") {		forEach(value, function (item, key) {			copy[key] = copyValue(item, ancestors, ancestorsCopy);		});	} else {		value.forEach(function (item, index) {			copy[index] = copyValue(item, ancestors, ancestorsCopy);		});	}	ancestors.pop();	ancestorsCopy.pop();	return copy;};module.exports = function (source) {	return copyValue(ensureValue(source), [], []);};
 |