Home
About
Blog
Products
Forum
Support
Contact
Sunbelt Computer Software
PL/B Language Development and Support
Home
About
Blog
Products
Forum
Support
Contact
node/src/js_native_api_types.h at main · inoway46/node · GitHub
Skip to content
Navigation Menu
Sign in
Appearance settings
Platform
AI CODE CREATION
GitHub Copilot
Write better code with AI
GitHub Copilot app
Direct agents from issue to merge
MCP Registry
Integrate external tools
DEVELOPER WORKFLOWS
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Code Quality
Enforce quality at merge
APPLICATION SECURITY
GitHub Advanced Security
Find and fix vulnerabilities
Code security
Secure your code as you build
Secret protection
Stop leaks before they start
EXPLORE
Why GitHub
Documentation
Blog
Changelog
Marketplace
View all features
Solutions
BY COMPANY SIZE
Enterprises
Small and medium teams
Startups
Nonprofits
BY USE CASE
App Modernization
DevSecOps
DevOps
CI/CD
View all use cases
BY INDUSTRY
Healthcare
Financial services
Manufacturing
Government
See all industries
View all solutions
Resources
EXPLORE BY TOPIC
AI
Software Development
DevOps
Security
View all topics
EXPLORE BY TYPE
Customer stories
Events & webinars
Ebooks & reports
Business insights
GitHub Skills
SUPPORT & SERVICES
Documentation
Customer support
Community forum
Trust center
Partners
View all resources
Open Source
COMMUNITY
GitHub Sponsors
Fund open source developers
PROGRAMS
Security Lab
Maintainer Community
GitHub Stars
Archive Program
REPOSITORIES
Topics
Trending
Collections
Enterprise
ENTERPRISE SOLUTIONS
Enterprise platform
AI-powered developer platform
AVAILABLE ADD-ONS
GitHub Advanced Security
Enterprise-grade security features
Copilot for Business
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Search
/
Sign in
Sign up
Appearance settings
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
inoway46
node
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
More
items
Files
Expand file tree
main
Breadcrumbs
node
/
src
/
js_native_api_types.h
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
244 lines (217 loc) · 8.14 KB
main
Breadcrumbs
node
/
src
/
js_native_api_types.h
Copy path
Top
File metadata and controls
Code
Blame
244 lines (217 loc) · 8.14 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#ifndef
SRC_JS_NATIVE_API_TYPES_H_
#define
SRC_JS_NATIVE_API_TYPES_H_
// Use INT_MAX, this should only be consumed by the pre-processor anyway.
#define
NAPI_VERSION_EXPERIMENTAL
2147483647
#ifndef
NAPI_VERSION
#ifdef
NAPI_EXPERIMENTAL
#define
NAPI_VERSION
NAPI_VERSION_EXPERIMENTAL
#else
// The baseline version for Node-API.
// NAPI_VERSION controls which version is used by default when compiling
// a native addon. If the addon developer wants to use functions from a
// newer Node-API version not yet available in all LTS versions, they can
// set NAPI_VERSION to explicitly depend on that version.
#define
NAPI_VERSION
8
#endif
#endif
#if
defined(
NAPI_EXPERIMENTAL
)
&&
\
!defined(
NODE_API_EXPERIMENTAL_NO_WARNING
)
&&
\
!defined(
NODE_WANT_INTERNALS
)
#ifdef
_MSC_VER
#pragma
message("NAPI_EXPERIMENTAL is enabled. " \
"Experimental features may be unstable.")
#else
#warning
"NAPI_EXPERIMENTAL is enabled. " \
"Experimental features may be unstable."
#endif
#endif
// This file needs to be compatible with C compilers.
// This is a public include file, and these includes have essentially
// become part of its API.
#include
<stddef.h>
// NOLINT(modernize-deprecated-headers)
#include
<stdint.h>
// NOLINT(modernize-deprecated-headers)
#if
!defined
__cplusplus
||
(defined(
_MSC_VER
)
&&
_MSC_VER
<
1900
)
typedef
uint16_t
char16_t
;
#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
// typedef undefined structs instead of void* for compile time type safety
typedef
struct
napi_env__
*
napi_env
;
// We need to mark APIs which can be called during garbage collection (GC),
// meaning that they do not affect the state of the JS engine, and can
// therefore be called synchronously from a finalizer that itself runs
// synchronously during GC. Such APIs can receive either a `napi_env` or a
// `node_api_basic_env` as their first parameter, because we should be able to
// also call them during normal, non-garbage-collecting operations, whereas
// APIs that affect the state of the JS engine can only receive a `napi_env` as
// their first parameter, because we must not call them during GC. In lieu of
// inheritance, we use the properties of the const qualifier to accomplish
// this, because both a const and a non-const value can be passed to an API
// expecting a const value, but only a non-const value can be passed to an API
// expecting a non-const value.
//
// In conjunction with appropriate CFLAGS to warn us if we're passing a const
// (basic) environment into an API that expects a non-const environment, and
// the definition of basic finalizer function pointer types below, which
// receive a basic environment as their first parameter, and can thus only call
// basic APIs (unless the user explicitly casts the environment), we achieve
// the ability to ensure at compile time that we do not call APIs that affect
// the state of the JS engine from a synchronous (basic) finalizer.
#if
!defined(
NAPI_EXPERIMENTAL
)
||
\
(defined(
NAPI_EXPERIMENTAL
)
&&
\
(defined(
NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT
)
||
\
defined(
NODE_API_EXPERIMENTAL_BASIC_ENV_OPT_OUT
)))
typedef
struct
napi_env__
*
node_api_nogc_env
;
#else
typedef
const
struct
napi_env__
*
node_api_nogc_env
;
#endif
typedef
node_api_nogc_env
node_api_basic_env
;
typedef
struct
napi_value__
*
napi_value
;
typedef
struct
napi_ref__
*
napi_ref
;
typedef
struct
napi_handle_scope__
*
napi_handle_scope
;
typedef
struct
napi_escapable_handle_scope__
*
napi_escapable_handle_scope
;
typedef
struct
napi_callback_info__
*
napi_callback_info
;
typedef
struct
napi_deferred__
*
napi_deferred
;
typedef
enum
{
napi_default
=
0
,
napi_writable
=
1
<<
0
,
napi_enumerable
=
1
<<
1
,
napi_configurable
=
1
<<
2
,
// Used with napi_define_class to distinguish static properties
// from instance properties. Ignored by napi_define_properties.
napi_static
=
1
<<
10
,
#if
NAPI_VERSION
>=
8
// Default for class methods.
napi_default_method
=
napi_writable
|
napi_configurable
,
// Default for object properties, like in JS obj[prop].
napi_default_jsproperty
=
napi_writable
|
napi_enumerable
|
napi_configurable
,
#endif
// NAPI_VERSION >= 8
}
napi_property_attributes
;
typedef
enum
{
// ES6 types (corresponds to typeof)
napi_undefined
,
napi_null
,
napi_boolean
,
napi_number
,
napi_string
,
napi_symbol
,
napi_object
,
napi_function
,
napi_external
,
napi_bigint
,
}
napi_valuetype
;
typedef
enum
{
napi_int8_array
,
napi_uint8_array
,
napi_uint8_clamped_array
,
napi_int16_array
,
napi_uint16_array
,
napi_int32_array
,
napi_uint32_array
,
napi_float32_array
,
napi_float64_array
,
napi_bigint64_array
,
napi_biguint64_array
,
#define
NODE_API_HAS_FLOAT16_ARRAY
napi_float16_array
,
}
napi_typedarray_type
;
typedef
enum
{
napi_ok
,
napi_invalid_arg
,
napi_object_expected
,
napi_string_expected
,
napi_name_expected
,
napi_function_expected
,
napi_number_expected
,
napi_boolean_expected
,
napi_array_expected
,
napi_generic_failure
,
napi_pending_exception
,
napi_cancelled
,
napi_escape_called_twice
,
napi_handle_scope_mismatch
,
napi_callback_scope_mismatch
,
napi_queue_full
,
napi_closing
,
napi_bigint_expected
,
napi_date_expected
,
napi_arraybuffer_expected
,
napi_detachable_arraybuffer_expected
,
napi_would_deadlock
,
// unused
napi_no_external_buffers_allowed
,
napi_cannot_run_js
,
}
napi_status
;
// 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()'
// in file js_native_api_v8.cc.
// * `const char* error_messages[]` in file js_native_api_v8.cc with a brief
// message explaining the error.
// * the definition of `napi_status` in doc/api/n-api.md to reflect the newly
// added value(s).
typedef
napi_value
(
NAPI_CDECL
*
napi_callback
)(
napi_env
env
,
napi_callback_info
info
);
typedef
void
(
NAPI_CDECL
*
napi_finalize
)(
napi_env
env
,
void
*
finalize_data
,
void
*
finalize_hint
);
#if
!defined(
NAPI_EXPERIMENTAL
)
||
\
(defined(
NAPI_EXPERIMENTAL
)
&&
\
(defined(
NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT
)
||
\
defined(
NODE_API_EXPERIMENTAL_BASIC_ENV_OPT_OUT
)))
typedef
napi_finalize
node_api_nogc_finalize
;
#else
typedef
void
(
NAPI_CDECL
*
node_api_nogc_finalize
)(
node_api_nogc_env
env
,
void
*
finalize_data
,
void
*
finalize_hint
);
#endif
typedef
node_api_nogc_finalize
node_api_basic_finalize
;
// A finalizer that can be called from any thread and at any time.
typedef
void
(
NAPI_CDECL
*
node_api_noenv_finalize
)(
void
*
finalize_data
,
void
*
finalize_hint
);
typedef
struct
{
// One of utf8name or name should be NULL.
const
char
*
utf8name
;
napi_value
name
;
napi_callback
method
;
napi_callback
getter
;
napi_callback
setter
;
napi_value
value
;
napi_property_attributes
attributes
;
void
*
data
;
}
napi_property_descriptor
;
typedef
struct
{
const
char
*
error_message
;
void
*
engine_reserved
;
uint32_t
engine_error_code
;
napi_status
error_code
;
}
napi_extended_error_info
;
#if
NAPI_VERSION
>=
6
typedef
enum
{
napi_key_include_prototypes
,
napi_key_own_only
}
napi_key_collection_mode
;
typedef
enum
{
napi_key_all_properties
=
0
,
napi_key_writable
=
1
,
napi_key_enumerable
=
1
<<
1
,
napi_key_configurable
=
1
<<
2
,
napi_key_skip_strings
=
1
<<
3
,
napi_key_skip_symbols
=
1
<<
4
}
napi_key_filter
;
typedef
enum
{
napi_key_keep_numbers
,
napi_key_numbers_to_strings
}
napi_key_conversion
;
#endif
// NAPI_VERSION >= 6
#if
NAPI_VERSION
>=
8
typedef
struct
{
uint64_t
lower
;
uint64_t
upper
;
}
napi_type_tag
;
#endif
// NAPI_VERSION >= 8
#endif
// SRC_JS_NATIVE_API_TYPES_H_
You can’t perform that action at this time.