Initial commit
[yaffs-website] / node_modules / nan / doc / maybe_types.md
1 ## Maybe Types
2
3 The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_.
4
5 * **Maybe Types**
6   - <a href="#api_nan_maybe_local"><b><code>Nan::MaybeLocal</code></b></a>
7   - <a href="#api_nan_maybe"><b><code>Nan::Maybe</code></b></a>
8   - <a href="#api_nan_nothing"><b><code>Nan::Nothing</code></b></a>
9   - <a href="#api_nan_just"><b><code>Nan::Just</code></b></a>
10 * **Maybe Helpers**
11   - <a href="#api_nan_call"><b><code>Nan::Call()</code></b></a>
12   - <a href="#api_nan_to_detail_string"><b><code>Nan::ToDetailString()</code></b></a>
13   - <a href="#api_nan_to_array_index"><b><code>Nan::ToArrayIndex()</code></b></a>
14   - <a href="#api_nan_equals"><b><code>Nan::Equals()</code></b></a>
15   - <a href="#api_nan_new_instance"><b><code>Nan::NewInstance()</code></b></a>
16   - <a href="#api_nan_get_function"><b><code>Nan::GetFunction()</code></b></a>
17   - <a href="#api_nan_set"><b><code>Nan::Set()</code></b></a>
18   - <a href="#api_nan_force_set"><b><code>Nan::ForceSet()</code></b></a>
19   - <a href="#api_nan_get"><b><code>Nan::Get()</code></b></a>
20   - <a href="#api_nan_get_property_attribute"><b><code>Nan::GetPropertyAttributes()</code></b></a>
21   - <a href="#api_nan_has"><b><code>Nan::Has()</code></b></a>
22   - <a href="#api_nan_delete"><b><code>Nan::Delete()</code></b></a>
23   - <a href="#api_nan_get_property_names"><b><code>Nan::GetPropertyNames()</code></b></a>
24   - <a href="#api_nan_get_own_property_names"><b><code>Nan::GetOwnPropertyNames()</code></b></a>
25   - <a href="#api_nan_set_prototype"><b><code>Nan::SetPrototype()</code></b></a>
26   - <a href="#api_nan_object_proto_to_string"><b><code>Nan::ObjectProtoToString()</code></b></a>
27   - <a href="#api_nan_has_own_property"><b><code>Nan::HasOwnProperty()</code></b></a>
28   - <a href="#api_nan_has_real_named_property"><b><code>Nan::HasRealNamedProperty()</code></b></a>
29   - <a href="#api_nan_has_real_indexed_property"><b><code>Nan::HasRealIndexedProperty()</code></b></a>
30   - <a href="#api_nan_has_real_named_callback_property"><b><code>Nan::HasRealNamedCallbackProperty()</code></b></a>
31   - <a href="#api_nan_get_real_named_property_in_prototype_chain"><b><code>Nan::GetRealNamedPropertyInPrototypeChain()</code></b></a>
32   - <a href="#api_nan_get_real_named_property"><b><code>Nan::GetRealNamedProperty()</code></b></a>
33   - <a href="#api_nan_call_as_function"><b><code>Nan::CallAsFunction()</code></b></a>
34   - <a href="#api_nan_call_as_constructor"><b><code>Nan::CallAsConstructor()</code></b></a>
35   - <a href="#api_nan_get_source_line"><b><code>Nan::GetSourceLine()</code></b></a>
36   - <a href="#api_nan_get_line_number"><b><code>Nan::GetLineNumber()</code></b></a>
37   - <a href="#api_nan_get_start_column"><b><code>Nan::GetStartColumn()</code></b></a>
38   - <a href="#api_nan_get_end_column"><b><code>Nan::GetEndColumn()</code></b></a>
39   - <a href="#api_nan_clone_element_at"><b><code>Nan::CloneElementAt()</code></b></a>
40   - <a href="#api_nan_has_private"><b><code>Nan::HasPrivate()</code></b></a>
41   - <a href="#api_nan_get_private"><b><code>Nan::GetPrivate()</code></b></a>
42   - <a href="#api_nan_set_private"><b><code>Nan::SetPrivate()</code></b></a>
43   - <a href="#api_nan_delete_private"><b><code>Nan::DeletePrivate()</code></b></a>
44   - <a href="#api_nan_make_maybe"><b><code>Nan::MakeMaybe()</code></b></a>
45
46 <a name="api_nan_maybe_local"></a>
47 ### Nan::MaybeLocal
48
49 A `Nan::MaybeLocal<T>` is a wrapper around [`v8::Local<T>`](https://v8docs.nodesource.com/io.js-3.0/de/deb/classv8_1_1_local.html) that enforces a check that determines whether the `v8::Local<T>` is empty before it can be used.
50
51 If an API method returns a `Nan::MaybeLocal`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, an empty `Nan::MaybeLocal` is returned.
52
53 Definition:
54
55 ```c++
56 template<typename T> class Nan::MaybeLocal {
57  public:
58   MaybeLocal();
59
60   template<typename S> MaybeLocal(v8::Local<S> that);
61
62   bool IsEmpty() const;
63
64   template<typename S> bool ToLocal(v8::Local<S> *out);
65
66   // Will crash if the MaybeLocal<> is empty.
67   v8::Local<T> ToLocalChecked();
68
69   template<typename S> v8::Local<S> FromMaybe(v8::Local<S> default_value) const;
70 };
71 ```
72
73 See the documentation for [`v8::MaybeLocal`](https://v8docs.nodesource.com/io.js-3.0/d8/d7d/classv8_1_1_maybe_local.html) for further details.
74
75 <a name="api_nan_maybe"></a>
76 ### Nan::Maybe
77
78 A simple `Nan::Maybe` type, representing an object which may or may not have a value, see https://hackage.haskell.org/package/base/docs/Data-Maybe.html.
79
80 If an API method returns a `Nan::Maybe<>`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, a "Nothing" value is returned.
81
82 Definition:
83
84 ```c++
85 template<typename T> class Nan::Maybe {
86  public:
87   bool IsNothing() const;
88   bool IsJust() const;
89
90   // Will crash if the Maybe<> is nothing.
91   T FromJust();
92
93   T FromMaybe(const T& default_value);
94
95   bool operator==(const Maybe &other);
96
97   bool operator!=(const Maybe &other);
98 };
99 ```
100
101 See the documentation for [`v8::Maybe`](https://v8docs.nodesource.com/io.js-3.0/d9/d4b/classv8_1_1_maybe.html) for further details.
102
103 <a name="api_nan_nothing"></a>
104 ### Nan::Nothing
105
106 Construct an empty `Nan::Maybe` type representing _nothing_.
107
108 ```c++
109 template<typename T> Nan::Maybe<T> Nan::Nothing();
110 ```
111
112 <a name="api_nan_just"></a>
113 ### Nan::Just
114
115 Construct a `Nan::Maybe` type representing _just_ a value.
116
117 ```c++
118 template<typename T> Nan::Maybe<T> Nan::Just(const T &t);
119 ```
120
121 <a name="api_nan_call"></a>
122 ### Nan::Call()
123
124 A helper method for calling [`v8::Function#Call()`](https://v8docs.nodesource.com/io.js-3.0/d5/d54/classv8_1_1_function.html#a468a89f737af0612db10132799c827c0) in a way compatible across supported versions of V8.
125
126 Signature:
127
128 ```c++
129 Nan::MaybeLocal<v8::Value> Nan::Call(v8::Local<v8::Function> fun, v8::Local<v8::Object> recv, int argc, v8::Local<v8::Value> argv[]);
130 ```
131
132
133 <a name="api_nan_to_detail_string"></a>
134 ### Nan::ToDetailString()
135
136 A helper method for calling [`v8::Value#ToDetailString()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#a2f9770296dc2c8d274bc8cc0dca243e5) in a way compatible across supported versions of V8.
137
138 Signature:
139
140 ```c++
141 Nan::MaybeLocal<v8::String> Nan::ToDetailString(v8::Local<v8::Value> val);
142 ```
143
144
145 <a name="api_nan_to_array_index"></a>
146 ### Nan::ToArrayIndex()
147
148 A helper method for calling [`v8::Value#ToArrayIndex()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#acc5bbef3c805ec458470c0fcd6f13493) in a way compatible across supported versions of V8.
149
150 Signature:
151
152 ```c++
153 Nan::MaybeLocal<v8::Uint32> Nan::ToArrayIndex(v8::Local<v8::Value> val);
154 ```
155
156
157 <a name="api_nan_equals"></a>
158 ### Nan::Equals()
159
160 A helper method for calling [`v8::Value#Equals()`](https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_value.html#a0d9616ab2de899d4e3047c30a10c9285) in a way compatible across supported versions of V8.
161
162 Signature:
163
164 ```c++
165 Nan::Maybe<bool> Nan::Equals(v8::Local<v8::Value> a, v8::Local<v8::Value>(b));
166 ```
167
168
169 <a name="api_nan_new_instance"></a>
170 ### Nan::NewInstance()
171
172 A helper method for calling [`v8::Function#NewInstance()`](https://v8docs.nodesource.com/io.js-3.0/d5/d54/classv8_1_1_function.html#a691b13f7a553069732cbacf5ac8c62ec) and [`v8::ObjectTemplate#NewInstance()`](https://v8docs.nodesource.com/io.js-3.0/db/d5f/classv8_1_1_object_template.html#ad605a7543cfbc5dab54cdb0883d14ae4) in a way compatible across supported versions of V8.
173
174 Signature:
175
176 ```c++
177 Nan::MaybeLocal<v8::Object> Nan::NewInstance(v8::Local<v8::Function> h);
178 Nan::MaybeLocal<v8::Object> Nan::NewInstance(v8::Local<v8::Function> h, int argc, v8::Local<v8::Value> argv[]);
179 Nan::MaybeLocal<v8::Object> Nan::NewInstance(v8::Local<v8::ObjectTemplate> h);
180 ```
181
182
183 <a name="api_nan_get_function"></a>
184 ### Nan::GetFunction()
185
186 A helper method for calling [`v8::FunctionTemplate#GetFunction()`](https://v8docs.nodesource.com/io.js-3.0/d8/d83/classv8_1_1_function_template.html#a56d904662a86eca78da37d9bb0ed3705) in a way compatible across supported versions of V8.
187
188 Signature:
189
190 ```c++
191 Nan::MaybeLocal<v8::Function> Nan::GetFunction(v8::Local<v8::FunctionTemplate> t);
192 ```
193
194
195 <a name="api_nan_set"></a>
196 ### Nan::Set()
197
198 A helper method for calling [`v8::Object#Set()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a67604ea3734f170c66026064ea808f20) in a way compatible across supported versions of V8.
199
200 Signature:
201
202 ```c++
203 Nan::Maybe<bool> Nan::Set(v8::Local<v8::Object> obj,
204                           v8::Local<v8::Value> key,
205                           v8::Local<v8::Value> value)
206 Nan::Maybe<bool> Nan::Set(v8::Local<v8::Object> obj,
207                           uint32_t index,
208                           v8::Local<v8::Value> value);
209 ```
210
211
212 <a name="api_nan_force_set"></a>
213 ### Nan::ForceSet()
214
215 A helper method for calling [`v8::Object#ForceSet()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a796b7b682896fb64bf1872747734e836) in a way compatible across supported versions of V8.
216
217 Signature:
218
219 ```c++
220 Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object> obj,
221                                v8::Local<v8::Value> key,
222                                v8::Local<v8::Value> value,
223                                v8::PropertyAttribute attribs = v8::None);
224 ```
225
226
227 <a name="api_nan_get"></a>
228 ### Nan::Get()
229
230 A helper method for calling [`v8::Object#Get()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a2565f03e736694f6b1e1cf22a0b4eac2) in a way compatible across supported versions of V8.
231
232 Signature:
233
234 ```c++
235 Nan::MaybeLocal<v8::Value> Nan::Get(v8::Local<v8::Object> obj,
236                                     v8::Local<v8::Value> key);
237 Nan::MaybeLocal<v8::Value> Nan::Get(v8::Local<v8::Object> obj, uint32_t index);
238 ```
239
240
241 <a name="api_nan_get_property_attribute"></a>
242 ### Nan::GetPropertyAttributes()
243
244 A helper method for calling [`v8::Object#GetPropertyAttributes()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a9b898894da3d1db2714fd9325a54fe57) in a way compatible across supported versions of V8.
245
246 Signature:
247
248 ```c++
249 Nan::Maybe<v8::PropertyAttribute> Nan::GetPropertyAttributes(
250     v8::Local<v8::Object> obj,
251     v8::Local<v8::Value> key);
252 ```
253
254
255 <a name="api_nan_has"></a>
256 ### Nan::Has()
257
258 A helper method for calling [`v8::Object#Has()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab3c3d89ea7c2f9afd08965bd7299a41d) in a way compatible across supported versions of V8.
259
260 Signature:
261
262 ```c++
263 Nan::Maybe<bool> Nan::Has(v8::Local<v8::Object> obj, v8::Local<v8::String> key);
264 Nan::Maybe<bool> Nan::Has(v8::Local<v8::Object> obj, uint32_t index);
265 ```
266
267
268 <a name="api_nan_delete"></a>
269 ### Nan::Delete()
270
271 A helper method for calling [`v8::Object#Delete()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a2fa0f5a592582434ed1ceceff7d891ef) in a way compatible across supported versions of V8.
272
273 Signature:
274
275 ```c++
276 Nan::Maybe<bool> Nan::Delete(v8::Local<v8::Object> obj,
277                              v8::Local<v8::String> key);
278 Nan::Maybe<bool> Nan::Delete(v8::Local<v8::Object> obj, uint32_t index);
279 ```
280
281
282 <a name="api_nan_get_property_names"></a>
283 ### Nan::GetPropertyNames()
284
285 A helper method for calling [`v8::Object#GetPropertyNames()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#aced885270cfd2c956367b5eedc7fbfe8) in a way compatible across supported versions of V8.
286
287 Signature:
288
289 ```c++
290 Nan::MaybeLocal<v8::Array> Nan::GetPropertyNames(v8::Local<v8::Object> obj);
291 ```
292
293
294 <a name="api_nan_get_own_property_names"></a>
295 ### Nan::GetOwnPropertyNames()
296
297 A helper method for calling [`v8::Object#GetOwnPropertyNames()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a79a6e4d66049b9aa648ed4dfdb23e6eb) in a way compatible across supported versions of V8.
298
299 Signature:
300
301 ```c++
302 Nan::MaybeLocal<v8::Array> Nan::GetOwnPropertyNames(v8::Local<v8::Object> obj);
303 ```
304
305
306 <a name="api_nan_set_prototype"></a>
307 ### Nan::SetPrototype()
308
309 A helper method for calling [`v8::Object#SetPrototype()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a442706b22fceda6e6d1f632122a9a9f4) in a way compatible across supported versions of V8.
310
311 Signature:
312
313 ```c++
314 Nan::Maybe<bool> Nan::SetPrototype(v8::Local<v8::Object> obj,
315                                    v8::Local<v8::Value> prototype);
316 ```
317
318
319 <a name="api_nan_object_proto_to_string"></a>
320 ### Nan::ObjectProtoToString()
321
322 A helper method for calling [`v8::Object#ObjectProtoToString()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab7a92b4dcf822bef72f6c0ac6fea1f0b) in a way compatible across supported versions of V8.
323
324 Signature:
325
326 ```c++
327 Nan::MaybeLocal<v8::String> Nan::ObjectProtoToString(v8::Local<v8::Object> obj);
328 ```
329
330
331 <a name="api_nan_has_own_property"></a>
332 ### Nan::HasOwnProperty()
333
334 A helper method for calling [`v8::Object#HasOwnProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ab7b7245442ca6de1e1c145ea3fd653ff) in a way compatible across supported versions of V8.
335
336 Signature:
337
338 ```c++
339 Nan::Maybe<bool> Nan::HasOwnProperty(v8::Local<v8::Object> obj,
340                                      v8::Local<v8::String> key);
341 ```
342
343
344 <a name="api_nan_has_real_named_property"></a>
345 ### Nan::HasRealNamedProperty()
346
347 A helper method for calling [`v8::Object#HasRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#ad8b80a59c9eb3c1e6c3cd6c84571f767) in a way compatible across supported versions of V8.
348
349 Signature:
350
351 ```c++
352 Nan::Maybe<bool> Nan::HasRealNamedProperty(v8::Local<v8::Object> obj,
353                                            v8::Local<v8::String> key);
354 ```
355
356
357 <a name="api_nan_has_real_indexed_property"></a>
358 ### Nan::HasRealIndexedProperty()
359
360 A helper method for calling [`v8::Object#HasRealIndexedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#af94fc1135a5e74a2193fb72c3a1b9855) in a way compatible across supported versions of V8.
361
362 Signature:
363
364 ```c++
365 Nan::Maybe<bool> Nan::HasRealIndexedProperty(v8::Local<v8::Object> obj,
366                                              uint32_t index);
367 ```
368
369
370 <a name="api_nan_has_real_named_callback_property"></a>
371 ### Nan::HasRealNamedCallbackProperty()
372
373 A helper method for calling [`v8::Object#HasRealNamedCallbackProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#af743b7ea132b89f84d34d164d0668811) in a way compatible across supported versions of V8.
374
375 Signature:
376
377 ```c++
378 Nan::Maybe<bool> Nan::HasRealNamedCallbackProperty(
379     v8::Local<v8::Object> obj,
380     v8::Local<v8::String> key);
381 ```
382
383
384 <a name="api_nan_get_real_named_property_in_prototype_chain"></a>
385 ### Nan::GetRealNamedPropertyInPrototypeChain()
386
387 A helper method for calling [`v8::Object#GetRealNamedPropertyInPrototypeChain()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a8700b1862e6b4783716964ba4d5e6172) in a way compatible across supported versions of V8.
388
389 Signature:
390
391 ```c++
392 Nan::MaybeLocal<v8::Value> Nan::GetRealNamedPropertyInPrototypeChain(
393     v8::Local<v8::Object> obj,
394     v8::Local<v8::String> key);
395 ```
396
397
398 <a name="api_nan_get_real_named_property"></a>
399 ### Nan::GetRealNamedProperty()
400
401 A helper method for calling [`v8::Object#GetRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a84471a824576a5994fdd0ffcbf99ccc0) in a way compatible across supported versions of V8.
402
403 Signature:
404
405 ```c++
406 Nan::MaybeLocal<v8::Value> Nan::GetRealNamedProperty(v8::Local<v8::Object> obj,
407                                                      v8::Local<v8::String> key);
408 ```
409
410
411 <a name="api_nan_call_as_function"></a>
412 ### Nan::CallAsFunction()
413
414 A helper method for calling [`v8::Object#CallAsFunction()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a9ef18be634e79b4f0cdffa1667a29f58) in a way compatible across supported versions of V8.
415
416 Signature:
417
418 ```c++
419 Nan::MaybeLocal<v8::Value> Nan::CallAsFunction(v8::Local<v8::Object> obj,
420                                                v8::Local<v8::Object> recv,
421                                                int argc,
422                                                v8::Local<v8::Value> argv[]);
423 ```
424
425
426 <a name="api_nan_call_as_constructor"></a>
427 ### Nan::CallAsConstructor()
428
429 A helper method for calling [`v8::Object#CallAsConstructor()`](https://v8docs.nodesource.com/io.js-3.0/db/d85/classv8_1_1_object.html#a50d571de50d0b0dfb28795619d07a01b) in a way compatible across supported versions of V8.
430
431 Signature:
432
433 ```c++
434 Nan::MaybeLocal<v8::Value> Nan::CallAsConstructor(v8::Local<v8::Object> obj,
435                                                   int argc,
436                                                   v8::Local<v8::Value> argv[]);
437 ```
438
439
440 <a name="api_nan_get_source_line"></a>
441 ### Nan::GetSourceLine()
442
443 A helper method for calling [`v8::Message#GetSourceLine()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#a849f7a6c41549d83d8159825efccd23a) in a way compatible across supported versions of V8.
444
445 Signature:
446
447 ```c++
448 Nan::MaybeLocal<v8::String> Nan::GetSourceLine(v8::Local<v8::Message> msg);
449 ```
450
451
452 <a name="api_nan_get_line_number"></a>
453 ### Nan::GetLineNumber()
454
455 A helper method for calling [`v8::Message#GetLineNumber()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#adbe46c10a88a6565f2732a2d2adf99b9) in a way compatible across supported versions of V8.
456
457 Signature:
458
459 ```c++
460 Nan::Maybe<int> Nan::GetLineNumber(v8::Local<v8::Message> msg);
461 ```
462
463
464 <a name="api_nan_get_start_column"></a>
465 ### Nan::GetStartColumn()
466
467 A helper method for calling [`v8::Message#GetStartColumn()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#a60ede616ba3822d712e44c7a74487ba6) in a way compatible across supported versions of V8.
468
469 Signature:
470
471 ```c++
472 Nan::Maybe<int> Nan::GetStartColumn(v8::Local<v8::Message> msg);
473 ```
474
475
476 <a name="api_nan_get_end_column"></a>
477 ### Nan::GetEndColumn()
478
479 A helper method for calling [`v8::Message#GetEndColumn()`](https://v8docs.nodesource.com/io.js-3.0/d9/d28/classv8_1_1_message.html#aaa004cf19e529da980bc19fcb76d93be) in a way compatible across supported versions of V8.
480
481 Signature:
482
483 ```c++
484 Nan::Maybe<int> Nan::GetEndColumn(v8::Local<v8::Message> msg);
485 ```
486
487
488 <a name="api_nan_clone_element_at"></a>
489 ### Nan::CloneElementAt()
490
491 A helper method for calling [`v8::Array#CloneElementAt()`](https://v8docs.nodesource.com/io.js-3.0/d3/d32/classv8_1_1_array.html#a1d3a878d4c1c7cae974dd50a1639245e) in a way compatible across supported versions of V8.
492
493 Signature:
494
495 ```c++
496 Nan::MaybeLocal<v8::Object> Nan::CloneElementAt(v8::Local<v8::Array> array, uint32_t index);
497 ```
498
499 <a name="api_nan_has_private"></a>
500 ### Nan::HasPrivate()
501
502 A helper method for calling [`v8::Object#HasPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#af68a0b98066cfdeb8f943e98a40ba08d) in a way compatible across supported versions of V8.
503
504 Signature:
505
506 ```c++
507 Nan::Maybe<bool> Nan::HasPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
508 ```
509
510 <a name="api_nan_get_private"></a>
511 ### Nan::GetPrivate()
512
513 A helper method for calling [`v8::Object#GetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a169f2da506acbec34deadd9149a1925a) in a way compatible across supported versions of V8.
514
515 Signature:
516
517 ```c++
518 Nan::MaybeLocal<v8::Value> Nan::GetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
519 ```
520
521 <a name="api_nan_set_private"></a>
522 ### Nan::SetPrivate()
523
524 A helper method for calling [`v8::Object#SetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#ace1769b0f3b86bfe9fda1010916360ee) in a way compatible across supported versions of V8.
525
526 Signature:
527
528 ```c++
529 Nan::Maybe<bool> Nan::SetPrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value);
530 ```
531
532 <a name="api_nan_delete_private"></a>
533 ### Nan::DeletePrivate()
534
535 A helper method for calling [`v8::Object#DeletePrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a138bb32a304f3982be02ad499693b8fd) in a way compatible across supported versions of V8.
536
537 Signature:
538
539 ```c++
540 Nan::Maybe<bool> Nan::DeletePrivate(v8::Local<v8::Object> object, v8::Local<v8::String> key);
541 ```
542
543 <a name="api_nan_make_maybe"></a>
544 ### Nan::MakeMaybe()
545
546 Wraps a `v8::Local<>` in a `Nan::MaybeLocal<>`. When called with a `Nan::MaybeLocal<>` it just returns its argument. This is useful in generic template code that builds on NAN.
547
548 Synopsis:
549
550 ```c++
551   MaybeLocal<v8::Number> someNumber = MakeMaybe(New<v8::Number>(3.141592654));
552   MaybeLocal<v8::String> someString = MakeMaybe(New<v8::String>("probably"));
553 ```
554
555 Signature:
556
557 ```c++
558 template <typename T, template <typename> class MaybeMaybe>
559 Nan::MaybeLocal<T> Nan::MakeMaybe(MaybeMaybe<T> v);
560 ```