UNPKG

2.48 kBtext/x-cView Raw
1/*********************************************************************
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
12inline Maybe<bool>
13HasPrivate(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
25inline MaybeLocal<v8::Value>
26GetPrivate(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
44inline 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
59inline 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_
73