@@ -1591,6 +1591,56 @@ napi_status NAPI_CDECL napi_create_object(napi_env env, napi_value* result) {
15911591 return napi_clear_last_error (env);
15921592}
15931593
1594+ napi_status NAPI_CDECL napi_create_object_with_properties (
1595+ napi_env env,
1596+ napi_value prototype_or_null,
1597+ napi_value* property_names,
1598+ napi_value* property_values,
1599+ size_t property_count,
1600+ napi_value* result) {
1601+ CHECK_ENV_NOT_IN_GC (env);
1602+ CHECK_ARG (env, result);
1603+
1604+ if (property_count > 0 ) {
1605+ CHECK_ARG (env, property_names);
1606+ CHECK_ARG (env, property_values);
1607+ }
1608+
1609+ v8::Local<v8::Value> v8_prototype_or_null =
1610+ v8impl::V8LocalValueFromJsValue (prototype_or_null);
1611+
1612+ v8::Local<v8::Object> obj;
1613+
1614+ if (property_count > 0 ) {
1615+ v8::LocalVector<v8::Name> v8_names (env->isolate , property_count);
1616+ v8::LocalVector<v8::Value> v8_values (env->isolate , property_count);
1617+
1618+ for (size_t i = 0 ; i < property_count; i++) {
1619+ v8::Local<v8::Value> name_value =
1620+ v8impl::V8LocalValueFromJsValue (property_names[i]);
1621+ RETURN_STATUS_IF_FALSE (env, name_value->IsName (), napi_name_expected);
1622+ v8_names[i] = name_value.As <v8::Name>();
1623+ v8_values[i] = v8impl::V8LocalValueFromJsValue (property_values[i]);
1624+ }
1625+
1626+ obj = v8::Object::New (env->isolate ,
1627+ v8_prototype_or_null,
1628+ v8_names.data (),
1629+ v8_values.data (),
1630+ property_count);
1631+ } else {
1632+ obj = v8::Object::New (env->isolate ,
1633+ v8_prototype_or_null,
1634+ nullptr ,
1635+ nullptr ,
1636+ 0 );
1637+ }
1638+
1639+ RETURN_STATUS_IF_FALSE (env, !obj.IsEmpty (), napi_generic_failure);
1640+ *result = v8impl::JsValueFromV8LocalValue (obj);
1641+ return napi_clear_last_error (env);
1642+ }
1643+
15941644napi_status NAPI_CDECL napi_create_array (napi_env env, napi_value* result) {
15951645 CHECK_ENV_NOT_IN_GC (env);
15961646 CHECK_ARG (env, result);
0 commit comments