@babel/core
Version:
Babel compiler core.
57 lines (54 loc) • 1.62 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
const circleSet = new Set();
let depth = 0;
function deepClone(value, cache, allowCircle) {
if (value !== null) {
if (allowCircle) {
if (cache.has(value)) return cache.get(value);
} else if (++depth > 250) {
if (circleSet.has(value)) {
depth = 0;
circleSet.clear();
throw new Error("Babel-deepClone: Cycles are not allowed in AST");
}
circleSet.add(value);
}
let cloned;
if (Array.isArray(value)) {
cloned = new Array(value.length);
if (allowCircle) cache.set(value, cloned);
for (let i = 0; i < value.length; i++) {
cloned[i] = typeof value[i] !== "object" ? value[i] : deepClone(value[i], cache, allowCircle);
}
} else {
cloned = {};
if (allowCircle) cache.set(value, cloned);
const keys = Object.keys(value);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
cloned[key] = typeof value[key] !== "object" ? value[key] : deepClone(value[key], cache, allowCircle || key === "leadingComments" || key === "innerComments" || key === "trailingComments" || key === "extra");
}
}
if (!allowCircle) {
if (depth-- > 250) circleSet.delete(value);
}
return cloned;
}
return value;
}
function _default(value) {
if (typeof value !== "object") return value;
{
try {
return deepClone(value, new Map(), true);
} catch (_) {
return structuredClone(value);
}
}
}
0 && 0;
//# sourceMappingURL=clone-deep.js.map
;