nan_private.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*********************************************************************
  2. * NAN - Native Abstractions for Node.js
  3. *
  4. * Copyright (c) 2016 NAN contributors
  5. *
  6. * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
  7. ********************************************************************/
  8. #ifndef NAN_PRIVATE_H_
  9. #define NAN_PRIVATE_H_
  10. inline Maybe<bool>
  11. HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
  12. HandleScope scope;
  13. #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
  14. v8::Isolate *isolate = v8::Isolate::GetCurrent();
  15. v8::Local<v8::Context> context = isolate->GetCurrentContext();
  16. v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
  17. return object->HasPrivate(context, private_key);
  18. #else
  19. return Just(!object->GetHiddenValue(key).IsEmpty());
  20. #endif
  21. }
  22. inline MaybeLocal<v8::Value>
  23. GetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
  24. HandleScope scope;
  25. #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
  26. v8::Isolate *isolate = v8::Isolate::GetCurrent();
  27. v8::Local<v8::Context> context = isolate->GetCurrentContext();
  28. v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
  29. return object->GetPrivate(context, private_key);
  30. #else
  31. v8::Local<v8::Value> v = object->GetHiddenValue(key);
  32. v8::Local<v8::Value> def = Undefined();
  33. return MaybeLocal<v8::Value>(v.IsEmpty() ? def : v);
  34. #endif
  35. }
  36. inline Maybe<bool> SetPrivate(
  37. v8::Local<v8::Object> object,
  38. v8::Local<v8::String> key,
  39. v8::Local<v8::Value> value) {
  40. #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
  41. HandleScope scope;
  42. v8::Isolate *isolate = v8::Isolate::GetCurrent();
  43. v8::Local<v8::Context> context = isolate->GetCurrentContext();
  44. v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
  45. return object->SetPrivate(context, private_key, value);
  46. #else
  47. return Just(object->SetHiddenValue(key, value));
  48. #endif
  49. }
  50. inline Maybe<bool> DeletePrivate(
  51. v8::Local<v8::Object> object,
  52. v8::Local<v8::String> key) {
  53. #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
  54. v8::Isolate *isolate = v8::Isolate::GetCurrent();
  55. v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
  56. return object->DeletePrivate(isolate->GetCurrentContext(), private_key);
  57. #else
  58. return Just(object->DeleteHiddenValue(key));
  59. #endif
  60. }
  61. #endif // NAN_PRIVATE_H_