Visitar URL original
Migration from NAN to object_wrap / determine invoked property name · Issue #1114 · nodejs/node-addon-api · GitHub
Skip to content

Migration from NAN to object_wrap / determine invoked property name #1114

Description

@pdehne

This is a usage / migration from NAN question. With NAN I used the following to determine the invoked property name:

NAN_GETTER(ClassName::Getters)
{
        ...        
        std::string propertyName = *Nan::Utf8String(property);
        ...
}

This helped me to reduce C++ boilerplate code for classes with many properties because I did not have to declare and define every single setter and getter method in C++.

Is this still possible?

Activity

  1. github-actions commented on Mar 24, 2022

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  2. mhdawson commented on Mar 24, 2022

    @mhdawson
    Member

    Added to list of issues to discussion in next node-api team meeting

  3. mhdawson commented on Mar 25, 2022

    @mhdawson
    Member

    @vmoroz will take a look this week.

  4. mhdawson commented on Apr 8, 2022

    @mhdawson
    Member

    We talked about this is in the Node-API team meeting today and we don't have any easy way to do this today.

    @vmoroz will think a bit more about it.

  5. vmoroz commented on Apr 15, 2022

    @vmoroz
    Member

    My understanding of the issue is that NAN uses the V8 ObjectTemplate that uses Proxy-like methods for Object's getters and setters to access all object properties. In Node-API we use a different approach: we define a JavaScript class as a FunctionTemplate and then explicitly add instance and static properties.
    I would suggest that we add to Node-API a new construct to define a native object that could use the V8 ObjectTemplate and Proxy for other JavaScript engines.
    Until this new API is added, developers can achieve the same effect by using existing Node-API to create a Proxy object.

  6. KevinEady commented on Apr 22, 2022

    @KevinEady
    Contributor

    In today's Node API meeting, we discussed the possibility of using the Proxy object as a wrapper on the natively ObjectWrap'd object. Using this approach, we may be able to create the "dynamicness" that is requested in this original post, for example passing a get handler that would pass the property name to a native method provided by the underlying ObjectWrap'd object.

    @vmoroz will take a look and attempt to create some unit tests that does this and provide feedback, determining if we need to enhance the Node API for anything.

  7. vmoroz commented on Apr 22, 2022

    @vmoroz
    Member

    We used a very similar approach before to implement JSI on top of Node-API.
    The plan is to add unit tests to depo the approach with the plain Node-API and the C++ Node-API.
    Then, we will see if we can add C++ Node-API extensions to help migrating from NAN.

  8. vmoroz commented on Apr 29, 2022

    @vmoroz
    Member

    I had started to work on the unit test.
    So far, it works for a very simple object. I am going to continue to improve the code to cover more scenarios.
    nodejs/node#42911

  9. github-actions commented on Jul 29, 2022

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  10. mhdawson commented on Sep 23, 2022

    @mhdawson
    Member

    Just leaving open, as @vmoroz is planning to add a C++ version of the example. The C based one he added has landed.

  11. github-actions commented on Dec 23, 2022

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  12. github-actions commented on Apr 4, 2023

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  13. github-actions commented on Jul 4, 2023

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  14. github-actions commented on Oct 11, 2023

    @github-actions
    Contributor

    This issue is stale because it has been open many days with no activity. It will be closed soon unless the stale label is removed or a comment is made.

  15. vmoroz commented on Nov 11, 2023

    @vmoroz
    Member

    Reopening the issue. We still want to find a good solution here.

  16. reopened this on Nov 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions