@encharm/cws 4.0.2 → 4.3.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/CHANGELOG.md +3 -0
- package/LICENSE +3 -2
- package/README.md +9 -2
- package/binding.gyp +2 -2
- package/dist/bindings/cws_darwin_arm64_node108.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node64.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node72.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node79.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
- package/dist/bindings/cws_darwin_x64_node108.node +0 -0
- package/dist/bindings/cws_darwin_x64_node64.node +0 -0
- package/dist/bindings/cws_darwin_x64_node72.node +0 -0
- package/dist/bindings/cws_darwin_x64_node79.node +0 -0
- package/dist/bindings/cws_darwin_x64_node83.node +0 -0
- package/dist/bindings/cws_darwin_x64_node93.node +0 -0
- package/dist/bindings/cws_linux_x64_node108.node +0 -0
- package/dist/bindings/cws_linux_x64_node64.node +0 -0
- package/dist/bindings/cws_linux_x64_node72.node +0 -0
- package/dist/bindings/cws_linux_x64_node79.node +0 -0
- package/dist/bindings/cws_linux_x64_node83.node +0 -0
- package/dist/bindings/cws_linux_x64_node93.node +0 -0
- package/dist/bindings/cws_win32_x64_node108.node +0 -0
- package/dist/bindings/cws_win32_x64_node64.node +0 -0
- package/dist/bindings/cws_win32_x64_node72.node +0 -0
- package/dist/bindings/cws_win32_x64_node79.node +0 -0
- package/dist/bindings/cws_win32_x64_node83.node +0 -0
- package/dist/bindings/cws_win32_x64_node93.node +0 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +4 -0
- package/dist/index.js +3 -2
- package/dist/server.js +1 -0
- package/dist/shared.js +2 -1
- package/package.json +1 -1
- package/src/Addon.cpp +1 -0
- package/src/Addon.h +35 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/LICENSE +4 -0
- package/src/Socket.h +12 -3
- 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/{12/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_javascript.h → 18/node_crypto.h} +30 -14
- 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/{12 → 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/{12 → 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/{13 → 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/{13 → 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/dist/bindings/cws_darwin_64.node +0 -0
- package/dist/bindings/cws_darwin_72.node +0 -0
- package/dist/bindings/cws_darwin_79.node +0 -0
- package/dist/bindings/cws_darwin_83.node +0 -0
- package/dist/bindings/cws_darwin_93.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/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_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_win32_perfctr_provider.h +0 -58
- 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_messaging.h +0 -227
- 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_stat_watcher.h +0 -66
- 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/req_wrap.h +0 -77
- 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/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_main_instance.h +0 -97
- 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_native_module_env.h +0 -65
- 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_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/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/tls_wrap.h +0 -221
- 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
package/CHANGELOG.md
CHANGED
package/LICENSE
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
This software is based on uWebSockets 0.14 which has ZLIB license
|
|
1
|
+
This software is based on ClusterWS/cWS and before on uWebSockets 0.14 which has ZLIB license
|
|
2
2
|
make sure to check /src/LICENSE.
|
|
3
3
|
|
|
4
|
-
For the code provided by cWS:
|
|
4
|
+
For the code provided by cWS (ClusterWS) as well as later by Code Charm:
|
|
5
5
|
|
|
6
6
|
MIT License
|
|
7
7
|
|
|
8
8
|
Copyright (c) 2018 cWS
|
|
9
|
+
2021 Code Charm
|
|
9
10
|
|
|
10
11
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
12
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* **Consider using latest version of uWebSockets if you do not need compatibility with ws or a multi-process architecture.**
|
|
7
7
|
|
|
8
8
|
* This repository is a fork of [ClusterWS/cWS](https://github.com/ClusterWS/cWS)
|
|
9
|
-
* Prior, this repository was a fork of [uWebSockets v0.14](https://github.com/uNetworking/uWebSockets/tree/v0.14) therefore has two licence [MIT](https://github.com/
|
|
9
|
+
* Prior, this repository was a fork of [uWebSockets v0.14](https://github.com/uNetworking/uWebSockets/tree/v0.14) therefore has two licence [MIT](https://github.com/encharm/cWS/blob/master/LICENSE) and [ZLIB](https://github.com/encharm/cWS/blob/master/src/LICENSE)
|
|
10
10
|
|
|
11
11
|
## Supported Node Versions (SSL)
|
|
12
12
|
|
|
@@ -14,7 +14,8 @@ This table is true if you run ssl directly with `cws` (`Node.js`). In case if yo
|
|
|
14
14
|
|
|
15
15
|
| CWS Version | Node 10 | Node 11 | Node 12 | Node 13 | Node 14 | Node 16 |
|
|
16
16
|
|--------------|----------|---------|------------------|-----------|---------|----------|
|
|
17
|
-
| 4.
|
|
17
|
+
| 4.x.x | >=10.0 | X | >=12.16 | >=13.9 | >=14.5 | >= 16.11 |
|
|
18
|
+
| *The versions below are available via @clusterws/cws* |
|
|
18
19
|
| 3.0.0 | >=10.0 | X | >=12.16 | >=13.9 | >=14.5 | X |
|
|
19
20
|
| 2.0.0 | >=10.0 | X | >=12.16 | >=13.9 | X | X |
|
|
20
21
|
| 1.6.0 | >=10.0 | >=11.0 | >=12.0 & <12.16 | >=13.9 | X | X |
|
|
@@ -136,6 +137,12 @@ if(socket.readyState === socket.OPEN) {}
|
|
|
136
137
|
if(socket.readyState === socket.CLOSED) {}
|
|
137
138
|
```
|
|
138
139
|
|
|
140
|
+
To find out number of buffered (and not yet sent) bytes:
|
|
141
|
+
```js
|
|
142
|
+
socket.bufferedAmount;
|
|
143
|
+
// useful for implementing back-pressure
|
|
144
|
+
```
|
|
145
|
+
|
|
139
146
|
To get addresses use `_socket` getter:
|
|
140
147
|
```js
|
|
141
148
|
socket._socket;
|
package/binding.gyp
CHANGED
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
'outputs': [
|
|
65
65
|
'cws'
|
|
66
66
|
],
|
|
67
|
-
'action': ['cp', '<@(PRODUCT_DIR)/cws.node', 'dist/bindings/cws_<!@(node -p process.platform)_<!@(node -p process.versions.modules).node']
|
|
67
|
+
'action': ['cp', '<@(PRODUCT_DIR)/cws.node', 'dist/bindings/cws_<!@(node -p process.platform)_<!@(node -p process.arch)_node<!@(node -p process.versions.modules).node']
|
|
68
68
|
}
|
|
69
69
|
]}
|
|
70
70
|
],
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
'outputs': [
|
|
79
79
|
'cws'
|
|
80
80
|
],
|
|
81
|
-
'action': ['copy', '<@(PRODUCT_DIR)/cws.node', '
|
|
81
|
+
'action': ['copy', '<@(PRODUCT_DIR)/cws.node', 'cws_<!@(node -p process.platform)_<!@(node -p process.arch)_node<!@(node -p process.versions.modules).node']
|
|
82
82
|
}
|
|
83
83
|
]}
|
|
84
84
|
]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/client.d.ts
CHANGED
package/dist/client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocket = void 0;
|
|
3
4
|
const server_1 = require("./server");
|
|
4
5
|
const shared_1 = require("./shared");
|
|
5
6
|
const clientGroup = shared_1.native.client.group.create(0, shared_1.DEFAULT_PAYLOAD_LIMIT);
|
|
@@ -27,6 +28,9 @@ class WebSocket {
|
|
|
27
28
|
shared_1.native.connect(clientGroup, url, this);
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
get bufferedAmount() {
|
|
32
|
+
return this.external ? shared_1.native.getBufferedAmount(this.external) : 0;
|
|
33
|
+
}
|
|
30
34
|
get _socket() {
|
|
31
35
|
const address = this.external ? shared_1.native.getAddress(this.external) : new Array(3);
|
|
32
36
|
return {
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.secureProtocol = void 0;
|
|
3
4
|
var client_1 = require("./client");
|
|
4
|
-
exports
|
|
5
|
+
Object.defineProperty(exports, "WebSocket", { enumerable: true, get: function () { return client_1.WebSocket; } });
|
|
5
6
|
var server_1 = require("./server");
|
|
6
|
-
exports
|
|
7
|
+
Object.defineProperty(exports, "WebSocketServer", { enumerable: true, get: function () { return server_1.WebSocketServer; } });
|
|
7
8
|
exports.secureProtocol = 'TLSv1_2_method';
|
package/dist/server.js
CHANGED
package/dist/shared.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupNative = exports.native = exports.DEFAULT_PAYLOAD_LIMIT = exports.SLIDING_DEFLATE_WINDOW = exports.PERMESSAGE_DEFLATE = exports.APP_PING_CODE = exports.OPCODE_BINARY = exports.OPCODE_PING = exports.OPCODE_TEXT = exports.noop = void 0;
|
|
3
4
|
const client_1 = require("./client");
|
|
4
5
|
exports.noop = () => { };
|
|
5
6
|
exports.OPCODE_TEXT = 1;
|
|
@@ -11,7 +12,7 @@ exports.SLIDING_DEFLATE_WINDOW = 16;
|
|
|
11
12
|
exports.DEFAULT_PAYLOAD_LIMIT = 16777216;
|
|
12
13
|
exports.native = (() => {
|
|
13
14
|
try {
|
|
14
|
-
return require(`../dist/bindings/cws_${process.platform}_${process.versions.modules}`);
|
|
15
|
+
return require(`../dist/bindings/cws_${process.platform}_${process.arch}_node${process.versions.modules}`);
|
|
15
16
|
}
|
|
16
17
|
catch (err) {
|
|
17
18
|
err.message = err.message + ` check './node_modules/@clusterws/cws/build_log.txt' for post install build logs`;
|
package/package.json
CHANGED
package/src/Addon.cpp
CHANGED
|
@@ -18,6 +18,7 @@ void Initialize(Local<Object> exports) {
|
|
|
18
18
|
#endif
|
|
19
19
|
|
|
20
20
|
NODE_SET_METHOD(exports, "getSSLContext", getSSLContext);
|
|
21
|
+
NODE_SET_METHOD(exports, "getBufferedAmount", getBufferedAmount<cWS::SERVER>);
|
|
21
22
|
NODE_SET_METHOD(exports, "setUserData", setUserData<cWS::SERVER>);
|
|
22
23
|
NODE_SET_METHOD(exports, "getUserData", getUserData<cWS::SERVER>);
|
|
23
24
|
NODE_SET_METHOD(exports, "clearUserData", clearUserData<cWS::SERVER>);
|
package/src/Addon.h
CHANGED
|
@@ -32,8 +32,13 @@
|
|
|
32
32
|
#include "headers/16/base_object-inl.h"
|
|
33
33
|
#endif
|
|
34
34
|
|
|
35
|
+
#if NODE_MAJOR_VERSION==18
|
|
36
|
+
#include "headers/18/crypto/crypto_tls.h"
|
|
37
|
+
#include "headers/18/base_object-inl.h"
|
|
38
|
+
#endif
|
|
39
|
+
|
|
35
40
|
using BaseObject = node::BaseObject;
|
|
36
|
-
#if NODE_MAJOR_VERSION==16
|
|
41
|
+
#if NODE_MAJOR_VERSION==16 || NODE_MAJOR_VERSION==18
|
|
37
42
|
using TLSWrap = node::crypto::TLSWrap;
|
|
38
43
|
#else
|
|
39
44
|
using TLSWrap = node::TLSWrap;
|
|
@@ -125,14 +130,26 @@ class NativeString {
|
|
|
125
130
|
} else if (value->IsTypedArray()) {
|
|
126
131
|
Local<ArrayBufferView> arrayBufferView =
|
|
127
132
|
Local<ArrayBufferView>::Cast(value);
|
|
133
|
+
#if NODE_MAJOR_VERSION == 18
|
|
134
|
+
std::shared_ptr<v8::BackingStore> contents = arrayBufferView->Buffer()->GetBackingStore();
|
|
135
|
+
length = arrayBufferView->ByteLength();
|
|
136
|
+
data = (char *)contents->Data();
|
|
137
|
+
#else
|
|
128
138
|
ArrayBuffer::Contents contents = arrayBufferView->Buffer()->GetContents();
|
|
129
139
|
length = contents.ByteLength();
|
|
130
140
|
data = (char *)contents.Data();
|
|
141
|
+
#endif
|
|
131
142
|
} else if (value->IsArrayBuffer()) {
|
|
132
143
|
Local<ArrayBuffer> arrayBuffer = Local<ArrayBuffer>::Cast(value);
|
|
144
|
+
#if NODE_MAJOR_VERSION == 18
|
|
145
|
+
std::shared_ptr<v8::BackingStore> contents = arrayBuffer->GetBackingStore();
|
|
146
|
+
length = arrayBuffer->ByteLength();
|
|
147
|
+
data = (char *)contents->Data();
|
|
148
|
+
#else
|
|
133
149
|
ArrayBuffer::Contents contents = arrayBuffer->GetContents();
|
|
134
150
|
length = contents.ByteLength();
|
|
135
151
|
data = (char *)contents.Data();
|
|
152
|
+
#endif
|
|
136
153
|
} else {
|
|
137
154
|
static char empty[] = "";
|
|
138
155
|
data = empty;
|
|
@@ -187,7 +204,12 @@ inline Local<Value> wrapMessage(const char *message, size_t length,
|
|
|
187
204
|
cWS::OpCode opCode, Isolate *isolate) {
|
|
188
205
|
|
|
189
206
|
if (opCode == cWS::OpCode::BINARY) {
|
|
190
|
-
return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
|
|
207
|
+
// return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
|
|
208
|
+
std::unique_ptr<v8::BackingStore> backing = v8::ArrayBuffer::NewBackingStore((char*)message,
|
|
209
|
+
length,
|
|
210
|
+
[](void*, size_t, void*){},
|
|
211
|
+
nullptr);
|
|
212
|
+
return (Local<Value>)v8::ArrayBuffer::New(isolate, std::move(backing));
|
|
191
213
|
}
|
|
192
214
|
|
|
193
215
|
#if NODE_MAJOR_VERSION >= 13
|
|
@@ -206,6 +228,17 @@ inline Local<Value> getDataV8(cWS::WebSocket<isServer> *webSocket,
|
|
|
206
228
|
: Local<Value>::Cast(Undefined(isolate));
|
|
207
229
|
}
|
|
208
230
|
|
|
231
|
+
|
|
232
|
+
template <bool isServer>
|
|
233
|
+
void getBufferedAmount(const FunctionCallbackInfo<Value> &args) {
|
|
234
|
+
cWS::WebSocket<isServer> *webSocket =
|
|
235
|
+
unwrapSocket<isServer>(args[0].As<External>());
|
|
236
|
+
|
|
237
|
+
args.GetReturnValue().Set(
|
|
238
|
+
Integer::NewFromUnsigned(args.GetIsolate(), webSocket->getBufferedAmount())
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
209
242
|
template <bool isServer>
|
|
210
243
|
void getUserData(const FunctionCallbackInfo<Value> &args) {
|
|
211
244
|
args.GetReturnValue().Set(getDataV8(
|
package/src/HTTPSocket.cpp
CHANGED
|
@@ -247,7 +247,7 @@ void HttpSocket<isServer>::upgrade(const char *secKey, const char *extensions, s
|
|
|
247
247
|
memcpy(upgradeBuffer + upgradeResponseLength + 24 + subprotocolLength, "\r\n", 2);
|
|
248
248
|
upgradeResponseLength += 24 + subprotocolLength + 2;
|
|
249
249
|
}
|
|
250
|
-
static char stamp[] = "Sec-WebSocket-Version: 13\r\
|
|
250
|
+
static char stamp[] = "Sec-WebSocket-Version: 13\r\n\r\n";
|
|
251
251
|
memcpy(upgradeBuffer + upgradeResponseLength, stamp, sizeof(stamp) - 1);
|
|
252
252
|
upgradeResponseLength += sizeof(stamp) - 1;
|
|
253
253
|
|
package/src/LICENSE
CHANGED
package/src/Socket.h
CHANGED
|
@@ -22,14 +22,13 @@ struct TransferData {
|
|
|
22
22
|
void (*transferCb)(Poll *);
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
// perfectly 64 bytes (4 + 60)
|
|
25
|
+
// perfectly 64 bytes (4 + 60) (only for EPoll and if packed)
|
|
26
26
|
struct WIN32_EXPORT Socket : Poll {
|
|
27
|
-
protected:
|
|
28
27
|
struct {
|
|
29
28
|
int poll : 4;
|
|
30
29
|
int shuttingDown : 4;
|
|
31
30
|
} state = {0, false};
|
|
32
|
-
|
|
31
|
+
protected:
|
|
33
32
|
SSL *ssl;
|
|
34
33
|
void *user = nullptr;
|
|
35
34
|
NodeData *nodeData;
|
|
@@ -45,15 +44,19 @@ protected:
|
|
|
45
44
|
};
|
|
46
45
|
|
|
47
46
|
Message *head = nullptr, *tail = nullptr;
|
|
47
|
+
size_t totalLength = 0;
|
|
48
|
+
|
|
48
49
|
void pop()
|
|
49
50
|
{
|
|
50
51
|
Message *nextMessage;
|
|
51
52
|
if ((nextMessage = head->nextMessage)) {
|
|
53
|
+
totalLength -= head->length;
|
|
52
54
|
delete [] (char *) head;
|
|
53
55
|
head = nextMessage;
|
|
54
56
|
} else {
|
|
55
57
|
delete [] (char *) head;
|
|
56
58
|
head = tail = nullptr;
|
|
59
|
+
totalLength = 0;
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
|
|
@@ -70,6 +73,7 @@ protected:
|
|
|
70
73
|
head = message;
|
|
71
74
|
tail = message;
|
|
72
75
|
}
|
|
76
|
+
totalLength += message->length;
|
|
73
77
|
}
|
|
74
78
|
} messageQueue;
|
|
75
79
|
|
|
@@ -248,6 +252,7 @@ protected:
|
|
|
248
252
|
break;
|
|
249
253
|
} else {
|
|
250
254
|
messagePtr->length -= sent;
|
|
255
|
+
socket->messageQueue.totalLength -= sent;
|
|
251
256
|
messagePtr->data += sent;
|
|
252
257
|
break;
|
|
253
258
|
}
|
|
@@ -411,6 +416,10 @@ protected:
|
|
|
411
416
|
}
|
|
412
417
|
|
|
413
418
|
public:
|
|
419
|
+
auto getBufferedAmount() {
|
|
420
|
+
return messageQueue.totalLength;
|
|
421
|
+
}
|
|
422
|
+
|
|
414
423
|
Socket(NodeData *nodeData, Loop *loop, uv_os_sock_t fd, SSL *ssl) : Poll(loop, fd), ssl(ssl), nodeData(nodeData) {
|
|
415
424
|
if (ssl) {
|
|
416
425
|
// OpenSSL treats SOCKETs as int
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
namespace node {
|
|
11
11
|
|
|
12
|
+
typedef size_t AliasedBufferIndex;
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
* Do not use this class directly when creating instances of it - use the
|
|
14
16
|
* Aliased*Array defined at the end of this file instead.
|
|
@@ -32,9 +34,15 @@ template <class NativeT,
|
|
|
32
34
|
typename = std::enable_if_t<std::is_scalar<NativeT>::value>>
|
|
33
35
|
class AliasedBufferBase {
|
|
34
36
|
public:
|
|
35
|
-
AliasedBufferBase(v8::Isolate* isolate,
|
|
36
|
-
|
|
37
|
+
AliasedBufferBase(v8::Isolate* isolate,
|
|
38
|
+
const size_t count,
|
|
39
|
+
const AliasedBufferIndex* index = nullptr)
|
|
40
|
+
: isolate_(isolate), count_(count), byte_offset_(0), index_(index) {
|
|
37
41
|
CHECK_GT(count, 0);
|
|
42
|
+
if (index != nullptr) {
|
|
43
|
+
// Will be deserialized later.
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
38
46
|
const v8::HandleScope handle_scope(isolate_);
|
|
39
47
|
const size_t size_in_bytes =
|
|
40
48
|
MultiplyWithOverflowCheck(sizeof(NativeT), count);
|
|
@@ -62,10 +70,17 @@ class AliasedBufferBase {
|
|
|
62
70
|
v8::Isolate* isolate,
|
|
63
71
|
const size_t byte_offset,
|
|
64
72
|
const size_t count,
|
|
65
|
-
const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer
|
|
66
|
-
|
|
73
|
+
const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer,
|
|
74
|
+
const AliasedBufferIndex* index = nullptr)
|
|
75
|
+
: isolate_(isolate),
|
|
76
|
+
count_(count),
|
|
77
|
+
byte_offset_(byte_offset),
|
|
78
|
+
index_(index) {
|
|
79
|
+
if (index != nullptr) {
|
|
80
|
+
// Will be deserialized later.
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
67
83
|
const v8::HandleScope handle_scope(isolate_);
|
|
68
|
-
|
|
69
84
|
v8::Local<v8::ArrayBuffer> ab = backing_buffer.GetArrayBuffer();
|
|
70
85
|
|
|
71
86
|
// validate that the byte_offset is aligned with sizeof(NativeT)
|
|
@@ -86,10 +101,33 @@ class AliasedBufferBase {
|
|
|
86
101
|
count_(that.count_),
|
|
87
102
|
byte_offset_(that.byte_offset_),
|
|
88
103
|
buffer_(that.buffer_) {
|
|
104
|
+
DCHECK_NULL(index_);
|
|
89
105
|
js_array_ = v8::Global<V8T>(that.isolate_, that.GetJSArray());
|
|
90
106
|
}
|
|
91
107
|
|
|
108
|
+
AliasedBufferIndex Serialize(v8::Local<v8::Context> context,
|
|
109
|
+
v8::SnapshotCreator* creator) {
|
|
110
|
+
DCHECK_NULL(index_);
|
|
111
|
+
return creator->AddData(context, GetJSArray());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline void Deserialize(v8::Local<v8::Context> context) {
|
|
115
|
+
DCHECK_NOT_NULL(index_);
|
|
116
|
+
v8::Local<V8T> arr =
|
|
117
|
+
context->GetDataFromSnapshotOnce<V8T>(*index_).ToLocalChecked();
|
|
118
|
+
// These may not hold true for AliasedBuffers that have grown, so should
|
|
119
|
+
// be removed when we expand the snapshot support.
|
|
120
|
+
DCHECK_EQ(count_, arr->Length());
|
|
121
|
+
DCHECK_EQ(byte_offset_, arr->ByteOffset());
|
|
122
|
+
uint8_t* raw =
|
|
123
|
+
static_cast<uint8_t*>(arr->Buffer()->GetBackingStore()->Data());
|
|
124
|
+
buffer_ = reinterpret_cast<NativeT*>(raw + byte_offset_);
|
|
125
|
+
js_array_.Reset(isolate_, arr);
|
|
126
|
+
index_ = nullptr;
|
|
127
|
+
}
|
|
128
|
+
|
|
92
129
|
AliasedBufferBase& operator=(AliasedBufferBase&& that) noexcept {
|
|
130
|
+
DCHECK_NULL(index_);
|
|
93
131
|
this->~AliasedBufferBase();
|
|
94
132
|
isolate_ = that.isolate_;
|
|
95
133
|
count_ = that.count_;
|
|
@@ -155,9 +193,15 @@ class AliasedBufferBase {
|
|
|
155
193
|
* Get the underlying v8 TypedArray overlayed on top of the native buffer
|
|
156
194
|
*/
|
|
157
195
|
v8::Local<V8T> GetJSArray() const {
|
|
196
|
+
DCHECK_NULL(index_);
|
|
158
197
|
return js_array_.Get(isolate_);
|
|
159
198
|
}
|
|
160
199
|
|
|
200
|
+
void Release() {
|
|
201
|
+
DCHECK_NULL(index_);
|
|
202
|
+
js_array_.Reset();
|
|
203
|
+
}
|
|
204
|
+
|
|
161
205
|
/**
|
|
162
206
|
* Get the underlying v8::ArrayBuffer underlying the TypedArray and
|
|
163
207
|
* overlaying the native buffer
|
|
@@ -171,6 +215,7 @@ class AliasedBufferBase {
|
|
|
171
215
|
* through the GetValue/SetValue/operator[] methods
|
|
172
216
|
*/
|
|
173
217
|
inline const NativeT* GetNativeBuffer() const {
|
|
218
|
+
DCHECK_NULL(index_);
|
|
174
219
|
return buffer_;
|
|
175
220
|
}
|
|
176
221
|
|
|
@@ -186,6 +231,7 @@ class AliasedBufferBase {
|
|
|
186
231
|
*/
|
|
187
232
|
inline void SetValue(const size_t index, NativeT value) {
|
|
188
233
|
DCHECK_LT(index, count_);
|
|
234
|
+
DCHECK_NULL(index_);
|
|
189
235
|
buffer_[index] = value;
|
|
190
236
|
}
|
|
191
237
|
|
|
@@ -193,6 +239,7 @@ class AliasedBufferBase {
|
|
|
193
239
|
* Get value at position index
|
|
194
240
|
*/
|
|
195
241
|
inline const NativeT GetValue(const size_t index) const {
|
|
242
|
+
DCHECK_NULL(index_);
|
|
196
243
|
DCHECK_LT(index, count_);
|
|
197
244
|
return buffer_[index];
|
|
198
245
|
}
|
|
@@ -201,6 +248,7 @@ class AliasedBufferBase {
|
|
|
201
248
|
* Effectively, a synonym for GetValue/SetValue
|
|
202
249
|
*/
|
|
203
250
|
Reference operator[](size_t index) {
|
|
251
|
+
DCHECK_NULL(index_);
|
|
204
252
|
return Reference(this, index);
|
|
205
253
|
}
|
|
206
254
|
|
|
@@ -216,6 +264,7 @@ class AliasedBufferBase {
|
|
|
216
264
|
// Should only be used on an owning array, not one created as a sub array of
|
|
217
265
|
// an owning `AliasedBufferBase`.
|
|
218
266
|
void reserve(size_t new_capacity) {
|
|
267
|
+
DCHECK_NULL(index_);
|
|
219
268
|
DCHECK_GE(new_capacity, count_);
|
|
220
269
|
DCHECK_EQ(byte_offset_, 0);
|
|
221
270
|
const v8::HandleScope handle_scope(isolate_);
|
|
@@ -244,11 +293,14 @@ class AliasedBufferBase {
|
|
|
244
293
|
}
|
|
245
294
|
|
|
246
295
|
private:
|
|
247
|
-
v8::Isolate* isolate_;
|
|
248
|
-
size_t count_;
|
|
249
|
-
size_t byte_offset_;
|
|
250
|
-
NativeT* buffer_;
|
|
296
|
+
v8::Isolate* isolate_ = nullptr;
|
|
297
|
+
size_t count_ = 0;
|
|
298
|
+
size_t byte_offset_ = 0;
|
|
299
|
+
NativeT* buffer_ = nullptr;
|
|
251
300
|
v8::Global<V8T> js_array_;
|
|
301
|
+
|
|
302
|
+
// Deserialize data
|
|
303
|
+
const AliasedBufferIndex* index_ = nullptr;
|
|
252
304
|
};
|
|
253
305
|
|
|
254
306
|
typedef AliasedBufferBase<int32_t, v8::Int32Array> AliasedInt32Array;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#ifndef SRC_ALIASED_STRUCT_INL_H_
|
|
2
|
+
#define SRC_ALIASED_STRUCT_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "aliased_struct.h"
|
|
7
|
+
#include "v8.h"
|
|
8
|
+
#include <memory>
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
|
|
12
|
+
template <typename T>
|
|
13
|
+
template <typename... Args>
|
|
14
|
+
AliasedStruct<T>::AliasedStruct(v8::Isolate* isolate, Args&&... args)
|
|
15
|
+
: isolate_(isolate) {
|
|
16
|
+
const v8::HandleScope handle_scope(isolate);
|
|
17
|
+
|
|
18
|
+
store_ = v8::ArrayBuffer::NewBackingStore(isolate, sizeof(T));
|
|
19
|
+
ptr_ = new (store_->Data()) T(std::forward<Args>(args)...);
|
|
20
|
+
DCHECK_NOT_NULL(ptr_);
|
|
21
|
+
|
|
22
|
+
v8::Local<v8::ArrayBuffer> buffer = v8::ArrayBuffer::New(isolate, store_);
|
|
23
|
+
buffer_ = v8::Global<v8::ArrayBuffer>(isolate, buffer);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
template <typename T>
|
|
27
|
+
AliasedStruct<T>::AliasedStruct(const AliasedStruct& that)
|
|
28
|
+
: AliasedStruct(that.isolate_, *that) {}
|
|
29
|
+
|
|
30
|
+
template <typename T>
|
|
31
|
+
AliasedStruct<T>& AliasedStruct<T>::operator=(
|
|
32
|
+
AliasedStruct<T>&& that) noexcept {
|
|
33
|
+
this->~AliasedStruct();
|
|
34
|
+
isolate_ = that.isolate_;
|
|
35
|
+
store_ = that.store_;
|
|
36
|
+
ptr_ = that.ptr_;
|
|
37
|
+
|
|
38
|
+
buffer_ = std::move(that.buffer_);
|
|
39
|
+
|
|
40
|
+
that.ptr_ = nullptr;
|
|
41
|
+
that.store_.reset();
|
|
42
|
+
return *this;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
template <typename T>
|
|
46
|
+
AliasedStruct<T>::~AliasedStruct() {
|
|
47
|
+
if (ptr_ != nullptr) ptr_->~T();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace node
|
|
51
|
+
|
|
52
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
53
|
+
|
|
54
|
+
#endif // SRC_ALIASED_STRUCT_INL_H_
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#ifndef SRC_ALIASED_STRUCT_H_
|
|
2
|
+
#define SRC_ALIASED_STRUCT_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "node_internals.h"
|
|
7
|
+
#include "v8.h"
|
|
8
|
+
#include <memory>
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
|
|
12
|
+
// AliasedStruct is a utility that allows uses a V8 Backing Store
|
|
13
|
+
// to be exposed to the C++/C side as a struct and to the
|
|
14
|
+
// JavaScript side as an ArrayBuffer to efficiently share
|
|
15
|
+
// data without marshalling. It is similar in nature to
|
|
16
|
+
// AliasedBuffer.
|
|
17
|
+
//
|
|
18
|
+
// struct Foo { int x; }
|
|
19
|
+
//
|
|
20
|
+
// AliasedStruct<Foo> foo;
|
|
21
|
+
// foo->x = 1;
|
|
22
|
+
//
|
|
23
|
+
// Local<ArrayBuffer> ab = foo.GetArrayBuffer();
|
|
24
|
+
template <typename T>
|
|
25
|
+
class AliasedStruct final {
|
|
26
|
+
public:
|
|
27
|
+
template <typename... Args>
|
|
28
|
+
explicit AliasedStruct(v8::Isolate* isolate, Args&&... args);
|
|
29
|
+
|
|
30
|
+
inline AliasedStruct(const AliasedStruct& that);
|
|
31
|
+
|
|
32
|
+
inline ~AliasedStruct();
|
|
33
|
+
|
|
34
|
+
inline AliasedStruct& operator=(AliasedStruct&& that) noexcept;
|
|
35
|
+
|
|
36
|
+
v8::Local<v8::ArrayBuffer> GetArrayBuffer() const {
|
|
37
|
+
return buffer_.Get(isolate_);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const T* Data() const { return ptr_; }
|
|
41
|
+
|
|
42
|
+
T* Data() { return ptr_; }
|
|
43
|
+
|
|
44
|
+
const T& operator*() const { return *ptr_; }
|
|
45
|
+
|
|
46
|
+
T& operator*() { return *ptr_; }
|
|
47
|
+
|
|
48
|
+
const T* operator->() const { return ptr_; }
|
|
49
|
+
|
|
50
|
+
T* operator->() { return ptr_; }
|
|
51
|
+
|
|
52
|
+
private:
|
|
53
|
+
v8::Isolate* isolate_;
|
|
54
|
+
std::shared_ptr<v8::BackingStore> store_;
|
|
55
|
+
T* ptr_;
|
|
56
|
+
v8::Global<v8::ArrayBuffer> buffer_;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
} // namespace node
|
|
60
|
+
|
|
61
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
62
|
+
|
|
63
|
+
#endif // SRC_ALIASED_STRUCT_H_
|
|
File without changes
|