@ffsm/utils
Version:
A collection of utility functions for React and JavaScript, providing type-safe utilities for common tasks like prop management, conditional rendering, and more.
49 lines (48 loc) • 1.35 kB
JavaScript
import { mergeObject } from './merge-object';
export function cloneArray(value) {
return value.map((item) => cloneDeep(item));
}
export function cloneObject(value) {
if (Array.isArray(value)) {
return cloneArray(value);
}
if (value === null) {
return null;
}
if (value instanceof Date) {
return new Date(value.getTime());
}
if (value instanceof RegExp) {
return new RegExp(value.source, value.flags);
}
if (value instanceof Map) {
return new Map(value);
}
if (value instanceof Set) {
return new Set(value);
}
if (value instanceof ArrayBuffer) {
return value.slice(0);
}
if (value instanceof Blob) {
return value.slice(0);
}
if (value instanceof File) {
return new File([value], value.name, { type: value.type });
}
if (value instanceof ImageData) {
return new ImageData(value.data.slice(0), value.width, value.height);
}
if (value instanceof DataView) {
return new DataView(value.buffer, value.byteOffset, value.byteLength);
}
return mergeObject(...Object.entries(value).map(([key, val]) => ({
[key]: cloneDeep(val),
})));
}
export function cloneDeep(value) {
if (typeof value === 'object') {
return cloneObject(value);
}
return value;
}