|
napi_value symbol_description; |
|
napi_value name_symbol; |
|
NODE_API_CALL(env, |
|
napi_create_string_utf8( |
|
env, "NameKeySymbol", NAPI_AUTO_LENGTH, &symbol_description)); |
|
NODE_API_CALL(env, |
|
napi_create_symbol(env, symbol_description, &name_symbol)); |
|
|
|
napi_property_descriptor properties[] = { |
|
{ "echo", 0, Echo, 0, 0, 0, napi_enumerable, 0 }, |
|
{ "readwriteValue", 0, 0, 0, 0, number, napi_enumerable | napi_writable, 0 }, |
|
{ "readonlyValue", 0, 0, 0, 0, number, napi_enumerable, 0}, |
|
{ "hiddenValue", 0, 0, 0, 0, number, napi_default, 0}, |
|
{ NULL, name_value, 0, 0, 0, number, napi_enumerable, 0}, |
|
{ NULL, name_symbol, 0, 0, 0, number, napi_enumerable, 0}, |
|
{ "readwriteAccessor1", 0, 0, GetValue, SetValue, 0, napi_default, 0}, |
|
{ "readwriteAccessor2", 0, 0, GetValue, SetValue, 0, napi_writable, 0}, |
|
{ "readonlyAccessor1", 0, 0, GetValue, NULL, 0, napi_default, 0}, |
|
{ "readonlyAccessor2", 0, 0, GetValue, NULL, 0, napi_writable, 0}, |
|
{ "hasNamedProperty", 0, HasNamedProperty, 0, 0, 0, napi_default, 0 }, |
|
}; |
|
|
|
NODE_API_CALL(env, napi_define_properties( |
|
env, exports, sizeof(properties) / sizeof(*properties), properties)); |
|
|
What is the problem this feature will solve?
Using Node-API, I would like my C/C++ addon to generate a JavaScript object decorated with a tag name, like this:
So I can get:

I believe this is not possible to set the
Symbol.toStringTagproperty to an object created with the current Node-API.What is the feature you are proposing to solve the problem?
I guess we need access to the global
Symbol.toStringTagand other well-known Symbols defined in JavaScript.Below is the Node.js example to create a new Symbol and set it as a property for an object (along other properties):
node/test/js-native-api/test_properties/test_properties.c
Lines 72 to 96 in e46c680
Instead of creating a new Symbol we would have to use the existing
Symbol.toStringTag.Maybe you could consider to have a method like
napi_get_symbol_tostringtag(env, &name_symbol)to replacenapi_create_symbol(..used on line 78.What alternatives have you considered?
Explored the Node-API but I have no clue for a workaround in the C/C++ code.
For a root object returned by the add-on, one may use the add-on
main.jsfile to add the property dynamically in JavaScript before the export, but it's not pretty.