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
1 month ago
|
#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_
|