@@ -2603,20 +2603,45 @@ inline Error::Error(napi_env env, napi_value value) : ObjectReference(env, nullp
2603
2603
2604
2604
NAPI_FATAL_IF_FAILED (status, " Error::Error" , " napi_create_object" );
2605
2605
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 };
2619
2628
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
2620
2645
status = napi_create_reference (env, wrappedErrorObj, 1 , &_ref);
2621
2646
}
2622
2647
@@ -2642,18 +2667,31 @@ inline Object Error::Value() const {
2642
2667
if (type != napi_symbol) {
2643
2668
// We are checking if the object is wrapped
2644
2669
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
+
2650
2687
// Don't care about status
2651
2688
2652
2689
if (isWrappedObject == true ) {
2653
2690
napi_value unwrappedValue;
2654
2691
status = napi_get_property (
2655
2692
_env, refValue, String::From (_env, " errorVal" ), &unwrappedValue);
2656
2693
NAPI_THROW_IF_FAILED (_env, status, Object ());
2694
+
2657
2695
return Object (_env, unwrappedValue);
2658
2696
}
2659
2697
}
0 commit comments