@encharm/cws 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bindings/cws_linux_108.node +0 -0
- package/dist/bindings/cws_linux_64.node +0 -0
- package/dist/bindings/cws_linux_72.node +0 -0
- package/dist/bindings/cws_linux_79.node +0 -0
- package/dist/bindings/cws_linux_83.node +0 -0
- package/dist/bindings/cws_linux_93.node +0 -0
- package/dist/bindings/cws_win32_64.node +0 -0
- package/dist/bindings/cws_win32_72.node +0 -0
- package/dist/bindings/cws_win32_79.node +0 -0
- package/dist/bindings/cws_win32_83.node +0 -0
- package/dist/bindings/cws_win32_93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +24 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
- package/src/headers/18/aliased_struct-inl.h +54 -0
- package/src/headers/18/aliased_struct.h +63 -0
- package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/async_wrap.h +26 -2
- package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
- package/src/headers/18/base64.h +69 -0
- package/src/headers/{12 → 18}/base_object-inl.h +46 -25
- package/src/headers/{12 → 18}/base_object.h +82 -17
- package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
- package/src/headers/{12 → 18}/callback_queue.h +13 -5
- package/src/headers/18/cares_wrap.h +523 -0
- package/src/headers/{12 → 18}/connect_wrap.h +0 -0
- package/src/headers/{12 → 18}/connection_wrap.h +0 -0
- package/src/headers/18/crypto/crypto_aes.h +89 -0
- package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
- package/src/headers/18/crypto/crypto_cipher.h +291 -0
- package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
- package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
- package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
- package/src/headers/18/crypto/crypto_context.h +147 -0
- package/src/headers/18/crypto/crypto_dh.h +156 -0
- package/src/headers/18/crypto/crypto_dsa.h +77 -0
- package/src/headers/18/crypto/crypto_ec.h +170 -0
- package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
- package/src/headers/18/crypto/crypto_hash.h +89 -0
- package/src/headers/18/crypto/crypto_hkdf.h +65 -0
- package/src/headers/18/crypto/crypto_hmac.h +94 -0
- package/src/headers/18/crypto/crypto_keygen.h +305 -0
- package/src/headers/18/crypto/crypto_keys.h +420 -0
- package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/18/crypto/crypto_random.h +130 -0
- package/src/headers/18/crypto/crypto_rsa.h +141 -0
- package/src/headers/18/crypto/crypto_scrypt.h +87 -0
- package/src/headers/18/crypto/crypto_sig.h +168 -0
- package/src/headers/18/crypto/crypto_spkac.h +21 -0
- package/src/headers/18/crypto/crypto_timing.h +20 -0
- package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
- package/src/headers/18/crypto/crypto_util.h +791 -0
- package/src/headers/18/crypto/crypto_x509.h +143 -0
- package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
- package/src/headers/{13 → 18}/debug_utils.h +7 -4
- package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
- package/src/headers/{12 → 18}/env-inl.h +397 -304
- package/src/headers/{12 → 18}/env.h +397 -172
- package/src/headers/{12 → 18}/handle_wrap.h +7 -3
- package/src/headers/18/histogram-inl.h +107 -0
- package/src/headers/18/histogram.h +239 -0
- package/src/headers/{13 → 18}/inspector_agent.h +4 -7
- package/src/headers/{12 → 18}/inspector_io.h +0 -0
- package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
- package/src/headers/{12 → 18}/inspector_socket.h +0 -0
- package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
- package/src/headers/18/js_native_api.h +571 -0
- package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
- package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
- package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
- package/src/headers/{12 → 18}/js_stream.h +0 -0
- package/src/headers/{12 → 18}/json_utils.h +0 -0
- package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
- package/src/headers/{13 → 18}/memory_tracker.h +0 -7
- package/src/headers/{13 → 18}/module_wrap.h +24 -7
- package/src/headers/{13 → 18}/node.h +329 -68
- package/src/headers/18/node_api.h +288 -0
- package/src/headers/18/node_api_internals.h +38 -0
- package/src/headers/{12 → 18}/node_api_types.h +12 -9
- package/src/headers/{12 → 18}/node_binding.h +0 -0
- package/src/headers/18/node_blob.h +191 -0
- package/src/headers/18/node_bob-inl.h +37 -0
- package/src/headers/18/node_bob.h +111 -0
- package/src/headers/{13 → 18}/node_buffer.h +0 -0
- package/src/headers/{13 → 18}/node_constants.h +5 -1
- package/src/headers/{12 → 18}/node_context_data.h +5 -0
- package/src/headers/{12 → 18}/node_contextify.h +37 -2
- package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
- package/src/headers/{12 → 18}/node_dir.h +0 -0
- package/src/headers/{12 → 18}/node_dtrace.h +0 -0
- package/src/headers/{12 → 18}/node_errors.h +90 -24
- package/src/headers/18/node_external_reference.h +145 -0
- package/src/headers/{13 → 18}/node_file-inl.h +38 -21
- package/src/headers/{12 → 18}/node_file.h +74 -13
- package/src/headers/{13 → 18}/node_http2.h +365 -269
- package/src/headers/{12 → 18}/node_http2_state.h +40 -50
- package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
- package/src/headers/{13 → 18}/node_http_common.h +24 -20
- package/src/headers/{13 → 18}/node_i18n.h +2 -1
- package/src/headers/{12 → 18}/node_internals.h +39 -41
- package/src/headers/{13 → 18}/node_main_instance.h +15 -18
- package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
- package/src/headers/{12 → 18}/node_mem.h +1 -1
- package/src/headers/{13 → 18}/node_messaging.h +170 -23
- package/src/headers/{12 → 18}/node_metadata.h +17 -4
- package/src/headers/{12 → 18}/node_mutex.h +77 -1
- package/src/headers/{12 → 18}/node_native_module.h +11 -1
- package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
- package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
- package/src/headers/{13 → 18}/node_options-inl.h +51 -21
- package/src/headers/{13 → 18}/node_options.h +46 -14
- package/src/headers/18/node_perf.h +168 -0
- package/src/headers/{12 → 18}/node_perf_common.h +16 -22
- package/src/headers/{12 → 18}/node_platform.h +21 -16
- package/src/headers/18/node_process-inl.h +26 -0
- package/src/headers/18/node_process.h +97 -0
- package/src/headers/{13 → 18}/node_report.h +2 -2
- package/src/headers/{13 → 18}/node_revert.h +10 -0
- package/src/headers/{12 → 18}/node_root_certs.h +439 -651
- package/src/headers/18/node_snapshot_builder.h +43 -0
- package/src/headers/18/node_snapshotable.h +130 -0
- package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
- package/src/headers/18/node_sockaddr.h +405 -0
- package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
- package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
- package/src/headers/{13 → 18}/node_url.h +18 -1
- package/src/headers/18/node_v8.h +41 -0
- package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
- package/src/headers/{13 → 18}/node_version.h +7 -7
- package/src/headers/{12 → 18}/node_wasi.h +0 -0
- package/src/headers/18/node_wasm_web_api.h +55 -0
- package/src/headers/{13 → 18}/node_watchdog.h +0 -0
- package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
- package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
- package/src/headers/{13 → 18}/node_worker.h +24 -17
- package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
- package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/req_wrap.h +1 -1
- package/src/headers/{12 → 18}/spawn_sync.h +0 -0
- package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
- package/src/headers/{13 → 18}/stream_base.h +29 -3
- package/src/headers/{13 → 18}/stream_pipe.h +8 -3
- package/src/headers/{12 → 18}/stream_wrap.h +4 -1
- package/src/headers/{13 → 18}/string_bytes.h +0 -7
- package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
- package/src/headers/{10 → 18}/string_decoder.h +0 -0
- package/src/headers/{13 → 18}/string_search.h +2 -2
- package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
- package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
- package/src/headers/18/timer_wrap-inl.h +32 -0
- package/src/headers/18/timer_wrap.h +85 -0
- package/src/headers/{13 → 18}/tracing/agent.h +1 -1
- package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
- package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
- package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
- package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
- package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
- package/src/headers/{13 → 18}/tty_wrap.h +2 -1
- package/src/headers/{13 → 18}/udp_wrap.h +5 -0
- package/src/headers/{13 → 18}/util-inl.h +69 -15
- package/src/headers/{13 → 18}/util.h +93 -31
- package/src/headers/18/v8-fast-api-calls.h +939 -0
- package/src/headers/{12 → 18}/v8abbr.h +2 -2
- package/src/headers/10/aliased_buffer.h +0 -241
- package/src/headers/10/async_wrap-inl.h +0 -106
- package/src/headers/10/async_wrap.h +0 -218
- package/src/headers/10/base64.h +0 -197
- package/src/headers/10/base_object-inl.h +0 -132
- package/src/headers/10/base_object.h +0 -115
- package/src/headers/10/connect_wrap.h +0 -28
- package/src/headers/10/connection_wrap.h +0 -30
- package/src/headers/10/debug_utils.h +0 -128
- package/src/headers/10/env-inl.h +0 -906
- package/src/headers/10/env.h +0 -1046
- package/src/headers/10/handle_wrap.h +0 -114
- package/src/headers/10/inspector_agent.h +0 -137
- package/src/headers/10/inspector_io.h +0 -97
- package/src/headers/10/inspector_socket.h +0 -59
- package/src/headers/10/inspector_socket_server.h +0 -104
- package/src/headers/10/js_stream.h +0 -57
- package/src/headers/10/memory_tracker-inl.h +0 -318
- package/src/headers/10/memory_tracker.h +0 -246
- package/src/headers/10/module_wrap.h +0 -100
- package/src/headers/10/node.h +0 -863
- package/src/headers/10/node_api.h +0 -752
- package/src/headers/10/node_api_types.h +0 -171
- package/src/headers/10/node_buffer.h +0 -90
- package/src/headers/10/node_code_cache.h +0 -17
- package/src/headers/10/node_constants.h +0 -74
- package/src/headers/10/node_context_data.h +0 -39
- package/src/headers/10/node_contextify.h +0 -141
- package/src/headers/10/node_counters.h +0 -59
- package/src/headers/10/node_crypto.h +0 -699
- package/src/headers/10/node_crypto_bio.h +0 -177
- package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
- package/src/headers/10/node_crypto_clienthello.h +0 -131
- package/src/headers/10/node_crypto_groups.h +0 -416
- package/src/headers/10/node_dtrace.h +0 -84
- package/src/headers/10/node_errors.h +0 -118
- package/src/headers/10/node_file.h +0 -373
- package/src/headers/10/node_http2.h +0 -1304
- package/src/headers/10/node_http2_state.h +0 -158
- package/src/headers/10/node_i18n.h +0 -69
- package/src/headers/10/node_internals.h +0 -952
- package/src/headers/10/node_javascript.h +0 -41
- package/src/headers/10/node_messaging.h +0 -219
- package/src/headers/10/node_mutex.h +0 -191
- package/src/headers/10/node_object_wrap.h +0 -130
- package/src/headers/10/node_options-inl.h +0 -444
- package/src/headers/10/node_options.h +0 -397
- package/src/headers/10/node_perf.h +0 -134
- package/src/headers/10/node_perf_common.h +0 -96
- package/src/headers/10/node_persistent.h +0 -30
- package/src/headers/10/node_platform.h +0 -170
- package/src/headers/10/node_revert.h +0 -75
- package/src/headers/10/node_root_certs.h +0 -3393
- package/src/headers/10/node_stat_watcher.h +0 -65
- package/src/headers/10/node_url.h +0 -193
- package/src/headers/10/node_version.h +0 -120
- package/src/headers/10/node_watchdog.h +0 -114
- package/src/headers/10/node_worker.h +0 -94
- package/src/headers/10/pipe_wrap.h +0 -76
- package/src/headers/10/req_wrap-inl.h +0 -166
- package/src/headers/10/req_wrap.h +0 -61
- package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
- package/src/headers/10/spawn_sync.h +0 -240
- package/src/headers/10/stream_base-inl.h +0 -458
- package/src/headers/10/stream_base.h +0 -378
- package/src/headers/10/stream_pipe.h +0 -72
- package/src/headers/10/stream_wrap.h +0 -130
- package/src/headers/10/string_bytes.h +0 -126
- package/src/headers/10/string_decoder-inl.h +0 -38
- package/src/headers/10/string_search.h +0 -620
- package/src/headers/10/tcp_wrap.h +0 -99
- package/src/headers/10/tls_wrap.h +0 -195
- package/src/headers/10/tracing/agent.h +0 -178
- package/src/headers/10/tracing/node_trace_buffer.h +0 -83
- package/src/headers/10/tracing/node_trace_writer.h +0 -75
- package/src/headers/10/tracing/trace_event.h +0 -706
- package/src/headers/10/tracing/trace_event_common.h +0 -1102
- package/src/headers/10/tracing/traced_value.h +0 -68
- package/src/headers/10/tty_wrap.h +0 -63
- package/src/headers/10/udp_wrap.h +0 -102
- package/src/headers/10/util-inl.h +0 -459
- package/src/headers/10/util.h +0 -508
- package/src/headers/10/v8abbr.h +0 -121
- package/src/headers/12/aliased_buffer.h +0 -263
- package/src/headers/12/debug_utils.h +0 -181
- package/src/headers/12/histogram-inl.h +0 -83
- package/src/headers/12/histogram.h +0 -98
- package/src/headers/12/http_parser_adaptor.h +0 -24
- package/src/headers/12/inspector_agent.h +0 -147
- package/src/headers/12/inspector_profiler.h +0 -137
- package/src/headers/12/js_native_api.h +0 -541
- package/src/headers/12/js_native_api_types.h +0 -139
- package/src/headers/12/memory_tracker-inl.h +0 -339
- package/src/headers/12/memory_tracker.h +0 -283
- package/src/headers/12/module_wrap.h +0 -99
- package/src/headers/12/node.h +0 -887
- package/src/headers/12/node_api.h +0 -239
- package/src/headers/12/node_buffer.h +0 -92
- package/src/headers/12/node_constants.h +0 -80
- package/src/headers/12/node_crypto.h +0 -800
- package/src/headers/12/node_crypto_bio.h +0 -195
- package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/12/node_crypto_clienthello.h +0 -132
- package/src/headers/12/node_file-inl.h +0 -289
- package/src/headers/12/node_http2.h +0 -1311
- package/src/headers/12/node_http_parser_impl.h +0 -994
- package/src/headers/12/node_i18n.h +0 -144
- package/src/headers/12/node_main_instance.h +0 -97
- package/src/headers/12/node_messaging.h +0 -227
- package/src/headers/12/node_native_module_env.h +0 -65
- package/src/headers/12/node_options-inl.h +0 -447
- package/src/headers/12/node_options.h +0 -479
- package/src/headers/12/node_perf.h +0 -181
- package/src/headers/12/node_process.h +0 -41
- package/src/headers/12/node_report.h +0 -47
- package/src/headers/12/node_revert.h +0 -78
- package/src/headers/12/node_sockaddr.h +0 -123
- package/src/headers/12/node_url.h +0 -188
- package/src/headers/12/node_version.h +0 -98
- package/src/headers/12/node_watchdog.h +0 -152
- package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/12/node_win32_etw_provider.h +0 -99
- package/src/headers/12/node_worker.h +0 -142
- package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
- package/src/headers/12/stream_base-inl.h +0 -323
- package/src/headers/12/stream_base.h +0 -431
- package/src/headers/12/stream_pipe.h +0 -72
- package/src/headers/12/string_bytes.h +0 -142
- package/src/headers/12/string_decoder.h +0 -50
- package/src/headers/12/string_search.h +0 -638
- package/src/headers/12/tls_wrap.h +0 -221
- package/src/headers/12/tracing/agent.h +0 -195
- package/src/headers/12/tracing/trace_event.h +0 -710
- package/src/headers/12/tty_wrap.h +0 -64
- package/src/headers/12/udp_wrap.h +0 -222
- package/src/headers/12/util-inl.h +0 -529
- package/src/headers/12/util.h +0 -765
- package/src/headers/13/async_wrap-inl.h +0 -94
- package/src/headers/13/async_wrap.h +0 -224
- package/src/headers/13/base64.h +0 -197
- package/src/headers/13/base_object-inl.h +0 -353
- package/src/headers/13/base_object.h +0 -229
- package/src/headers/13/connect_wrap.h +0 -26
- package/src/headers/13/connection_wrap.h +0 -30
- package/src/headers/13/debug_utils-inl.h +0 -223
- package/src/headers/13/diagnosticfilename-inl.h +0 -33
- package/src/headers/13/env-inl.h +0 -1293
- package/src/headers/13/env.h +0 -1469
- package/src/headers/13/handle_wrap.h +0 -117
- package/src/headers/13/histogram-inl.h +0 -83
- package/src/headers/13/histogram.h +0 -98
- package/src/headers/13/inspector_io.h +0 -78
- package/src/headers/13/inspector_socket.h +0 -60
- package/src/headers/13/inspector_socket_server.h +0 -110
- package/src/headers/13/js_native_api.h +0 -541
- package/src/headers/13/js_native_api_v8.h +0 -303
- package/src/headers/13/js_native_api_v8_internals.h +0 -38
- package/src/headers/13/js_stream.h +0 -52
- package/src/headers/13/json_utils.h +0 -160
- package/src/headers/13/node_api.h +0 -239
- package/src/headers/13/node_api_types.h +0 -44
- package/src/headers/13/node_binding.h +0 -99
- package/src/headers/13/node_context_data.h +0 -39
- package/src/headers/13/node_contextify.h +0 -161
- package/src/headers/13/node_crypto.h +0 -800
- package/src/headers/13/node_crypto_common.h +0 -138
- package/src/headers/13/node_crypto_groups.h +0 -415
- package/src/headers/13/node_dir.h +0 -52
- package/src/headers/13/node_dtrace.h +0 -86
- package/src/headers/13/node_errors.h +0 -210
- package/src/headers/13/node_file.h +0 -364
- package/src/headers/13/node_http2_state.h +0 -144
- package/src/headers/13/node_internals.h +0 -405
- package/src/headers/13/node_mem-inl.h +0 -112
- package/src/headers/13/node_mem.h +0 -41
- package/src/headers/13/node_metadata.h +0 -109
- package/src/headers/13/node_mutex.h +0 -247
- package/src/headers/13/node_native_module.h +0 -99
- package/src/headers/13/node_object_wrap.h +0 -132
- package/src/headers/13/node_perf.h +0 -181
- package/src/headers/13/node_perf_common.h +0 -97
- package/src/headers/13/node_platform.h +0 -190
- package/src/headers/13/node_process.h +0 -41
- package/src/headers/13/node_root_certs.h +0 -3424
- package/src/headers/13/node_sockaddr-inl.h +0 -170
- package/src/headers/13/node_sockaddr.h +0 -123
- package/src/headers/13/node_stat_watcher.h +0 -66
- package/src/headers/13/node_union_bytes.h +0 -103
- package/src/headers/13/node_v8_platform-inl.h +0 -184
- package/src/headers/13/node_wasi.h +0 -108
- package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/13/node_win32_etw_provider.h +0 -99
- package/src/headers/13/pipe_wrap.h +0 -78
- package/src/headers/13/req_wrap-inl.h +0 -170
- package/src/headers/13/req_wrap.h +0 -77
- package/src/headers/13/spawn_sync.h +0 -242
- package/src/headers/13/stream_wrap.h +0 -130
- package/src/headers/13/string_decoder-inl.h +0 -37
- package/src/headers/13/string_decoder.h +0 -50
- package/src/headers/13/tcp_wrap.h +0 -101
- package/src/headers/13/threadpoolwork-inl.h +0 -57
- package/src/headers/13/tracing/node_trace_buffer.h +0 -83
- package/src/headers/13/tracing/node_trace_writer.h +0 -75
- package/src/headers/13/tracing/trace_event_common.h +0 -1109
- package/src/headers/13/tracing/traced_value.h +0 -70
- package/src/headers/13/v8abbr.h +0 -124
|
@@ -32,6 +32,16 @@
|
|
|
32
32
|
# define NODE_EXTERN __attribute__((visibility("default")))
|
|
33
33
|
#endif
|
|
34
34
|
|
|
35
|
+
// Declarations annotated with NODE_EXTERN_PRIVATE do not form part of
|
|
36
|
+
// the public API. They are implementation details that can and will
|
|
37
|
+
// change between releases, even in semver patch releases. Do not use
|
|
38
|
+
// any such symbol in external code.
|
|
39
|
+
#ifdef NODE_SHARED_MODE
|
|
40
|
+
#define NODE_EXTERN_PRIVATE NODE_EXTERN
|
|
41
|
+
#else
|
|
42
|
+
#define NODE_EXTERN_PRIVATE
|
|
43
|
+
#endif
|
|
44
|
+
|
|
35
45
|
#ifdef BUILDING_NODE_EXTENSION
|
|
36
46
|
# undef BUILDING_V8_SHARED
|
|
37
47
|
# undef BUILDING_UV_SHARED
|
|
@@ -60,19 +70,13 @@
|
|
|
60
70
|
# define SIGKILL 9
|
|
61
71
|
#endif
|
|
62
72
|
|
|
63
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
64
|
-
#pragma GCC diagnostic push
|
|
65
|
-
#pragma GCC diagnostic ignored "-Wcast-function-type"
|
|
66
|
-
#endif
|
|
67
73
|
#include "v8.h" // NOLINT(build/include_order)
|
|
68
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
69
|
-
#pragma GCC diagnostic pop
|
|
70
|
-
#endif
|
|
71
74
|
|
|
72
75
|
#include "v8-platform.h" // NOLINT(build/include_order)
|
|
73
76
|
#include "node_version.h" // NODE_MODULE_VERSION
|
|
74
77
|
|
|
75
78
|
#include <memory>
|
|
79
|
+
#include <functional>
|
|
76
80
|
|
|
77
81
|
// We cannot use __POSIX__ in this header because that's only defined when
|
|
78
82
|
// building Node.js.
|
|
@@ -116,6 +120,8 @@
|
|
|
116
120
|
// Forward-declare libuv loop
|
|
117
121
|
struct uv_loop_s;
|
|
118
122
|
|
|
123
|
+
struct napi_module;
|
|
124
|
+
|
|
119
125
|
// Forward-declare these functions now to stop MSVS from becoming
|
|
120
126
|
// terminally confused when it's done in node_internals.h
|
|
121
127
|
namespace node {
|
|
@@ -218,6 +224,20 @@ namespace node {
|
|
|
218
224
|
class IsolateData;
|
|
219
225
|
class Environment;
|
|
220
226
|
|
|
227
|
+
namespace ProcessFlags {
|
|
228
|
+
enum Flags : uint64_t {
|
|
229
|
+
kNoFlags = 0,
|
|
230
|
+
// Enable stdio inheritance, which is disabled by default.
|
|
231
|
+
kEnableStdioInheritance = 1 << 0,
|
|
232
|
+
// Disable reading the NODE_OPTIONS environment variable.
|
|
233
|
+
kDisableNodeOptionsEnv = 1 << 1,
|
|
234
|
+
// Do not parse CLI options.
|
|
235
|
+
kDisableCLIOptions = 1 << 2,
|
|
236
|
+
// Do not initialize ICU.
|
|
237
|
+
kNoICU = 1 << 3,
|
|
238
|
+
};
|
|
239
|
+
} // namespace ProcessFlags
|
|
240
|
+
|
|
221
241
|
// TODO(addaleax): Officially deprecate this and replace it with something
|
|
222
242
|
// better suited for a public embedder API.
|
|
223
243
|
NODE_EXTERN int Start(int argc, char* argv[]);
|
|
@@ -226,12 +246,20 @@ NODE_EXTERN int Start(int argc, char* argv[]);
|
|
|
226
246
|
// in the loop and / or actively executing JavaScript code).
|
|
227
247
|
NODE_EXTERN int Stop(Environment* env);
|
|
228
248
|
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
249
|
+
// Set up per-process state needed to run Node.js. This will consume arguments
|
|
250
|
+
// from argv, fill exec_argv, and possibly add errors resulting from parsing
|
|
251
|
+
// the arguments to `errors`. The return value is a suggested exit code for the
|
|
252
|
+
// program; If it is 0, then initializing Node.js succeeded.
|
|
253
|
+
NODE_EXTERN int InitializeNodeWithArgs(
|
|
254
|
+
std::vector<std::string>* argv,
|
|
255
|
+
std::vector<std::string>* exec_argv,
|
|
256
|
+
std::vector<std::string>* errors);
|
|
257
|
+
// TODO(zcbenz): Turn above overloaded version into below's default argument.
|
|
258
|
+
NODE_EXTERN int InitializeNodeWithArgs(
|
|
259
|
+
std::vector<std::string>* argv,
|
|
260
|
+
std::vector<std::string>* exec_argv,
|
|
261
|
+
std::vector<std::string>* errors,
|
|
262
|
+
ProcessFlags::Flags flags);
|
|
235
263
|
|
|
236
264
|
enum OptionEnvvarSettings {
|
|
237
265
|
kAllowedInEnvironment,
|
|
@@ -270,6 +298,12 @@ class NODE_EXTERN ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
|
270
298
|
NODE_EXTERN ArrayBufferAllocator* CreateArrayBufferAllocator();
|
|
271
299
|
NODE_EXTERN void FreeArrayBufferAllocator(ArrayBufferAllocator* allocator);
|
|
272
300
|
|
|
301
|
+
class NODE_EXTERN IsolatePlatformDelegate {
|
|
302
|
+
public:
|
|
303
|
+
virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner() = 0;
|
|
304
|
+
virtual bool IdleTasksEnabled() = 0;
|
|
305
|
+
};
|
|
306
|
+
|
|
273
307
|
class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
|
|
274
308
|
public:
|
|
275
309
|
~MultiIsolatePlatform() override = default;
|
|
@@ -279,11 +313,6 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
|
|
|
279
313
|
virtual bool FlushForegroundTasks(v8::Isolate* isolate) = 0;
|
|
280
314
|
virtual void DrainTasks(v8::Isolate* isolate) = 0;
|
|
281
315
|
|
|
282
|
-
// TODO(addaleax): Remove this, it is unnecessary.
|
|
283
|
-
// This would currently be called before `UnregisterIsolate()` but will be
|
|
284
|
-
// folded into it in the future.
|
|
285
|
-
virtual void CancelPendingDelayedTasks(v8::Isolate* isolate);
|
|
286
|
-
|
|
287
316
|
// This needs to be called between the calls to `Isolate::Allocate()` and
|
|
288
317
|
// `Isolate::Initialize()`, so that initialization can already start
|
|
289
318
|
// using the platform.
|
|
@@ -291,6 +320,12 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
|
|
|
291
320
|
// This function may only be called once per `Isolate`.
|
|
292
321
|
virtual void RegisterIsolate(v8::Isolate* isolate,
|
|
293
322
|
struct uv_loop_s* loop) = 0;
|
|
323
|
+
// This method can be used when an application handles task scheduling on its
|
|
324
|
+
// own through `IsolatePlatformDelegate`. Upon registering an isolate with
|
|
325
|
+
// this overload any other method in this class with the exception of
|
|
326
|
+
// `UnregisterIsolate` *must not* be used on that isolate.
|
|
327
|
+
virtual void RegisterIsolate(v8::Isolate* isolate,
|
|
328
|
+
IsolatePlatformDelegate* delegate) = 0;
|
|
294
329
|
|
|
295
330
|
// This function may only be called once per `Isolate`, and discard any
|
|
296
331
|
// pending delayed tasks scheduled for that isolate.
|
|
@@ -303,11 +338,18 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
|
|
|
303
338
|
virtual void AddIsolateFinishedCallback(v8::Isolate* isolate,
|
|
304
339
|
void (*callback)(void*),
|
|
305
340
|
void* data) = 0;
|
|
341
|
+
|
|
342
|
+
static std::unique_ptr<MultiIsolatePlatform> Create(
|
|
343
|
+
int thread_pool_size,
|
|
344
|
+
v8::TracingController* tracing_controller = nullptr,
|
|
345
|
+
v8::PageAllocator* page_allocator = nullptr);
|
|
306
346
|
};
|
|
307
347
|
|
|
308
348
|
enum IsolateSettingsFlags {
|
|
309
349
|
MESSAGE_LISTENER_WITH_ERROR_LEVEL = 1 << 0,
|
|
310
|
-
DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1
|
|
350
|
+
DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1,
|
|
351
|
+
SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2,
|
|
352
|
+
SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3
|
|
311
353
|
};
|
|
312
354
|
|
|
313
355
|
struct IsolateSettings {
|
|
@@ -325,8 +367,6 @@ struct IsolateSettings {
|
|
|
325
367
|
v8::PromiseRejectCallback promise_reject_callback = nullptr;
|
|
326
368
|
v8::AllowWasmCodeGenerationCallback
|
|
327
369
|
allow_wasm_code_generation_callback = nullptr;
|
|
328
|
-
v8::HostCleanupFinalizationGroupCallback
|
|
329
|
-
host_cleanup_finalization_group_callback = nullptr;
|
|
330
370
|
};
|
|
331
371
|
|
|
332
372
|
// Overriding IsolateSettings may produce unexpected behavior
|
|
@@ -342,11 +382,9 @@ NODE_EXTERN void SetIsolateUpForNode(v8::Isolate* isolate);
|
|
|
342
382
|
// This is a convenience method equivalent to using SetIsolateCreateParams(),
|
|
343
383
|
// Isolate::Allocate(), MultiIsolatePlatform::RegisterIsolate(),
|
|
344
384
|
// Isolate::Initialize(), and SetIsolateUpForNode().
|
|
345
|
-
NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator,
|
|
346
|
-
struct uv_loop_s* event_loop);
|
|
347
385
|
NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator,
|
|
348
386
|
struct uv_loop_s* event_loop,
|
|
349
|
-
MultiIsolatePlatform* platform);
|
|
387
|
+
MultiIsolatePlatform* platform = nullptr);
|
|
350
388
|
NODE_EXTERN v8::Isolate* NewIsolate(
|
|
351
389
|
std::shared_ptr<ArrayBufferAllocator> allocator,
|
|
352
390
|
struct uv_loop_s* event_loop,
|
|
@@ -360,7 +398,7 @@ NODE_EXTERN v8::Local<v8::Context> NewContext(
|
|
|
360
398
|
|
|
361
399
|
// Runs Node.js-specific tweaks on an already constructed context
|
|
362
400
|
// Return value indicates success of operation
|
|
363
|
-
NODE_EXTERN bool InitializeContext(v8::Local<v8::Context> context);
|
|
401
|
+
NODE_EXTERN v8::Maybe<bool> InitializeContext(v8::Local<v8::Context> context);
|
|
364
402
|
|
|
365
403
|
// If `platform` is passed, it will be used to register new Worker instances.
|
|
366
404
|
// It can be `nullptr`, in which case creating new Workers inside of
|
|
@@ -372,41 +410,234 @@ NODE_EXTERN IsolateData* CreateIsolateData(
|
|
|
372
410
|
ArrayBufferAllocator* allocator = nullptr);
|
|
373
411
|
NODE_EXTERN void FreeIsolateData(IsolateData* isolate_data);
|
|
374
412
|
|
|
375
|
-
|
|
376
|
-
|
|
413
|
+
struct ThreadId {
|
|
414
|
+
uint64_t id = static_cast<uint64_t>(-1);
|
|
415
|
+
};
|
|
416
|
+
NODE_EXTERN ThreadId AllocateEnvironmentThreadId();
|
|
417
|
+
|
|
418
|
+
namespace EnvironmentFlags {
|
|
419
|
+
enum Flags : uint64_t {
|
|
420
|
+
kNoFlags = 0,
|
|
421
|
+
// Use the default behaviour for Node.js instances.
|
|
422
|
+
kDefaultFlags = 1 << 0,
|
|
423
|
+
// Controls whether this Environment is allowed to affect per-process state
|
|
424
|
+
// (e.g. cwd, process title, uid, etc.).
|
|
425
|
+
// This is set when using kDefaultFlags.
|
|
426
|
+
kOwnsProcessState = 1 << 1,
|
|
427
|
+
// Set if this Environment instance is associated with the global inspector
|
|
428
|
+
// handling code (i.e. listening on SIGUSR1).
|
|
429
|
+
// This is set when using kDefaultFlags.
|
|
430
|
+
kOwnsInspector = 1 << 2,
|
|
431
|
+
// Set if Node.js should not run its own esm loader. This is needed by some
|
|
432
|
+
// embedders, because it's possible for the Node.js esm loader to conflict
|
|
433
|
+
// with another one in an embedder environment, e.g. Blink's in Chromium.
|
|
434
|
+
kNoRegisterESMLoader = 1 << 3,
|
|
435
|
+
// Set this flag to make Node.js track "raw" file descriptors, i.e. managed
|
|
436
|
+
// by fs.open() and fs.close(), and close them during FreeEnvironment().
|
|
437
|
+
kTrackUnmanagedFds = 1 << 4,
|
|
438
|
+
// Set this flag to force hiding console windows when spawning child
|
|
439
|
+
// processes. This is usually used when embedding Node.js in GUI programs on
|
|
440
|
+
// Windows.
|
|
441
|
+
kHideConsoleWindows = 1 << 5,
|
|
442
|
+
// Set this flag to disable loading native addons via `process.dlopen`.
|
|
443
|
+
// This environment flag is especially important for worker threads
|
|
444
|
+
// so that a worker thread can't load a native addon even if `execArgv`
|
|
445
|
+
// is overwritten and `--no-addons` is not specified but was specified
|
|
446
|
+
// for this Environment instance.
|
|
447
|
+
kNoNativeAddons = 1 << 6,
|
|
448
|
+
// Set this flag to disable searching modules from global paths like
|
|
449
|
+
// $HOME/.node_modules and $NODE_PATH. This is used by standalone apps that
|
|
450
|
+
// do not expect to have their behaviors changed because of globally
|
|
451
|
+
// installed modules.
|
|
452
|
+
kNoGlobalSearchPaths = 1 << 7,
|
|
453
|
+
// Do not export browser globals like setTimeout, console, etc.
|
|
454
|
+
kNoBrowserGlobals = 1 << 8,
|
|
455
|
+
// Controls whether or not the Environment should call V8Inspector::create().
|
|
456
|
+
// This control is needed by embedders who may not want to initialize the V8
|
|
457
|
+
// inspector in situations where one has already been created,
|
|
458
|
+
// e.g. Blink's in Chromium.
|
|
459
|
+
kNoCreateInspector = 1 << 9
|
|
460
|
+
};
|
|
461
|
+
} // namespace EnvironmentFlags
|
|
462
|
+
|
|
463
|
+
struct InspectorParentHandle {
|
|
464
|
+
virtual ~InspectorParentHandle();
|
|
465
|
+
};
|
|
466
|
+
|
|
467
|
+
// TODO(addaleax): Maybe move per-Environment options parsing here.
|
|
377
468
|
// Returns nullptr when the Environment cannot be created e.g. there are
|
|
378
469
|
// pending JavaScript exceptions.
|
|
379
|
-
NODE_EXTERN Environment* CreateEnvironment(
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
470
|
+
NODE_EXTERN Environment* CreateEnvironment(
|
|
471
|
+
IsolateData* isolate_data,
|
|
472
|
+
v8::Local<v8::Context> context,
|
|
473
|
+
const std::vector<std::string>& args,
|
|
474
|
+
const std::vector<std::string>& exec_args,
|
|
475
|
+
EnvironmentFlags::Flags flags = EnvironmentFlags::kDefaultFlags,
|
|
476
|
+
ThreadId thread_id = {} /* allocates a thread id automatically */,
|
|
477
|
+
std::unique_ptr<InspectorParentHandle> inspector_parent_handle = {});
|
|
478
|
+
|
|
479
|
+
// Returns a handle that can be passed to `LoadEnvironment()`, making the
|
|
480
|
+
// child Environment accessible to the inspector as if it were a Node.js Worker.
|
|
481
|
+
// `child_thread_id` can be created using `AllocateEnvironmentThreadId()`
|
|
482
|
+
// and then later passed on to `CreateEnvironment()` to create the child
|
|
483
|
+
// Environment, together with the inspector handle.
|
|
484
|
+
// This method should not be called while the parent Environment is active
|
|
485
|
+
// on another thread.
|
|
486
|
+
NODE_EXTERN std::unique_ptr<InspectorParentHandle> GetInspectorParentHandle(
|
|
487
|
+
Environment* parent_env,
|
|
488
|
+
ThreadId child_thread_id,
|
|
489
|
+
const char* child_url);
|
|
490
|
+
|
|
491
|
+
struct StartExecutionCallbackInfo {
|
|
492
|
+
v8::Local<v8::Object> process_object;
|
|
493
|
+
v8::Local<v8::Function> native_require;
|
|
494
|
+
};
|
|
388
495
|
|
|
389
|
-
|
|
390
|
-
|
|
496
|
+
using StartExecutionCallback =
|
|
497
|
+
std::function<v8::MaybeLocal<v8::Value>(const StartExecutionCallbackInfo&)>;
|
|
391
498
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
NODE_EXTERN
|
|
499
|
+
NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
|
|
500
|
+
Environment* env,
|
|
501
|
+
StartExecutionCallback cb);
|
|
502
|
+
NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
|
|
503
|
+
Environment* env,
|
|
504
|
+
const char* main_script_source_utf8);
|
|
505
|
+
NODE_EXTERN void FreeEnvironment(Environment* env);
|
|
396
506
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
507
|
+
// Set a callback that is called when process.exit() is called from JS,
|
|
508
|
+
// overriding the default handler.
|
|
509
|
+
// It receives the Environment* instance and the exit code as arguments.
|
|
510
|
+
// This could e.g. call Stop(env); in order to terminate execution and stop
|
|
511
|
+
// the event loop.
|
|
512
|
+
// The default handler disposes of the global V8 platform instance, if one is
|
|
513
|
+
// being used, and calls exit().
|
|
514
|
+
NODE_EXTERN void SetProcessExitHandler(
|
|
515
|
+
Environment* env,
|
|
516
|
+
std::function<void(Environment*, int)>&& handler);
|
|
517
|
+
NODE_EXTERN void DefaultProcessExitHandler(Environment* env, int exit_code);
|
|
401
518
|
|
|
402
|
-
|
|
403
|
-
NODE_EXTERN
|
|
519
|
+
// This may return nullptr if context is not associated with a Node instance.
|
|
520
|
+
NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local<v8::Context> context);
|
|
521
|
+
NODE_EXTERN IsolateData* GetEnvironmentIsolateData(Environment* env);
|
|
522
|
+
NODE_EXTERN ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* data);
|
|
523
|
+
|
|
524
|
+
NODE_EXTERN void OnFatalError(const char* location, const char* message);
|
|
525
|
+
NODE_EXTERN void PromiseRejectCallback(v8::PromiseRejectMessage message);
|
|
526
|
+
NODE_EXTERN bool AllowWasmCodeGenerationCallback(v8::Local<v8::Context> context,
|
|
527
|
+
v8::Local<v8::String>);
|
|
528
|
+
NODE_EXTERN bool ShouldAbortOnUncaughtException(v8::Isolate* isolate);
|
|
529
|
+
NODE_EXTERN v8::MaybeLocal<v8::Value> PrepareStackTraceCallback(
|
|
530
|
+
v8::Local<v8::Context> context,
|
|
531
|
+
v8::Local<v8::Value> exception,
|
|
532
|
+
v8::Local<v8::Array> trace);
|
|
533
|
+
|
|
534
|
+
// This returns the MultiIsolatePlatform used for an Environment or IsolateData
|
|
535
|
+
// instance, if one exists.
|
|
536
|
+
NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env);
|
|
537
|
+
NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(IsolateData* env);
|
|
538
|
+
|
|
539
|
+
NODE_DEPRECATED("Use MultiIsolatePlatform::Create() instead",
|
|
540
|
+
NODE_EXTERN MultiIsolatePlatform* CreatePlatform(
|
|
541
|
+
int thread_pool_size,
|
|
542
|
+
v8::TracingController* tracing_controller));
|
|
543
|
+
NODE_DEPRECATED("Use MultiIsolatePlatform::Create() instead",
|
|
544
|
+
NODE_EXTERN void FreePlatform(MultiIsolatePlatform* platform));
|
|
545
|
+
|
|
546
|
+
// Get/set the currently active tracing controller. Using CreatePlatform()
|
|
547
|
+
// will implicitly set this by default. This is global and should be initialized
|
|
548
|
+
// along with the v8::Platform instance that is being used. `controller`
|
|
549
|
+
// is allowed to be `nullptr`.
|
|
550
|
+
// This is used for tracing events from Node.js itself. V8 uses the tracing
|
|
551
|
+
// controller returned from the active `v8::Platform` instance.
|
|
552
|
+
NODE_EXTERN v8::TracingController* GetTracingController();
|
|
553
|
+
NODE_EXTERN void SetTracingController(v8::TracingController* controller);
|
|
554
|
+
|
|
555
|
+
// Run `process.emit('beforeExit')` as it would usually happen when Node.js is
|
|
556
|
+
// run in standalone mode.
|
|
557
|
+
NODE_EXTERN v8::Maybe<bool> EmitProcessBeforeExit(Environment* env);
|
|
558
|
+
NODE_DEPRECATED("Use Maybe version (EmitProcessBeforeExit) instead",
|
|
559
|
+
NODE_EXTERN void EmitBeforeExit(Environment* env));
|
|
560
|
+
// Run `process.emit('exit')` as it would usually happen when Node.js is run
|
|
561
|
+
// in standalone mode. The return value corresponds to the exit code.
|
|
562
|
+
NODE_EXTERN v8::Maybe<int> EmitProcessExit(Environment* env);
|
|
563
|
+
NODE_DEPRECATED("Use Maybe version (EmitProcessExit) instead",
|
|
564
|
+
NODE_EXTERN int EmitExit(Environment* env));
|
|
565
|
+
|
|
566
|
+
// Runs hooks added through `AtExit()`. This is part of `FreeEnvironment()`,
|
|
567
|
+
// so calling it manually is typically not necessary.
|
|
404
568
|
NODE_EXTERN void RunAtExit(Environment* env);
|
|
405
569
|
|
|
406
570
|
// This may return nullptr if the current v8::Context is not associated
|
|
407
571
|
// with a Node instance.
|
|
408
572
|
NODE_EXTERN struct uv_loop_s* GetCurrentEventLoop(v8::Isolate* isolate);
|
|
409
573
|
|
|
574
|
+
// Runs the main loop for a given Environment. This roughly performs the
|
|
575
|
+
// following steps:
|
|
576
|
+
// 1. Call uv_run() on the event loop until it is drained.
|
|
577
|
+
// 2. Call platform->DrainTasks() on the associated platform/isolate.
|
|
578
|
+
// 3. If the event loop is alive again, go to Step 1.
|
|
579
|
+
// 4. Call EmitProcessBeforeExit().
|
|
580
|
+
// 5. If the event loop is alive again, go to Step 1.
|
|
581
|
+
// 6. Call EmitProcessExit() and forward the return value.
|
|
582
|
+
// If at any point node::Stop() is called, the function will attempt to return
|
|
583
|
+
// as soon as possible, returning an empty `Maybe`.
|
|
584
|
+
// This function only works if `env` has an associated `MultiIsolatePlatform`.
|
|
585
|
+
NODE_EXTERN v8::Maybe<int> SpinEventLoop(Environment* env);
|
|
586
|
+
|
|
587
|
+
class NODE_EXTERN CommonEnvironmentSetup {
|
|
588
|
+
public:
|
|
589
|
+
~CommonEnvironmentSetup();
|
|
590
|
+
|
|
591
|
+
// Create a new CommonEnvironmentSetup, that is, a group of objects that
|
|
592
|
+
// together form the typical setup for a single Node.js Environment instance.
|
|
593
|
+
// If any error occurs, `*errors` will be populated and the returned pointer
|
|
594
|
+
// will be empty.
|
|
595
|
+
// env_args will be passed through as arguments to CreateEnvironment(), after
|
|
596
|
+
// `isolate_data` and `context`.
|
|
597
|
+
template <typename... EnvironmentArgs>
|
|
598
|
+
static std::unique_ptr<CommonEnvironmentSetup> Create(
|
|
599
|
+
MultiIsolatePlatform* platform,
|
|
600
|
+
std::vector<std::string>* errors,
|
|
601
|
+
EnvironmentArgs&&... env_args);
|
|
602
|
+
|
|
603
|
+
struct uv_loop_s* event_loop() const;
|
|
604
|
+
std::shared_ptr<ArrayBufferAllocator> array_buffer_allocator() const;
|
|
605
|
+
v8::Isolate* isolate() const;
|
|
606
|
+
IsolateData* isolate_data() const;
|
|
607
|
+
Environment* env() const;
|
|
608
|
+
v8::Local<v8::Context> context() const;
|
|
609
|
+
|
|
610
|
+
CommonEnvironmentSetup(const CommonEnvironmentSetup&) = delete;
|
|
611
|
+
CommonEnvironmentSetup& operator=(const CommonEnvironmentSetup&) = delete;
|
|
612
|
+
CommonEnvironmentSetup(CommonEnvironmentSetup&&) = delete;
|
|
613
|
+
CommonEnvironmentSetup& operator=(CommonEnvironmentSetup&&) = delete;
|
|
614
|
+
|
|
615
|
+
private:
|
|
616
|
+
struct Impl;
|
|
617
|
+
Impl* impl_;
|
|
618
|
+
CommonEnvironmentSetup(
|
|
619
|
+
MultiIsolatePlatform*,
|
|
620
|
+
std::vector<std::string>*,
|
|
621
|
+
std::function<Environment*(const CommonEnvironmentSetup*)>);
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
// Implementation for CommonEnvironmentSetup::Create
|
|
625
|
+
template <typename... EnvironmentArgs>
|
|
626
|
+
std::unique_ptr<CommonEnvironmentSetup> CommonEnvironmentSetup::Create(
|
|
627
|
+
MultiIsolatePlatform* platform,
|
|
628
|
+
std::vector<std::string>* errors,
|
|
629
|
+
EnvironmentArgs&&... env_args) {
|
|
630
|
+
auto ret = std::unique_ptr<CommonEnvironmentSetup>(new CommonEnvironmentSetup(
|
|
631
|
+
platform, errors,
|
|
632
|
+
[&](const CommonEnvironmentSetup* setup) -> Environment* {
|
|
633
|
+
return CreateEnvironment(
|
|
634
|
+
setup->isolate_data(), setup->context(),
|
|
635
|
+
std::forward<EnvironmentArgs>(env_args)...);
|
|
636
|
+
}));
|
|
637
|
+
if (!errors->empty()) ret.reset();
|
|
638
|
+
return ret;
|
|
639
|
+
}
|
|
640
|
+
|
|
410
641
|
/* Converts a unixtime to V8 Date */
|
|
411
642
|
NODE_DEPRECATED("Use v8::Date::New() directly",
|
|
412
643
|
inline v8::Local<v8::Value> NODE_UNIXTIME_V8(double time) {
|
|
@@ -510,7 +741,18 @@ inline void NODE_SET_PROTOTYPE_METHOD(v8::Local<v8::FunctionTemplate> recv,
|
|
|
510
741
|
#define NODE_SET_PROTOTYPE_METHOD node::NODE_SET_PROTOTYPE_METHOD
|
|
511
742
|
|
|
512
743
|
// BINARY is a deprecated alias of LATIN1.
|
|
513
|
-
|
|
744
|
+
// BASE64URL is not currently exposed to the JavaScript side.
|
|
745
|
+
enum encoding {
|
|
746
|
+
ASCII,
|
|
747
|
+
UTF8,
|
|
748
|
+
BASE64,
|
|
749
|
+
UCS2,
|
|
750
|
+
BINARY,
|
|
751
|
+
HEX,
|
|
752
|
+
BUFFER,
|
|
753
|
+
BASE64URL,
|
|
754
|
+
LATIN1 = BINARY
|
|
755
|
+
};
|
|
514
756
|
|
|
515
757
|
NODE_EXTERN enum encoding ParseEncoding(
|
|
516
758
|
v8::Isolate* isolate,
|
|
@@ -595,11 +837,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod);
|
|
|
595
837
|
#endif
|
|
596
838
|
|
|
597
839
|
#if defined(_MSC_VER)
|
|
598
|
-
#pragma section(".CRT$XCU", read)
|
|
599
840
|
#define NODE_C_CTOR(fn) \
|
|
600
841
|
NODE_CTOR_PREFIX void __cdecl fn(void); \
|
|
601
|
-
|
|
602
|
-
|
|
842
|
+
namespace { \
|
|
843
|
+
struct fn##_ { \
|
|
844
|
+
fn##_() { fn(); }; \
|
|
845
|
+
} fn##_v_; \
|
|
846
|
+
} \
|
|
603
847
|
NODE_CTOR_PREFIX void __cdecl fn(void)
|
|
604
848
|
#else
|
|
605
849
|
#define NODE_C_CTOR(fn) \
|
|
@@ -696,21 +940,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod);
|
|
|
696
940
|
// In each variant, the registration function needs to be usable at least for
|
|
697
941
|
// the time during which the Environment exists.
|
|
698
942
|
NODE_EXTERN void AddLinkedBinding(Environment* env, const node_module& mod);
|
|
943
|
+
NODE_EXTERN void AddLinkedBinding(Environment* env,
|
|
944
|
+
const struct napi_module& mod);
|
|
699
945
|
NODE_EXTERN void AddLinkedBinding(Environment* env,
|
|
700
946
|
const char* name,
|
|
701
947
|
addon_context_register_func fn,
|
|
702
948
|
void* priv);
|
|
703
949
|
|
|
704
|
-
/* Called after the event loop exits but before the VM is disposed.
|
|
705
|
-
* Callbacks are run in reverse order of registration, i.e. newest first.
|
|
706
|
-
*
|
|
707
|
-
* You should always use the three-argument variant (or, for addons,
|
|
708
|
-
* AddEnvironmentCleanupHook) in order to avoid relying on global state.
|
|
709
|
-
*/
|
|
710
|
-
NODE_DEPRECATED(
|
|
711
|
-
"Use the three-argument variant of AtExit() or AddEnvironmentCleanupHook()",
|
|
712
|
-
NODE_EXTERN void AtExit(void (*cb)(void* arg), void* arg = nullptr));
|
|
713
|
-
|
|
714
950
|
/* Registers a callback with the passed-in Environment instance. The callback
|
|
715
951
|
* is called after the event loop exits, but before the VM is disposed.
|
|
716
952
|
* Callbacks are run in reverse order of registration, i.e. newest first.
|
|
@@ -718,12 +954,6 @@ NODE_DEPRECATED(
|
|
|
718
954
|
NODE_EXTERN void AtExit(Environment* env,
|
|
719
955
|
void (*cb)(void* arg),
|
|
720
956
|
void* arg);
|
|
721
|
-
NODE_DEPRECATED(
|
|
722
|
-
"Use the three-argument variant of AtExit() or AddEnvironmentCleanupHook()",
|
|
723
|
-
inline void AtExit(Environment* env,
|
|
724
|
-
void (*cb)(void* arg)) {
|
|
725
|
-
AtExit(env, cb, nullptr);
|
|
726
|
-
})
|
|
727
957
|
|
|
728
958
|
typedef double async_id;
|
|
729
959
|
struct async_context {
|
|
@@ -744,6 +974,34 @@ NODE_EXTERN void RemoveEnvironmentCleanupHook(v8::Isolate* isolate,
|
|
|
744
974
|
void (*fun)(void* arg),
|
|
745
975
|
void* arg);
|
|
746
976
|
|
|
977
|
+
/* These are async equivalents of the above. After the cleanup hook is invoked,
|
|
978
|
+
* `cb(cbarg)` *must* be called, and attempting to remove the cleanup hook will
|
|
979
|
+
* have no effect. */
|
|
980
|
+
struct ACHHandle;
|
|
981
|
+
struct NODE_EXTERN DeleteACHHandle { void operator()(ACHHandle*) const; };
|
|
982
|
+
typedef std::unique_ptr<ACHHandle, DeleteACHHandle> AsyncCleanupHookHandle;
|
|
983
|
+
|
|
984
|
+
/* This function is not intended to be used externally, it exists to aid in
|
|
985
|
+
* keeping ABI compatibility between Node and Electron. */
|
|
986
|
+
NODE_EXTERN ACHHandle* AddEnvironmentCleanupHookInternal(
|
|
987
|
+
v8::Isolate* isolate,
|
|
988
|
+
void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
|
|
989
|
+
void* arg);
|
|
990
|
+
inline AsyncCleanupHookHandle AddEnvironmentCleanupHook(
|
|
991
|
+
v8::Isolate* isolate,
|
|
992
|
+
void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
|
|
993
|
+
void* arg) {
|
|
994
|
+
return AsyncCleanupHookHandle(AddEnvironmentCleanupHookInternal(isolate, fun,
|
|
995
|
+
arg));
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/* This function is not intended to be used externally, it exists to aid in
|
|
999
|
+
* keeping ABI compatibility between Node and Electron. */
|
|
1000
|
+
NODE_EXTERN void RemoveEnvironmentCleanupHookInternal(ACHHandle* holder);
|
|
1001
|
+
inline void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder) {
|
|
1002
|
+
RemoveEnvironmentCleanupHookInternal(holder.get());
|
|
1003
|
+
}
|
|
1004
|
+
|
|
747
1005
|
/* Returns the id of the current execution context. If the return value is
|
|
748
1006
|
* zero then no execution has been set. This will happen if the user handles
|
|
749
1007
|
* I/O from native code. */
|
|
@@ -802,6 +1060,9 @@ class NODE_EXTERN CallbackScope {
|
|
|
802
1060
|
CallbackScope(v8::Isolate* isolate,
|
|
803
1061
|
v8::Local<v8::Object> resource,
|
|
804
1062
|
async_context asyncContext);
|
|
1063
|
+
CallbackScope(Environment* env,
|
|
1064
|
+
v8::Local<v8::Object> resource,
|
|
1065
|
+
async_context asyncContext);
|
|
805
1066
|
~CallbackScope();
|
|
806
1067
|
|
|
807
1068
|
void operator=(const CallbackScope&) = delete;
|