@elsikora/cladi
Version:
ClaDI is a library for creating and managing classes in TypeScript.
36 lines (33 loc) • 1.04 kB
JavaScript
;
/**
* Utility method to safely deep clone objects that may contain functions.
* Unlike structuredClone, this can handle functions by preserving their reference
* but cloning everything else.
* @param {T} source Object to clone
* @returns {T} A deep clone of the object
* @template T Type of object to clone
*/
function safeDeepClone(source) {
// Return primitive values and functions directly
if (source == null || typeof source !== "object") {
return source;
}
// Handle Date
if (source instanceof Date) {
return new Date(source);
}
// Handle Array
if (Array.isArray(source)) {
return source.map((item) => safeDeepClone(item));
}
// Handle Object
const result = {};
for (const key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
result[key] = safeDeepClone(source[key]);
}
}
return result;
}
exports.safeDeepClone = safeDeepClone;
//# sourceMappingURL=safe-deep-clone.utility.js.map