Spaces:
Runtime error
Runtime error
| ; | |
| 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), [], []); }; | |