@@ -2603,20 +2603,45 @@ inline Error::Error(napi_env env, napi_value value) : ObjectReference(env, nullp
26032603
26042604 NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_create_object" );
26052605
2606- status = napi_set_property (env,
2607- wrappedErrorObj,
2608- String::From (env, " errorVal" ),
2609- Value::From (env, value));
2610- NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_set_property" );
2611-
2612- status = napi_set_property (
2613- env,
2614- wrappedErrorObj,
2615- String::From (env,
2616- " 4b3d96fd-fb87-4951-a979-eb4f9d2f2ce9-isWrapObject" ),
2617- Value::From (env, value));
2618- NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_set_property" );
2606+ napi_property_descriptor errValDesc = {
2607+ " errorVal" , // const char* utf8Name
2608+ String::From (env, " errorVal" ), // napi_value name
2609+ nullptr , // Method
2610+ nullptr , // getter
2611+ nullptr , // setter
2612+ Value::From (env, value), // napi_value value
2613+ napi_enumerable,
2614+ nullptr };
2615+
2616+ status = napi_define_properties (env, wrappedErrorObj, 1 , &errValDesc);
2617+ NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_define_properties" );
2618+
2619+ MaybeOrValue<Symbol> result = Symbol::For (env, " isWrapObject" );
2620+ napi_property_descriptor wrapObjFlag = {nullptr ,
2621+ nullptr ,
2622+ nullptr ,
2623+ nullptr ,
2624+ nullptr ,
2625+ Value::From (env, value),
2626+ napi_enumerable,
2627+ nullptr };
26192628
2629+ #ifdef NODE_ADDON_API_ENABLE_MAYBE
2630+ Symbol uniqueSymb;
2631+ if (result.IsJust ()) {
2632+ uniqueSymb = result.Unwrap ();
2633+ }
2634+
2635+ wrapObjFlag.name = uniqueSymb;
2636+ status = napi_define_properties (env, wrappedErrorObj, 1 , &wrapObjFlag);
2637+ NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_define_properties" );
2638+ #else
2639+
2640+ wrapObjFlag.name = result;
2641+ status = napi_define_properties (env, wrappedErrorObj, 1 , &wrapObjFlag);
2642+ NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_define_properties" );
2643+
2644+ #endif
26202645 status = napi_create_reference (env, wrappedErrorObj, 1 , &_ref);
26212646 }
26222647
@@ -2642,18 +2667,31 @@ inline Object Error::Value() const {
26422667 if (type != napi_symbol) {
26432668 // We are checking if the object is wrapped
26442669 bool isWrappedObject = false ;
2645- napi_has_property (
2646- _env,
2647- refValue,
2648- String::From (_env, " 4b3d96fd-fb87-4951-a979-eb4f9d2f2ce9-isWrapObject" ),
2649- &isWrappedObject);
2670+
2671+ MaybeOrValue<Symbol> result = Symbol::For (_env, " isWrapObject" );
2672+
2673+ #ifdef NODE_ADDON_API_ENABLE_MAYBE
2674+ Symbol uniqueSymb;
2675+ if (result.IsJust ()) {
2676+ uniqueSymb = result.Unwrap ();
2677+ }
2678+ status = napi_has_property (_env, refValue, uniqueSymb, &isWrappedObject);
2679+ NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_set_property" );
2680+
2681+ #else
2682+
2683+ status = napi_has_property (_env, refValue, result, &isWrappedObject);
2684+ NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_set_property" );
2685+ #endif
2686+
26502687 // Don't care about status
26512688
26522689 if (isWrappedObject == true ) {
26532690 napi_value unwrappedValue;
26542691 status = napi_get_property (
26552692 _env, refValue, String::From (_env, " errorVal" ), &unwrappedValue);
26562693 NAPI_THROW_IF_FAILED (_env, status, Object ());
2694+
26572695 return Object (_env, unwrappedValue);
26582696 }
26592697 }
0 commit comments