Repository: node
Issue: V8 13.0 Deprecations
Labels: c++,v8 engine,deprecations

Another PR is updated V8 to 13.0, so I compiled a list of deprecations from that version onward. While they don't need to be fixed immediately, it's important to know they exist.

- [ ] **`template<class T> struct v8::FastApiTypedArray`**
  - **Reason**: When an API function expects a TypedArray as a parameter, the type in the signature should be `v8::Local<v8::Value>` instead of `FastApiTypedArray<>`. 
  - **Action**: Type-check the parameter and convert it to `v8::Local<v8::TypedArray>` to access the data. Handle the parameter the same way as for a regular API call.
  - **Details**:
    ```plaintext
    ‘template<class T> struct v8::FastApiTypedArray’ is deprecated: 
    When an API function expects a TypedArray as a parameter, 
    the type in the signature should be `v8::Local<v8::Value>` instead of FastApiTypedArray<>. 
    The API function then has to type-check the parameter and convert it to a `v8::Local<v8::TypedArray` to access the data. 
    In essence, the parameter should be handled the same as for a regular API call. 
    ```

- [x]  **`v8::Local<v8::Value> v8::Object::GetPrototype()`** (https://github.com/nodejs/node/pull/55453)
  - **Reason**: V8 will stop providing access to the hidden prototype (i.e., JSGlobalObject).
  - **Action**: Use `GetPrototypeV2()` instead.
  - **Reference**: [crbug.com/333672197](http://crbug.com/333672197)
  - **Details**:
    ```plaintext
    ‘v8::Local<v8::Value> v8::Object::GetPrototype()’ is deprecated: 
    V8 will stop providing access to hidden prototype (i.e. JSGlobalObject). 
    Use GetPrototypeV2() instead. See http://crbug.com/333672197. 
    ```

- [x] **`v8::Maybe<bool> v8::Object::SetPrototype(v8::Local<v8::Context>, v8::Local<v8::Value>)`** (https://github.com/nodejs/node/pull/55453)
  - **Reason**: V8 will stop providing access to the hidden prototype (i.e., JSGlobalObject).
  - **Action**: Use `SetPrototypeV2()` instead.
  - **Reference**: [crbug.com/333672197](http://crbug.com/333672197)
  - **Details**:
    ```plaintext
    ‘v8::Maybe<bool> v8::Object::SetPrototype(v8::Local<v8::Context>, v8::Local<v8::Value>)’ is deprecated: 
    V8 will stop providing access to hidden prototype (i.e. JSGlobalObject). 
    Use SetPrototypeV2() instead. See http://crbug.com/333672197. 
    ```

- [ ] **`v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool)`** (#55337)
  - **Reason**: Deprecated in favor of a version that passes `CreateParams`.
  - **Action**: Use the version that passes `CreateParams`.
  - **Details**:
    ```plaintext
    ‘v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool)’ is deprecated: 
    Use the version that passes CreateParams instead. 
    ```

- [ ] **`v8::String::Value::Value(v8::Isolate*, v8::Local<v8::Value>)`** (#55458)
  - **Reason**: Prefer alternatives for better performance.
  - **Action**: Use `String::ValueView` if possible, or use `string->Write` to a buffer if not.
  - **Details**:
    ```plaintext
    ‘v8::String::Value::Value(v8::Isolate*, v8::Local<v8::Value>)’ is deprecated: 
    Prefer using String::ValueView if you can, or string->Write to a buffer if you cannot. 
    ```

- [ ] **`void v8::Isolate::AttachCppHeap(v8::CppHeap*)`**
  - **Reason**: Set the heap on Isolate creation.
  - **Action**: Use `CreateParams` instead.
  - **Details**:
    ```plaintext
    ‘void v8::Isolate::AttachCppHeap(v8::CppHeap*)’ is deprecated: 
    Set the heap on Isolate creation using CreateParams instead. 
    ```

- [ ] **`void v8::Isolate::DetachCppHeap()`**
  - **Reason**: Set the heap on Isolate creation.
  - **Action**: Use `CreateParams` instead.
  - **Details**:
    ```plaintext
    ‘void v8::Isolate::DetachCppHeap()’ is deprecated: 
    Set the heap on Isolate creation using CreateParams instead. 
    ```