1 |
3a515b92
|
cagy
|
/*********************************************************************
|
2 |
|
|
* NAN - Native Abstractions for Node.js
|
3 |
|
|
*
|
4 |
|
|
* Copyright (c) 2018 NAN contributors
|
5 |
|
|
*
|
6 |
|
|
* MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
|
7 |
|
|
********************************************************************/
|
8 |
|
|
|
9 |
|
|
#ifndef NAN_PRIVATE_H_
|
10 |
|
|
#define NAN_PRIVATE_H_
|
11 |
|
|
|
12 |
|
|
inline Maybe<bool>
|
13 |
|
|
HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
|
14 |
|
|
HandleScope scope;
|
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);
|
20 |
|
|
#else
|
21 |
|
|
return Just(!object->GetHiddenValue(key).IsEmpty());
|
22 |
|
|
#endif
|
23 |
|
|
}
|
24 |
|
|
|
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());
|
34 |
|
|
#else
|
35 |
|
|
EscapableHandleScope scope;
|
36 |
|
|
v8::Local<v8::Value> v = object->GetHiddenValue(key);
|
37 |
|
|
if (v.IsEmpty()) {
|
38 |
|
|
v = Undefined();
|
39 |
|
|
}
|
40 |
|
|
return scope.Escape(v);
|
41 |
|
|
#endif
|
42 |
|
|
}
|
43 |
|
|
|
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
|
49 |
|
|
HandleScope scope;
|
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);
|
54 |
|
|
#else
|
55 |
|
|
return Just(object->SetHiddenValue(key, value));
|
56 |
|
|
#endif
|
57 |
|
|
}
|
58 |
|
|
|
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
|
63 |
|
|
HandleScope scope;
|
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);
|
67 |
|
|
#else
|
68 |
|
|
return Just(object->DeleteHiddenValue(key));
|
69 |
|
|
#endif
|
70 |
|
|
}
|
71 |
|
|
|
72 |
|
|
#endif // NAN_PRIVATE_H_
|