1 /*********************************************************************
2 * NAN - Native Abstractions for Node.js
4 * Copyright (c) 2018 NAN contributors
6 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
7 ********************************************************************/
10 #define NAN_PRIVATE_H_
13 HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
15 #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
16 v8::Isolate *isolate = v8::Isolate::GetCurrent();
17 v8::Local<v8::Context> context = isolate->GetCurrentContext();
18 v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
19 return object->HasPrivate(context, private_key);
21 return Just(!object->GetHiddenValue(key).IsEmpty());
25 inline MaybeLocal<v8::Value>
26 GetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
27 #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
28 v8::Isolate *isolate = v8::Isolate::GetCurrent();
29 v8::EscapableHandleScope scope(isolate);
30 v8::Local<v8::Context> context = isolate->GetCurrentContext();
31 v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
32 v8::MaybeLocal<v8::Value> v = object->GetPrivate(context, private_key);
33 return scope.Escape(v.ToLocalChecked());
35 EscapableHandleScope scope;
36 v8::Local<v8::Value> v = object->GetHiddenValue(key);
40 return scope.Escape(v);
44 inline Maybe<bool> SetPrivate(
45 v8::Local<v8::Object> object,
46 v8::Local<v8::String> key,
47 v8::Local<v8::Value> value) {
48 #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
50 v8::Isolate *isolate = v8::Isolate::GetCurrent();
51 v8::Local<v8::Context> context = isolate->GetCurrentContext();
52 v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
53 return object->SetPrivate(context, private_key, value);
55 return Just(object->SetHiddenValue(key, value));
59 inline Maybe<bool> DeletePrivate(
60 v8::Local<v8::Object> object,
61 v8::Local<v8::String> key) {
62 #if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION
64 v8::Isolate *isolate = v8::Isolate::GetCurrent();
65 v8::Local<v8::Private> private_key = v8::Private::ForApi(isolate, key);
66 return object->DeletePrivate(isolate->GetCurrentContext(), private_key);
68 return Just(object->DeleteHiddenValue(key));
72 #endif // NAN_PRIVATE_H_