Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:20:03

0001 #ifndef SRC_JS_NATIVE_API_H_
0002 #define SRC_JS_NATIVE_API_H_
0003 
0004 // This file needs to be compatible with C compilers.
0005 #include <stdbool.h>  // NOLINT(modernize-deprecated-headers)
0006 #include <stddef.h>   // NOLINT(modernize-deprecated-headers)
0007 
0008 // Use INT_MAX, this should only be consumed by the pre-processor anyway.
0009 #define NAPI_VERSION_EXPERIMENTAL 2147483647
0010 #ifndef NAPI_VERSION
0011 #ifdef NAPI_EXPERIMENTAL
0012 #define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL
0013 #else
0014 // The baseline version for N-API.
0015 // The NAPI_VERSION controls which version will be used by default when
0016 // compilling a native addon. If the addon developer specifically wants to use
0017 // functions available in a new version of N-API that is not yet ported in all
0018 // LTS versions, they can set NAPI_VERSION knowing that they have specifically
0019 // depended on that version.
0020 #define NAPI_VERSION 8
0021 #endif
0022 #endif
0023 
0024 #include "js_native_api_types.h"
0025 
0026 // If you need __declspec(dllimport), either include <node_api.h> instead, or
0027 // define NAPI_EXTERN as __declspec(dllimport) on the compiler's command line.
0028 #ifndef NAPI_EXTERN
0029 #ifdef _WIN32
0030 #define NAPI_EXTERN __declspec(dllexport)
0031 #elif defined(__wasm__)
0032 #define NAPI_EXTERN                                                            \
0033   __attribute__((visibility("default")))                                       \
0034   __attribute__((__import_module__("napi")))
0035 #else
0036 #define NAPI_EXTERN __attribute__((visibility("default")))
0037 #endif
0038 #endif
0039 
0040 #define NAPI_AUTO_LENGTH SIZE_MAX
0041 
0042 #ifdef __cplusplus
0043 #define EXTERN_C_START extern "C" {
0044 #define EXTERN_C_END }
0045 #else
0046 #define EXTERN_C_START
0047 #define EXTERN_C_END
0048 #endif
0049 
0050 EXTERN_C_START
0051 
0052 NAPI_EXTERN napi_status NAPI_CDECL napi_get_last_error_info(
0053     node_api_basic_env env, const napi_extended_error_info** result);
0054 
0055 // Getters for defined singletons
0056 NAPI_EXTERN napi_status NAPI_CDECL napi_get_undefined(napi_env env,
0057                                                       napi_value* result);
0058 NAPI_EXTERN napi_status NAPI_CDECL napi_get_null(napi_env env,
0059                                                  napi_value* result);
0060 NAPI_EXTERN napi_status NAPI_CDECL napi_get_global(napi_env env,
0061                                                    napi_value* result);
0062 NAPI_EXTERN napi_status NAPI_CDECL napi_get_boolean(napi_env env,
0063                                                     bool value,
0064                                                     napi_value* result);
0065 
0066 // Methods to create Primitive types/Objects
0067 NAPI_EXTERN napi_status NAPI_CDECL napi_create_object(napi_env env,
0068                                                       napi_value* result);
0069 NAPI_EXTERN napi_status NAPI_CDECL napi_create_array(napi_env env,
0070                                                      napi_value* result);
0071 NAPI_EXTERN napi_status NAPI_CDECL
0072 napi_create_array_with_length(napi_env env, size_t length, napi_value* result);
0073 NAPI_EXTERN napi_status NAPI_CDECL napi_create_double(napi_env env,
0074                                                       double value,
0075                                                       napi_value* result);
0076 NAPI_EXTERN napi_status NAPI_CDECL napi_create_int32(napi_env env,
0077                                                      int32_t value,
0078                                                      napi_value* result);
0079 NAPI_EXTERN napi_status NAPI_CDECL napi_create_uint32(napi_env env,
0080                                                       uint32_t value,
0081                                                       napi_value* result);
0082 NAPI_EXTERN napi_status NAPI_CDECL napi_create_int64(napi_env env,
0083                                                      int64_t value,
0084                                                      napi_value* result);
0085 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_latin1(
0086     napi_env env, const char* str, size_t length, napi_value* result);
0087 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf8(napi_env env,
0088                                                            const char* str,
0089                                                            size_t length,
0090                                                            napi_value* result);
0091 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf16(napi_env env,
0092                                                             const char16_t* str,
0093                                                             size_t length,
0094                                                             napi_value* result);
0095 #if NAPI_VERSION >= 10
0096 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_external_string_latin1(
0097     napi_env env,
0098     char* str,
0099     size_t length,
0100     node_api_basic_finalize finalize_callback,
0101     void* finalize_hint,
0102     napi_value* result,
0103     bool* copied);
0104 NAPI_EXTERN napi_status NAPI_CDECL
0105 node_api_create_external_string_utf16(napi_env env,
0106                                       char16_t* str,
0107                                       size_t length,
0108                                       node_api_basic_finalize finalize_callback,
0109                                       void* finalize_hint,
0110                                       napi_value* result,
0111                                       bool* copied);
0112 
0113 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_property_key_latin1(
0114     napi_env env, const char* str, size_t length, napi_value* result);
0115 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_property_key_utf8(
0116     napi_env env, const char* str, size_t length, napi_value* result);
0117 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_property_key_utf16(
0118     napi_env env, const char16_t* str, size_t length, napi_value* result);
0119 #endif  // NAPI_VERSION >= 10
0120 
0121 NAPI_EXTERN napi_status NAPI_CDECL napi_create_symbol(napi_env env,
0122                                                       napi_value description,
0123                                                       napi_value* result);
0124 #if NAPI_VERSION >= 9
0125 NAPI_EXTERN napi_status NAPI_CDECL
0126 node_api_symbol_for(napi_env env,
0127                     const char* utf8description,
0128                     size_t length,
0129                     napi_value* result);
0130 #endif  // NAPI_VERSION >= 9
0131 NAPI_EXTERN napi_status NAPI_CDECL napi_create_function(napi_env env,
0132                                                         const char* utf8name,
0133                                                         size_t length,
0134                                                         napi_callback cb,
0135                                                         void* data,
0136                                                         napi_value* result);
0137 NAPI_EXTERN napi_status NAPI_CDECL napi_create_error(napi_env env,
0138                                                      napi_value code,
0139                                                      napi_value msg,
0140                                                      napi_value* result);
0141 NAPI_EXTERN napi_status NAPI_CDECL napi_create_type_error(napi_env env,
0142                                                           napi_value code,
0143                                                           napi_value msg,
0144                                                           napi_value* result);
0145 NAPI_EXTERN napi_status NAPI_CDECL napi_create_range_error(napi_env env,
0146                                                            napi_value code,
0147                                                            napi_value msg,
0148                                                            napi_value* result);
0149 #if NAPI_VERSION >= 9
0150 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_syntax_error(
0151     napi_env env, napi_value code, napi_value msg, napi_value* result);
0152 #endif  // NAPI_VERSION >= 9
0153 
0154 // Methods to get the native napi_value from Primitive type
0155 NAPI_EXTERN napi_status NAPI_CDECL napi_typeof(napi_env env,
0156                                                napi_value value,
0157                                                napi_valuetype* result);
0158 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_double(napi_env env,
0159                                                          napi_value value,
0160                                                          double* result);
0161 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int32(napi_env env,
0162                                                         napi_value value,
0163                                                         int32_t* result);
0164 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_uint32(napi_env env,
0165                                                          napi_value value,
0166                                                          uint32_t* result);
0167 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int64(napi_env env,
0168                                                         napi_value value,
0169                                                         int64_t* result);
0170 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bool(napi_env env,
0171                                                        napi_value value,
0172                                                        bool* result);
0173 
0174 // Copies LATIN-1 encoded bytes from a string into a buffer.
0175 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_latin1(
0176     napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result);
0177 
0178 // Copies UTF-8 encoded bytes from a string into a buffer.
0179 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf8(
0180     napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result);
0181 
0182 // Copies UTF-16 encoded bytes from a string into a buffer.
0183 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf16(napi_env env,
0184                                                                napi_value value,
0185                                                                char16_t* buf,
0186                                                                size_t bufsize,
0187                                                                size_t* result);
0188 
0189 // Methods to coerce values
0190 // These APIs may execute user scripts
0191 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_bool(napi_env env,
0192                                                        napi_value value,
0193                                                        napi_value* result);
0194 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_number(napi_env env,
0195                                                          napi_value value,
0196                                                          napi_value* result);
0197 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_object(napi_env env,
0198                                                          napi_value value,
0199                                                          napi_value* result);
0200 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_string(napi_env env,
0201                                                          napi_value value,
0202                                                          napi_value* result);
0203 
0204 // Methods to work with Objects
0205 NAPI_EXTERN napi_status NAPI_CDECL napi_get_prototype(napi_env env,
0206                                                       napi_value object,
0207                                                       napi_value* result);
0208 NAPI_EXTERN napi_status NAPI_CDECL napi_get_property_names(napi_env env,
0209                                                            napi_value object,
0210                                                            napi_value* result);
0211 NAPI_EXTERN napi_status NAPI_CDECL napi_set_property(napi_env env,
0212                                                      napi_value object,
0213                                                      napi_value key,
0214                                                      napi_value value);
0215 NAPI_EXTERN napi_status NAPI_CDECL napi_has_property(napi_env env,
0216                                                      napi_value object,
0217                                                      napi_value key,
0218                                                      bool* result);
0219 NAPI_EXTERN napi_status NAPI_CDECL napi_get_property(napi_env env,
0220                                                      napi_value object,
0221                                                      napi_value key,
0222                                                      napi_value* result);
0223 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_property(napi_env env,
0224                                                         napi_value object,
0225                                                         napi_value key,
0226                                                         bool* result);
0227 NAPI_EXTERN napi_status NAPI_CDECL napi_has_own_property(napi_env env,
0228                                                          napi_value object,
0229                                                          napi_value key,
0230                                                          bool* result);
0231 NAPI_EXTERN napi_status NAPI_CDECL napi_set_named_property(napi_env env,
0232                                                            napi_value object,
0233                                                            const char* utf8name,
0234                                                            napi_value value);
0235 NAPI_EXTERN napi_status NAPI_CDECL napi_has_named_property(napi_env env,
0236                                                            napi_value object,
0237                                                            const char* utf8name,
0238                                                            bool* result);
0239 NAPI_EXTERN napi_status NAPI_CDECL napi_get_named_property(napi_env env,
0240                                                            napi_value object,
0241                                                            const char* utf8name,
0242                                                            napi_value* result);
0243 NAPI_EXTERN napi_status NAPI_CDECL napi_set_element(napi_env env,
0244                                                     napi_value object,
0245                                                     uint32_t index,
0246                                                     napi_value value);
0247 NAPI_EXTERN napi_status NAPI_CDECL napi_has_element(napi_env env,
0248                                                     napi_value object,
0249                                                     uint32_t index,
0250                                                     bool* result);
0251 NAPI_EXTERN napi_status NAPI_CDECL napi_get_element(napi_env env,
0252                                                     napi_value object,
0253                                                     uint32_t index,
0254                                                     napi_value* result);
0255 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_element(napi_env env,
0256                                                        napi_value object,
0257                                                        uint32_t index,
0258                                                        bool* result);
0259 NAPI_EXTERN napi_status NAPI_CDECL
0260 napi_define_properties(napi_env env,
0261                        napi_value object,
0262                        size_t property_count,
0263                        const napi_property_descriptor* properties);
0264 
0265 // Methods to work with Arrays
0266 NAPI_EXTERN napi_status NAPI_CDECL napi_is_array(napi_env env,
0267                                                  napi_value value,
0268                                                  bool* result);
0269 NAPI_EXTERN napi_status NAPI_CDECL napi_get_array_length(napi_env env,
0270                                                          napi_value value,
0271                                                          uint32_t* result);
0272 
0273 // Methods to compare values
0274 NAPI_EXTERN napi_status NAPI_CDECL napi_strict_equals(napi_env env,
0275                                                       napi_value lhs,
0276                                                       napi_value rhs,
0277                                                       bool* result);
0278 
0279 // Methods to work with Functions
0280 NAPI_EXTERN napi_status NAPI_CDECL napi_call_function(napi_env env,
0281                                                       napi_value recv,
0282                                                       napi_value func,
0283                                                       size_t argc,
0284                                                       const napi_value* argv,
0285                                                       napi_value* result);
0286 NAPI_EXTERN napi_status NAPI_CDECL napi_new_instance(napi_env env,
0287                                                      napi_value constructor,
0288                                                      size_t argc,
0289                                                      const napi_value* argv,
0290                                                      napi_value* result);
0291 NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env,
0292                                                    napi_value object,
0293                                                    napi_value constructor,
0294                                                    bool* result);
0295 
0296 // Methods to work with napi_callbacks
0297 
0298 // Gets all callback info in a single call. (Ugly, but faster.)
0299 NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info(
0300     napi_env env,               // [in] Node-API environment handle
0301     napi_callback_info cbinfo,  // [in] Opaque callback-info handle
0302     size_t* argc,      // [in-out] Specifies the size of the provided argv array
0303                        // and receives the actual count of args.
0304     napi_value* argv,  // [out] Array of values
0305     napi_value* this_arg,  // [out] Receives the JS 'this' arg for the call
0306     void** data);          // [out] Receives the data pointer for the callback.
0307 
0308 NAPI_EXTERN napi_status NAPI_CDECL napi_get_new_target(
0309     napi_env env, napi_callback_info cbinfo, napi_value* result);
0310 NAPI_EXTERN napi_status NAPI_CDECL
0311 napi_define_class(napi_env env,
0312                   const char* utf8name,
0313                   size_t length,
0314                   napi_callback constructor,
0315                   void* data,
0316                   size_t property_count,
0317                   const napi_property_descriptor* properties,
0318                   napi_value* result);
0319 
0320 // Methods to work with external data objects
0321 NAPI_EXTERN napi_status NAPI_CDECL
0322 napi_wrap(napi_env env,
0323           napi_value js_object,
0324           void* native_object,
0325           node_api_basic_finalize finalize_cb,
0326           void* finalize_hint,
0327           napi_ref* result);
0328 NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env,
0329                                                napi_value js_object,
0330                                                void** result);
0331 NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
0332                                                     napi_value js_object,
0333                                                     void** result);
0334 NAPI_EXTERN napi_status NAPI_CDECL
0335 napi_create_external(napi_env env,
0336                      void* data,
0337                      node_api_basic_finalize finalize_cb,
0338                      void* finalize_hint,
0339                      napi_value* result);
0340 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env,
0341                                                            napi_value value,
0342                                                            void** result);
0343 
0344 // Methods to control object lifespan
0345 
0346 // Set initial_refcount to 0 for a weak reference, >0 for a strong reference.
0347 NAPI_EXTERN napi_status NAPI_CDECL
0348 napi_create_reference(napi_env env,
0349                       napi_value value,
0350                       uint32_t initial_refcount,
0351                       napi_ref* result);
0352 
0353 // Deletes a reference. The referenced value is released, and may
0354 // be GC'd unless there are other references to it.
0355 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(napi_env env,
0356                                                          napi_ref ref);
0357 
0358 // Increments the reference count, optionally returning the resulting count.
0359 // After this call the  reference will be a strong reference because its
0360 // refcount is >0, and the referenced object is effectively "pinned".
0361 // Calling this when the refcount is 0 and the object is unavailable
0362 // results in an error.
0363 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_ref(napi_env env,
0364                                                       napi_ref ref,
0365                                                       uint32_t* result);
0366 
0367 // Decrements the reference count, optionally returning the resulting count.
0368 // If the result is 0 the reference is now weak and the object may be GC'd
0369 // at any time if there are no other references. Calling this when the
0370 // refcount is already 0 results in an error.
0371 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_unref(napi_env env,
0372                                                         napi_ref ref,
0373                                                         uint32_t* result);
0374 
0375 // Attempts to get a referenced value. If the reference is weak,
0376 // the value might no longer be available, in that case the call
0377 // is still successful but the result is NULL.
0378 NAPI_EXTERN napi_status NAPI_CDECL napi_get_reference_value(napi_env env,
0379                                                             napi_ref ref,
0380                                                             napi_value* result);
0381 
0382 NAPI_EXTERN napi_status NAPI_CDECL
0383 napi_open_handle_scope(napi_env env, napi_handle_scope* result);
0384 NAPI_EXTERN napi_status NAPI_CDECL
0385 napi_close_handle_scope(napi_env env, napi_handle_scope scope);
0386 NAPI_EXTERN napi_status NAPI_CDECL napi_open_escapable_handle_scope(
0387     napi_env env, napi_escapable_handle_scope* result);
0388 NAPI_EXTERN napi_status NAPI_CDECL napi_close_escapable_handle_scope(
0389     napi_env env, napi_escapable_handle_scope scope);
0390 
0391 NAPI_EXTERN napi_status NAPI_CDECL
0392 napi_escape_handle(napi_env env,
0393                    napi_escapable_handle_scope scope,
0394                    napi_value escapee,
0395                    napi_value* result);
0396 
0397 // Methods to support error handling
0398 NAPI_EXTERN napi_status NAPI_CDECL napi_throw(napi_env env, napi_value error);
0399 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_error(napi_env env,
0400                                                     const char* code,
0401                                                     const char* msg);
0402 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_type_error(napi_env env,
0403                                                          const char* code,
0404                                                          const char* msg);
0405 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_range_error(napi_env env,
0406                                                           const char* code,
0407                                                           const char* msg);
0408 #if NAPI_VERSION >= 9
0409 NAPI_EXTERN napi_status NAPI_CDECL node_api_throw_syntax_error(napi_env env,
0410                                                                const char* code,
0411                                                                const char* msg);
0412 #endif  // NAPI_VERSION >= 9
0413 NAPI_EXTERN napi_status NAPI_CDECL napi_is_error(napi_env env,
0414                                                  napi_value value,
0415                                                  bool* result);
0416 
0417 // Methods to support catching exceptions
0418 NAPI_EXTERN napi_status NAPI_CDECL napi_is_exception_pending(napi_env env,
0419                                                              bool* result);
0420 NAPI_EXTERN napi_status NAPI_CDECL
0421 napi_get_and_clear_last_exception(napi_env env, napi_value* result);
0422 
0423 // Methods to work with array buffers and typed arrays
0424 NAPI_EXTERN napi_status NAPI_CDECL napi_is_arraybuffer(napi_env env,
0425                                                        napi_value value,
0426                                                        bool* result);
0427 NAPI_EXTERN napi_status NAPI_CDECL napi_create_arraybuffer(napi_env env,
0428                                                            size_t byte_length,
0429                                                            void** data,
0430                                                            napi_value* result);
0431 #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
0432 NAPI_EXTERN napi_status NAPI_CDECL
0433 napi_create_external_arraybuffer(napi_env env,
0434                                  void* external_data,
0435                                  size_t byte_length,
0436                                  node_api_basic_finalize finalize_cb,
0437                                  void* finalize_hint,
0438                                  napi_value* result);
0439 #endif  // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
0440 NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info(
0441     napi_env env, napi_value arraybuffer, void** data, size_t* byte_length);
0442 NAPI_EXTERN napi_status NAPI_CDECL napi_is_typedarray(napi_env env,
0443                                                       napi_value value,
0444                                                       bool* result);
0445 NAPI_EXTERN napi_status NAPI_CDECL
0446 napi_create_typedarray(napi_env env,
0447                        napi_typedarray_type type,
0448                        size_t length,
0449                        napi_value arraybuffer,
0450                        size_t byte_offset,
0451                        napi_value* result);
0452 NAPI_EXTERN napi_status NAPI_CDECL
0453 napi_get_typedarray_info(napi_env env,
0454                          napi_value typedarray,
0455                          napi_typedarray_type* type,
0456                          size_t* length,
0457                          void** data,
0458                          napi_value* arraybuffer,
0459                          size_t* byte_offset);
0460 
0461 NAPI_EXTERN napi_status NAPI_CDECL napi_create_dataview(napi_env env,
0462                                                         size_t length,
0463                                                         napi_value arraybuffer,
0464                                                         size_t byte_offset,
0465                                                         napi_value* result);
0466 NAPI_EXTERN napi_status NAPI_CDECL napi_is_dataview(napi_env env,
0467                                                     napi_value value,
0468                                                     bool* result);
0469 NAPI_EXTERN napi_status NAPI_CDECL
0470 napi_get_dataview_info(napi_env env,
0471                        napi_value dataview,
0472                        size_t* bytelength,
0473                        void** data,
0474                        napi_value* arraybuffer,
0475                        size_t* byte_offset);
0476 
0477 // version management
0478 NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_basic_env env,
0479                                                     uint32_t* result);
0480 
0481 // Promises
0482 NAPI_EXTERN napi_status NAPI_CDECL napi_create_promise(napi_env env,
0483                                                        napi_deferred* deferred,
0484                                                        napi_value* promise);
0485 NAPI_EXTERN napi_status NAPI_CDECL napi_resolve_deferred(napi_env env,
0486                                                          napi_deferred deferred,
0487                                                          napi_value resolution);
0488 NAPI_EXTERN napi_status NAPI_CDECL napi_reject_deferred(napi_env env,
0489                                                         napi_deferred deferred,
0490                                                         napi_value rejection);
0491 NAPI_EXTERN napi_status NAPI_CDECL napi_is_promise(napi_env env,
0492                                                    napi_value value,
0493                                                    bool* is_promise);
0494 
0495 // Running a script
0496 NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
0497                                                    napi_value script,
0498                                                    napi_value* result);
0499 
0500 // Memory management
0501 NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
0502     node_api_basic_env env, int64_t change_in_bytes, int64_t* adjusted_value);
0503 
0504 #if NAPI_VERSION >= 5
0505 
0506 // Dates
0507 NAPI_EXTERN napi_status NAPI_CDECL napi_create_date(napi_env env,
0508                                                     double time,
0509                                                     napi_value* result);
0510 
0511 NAPI_EXTERN napi_status NAPI_CDECL napi_is_date(napi_env env,
0512                                                 napi_value value,
0513                                                 bool* is_date);
0514 
0515 NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env,
0516                                                        napi_value value,
0517                                                        double* result);
0518 
0519 // Add finalizer for pointer
0520 NAPI_EXTERN napi_status NAPI_CDECL
0521 napi_add_finalizer(napi_env env,
0522                    napi_value js_object,
0523                    void* finalize_data,
0524                    node_api_basic_finalize finalize_cb,
0525                    void* finalize_hint,
0526                    napi_ref* result);
0527 
0528 #endif  // NAPI_VERSION >= 5
0529 
0530 #ifdef NAPI_EXPERIMENTAL
0531 #define NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
0532 
0533 NAPI_EXTERN napi_status NAPI_CDECL
0534 node_api_post_finalizer(node_api_basic_env env,
0535                         napi_finalize finalize_cb,
0536                         void* finalize_data,
0537                         void* finalize_hint);
0538 
0539 #endif  // NAPI_EXPERIMENTAL
0540 
0541 #if NAPI_VERSION >= 6
0542 
0543 // BigInt
0544 NAPI_EXTERN napi_status NAPI_CDECL napi_create_bigint_int64(napi_env env,
0545                                                             int64_t value,
0546                                                             napi_value* result);
0547 NAPI_EXTERN napi_status NAPI_CDECL
0548 napi_create_bigint_uint64(napi_env env, uint64_t value, napi_value* result);
0549 NAPI_EXTERN napi_status NAPI_CDECL
0550 napi_create_bigint_words(napi_env env,
0551                          int sign_bit,
0552                          size_t word_count,
0553                          const uint64_t* words,
0554                          napi_value* result);
0555 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env,
0556                                                                napi_value value,
0557                                                                int64_t* result,
0558                                                                bool* lossless);
0559 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_uint64(
0560     napi_env env, napi_value value, uint64_t* result, bool* lossless);
0561 NAPI_EXTERN napi_status NAPI_CDECL
0562 napi_get_value_bigint_words(napi_env env,
0563                             napi_value value,
0564                             int* sign_bit,
0565                             size_t* word_count,
0566                             uint64_t* words);
0567 
0568 // Object
0569 NAPI_EXTERN napi_status NAPI_CDECL
0570 napi_get_all_property_names(napi_env env,
0571                             napi_value object,
0572                             napi_key_collection_mode key_mode,
0573                             napi_key_filter key_filter,
0574                             napi_key_conversion key_conversion,
0575                             napi_value* result);
0576 
0577 // Instance data
0578 NAPI_EXTERN napi_status NAPI_CDECL
0579 napi_set_instance_data(node_api_basic_env env,
0580                        void* data,
0581                        napi_finalize finalize_cb,
0582                        void* finalize_hint);
0583 
0584 NAPI_EXTERN napi_status NAPI_CDECL
0585 napi_get_instance_data(node_api_basic_env env, void** data);
0586 #endif  // NAPI_VERSION >= 6
0587 
0588 #if NAPI_VERSION >= 7
0589 // ArrayBuffer detaching
0590 NAPI_EXTERN napi_status NAPI_CDECL
0591 napi_detach_arraybuffer(napi_env env, napi_value arraybuffer);
0592 
0593 NAPI_EXTERN napi_status NAPI_CDECL
0594 napi_is_detached_arraybuffer(napi_env env, napi_value value, bool* result);
0595 #endif  // NAPI_VERSION >= 7
0596 
0597 #if NAPI_VERSION >= 8
0598 // Type tagging
0599 NAPI_EXTERN napi_status NAPI_CDECL napi_type_tag_object(
0600     napi_env env, napi_value value, const napi_type_tag* type_tag);
0601 
0602 NAPI_EXTERN napi_status NAPI_CDECL
0603 napi_check_object_type_tag(napi_env env,
0604                            napi_value value,
0605                            const napi_type_tag* type_tag,
0606                            bool* result);
0607 NAPI_EXTERN napi_status NAPI_CDECL napi_object_freeze(napi_env env,
0608                                                       napi_value object);
0609 NAPI_EXTERN napi_status NAPI_CDECL napi_object_seal(napi_env env,
0610                                                     napi_value object);
0611 #endif  // NAPI_VERSION >= 8
0612 
0613 EXTERN_C_END
0614 
0615 #endif  // SRC_JS_NATIVE_API_H_