Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(clone): enhance type and logic. #206

Closed
wants to merge 5 commits into from
Closed

Commits on Jul 15, 2024

  1. feat(clone): enhance type and logic.

    Current `clone()` function considers only those native classes.
    
    - `Date`
    - `Set`
    - `Map`
    - `RegExp`
    
    However, there are much more native classes in the JavaScript, especially about binary handling.
    
    So, I think that the `clone()` function should consider them.
    
    - `Uint8Array`
    - `Uint8ClampedArray`
    - `Uint16Array`
    - `BigInt64Array`
    - `Int8Array`
    - `Int16Array`
    - `Int32Array`
    - `BigInt64Array`
    - `Float32Array`
    - `Float64Array`
    - `ArrayBuffer`
    - `SharedArrayBuffer`
    - `DataView`
    - `Blob`
    - `File`
    
    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.
    
    ```typescript
    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 issue: toss#196
    - related PR: toss#155
    samchon committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    2865f6b View commit details
    Browse the repository at this point in the history

Commits on Jul 17, 2024

  1. Update src/object/clone.ts

    Co-authored-by: novo <63547292+de-novo@users.noreply.github.com>
    samchon and de-novo authored Jul 17, 2024
    Configuration menu
    Copy the full SHA
    8dd0bc2 View commit details
    Browse the repository at this point in the history
  2. Enhance objet type cloning

    samchon committed Jul 17, 2024
    Configuration menu
    Copy the full SHA
    7131028 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    f28db42 View commit details
    Browse the repository at this point in the history

Commits on Jul 18, 2024

  1. For legacy NodeJS

    samchon committed Jul 18, 2024
    Configuration menu
    Copy the full SHA
    e277e2d View commit details
    Browse the repository at this point in the history