Skip to content

Update headers from nodejs/node tag v19.6.0 #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/workflows/sync-headers.yml
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Header Sync

on:
workflow_dispatch: null
schedule:
- cron: "0 0 * * *"

permissions:
contents: write
pull-requests: write

jobs:
build:
runs-on: ubuntu-latest
name: Update headers from nodejs/node
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- shell: bash
id: check-changes
name: Check Changes
run: |
COMMIT_MESSAGE=$(npm run --silent update-headers)
VERSION=${COMMIT_MESSAGE##* }
echo $COMMIT_MESSAGE
npm run --silent write-symbols
CHANGED_FILES=$(git diff --name-only)
BRANCH_NAME="update-headers/${VERSION}"
if [ -z "$CHANGED_FILES" ]; then
echo "No changes exist. Nothing to do."
else
echo "Changes exist. Checking if branch exists: $BRANCH_NAME"
if git ls-remote --exit-code --heads $GITHUB_SERVER_URL/$GITHUB_REPOSITORY $BRANCH_NAME >/dev/null; then
echo "Branch exists. Nothing to do."
else
echo "Branch does not exists."
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT
echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_OUTPUT
fi
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
if: ${{ steps.check-changes.outputs.BRANCH_NAME }}
with:
branch: ${{ steps.check-changes.outputs.BRANCH_NAME }}
commit-message: ${{ steps.check-changes.outputs.COMMIT_MESSAGE }}
title: ${{ steps.check-changes.outputs.COMMIT_MESSAGE }}
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
body: null
delete-branch: true
2 changes: 2 additions & 0 deletions .npmignore
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,2 @@
scripts/
.github/
316 changes: 157 additions & 159 deletions include/js_native_api.h

Large diffs are not rendered by default.

19 changes: 13 additions & 6 deletions include/js_native_api_types.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@
typedef uint16_t char16_t; typedef uint16_t char16_t;
#endif #endif


#ifndef NAPI_CDECL
#ifdef _WIN32
#define NAPI_CDECL __cdecl
#else
#define NAPI_CDECL
#endif
#endif

// JSVM API types are all opaque pointers for ABI stability // JSVM API types are all opaque pointers for ABI stability
// typedef undefined structs instead of void* for compile time type safety // typedef undefined structs instead of void* for compile time type safety
typedef struct napi_env__* napi_env; typedef struct napi_env__* napi_env;
Expand All @@ -36,9 +44,7 @@ typedef enum {
napi_default_method = napi_writable | napi_configurable, napi_default_method = napi_writable | napi_configurable,


// Default for object properties, like in JS obj[prop]. // Default for object properties, like in JS obj[prop].
napi_default_jsproperty = napi_writable | napi_default_jsproperty = napi_writable | napi_enumerable | napi_configurable,
napi_enumerable |
napi_configurable,
#endif // NAPI_VERSION >= 8 #endif // NAPI_VERSION >= 8
} napi_property_attributes; } napi_property_attributes;


Expand Down Expand Up @@ -92,7 +98,8 @@ typedef enum {
napi_date_expected, napi_date_expected,
napi_arraybuffer_expected, napi_arraybuffer_expected,
napi_detachable_arraybuffer_expected, napi_detachable_arraybuffer_expected,
napi_would_deadlock // unused napi_would_deadlock, // unused
napi_no_external_buffers_allowed
} napi_status; } napi_status;
// Note: when adding a new enum value to `napi_status`, please also update // Note: when adding a new enum value to `napi_status`, please also update
// * `const int last_status` in the definition of `napi_get_last_error_info()' // * `const int last_status` in the definition of `napi_get_last_error_info()'
Expand All @@ -102,9 +109,9 @@ typedef enum {
// * the definition of `napi_status` in doc/api/n-api.md to reflect the newly // * the definition of `napi_status` in doc/api/n-api.md to reflect the newly
// added value(s). // added value(s).


typedef napi_value (*napi_callback)(napi_env env, typedef napi_value(NAPI_CDECL* napi_callback)(napi_env env,
napi_callback_info info); napi_callback_info info);
typedef void (*napi_finalize)(napi_env env, typedef void(NAPI_CDECL* napi_finalize)(napi_env env,
void* finalize_data, void* finalize_data,
void* finalize_hint); void* finalize_hint);


Expand Down
140 changes: 78 additions & 62 deletions include/node_api.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@


#ifdef BUILDING_NODE_EXTENSION #ifdef BUILDING_NODE_EXTENSION
#ifdef _WIN32 #ifdef _WIN32
// Building native module against node // Building native addon against node
#define NAPI_EXTERN __declspec(dllimport) #define NAPI_EXTERN __declspec(dllimport)
#elif defined(__wasm32__) #elif defined(__wasm32__)
#define NAPI_EXTERN __attribute__((__import_module__("napi"))) #define NAPI_EXTERN __attribute__((__import_module__("napi")))
Expand All @@ -28,7 +28,7 @@ struct uv_loop_s; // Forward declaration.
#define NAPI_NO_RETURN #define NAPI_NO_RETURN
#endif #endif


typedef napi_value (*napi_addon_register_func)(napi_env env, typedef napi_value(NAPI_CDECL* napi_addon_register_func)(napi_env env,
napi_value exports); napi_value exports);


typedef struct napi_module { typedef struct napi_module {
Expand All @@ -44,12 +44,29 @@ typedef struct napi_module {
#define NAPI_MODULE_VERSION 1 #define NAPI_MODULE_VERSION 1


#if defined(_MSC_VER) #if defined(_MSC_VER)
#if defined(__cplusplus)
#define NAPI_C_CTOR(fn) \
static void NAPI_CDECL fn(void); \
namespace { \
struct fn##_ { \
fn##_() { fn(); } \
} fn##_v_; \
} \
static void NAPI_CDECL fn(void)
#else // !defined(__cplusplus)
#pragma section(".CRT$XCU", read) #pragma section(".CRT$XCU", read)
// The NAPI_C_CTOR macro defines a function fn that is called during CRT
// initialization.
// C does not support dynamic initialization of static variables and this code
// simulates C++ behavior. Exporting the function pointer prevents it from being
// optimized. See for details:
// https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-initialization?view=msvc-170
#define NAPI_C_CTOR(fn) \ #define NAPI_C_CTOR(fn) \
static void __cdecl fn(void); \ static void NAPI_CDECL fn(void); \
__declspec(dllexport, allocate(".CRT$XCU")) void(__cdecl * fn##_)(void) = \ __declspec(dllexport, allocate(".CRT$XCU")) void(NAPI_CDECL * fn##_)(void) = \
fn; \ fn; \
static void __cdecl fn(void) static void NAPI_CDECL fn(void)
#endif // defined(__cplusplus)
#else #else
#define NAPI_C_CTOR(fn) \ #define NAPI_C_CTOR(fn) \
static void fn(void) __attribute__((constructor)); \ static void fn(void) __attribute__((constructor)); \
Expand All @@ -58,8 +75,7 @@ typedef struct napi_module {


#define NAPI_MODULE_X(modname, regfunc, priv, flags) \ #define NAPI_MODULE_X(modname, regfunc, priv, flags) \
EXTERN_C_START \ EXTERN_C_START \
static napi_module _module = \ static napi_module _module = { \
{ \
NAPI_MODULE_VERSION, \ NAPI_MODULE_VERSION, \
flags, \ flags, \
__FILE__, \ __FILE__, \
Expand All @@ -68,9 +84,7 @@ typedef struct napi_module {
priv, \ priv, \
{0}, \ {0}, \
}; \ }; \
NAPI_C_CTOR(_register_ ## modname) { \ NAPI_C_CTOR(_register_##modname) { napi_module_register(&_module); } \
napi_module_register(&_module); \
} \
EXTERN_C_END EXTERN_C_END


#define NAPI_MODULE_INITIALIZER_X(base, version) \ #define NAPI_MODULE_INITIALIZER_X(base, version) \
Expand All @@ -95,37 +109,38 @@ typedef struct napi_module {
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v


#define NAPI_MODULE_INITIALIZER \ #define NAPI_MODULE_INITIALIZER \
NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, \ NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, NAPI_MODULE_VERSION)
NAPI_MODULE_VERSION)


#define NAPI_MODULE_INIT() \ #define NAPI_MODULE_INIT() \
EXTERN_C_START \ EXTERN_C_START \
NAPI_MODULE_EXPORT napi_value \ NAPI_MODULE_EXPORT napi_value NAPI_MODULE_INITIALIZER(napi_env env, \
NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports); \ napi_value exports); \
EXTERN_C_END \ EXTERN_C_END \
NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \ NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \
napi_value NAPI_MODULE_INITIALIZER(napi_env env, \ napi_value NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports)
napi_value exports)


EXTERN_C_START EXTERN_C_START


NAPI_EXTERN void napi_module_register(napi_module* mod); NAPI_EXTERN void NAPI_CDECL napi_module_register(napi_module* mod);


NAPI_EXTERN NAPI_NO_RETURN void napi_fatal_error(const char* location, NAPI_EXTERN NAPI_NO_RETURN void NAPI_CDECL
napi_fatal_error(const char* location,
size_t location_len, size_t location_len,
const char* message, const char* message,
size_t message_len); size_t message_len);


// Methods for custom handling of async operations // Methods for custom handling of async operations
NAPI_EXTERN napi_status napi_async_init(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
napi_async_init(napi_env env,
napi_value async_resource, napi_value async_resource,
napi_value async_resource_name, napi_value async_resource_name,
napi_async_context* result); napi_async_context* result);


NAPI_EXTERN napi_status napi_async_destroy(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
napi_async_context async_context); napi_async_destroy(napi_env env, napi_async_context async_context);


NAPI_EXTERN napi_status napi_make_callback(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
napi_make_callback(napi_env env,
napi_async_context async_context, napi_async_context async_context,
napi_value recv, napi_value recv,
napi_value func, napi_value func,
Expand All @@ -134,85 +149,87 @@ NAPI_EXTERN napi_status napi_make_callback(napi_env env,
napi_value* result); napi_value* result);


// Methods to provide node::Buffer functionality with napi types // Methods to provide node::Buffer functionality with napi types
NAPI_EXTERN napi_status napi_create_buffer(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer(napi_env env,
size_t length, size_t length,
void** data, void** data,
napi_value* result); napi_value* result);
NAPI_EXTERN napi_status napi_create_external_buffer(napi_env env, #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
NAPI_EXTERN napi_status NAPI_CDECL
napi_create_external_buffer(napi_env env,
size_t length, size_t length,
void* data, void* data,
napi_finalize finalize_cb, napi_finalize finalize_cb,
void* finalize_hint, void* finalize_hint,
napi_value* result); napi_value* result);
NAPI_EXTERN napi_status napi_create_buffer_copy(napi_env env, #endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
NAPI_EXTERN napi_status NAPI_CDECL napi_create_buffer_copy(napi_env env,
size_t length, size_t length,
const void* data, const void* data,
void** result_data, void** result_data,
napi_value* result); napi_value* result);
NAPI_EXTERN napi_status napi_is_buffer(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_is_buffer(napi_env env,
napi_value value, napi_value value,
bool* result); bool* result);
NAPI_EXTERN napi_status napi_get_buffer_info(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_get_buffer_info(napi_env env,
napi_value value, napi_value value,
void** data, void** data,
size_t* length); size_t* length);


// Methods to manage simple async operations // Methods to manage simple async operations
NAPI_EXTERN NAPI_EXTERN napi_status NAPI_CDECL
napi_status napi_create_async_work(napi_env env, napi_create_async_work(napi_env env,
napi_value async_resource, napi_value async_resource,
napi_value async_resource_name, napi_value async_resource_name,
napi_async_execute_callback execute, napi_async_execute_callback execute,
napi_async_complete_callback complete, napi_async_complete_callback complete,
void* data, void* data,
napi_async_work* result); napi_async_work* result);
NAPI_EXTERN napi_status napi_delete_async_work(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_delete_async_work(napi_env env,
napi_async_work work); napi_async_work work);
NAPI_EXTERN napi_status napi_queue_async_work(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(napi_env env,
napi_async_work work); napi_async_work work);
NAPI_EXTERN napi_status napi_cancel_async_work(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(napi_env env,
napi_async_work work); napi_async_work work);


// version management // version management
NAPI_EXTERN NAPI_EXTERN napi_status NAPI_CDECL
napi_status napi_get_node_version(napi_env env, napi_get_node_version(napi_env env, const napi_node_version** version);
const napi_node_version** version);


#if NAPI_VERSION >= 2 #if NAPI_VERSION >= 2


// Return the current libuv event loop for a given environment // Return the current libuv event loop for a given environment
NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
struct uv_loop_s** loop); napi_get_uv_event_loop(napi_env env, struct uv_loop_s** loop);


#endif // NAPI_VERSION >= 2 #endif // NAPI_VERSION >= 2


#if NAPI_VERSION >= 3 #if NAPI_VERSION >= 3


NAPI_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); NAPI_EXTERN napi_status NAPI_CDECL napi_fatal_exception(napi_env env,
napi_value err);


NAPI_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
void (*fun)(void* arg), napi_add_env_cleanup_hook(napi_env env, napi_cleanup_hook fun, void* arg);
void* arg);


NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
void (*fun)(void* arg), napi_remove_env_cleanup_hook(napi_env env, napi_cleanup_hook fun, void* arg);
void* arg);


NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
napi_open_callback_scope(napi_env env,
napi_value resource_object, napi_value resource_object,
napi_async_context context, napi_async_context context,
napi_callback_scope* result); napi_callback_scope* result);


NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, NAPI_EXTERN napi_status NAPI_CDECL
napi_callback_scope scope); napi_close_callback_scope(napi_env env, napi_callback_scope scope);


#endif // NAPI_VERSION >= 3 #endif // NAPI_VERSION >= 3


#if NAPI_VERSION >= 4 #if NAPI_VERSION >= 4


#ifndef __wasm32__ #ifndef __wasm32__
// Calling into JS from other threads // Calling into JS from other threads
NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL
napi_create_threadsafe_function(napi_env env, napi_create_threadsafe_function(napi_env env,
napi_value func, napi_value func,
napi_value async_resource, napi_value async_resource,
Expand All @@ -225,44 +242,43 @@ napi_create_threadsafe_function(napi_env env,
napi_threadsafe_function_call_js call_js_cb, napi_threadsafe_function_call_js call_js_cb,
napi_threadsafe_function* result); napi_threadsafe_function* result);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL napi_get_threadsafe_function_context(
napi_get_threadsafe_function_context(napi_threadsafe_function func, napi_threadsafe_function func, void** result);
void** result);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL
napi_call_threadsafe_function(napi_threadsafe_function func, napi_call_threadsafe_function(napi_threadsafe_function func,
void* data, void* data,
napi_threadsafe_function_call_mode is_blocking); napi_threadsafe_function_call_mode is_blocking);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL
napi_acquire_threadsafe_function(napi_threadsafe_function func); napi_acquire_threadsafe_function(napi_threadsafe_function func);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL napi_release_threadsafe_function(
napi_release_threadsafe_function(napi_threadsafe_function func, napi_threadsafe_function func, napi_threadsafe_function_release_mode mode);
napi_threadsafe_function_release_mode mode);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL
napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);


NAPI_EXTERN napi_status NAPI_EXTERN napi_status NAPI_CDECL
napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
#endif // __wasm32__ #endif // __wasm32__


#endif // NAPI_VERSION >= 4 #endif // NAPI_VERSION >= 4


#if NAPI_VERSION >= 8 #if NAPI_VERSION >= 8


NAPI_EXTERN napi_status napi_add_async_cleanup_hook( NAPI_EXTERN napi_status NAPI_CDECL
napi_env env, napi_add_async_cleanup_hook(napi_env env,
napi_async_cleanup_hook hook, napi_async_cleanup_hook hook,
void* arg, void* arg,
napi_async_cleanup_hook_handle* remove_handle); napi_async_cleanup_hook_handle* remove_handle);


NAPI_EXTERN napi_status napi_remove_async_cleanup_hook( NAPI_EXTERN napi_status NAPI_CDECL
napi_async_cleanup_hook_handle remove_handle); napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle);


#endif // NAPI_VERSION >= 8 #endif // NAPI_VERSION >= 8



EXTERN_C_END EXTERN_C_END


#endif // SRC_NODE_API_H_ #endif // SRC_NODE_API_H_
Loading