You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							193 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
	
	
							193 lines
						
					
					
						
							7.1 KiB
						
					
					
				#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_
 |