fix: allow const vectors with Object::New overload utilizing node_api_create_object_with_properties (#1755)
diff --git a/doc/object.md b/doc/object.md
index 487dced..e01eea4 100644
--- a/doc/object.md
+++ b/doc/object.md
@@ -75,8 +75,8 @@
Napi::Object Napi::Object::New(
napi_env env,
napi_value prototypeOrNull,
- std::vector<napi_value>& propertyNames,
- std::vector<napi_value>& propertyValues);
+ const std::vector<napi_value>& propertyNames,
+ const std::vector<napi_value>& propertyValues);
```
- `[in] env`: The `napi_env` environment in which to construct the `Napi::Value`
object.
diff --git a/napi-inl.h b/napi-inl.h
index 8187fa7..59f1ca1 100644
--- a/napi-inl.h
+++ b/napi-inl.h
@@ -1644,8 +1644,8 @@
#ifdef NODE_API_EXPERIMENTAL_HAS_CREATE_OBJECT_WITH_PROPERTIES
inline Object Object::New(napi_env env,
napi_value prototypeOrNull,
- std::vector<napi_value>& propertyNames,
- std::vector<napi_value>& propertyValues) {
+ const std::vector<napi_value>& propertyNames,
+ const std::vector<napi_value>& propertyValues) {
if (propertyNames.size() != propertyValues.size()) {
NAPI_THROW(
Napi::Error::New(env, "Mismatch in size of property names and values"),
@@ -1653,13 +1653,15 @@
}
napi_value value;
- napi_status status =
- node_api_create_object_with_properties(env,
- prototypeOrNull,
- propertyNames.data(),
- propertyValues.data(),
- propertyNames.size(),
- &value);
+ // TODO(@KevinEady): remove const_cast when
+ // https://github.com/nodejs/node/pull/65621 is fully backported.
+ napi_status status = node_api_create_object_with_properties(
+ env,
+ prototypeOrNull,
+ const_cast<napi_value*>(propertyNames.data()),
+ const_cast<napi_value*>(propertyValues.data()),
+ propertyNames.size(),
+ &value);
NAPI_THROW_IF_FAILED(env, status, Object());
return Object(env, value);
diff --git a/napi.h b/napi.h
index 8a5a23e..6b4692c 100644
--- a/napi.h
+++ b/napi.h
@@ -955,8 +955,8 @@
static Object New(
napi_env env, ///< Node-API environment
napi_value prototypeOrNull, ///< Prototype (Object) or null / empty Value
- std::vector<napi_value>& propertyNames, ///< Property names
- std::vector<napi_value>& propertyValues ///< Property values
+ const std::vector<napi_value>& propertyNames, ///< Property names
+ const std::vector<napi_value>& propertyValues ///< Property values
);
#endif