@@ -30,6 +30,39 @@ static napi_value Get(napi_env env, napi_callback_info info) {
3030 return output ;
3131}
3232
33+ static napi_value GetNamed (napi_env env , napi_callback_info info ) {
34+ size_t argc = 2 ;
35+ napi_value args [2 ];
36+ char key [256 ] = "" ;
37+ size_t key_length ;
38+ NAPI_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
39+
40+ NAPI_ASSERT (env , argc >= 2 , "Wrong number of arguments" );
41+
42+ napi_valuetype value_type0 ;
43+ NAPI_CALL (env , napi_typeof (env , args [0 ], & value_type0 ));
44+
45+ NAPI_ASSERT (env , value_type0 == napi_object ,
46+ "Wrong type of arguments. Expects an object as first argument." );
47+
48+ napi_valuetype value_type1 ;
49+ NAPI_CALL (env , napi_typeof (env , args [1 ], & value_type1 ));
50+
51+ NAPI_ASSERT (env , value_type1 == napi_string ,
52+ "Wrong type of arguments. Expects a string as second." );
53+
54+ napi_value object = args [0 ];
55+ NAPI_CALL (env ,
56+ napi_get_value_string_utf8 (env , args [1 ], key , 255 , & key_length ));
57+ key [255 ] = 0 ;
58+ NAPI_ASSERT (env , key_length <= 255 ,
59+ "Cannot accommodate keys longer than 255 bytes" );
60+ napi_value output ;
61+ NAPI_CALL (env , napi_get_named_property (env , object , key , & output ));
62+
63+ return output ;
64+ }
65+
3366static napi_value Set (napi_env env , napi_callback_info info ) {
3467 size_t argc = 3 ;
3568 napi_value args [3 ];
@@ -57,6 +90,41 @@ static napi_value Set(napi_env env, napi_callback_info info) {
5790 return valuetrue ;
5891}
5992
93+ static napi_value SetNamed (napi_env env , napi_callback_info info ) {
94+ size_t argc = 3 ;
95+ napi_value args [3 ];
96+ char key [256 ] = "" ;
97+ size_t key_length ;
98+ NAPI_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
99+
100+ NAPI_ASSERT (env , argc >= 3 , "Wrong number of arguments" );
101+
102+ napi_valuetype value_type0 ;
103+ NAPI_CALL (env , napi_typeof (env , args [0 ], & value_type0 ));
104+
105+ NAPI_ASSERT (env , value_type0 == napi_object ,
106+ "Wrong type of arguments. Expects an object as first argument." );
107+
108+ napi_valuetype value_type1 ;
109+ NAPI_CALL (env , napi_typeof (env , args [1 ], & value_type1 ));
110+
111+ NAPI_ASSERT (env , value_type1 == napi_string ,
112+ "Wrong type of arguments. Expects a string as second." );
113+
114+ NAPI_CALL (env ,
115+ napi_get_value_string_utf8 (env , args [1 ], key , 255 , & key_length ));
116+ key [255 ] = 0 ;
117+ NAPI_ASSERT (env , key_length <= 255 ,
118+ "Cannot accommodate keys longer than 255 bytes" );
119+
120+ NAPI_CALL (env , napi_set_named_property (env , args [0 ], key , args [2 ]));
121+
122+ napi_value value_true ;
123+ NAPI_CALL (env , napi_get_boolean (env , true, & value_true ));
124+
125+ return value_true ;
126+ }
127+
60128static napi_value Has (napi_env env , napi_callback_info info ) {
61129 size_t argc = 2 ;
62130 napi_value args [2 ];
@@ -85,6 +153,42 @@ static napi_value Has(napi_env env, napi_callback_info info) {
85153 return ret ;
86154}
87155
156+ static napi_value HasNamed (napi_env env , napi_callback_info info ) {
157+ size_t argc = 2 ;
158+ napi_value args [2 ];
159+ char key [256 ] = "" ;
160+ size_t key_length ;
161+ NAPI_CALL (env , napi_get_cb_info (env , info , & argc , args , NULL , NULL ));
162+
163+ NAPI_ASSERT (env , argc >= 2 , "Wrong number of arguments" );
164+
165+ napi_valuetype value_type0 ;
166+ NAPI_CALL (env , napi_typeof (env , args [0 ], & value_type0 ));
167+
168+ NAPI_ASSERT (env , value_type0 == napi_object ,
169+ "Wrong type of arguments. Expects an object as first argument." );
170+
171+ napi_valuetype value_type1 ;
172+ NAPI_CALL (env , napi_typeof (env , args [1 ], & value_type1 ));
173+
174+ NAPI_ASSERT (env , value_type1 == napi_string || value_type1 == napi_symbol ,
175+ "Wrong type of arguments. Expects a string as second." );
176+
177+ NAPI_CALL (env ,
178+ napi_get_value_string_utf8 (env , args [1 ], key , 255 , & key_length ));
179+ key [255 ] = 0 ;
180+ NAPI_ASSERT (env , key_length <= 255 ,
181+ "Cannot accommodate keys longer than 255 bytes" );
182+
183+ bool has_property ;
184+ NAPI_CALL (env , napi_has_named_property (env , args [0 ], key , & has_property ));
185+
186+ napi_value ret ;
187+ NAPI_CALL (env , napi_get_boolean (env , has_property , & ret ));
188+
189+ return ret ;
190+ }
191+
88192static napi_value HasOwn (napi_env env , napi_callback_info info ) {
89193 size_t argc = 2 ;
90194 napi_value args [2 ];
@@ -220,8 +324,11 @@ EXTERN_C_START
220324napi_value Init (napi_env env , napi_value exports ) {
221325 napi_property_descriptor descriptors [] = {
222326 DECLARE_NAPI_PROPERTY ("Get" , Get ),
327+ DECLARE_NAPI_PROPERTY ("GetNamed" , GetNamed ),
223328 DECLARE_NAPI_PROPERTY ("Set" , Set ),
329+ DECLARE_NAPI_PROPERTY ("SetNamed" , SetNamed ),
224330 DECLARE_NAPI_PROPERTY ("Has" , Has ),
331+ DECLARE_NAPI_PROPERTY ("HasNamed" , HasNamed ),
225332 DECLARE_NAPI_PROPERTY ("HasOwn" , HasOwn ),
226333 DECLARE_NAPI_PROPERTY ("Delete" , Delete ),
227334 DECLARE_NAPI_PROPERTY ("New" , New ),
0 commit comments