es-toolkit
                                
                                
                                
                                    es-toolkit copied to clipboard
                            
                            
                            
                        Suggest to enhance `clone()` function.
Current clone() function considers only those native classes.
DateSetMapRegExp
However, there are much more native classes in the JavaScript, especially about binary handling.
So, I think that the clone() function should consider them.
Uint8ArrayUint8ClampedArrayUint16ArrayBigInt64ArrayInt8ArrayInt16ArrayInt32ArrayBigInt64ArrayFloat32ArrayFloat64ArrayArrayBufferSharedArrayBufferDataViewBlobFile
Also, current clone() function is returning the same T type with its parameter, but it is not correct.
The returned type must be casted, because non-native classes are converted to primitve object type.
To solve this problem, the clone() function needs to return Shallowed<T> type like below.
type Shallowed<T> = Equal<T, ShallowMain<T>> extends true ? T : ShallowMain<T>
type ShallowMain<T> = T extends [never]
  ? never
  : T extends object
  ? T extends 
    | Array<any> | Set<any> | Map<any, any> | Date | RegExp | Date
    | Uint8Array
    | Uint8ClampedArray
    | Uint16Array
    | Uint32Array
    | BigUint64Array
    | Int8Array
    | Int16Array
    | Int32Array
    | BigInt64Array
    | Float32Array
    | Float64Array
    | ArrayBuffer
    | SharedArrayBuffer
    | DataView
    | Blob
    | File
  ? T
  : {
    [P in keyof T]: T[P] extends Function ? never : T[P];
  }
  : T;
type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
Related PR: https://github.com/toss/es-toolkit/pull/155