@sapphire/utilities
Version:
Common JavaScript utilities for the Sapphire Community
59 lines (56 loc) • 1.68 kB
JavaScript
;
var isPrimitive_cjs = require('./isPrimitive.cjs');
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var TypedArrayPrototype = Object.getPrototypeOf(Uint8Array);
function deepClone(source) {
if (source === null || isPrimitive_cjs.isPrimitive(source)) {
return source;
}
if (source instanceof Date) {
const output = new source.constructor(source);
return output;
}
if (source instanceof TypedArrayPrototype) {
const output = source.constructor.from(source);
return output;
}
if (Array.isArray(source)) {
const output = new source.constructor(source.length);
for (let i = 0; i < source.length; i++) {
output[i] = deepClone(source[i]);
}
return output;
}
if (source instanceof Map) {
const output = new source.constructor();
for (const [key, value] of source.entries()) {
output.set(key, deepClone(value));
}
return output;
}
if (source instanceof Set) {
const output = new source.constructor();
for (const value of source.values()) {
output.add(deepClone(value));
}
return output;
}
if (typeof source === "object") {
const output = new source.constructor();
for (const [key, value] of Object.entries(source)) {
Object.defineProperty(output, key, {
configurable: true,
enumerable: true,
value: deepClone(value),
writable: true
});
}
return output;
}
return source;
}
__name(deepClone, "deepClone");
exports.deepClone = deepClone;
//# sourceMappingURL=deepClone.cjs.map
//# sourceMappingURL=deepClone.cjs.map