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