Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:05:21

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_nogc_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 #ifdef NAPI_EXPERIMENTAL
0096 #define NODE_API_EXPERIMENTAL_HAS_EXTERNAL_STRINGS
0097 NAPI_EXTERN napi_status NAPI_CDECL
0098 node_api_create_external_string_latin1(napi_env env,
0099                                        char* str,
0100                                        size_t length,
0101                                        node_api_nogc_finalize finalize_callback,
0102                                        void* finalize_hint,
0103                                        napi_value* result,
0104                                        bool* copied);
0105 NAPI_EXTERN napi_status NAPI_CDECL
0106 node_api_create_external_string_utf16(napi_env env,
0107                                       char16_t* str,
0108                                       size_t length,
0109                                       node_api_nogc_finalize finalize_callback,
0110                                       void* finalize_hint,
0111                                       napi_value* result,
0112                                       bool* copied);
0113 #endif  // NAPI_EXPERIMENTAL
0114 
0115 #ifdef NAPI_EXPERIMENTAL
0116 #define NODE_API_EXPERIMENTAL_HAS_PROPERTY_KEYS
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_EXPERIMENTAL
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 napi_wrap(napi_env env,
0322                                              napi_value js_object,
0323                                              void* native_object,
0324                                              node_api_nogc_finalize finalize_cb,
0325                                              void* finalize_hint,
0326                                              napi_ref* result);
0327 NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env,
0328                                                napi_value js_object,
0329                                                void** result);
0330 NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
0331                                                     napi_value js_object,
0332                                                     void** result);
0333 NAPI_EXTERN napi_status NAPI_CDECL
0334 napi_create_external(napi_env env,
0335                      void* data,
0336                      node_api_nogc_finalize finalize_cb,
0337                      void* finalize_hint,
0338                      napi_value* result);
0339 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env,
0340                                                            napi_value value,
0341                                                            void** result);
0342 
0343 // Methods to control object lifespan
0344 
0345 // Set initial_refcount to 0 for a weak reference, >0 for a strong reference.
0346 NAPI_EXTERN napi_status NAPI_CDECL
0347 napi_create_reference(napi_env env,
0348                       napi_value value,
0349                       uint32_t initial_refcount,
0350                       napi_ref* result);
0351 
0352 // Deletes a reference. The referenced value is released, and may
0353 // be GC'd unless there are other references to it.
0354 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(napi_env env,
0355                                                          napi_ref ref);
0356 
0357 // Increments the reference count, optionally returning the resulting count.
0358 // After this call the  reference will be a strong reference because its
0359 // refcount is >0, and the referenced object is effectively "pinned".
0360 // Calling this when the refcount is 0 and the object is unavailable
0361 // results in an error.
0362 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_ref(napi_env env,
0363                                                       napi_ref ref,
0364                                                       uint32_t* result);
0365 
0366 // Decrements the reference count, optionally returning the resulting count.
0367 // If the result is 0 the reference is now weak and the object may be GC'd
0368 // at any time if there are no other references. Calling this when the
0369 // refcount is already 0 results in an error.
0370 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_unref(napi_env env,
0371                                                         napi_ref ref,
0372                                                         uint32_t* result);
0373 
0374 // Attempts to get a referenced value. If the reference is weak,
0375 // the value might no longer be available, in that case the call
0376 // is still successful but the result is NULL.
0377 NAPI_EXTERN napi_status NAPI_CDECL napi_get_reference_value(napi_env env,
0378                                                             napi_ref ref,
0379                                                             napi_value* result);
0380 
0381 NAPI_EXTERN napi_status NAPI_CDECL
0382 napi_open_handle_scope(napi_env env, napi_handle_scope* result);
0383 NAPI_EXTERN napi_status NAPI_CDECL
0384 napi_close_handle_scope(napi_env env, napi_handle_scope scope);
0385 NAPI_EXTERN napi_status NAPI_CDECL napi_open_escapable_handle_scope(
0386     napi_env env, napi_escapable_handle_scope* result);
0387 NAPI_EXTERN napi_status NAPI_CDECL napi_close_escapable_handle_scope(
0388     napi_env env, napi_escapable_handle_scope scope);
0389 
0390 NAPI_EXTERN napi_status NAPI_CDECL
0391 napi_escape_handle(napi_env env,
0392                    napi_escapable_handle_scope scope,
0393                    napi_value escapee,
0394                    napi_value* result);
0395 
0396 // Methods to support error handling
0397 NAPI_EXTERN napi_status NAPI_CDECL napi_throw(napi_env env, napi_value error);
0398 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_error(napi_env env,
0399                                                     const char* code,
0400                                                     const char* msg);
0401 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_type_error(napi_env env,
0402                                                          const char* code,
0403                                                          const char* msg);
0404 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_range_error(napi_env env,
0405                                                           const char* code,
0406                                                           const char* msg);
0407 #if NAPI_VERSION >= 9
0408 NAPI_EXTERN napi_status NAPI_CDECL node_api_throw_syntax_error(napi_env env,
0409                                                                const char* code,
0410                                                                const char* msg);
0411 #endif  // NAPI_VERSION >= 9
0412 NAPI_EXTERN napi_status NAPI_CDECL napi_is_error(napi_env env,
0413                                                  napi_value value,
0414                                                  bool* result);
0415 
0416 // Methods to support catching exceptions
0417 NAPI_EXTERN napi_status NAPI_CDECL napi_is_exception_pending(napi_env env,
0418                                                              bool* result);
0419 NAPI_EXTERN napi_status NAPI_CDECL
0420 napi_get_and_clear_last_exception(napi_env env, napi_value* result);
0421 
0422 // Methods to work with array buffers and typed arrays
0423 NAPI_EXTERN napi_status NAPI_CDECL napi_is_arraybuffer(napi_env env,
0424                                                        napi_value value,
0425                                                        bool* result);
0426 NAPI_EXTERN napi_status NAPI_CDECL napi_create_arraybuffer(napi_env env,
0427                                                            size_t byte_length,
0428                                                            void** data,
0429                                                            napi_value* result);
0430 #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
0431 NAPI_EXTERN napi_status NAPI_CDECL
0432 napi_create_external_arraybuffer(napi_env env,
0433                                  void* external_data,
0434                                  size_t byte_length,
0435                                  node_api_nogc_finalize finalize_cb,
0436                                  void* finalize_hint,
0437                                  napi_value* result);
0438 #endif  // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
0439 NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info(
0440     napi_env env, napi_value arraybuffer, void** data, size_t* byte_length);
0441 NAPI_EXTERN napi_status NAPI_CDECL napi_is_typedarray(napi_env env,
0442                                                       napi_value value,
0443                                                       bool* result);
0444 NAPI_EXTERN napi_status NAPI_CDECL
0445 napi_create_typedarray(napi_env env,
0446                        napi_typedarray_type type,
0447                        size_t length,
0448                        napi_value arraybuffer,
0449                        size_t byte_offset,
0450                        napi_value* result);
0451 NAPI_EXTERN napi_status NAPI_CDECL
0452 napi_get_typedarray_info(napi_env env,
0453                          napi_value typedarray,
0454                          napi_typedarray_type* type,
0455                          size_t* length,
0456                          void** data,
0457                          napi_value* arraybuffer,
0458                          size_t* byte_offset);
0459 
0460 NAPI_EXTERN napi_status NAPI_CDECL napi_create_dataview(napi_env env,
0461                                                         size_t length,
0462                                                         napi_value arraybuffer,
0463                                                         size_t byte_offset,
0464                                                         napi_value* result);
0465 NAPI_EXTERN napi_status NAPI_CDECL napi_is_dataview(napi_env env,
0466                                                     napi_value value,
0467                                                     bool* result);
0468 NAPI_EXTERN napi_status NAPI_CDECL
0469 napi_get_dataview_info(napi_env env,
0470                        napi_value dataview,
0471                        size_t* bytelength,
0472                        void** data,
0473                        napi_value* arraybuffer,
0474                        size_t* byte_offset);
0475 
0476 // version management
0477 NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_nogc_env env,
0478                                                     uint32_t* result);
0479 
0480 // Promises
0481 NAPI_EXTERN napi_status NAPI_CDECL napi_create_promise(napi_env env,
0482                                                        napi_deferred* deferred,
0483                                                        napi_value* promise);
0484 NAPI_EXTERN napi_status NAPI_CDECL napi_resolve_deferred(napi_env env,
0485                                                          napi_deferred deferred,
0486                                                          napi_value resolution);
0487 NAPI_EXTERN napi_status NAPI_CDECL napi_reject_deferred(napi_env env,
0488                                                         napi_deferred deferred,
0489                                                         napi_value rejection);
0490 NAPI_EXTERN napi_status NAPI_CDECL napi_is_promise(napi_env env,
0491                                                    napi_value value,
0492                                                    bool* is_promise);
0493 
0494 // Running a script
0495 NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
0496                                                    napi_value script,
0497                                                    napi_value* result);
0498 
0499 // Memory management
0500 NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
0501     node_api_nogc_env env, int64_t change_in_bytes, int64_t* adjusted_value);
0502 
0503 #if NAPI_VERSION >= 5
0504 
0505 // Dates
0506 NAPI_EXTERN napi_status NAPI_CDECL napi_create_date(napi_env env,
0507                                                     double time,
0508                                                     napi_value* result);
0509 
0510 NAPI_EXTERN napi_status NAPI_CDECL napi_is_date(napi_env env,
0511                                                 napi_value value,
0512                                                 bool* is_date);
0513 
0514 NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env,
0515                                                        napi_value value,
0516                                                        double* result);
0517 
0518 // Add finalizer for pointer
0519 NAPI_EXTERN napi_status NAPI_CDECL
0520 napi_add_finalizer(napi_env env,
0521                    napi_value js_object,
0522                    void* finalize_data,
0523                    node_api_nogc_finalize finalize_cb,
0524                    void* finalize_hint,
0525                    napi_ref* result);
0526 
0527 #endif  // NAPI_VERSION >= 5
0528 
0529 #ifdef NAPI_EXPERIMENTAL
0530 #define NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
0531 
0532 NAPI_EXTERN napi_status NAPI_CDECL
0533 node_api_post_finalizer(node_api_nogc_env env,
0534                         napi_finalize finalize_cb,
0535                         void* finalize_data,
0536                         void* finalize_hint);
0537 
0538 #endif  // NAPI_EXPERIMENTAL
0539 
0540 #if NAPI_VERSION >= 6
0541 
0542 // BigInt
0543 NAPI_EXTERN napi_status NAPI_CDECL napi_create_bigint_int64(napi_env env,
0544                                                             int64_t value,
0545                                                             napi_value* result);
0546 NAPI_EXTERN napi_status NAPI_CDECL
0547 napi_create_bigint_uint64(napi_env env, uint64_t value, napi_value* result);
0548 NAPI_EXTERN napi_status NAPI_CDECL
0549 napi_create_bigint_words(napi_env env,
0550                          int sign_bit,
0551                          size_t word_count,
0552                          const uint64_t* words,
0553                          napi_value* result);
0554 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env,
0555                                                                napi_value value,
0556                                                                int64_t* result,
0557                                                                bool* lossless);
0558 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_uint64(
0559     napi_env env, napi_value value, uint64_t* result, bool* lossless);
0560 NAPI_EXTERN napi_status NAPI_CDECL
0561 napi_get_value_bigint_words(napi_env env,
0562                             napi_value value,
0563                             int* sign_bit,
0564                             size_t* word_count,
0565                             uint64_t* words);
0566 
0567 // Object
0568 NAPI_EXTERN napi_status NAPI_CDECL
0569 napi_get_all_property_names(napi_env env,
0570                             napi_value object,
0571                             napi_key_collection_mode key_mode,
0572                             napi_key_filter key_filter,
0573                             napi_key_conversion key_conversion,
0574                             napi_value* result);
0575 
0576 // Instance data
0577 NAPI_EXTERN napi_status NAPI_CDECL
0578 napi_set_instance_data(node_api_nogc_env env,
0579                        void* data,
0580                        napi_finalize finalize_cb,
0581                        void* finalize_hint);
0582 
0583 NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(node_api_nogc_env env,
0584                                                           void** data);
0585 #endif  // NAPI_VERSION >= 6
0586 
0587 #if NAPI_VERSION >= 7
0588 // ArrayBuffer detaching
0589 NAPI_EXTERN napi_status NAPI_CDECL
0590 napi_detach_arraybuffer(napi_env env, napi_value arraybuffer);
0591 
0592 NAPI_EXTERN napi_status NAPI_CDECL
0593 napi_is_detached_arraybuffer(napi_env env, napi_value value, bool* result);
0594 #endif  // NAPI_VERSION >= 7
0595 
0596 #if NAPI_VERSION >= 8
0597 // Type tagging
0598 NAPI_EXTERN napi_status NAPI_CDECL napi_type_tag_object(
0599     napi_env env, napi_value value, const napi_type_tag* type_tag);
0600 
0601 NAPI_EXTERN napi_status NAPI_CDECL
0602 napi_check_object_type_tag(napi_env env,
0603                            napi_value value,
0604                            const napi_type_tag* type_tag,
0605                            bool* result);
0606 NAPI_EXTERN napi_status NAPI_CDECL napi_object_freeze(napi_env env,
0607                                                       napi_value object);
0608 NAPI_EXTERN napi_status NAPI_CDECL napi_object_seal(napi_env env,
0609                                                     napi_value object);
0610 #endif  // NAPI_VERSION >= 8
0611 
0612 EXTERN_C_END
0613 
0614 #endif  // SRC_JS_NATIVE_API_H_