|  |  |  | #ifndef SRC_NAPI_INL_DEPRECATED_H_
 | 
					
						
							|  |  |  | #define SRC_NAPI_INL_DEPRECATED_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // PropertyDescriptor class
 | 
					
						
							|  |  |  | ////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     const char* utf8name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using CbData = details::CallbackData<Getter, Napi::Value>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({getter, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({utf8name, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              CbData::Wrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     const std::string& utf8name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* data) { | 
					
						
							|  |  |  |   return Accessor(utf8name.c_str(), getter, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     napi_value name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using CbData = details::CallbackData<Getter, Napi::Value>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({getter, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({nullptr, | 
					
						
							|  |  |  |                              name, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              CbData::Wrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     Name name, Getter getter, napi_property_attributes attributes, void* data) { | 
					
						
							|  |  |  |   napi_value nameValue = name; | 
					
						
							|  |  |  |   return PropertyDescriptor::Accessor(nameValue, getter, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter, typename Setter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     const char* utf8name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     Setter setter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using CbData = details::AccessorCallbackData<Getter, Setter>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({getter, setter, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({utf8name, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              CbData::GetterWrapper, | 
					
						
							|  |  |  |                              CbData::SetterWrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter, typename Setter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     const std::string& utf8name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     Setter setter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* data) { | 
					
						
							|  |  |  |   return Accessor(utf8name.c_str(), getter, setter, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter, typename Setter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     napi_value name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     Setter setter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using CbData = details::AccessorCallbackData<Getter, Setter>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({getter, setter, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({nullptr, | 
					
						
							|  |  |  |                              name, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              CbData::GetterWrapper, | 
					
						
							|  |  |  |                              CbData::SetterWrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Getter, typename Setter> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |     Name name, | 
					
						
							|  |  |  |     Getter getter, | 
					
						
							|  |  |  |     Setter setter, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* data) { | 
					
						
							|  |  |  |   napi_value nameValue = name; | 
					
						
							|  |  |  |   return PropertyDescriptor::Accessor( | 
					
						
							|  |  |  |       nameValue, getter, setter, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Callable> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Function( | 
					
						
							|  |  |  |     const char* utf8name, | 
					
						
							|  |  |  |     Callable cb, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr))); | 
					
						
							|  |  |  |   using CbData = details::CallbackData<Callable, ReturnType>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({cb, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({utf8name, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              CbData::Wrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Callable> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Function( | 
					
						
							|  |  |  |     const std::string& utf8name, | 
					
						
							|  |  |  |     Callable cb, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* data) { | 
					
						
							|  |  |  |   return Function(utf8name.c_str(), cb, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Callable> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Function( | 
					
						
							|  |  |  |     napi_value name, | 
					
						
							|  |  |  |     Callable cb, | 
					
						
							|  |  |  |     napi_property_attributes attributes, | 
					
						
							|  |  |  |     void* /*data*/) { | 
					
						
							|  |  |  |   using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr))); | 
					
						
							|  |  |  |   using CbData = details::CallbackData<Callable, ReturnType>; | 
					
						
							|  |  |  |   // TODO: Delete when the function is destroyed
 | 
					
						
							|  |  |  |   auto callbackData = new CbData({cb, nullptr}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PropertyDescriptor({nullptr, | 
					
						
							|  |  |  |                              name, | 
					
						
							|  |  |  |                              CbData::Wrapper, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              nullptr, | 
					
						
							|  |  |  |                              attributes, | 
					
						
							|  |  |  |                              callbackData}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Callable> | 
					
						
							|  |  |  | inline PropertyDescriptor PropertyDescriptor::Function( | 
					
						
							|  |  |  |     Name name, Callable cb, napi_property_attributes attributes, void* data) { | 
					
						
							|  |  |  |   napi_value nameValue = name; | 
					
						
							|  |  |  |   return PropertyDescriptor::Function(nameValue, cb, attributes, data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // !SRC_NAPI_INL_DEPRECATED_H_
 |