@kungfu-tech/libnode-win32-x64 0.0.0-bootstrap.0 → 22.22.3-kf.1
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/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/node/include/acorn_version.h +6 -0
- package/dist/node/include/aliased_buffer-inl.h +244 -0
- package/dist/node/include/aliased_buffer.h +206 -0
- package/dist/node/include/aliased_struct-inl.h +54 -0
- package/dist/node/include/aliased_struct.h +63 -0
- package/dist/node/include/amaro_version.h +6 -0
- package/dist/node/include/async_context_frame.h +33 -0
- package/dist/node/include/async_wrap-inl.h +96 -0
- package/dist/node/include/async_wrap.h +243 -0
- package/dist/node/include/base_object-inl.h +335 -0
- package/dist/node/include/base_object.h +342 -0
- package/dist/node/include/base_object_types.h +74 -0
- package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
- package/dist/node/include/blob_serializer_deserializer.h +132 -0
- package/dist/node/include/callback_queue-inl.h +97 -0
- package/dist/node/include/callback_queue.h +79 -0
- package/dist/node/include/cares_wrap.h +447 -0
- package/dist/node/include/cjs_module_lexer_version.h +6 -0
- package/dist/node/include/cleanup_queue-inl.h +36 -0
- package/dist/node/include/cleanup_queue.h +79 -0
- package/dist/node/include/compile_cache.h +104 -0
- package/dist/node/include/connect_wrap.h +26 -0
- package/dist/node/include/connection_wrap.h +30 -0
- package/dist/node/include/cppgc/allocation.h +310 -0
- package/dist/node/include/cppgc/common.h +28 -0
- package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
- package/dist/node/include/cppgc/custom-space.h +97 -0
- package/dist/node/include/cppgc/default-platform.h +67 -0
- package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
- package/dist/node/include/cppgc/explicit-management.h +100 -0
- package/dist/node/include/cppgc/garbage-collected.h +106 -0
- package/dist/node/include/cppgc/heap-consistency.h +309 -0
- package/dist/node/include/cppgc/heap-handle.h +48 -0
- package/dist/node/include/cppgc/heap-state.h +82 -0
- package/dist/node/include/cppgc/heap-statistics.h +120 -0
- package/dist/node/include/cppgc/heap.h +202 -0
- package/dist/node/include/cppgc/internal/api-constants.h +87 -0
- package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
- package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
- package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
- package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
- package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
- package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
- package/dist/node/include/cppgc/internal/gc-info.h +148 -0
- package/dist/node/include/cppgc/internal/logging.h +50 -0
- package/dist/node/include/cppgc/internal/member-storage.h +256 -0
- package/dist/node/include/cppgc/internal/name-trait.h +137 -0
- package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
- package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
- package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
- package/dist/node/include/cppgc/liveness-broker.h +78 -0
- package/dist/node/include/cppgc/macros.h +35 -0
- package/dist/node/include/cppgc/member.h +629 -0
- package/dist/node/include/cppgc/name-provider.h +65 -0
- package/dist/node/include/cppgc/object-size-trait.h +58 -0
- package/dist/node/include/cppgc/persistent.h +377 -0
- package/dist/node/include/cppgc/platform.h +163 -0
- package/dist/node/include/cppgc/prefinalizer.h +75 -0
- package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
- package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
- package/dist/node/include/cppgc/source-location.h +16 -0
- package/dist/node/include/cppgc/testing.h +106 -0
- package/dist/node/include/cppgc/trace-trait.h +128 -0
- package/dist/node/include/cppgc/type-traits.h +271 -0
- package/dist/node/include/cppgc/visitor.h +504 -0
- package/dist/node/include/crypto/crypto_aes.h +88 -0
- package/dist/node/include/crypto/crypto_bio.h +193 -0
- package/dist/node/include/crypto/crypto_cipher.h +293 -0
- package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
- package/dist/node/include/crypto/crypto_clienthello.h +131 -0
- package/dist/node/include/crypto/crypto_common.h +64 -0
- package/dist/node/include/crypto/crypto_context.h +171 -0
- package/dist/node/include/crypto/crypto_dh.h +126 -0
- package/dist/node/include/crypto/crypto_dsa.h +52 -0
- package/dist/node/include/crypto/crypto_ec.h +164 -0
- package/dist/node/include/crypto/crypto_hash.h +91 -0
- package/dist/node/include/crypto/crypto_hkdf.h +61 -0
- package/dist/node/include/crypto/crypto_hmac.h +92 -0
- package/dist/node/include/crypto/crypto_keygen.h +299 -0
- package/dist/node/include/crypto/crypto_keys.h +392 -0
- package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
- package/dist/node/include/crypto/crypto_random.h +124 -0
- package/dist/node/include/crypto/crypto_rsa.h +136 -0
- package/dist/node/include/crypto/crypto_scrypt.h +85 -0
- package/dist/node/include/crypto/crypto_sig.h +165 -0
- package/dist/node/include/crypto/crypto_spkac.h +21 -0
- package/dist/node/include/crypto/crypto_timing.h +20 -0
- package/dist/node/include/crypto/crypto_tls.h +305 -0
- package/dist/node/include/crypto/crypto_util.h +725 -0
- package/dist/node/include/crypto/crypto_x509.h +140 -0
- package/dist/node/include/dataqueue/queue.h +306 -0
- package/dist/node/include/debug_utils-inl.h +278 -0
- package/dist/node/include/debug_utils.h +196 -0
- package/dist/node/include/diagnosticfilename-inl.h +33 -0
- package/dist/node/include/embedded_data.h +17 -0
- package/dist/node/include/encoding_binding.h +61 -0
- package/dist/node/include/env-inl.h +984 -0
- package/dist/node/include/env.h +1287 -0
- package/dist/node/include/env_properties.h +540 -0
- package/dist/node/include/handle_wrap.h +123 -0
- package/dist/node/include/histogram-inl.h +107 -0
- package/dist/node/include/histogram.h +279 -0
- package/dist/node/include/inspector/io_agent.h +30 -0
- package/dist/node/include/inspector/main_thread_interface.h +116 -0
- package/dist/node/include/inspector/network_agent.h +94 -0
- package/dist/node/include/inspector/network_inspector.h +45 -0
- package/dist/node/include/inspector/network_requests_buffer.h +195 -0
- package/dist/node/include/inspector/network_resource_manager.h +29 -0
- package/dist/node/include/inspector/node_json.h +24 -0
- package/dist/node/include/inspector/node_string.h +101 -0
- package/dist/node/include/inspector/protocol_helper.h +27 -0
- package/dist/node/include/inspector/runtime_agent.h +41 -0
- package/dist/node/include/inspector/target_agent.h +75 -0
- package/dist/node/include/inspector/tracing_agent.h +43 -0
- package/dist/node/include/inspector/worker_agent.h +40 -0
- package/dist/node/include/inspector/worker_inspector.h +124 -0
- package/dist/node/include/inspector_agent.h +165 -0
- package/dist/node/include/inspector_io.h +78 -0
- package/dist/node/include/inspector_profiler.h +149 -0
- package/dist/node/include/inspector_socket.h +60 -0
- package/dist/node/include/inspector_socket_server.h +110 -0
- package/dist/node/include/js_native_api.h +607 -0
- package/dist/node/include/js_native_api_types.h +226 -0
- package/dist/node/include/js_native_api_v8.h +485 -0
- package/dist/node/include/js_native_api_v8_internals.h +45 -0
- package/dist/node/include/js_stream.h +52 -0
- package/dist/node/include/json_utils.h +172 -0
- package/dist/node/include/large_pages/node_large_page.h +34 -0
- package/dist/node/include/libplatform/libplatform-export.h +29 -0
- package/dist/node/include/libplatform/libplatform.h +112 -0
- package/dist/node/include/libplatform/v8-tracing.h +333 -0
- package/dist/node/include/memory_tracker-inl.h +359 -0
- package/dist/node/include/memory_tracker.h +289 -0
- package/dist/node/include/module_wrap.h +216 -0
- package/dist/node/include/node.h +1593 -0
- package/dist/node/include/node_api.h +265 -0
- package/dist/node/include/node_api_internals.h +48 -0
- package/dist/node/include/node_api_types.h +56 -0
- package/dist/node/include/node_binding.h +161 -0
- package/dist/node/include/node_blob.h +159 -0
- package/dist/node/include/node_bob-inl.h +36 -0
- package/dist/node/include/node_bob.h +107 -0
- package/dist/node/include/node_buffer.h +92 -0
- package/dist/node/include/node_builtins.h +220 -0
- package/dist/node/include/node_config_file.h +46 -0
- package/dist/node/include/node_constants.h +82 -0
- package/dist/node/include/node_context_data.h +168 -0
- package/dist/node/include/node_contextify.h +204 -0
- package/dist/node/include/node_crypto.h +56 -0
- package/dist/node/include/node_debug.h +30 -0
- package/dist/node/include/node_dir.h +52 -0
- package/dist/node/include/node_dotenv.h +45 -0
- package/dist/node/include/node_errors.h +380 -0
- package/dist/node/include/node_exit_code.h +54 -0
- package/dist/node/include/node_external_reference.h +165 -0
- package/dist/node/include/node_file-inl.h +406 -0
- package/dist/node/include/node_file.h +537 -0
- package/dist/node/include/node_http2.h +1177 -0
- package/dist/node/include/node_http2_state.h +159 -0
- package/dist/node/include/node_http_common-inl.h +202 -0
- package/dist/node/include/node_http_common.h +535 -0
- package/dist/node/include/node_i18n.h +132 -0
- package/dist/node/include/node_internals.h +483 -0
- package/dist/node/include/node_main_instance.h +67 -0
- package/dist/node/include/node_mem-inl.h +113 -0
- package/dist/node/include/node_mem.h +45 -0
- package/dist/node/include/node_messaging.h +389 -0
- package/dist/node/include/node_metadata.h +164 -0
- package/dist/node/include/node_modules.h +91 -0
- package/dist/node/include/node_mutex.h +323 -0
- package/dist/node/include/node_object_wrap.h +132 -0
- package/dist/node/include/node_options-inl.h +490 -0
- package/dist/node/include/node_options.h +615 -0
- package/dist/node/include/node_perf.h +166 -0
- package/dist/node/include/node_perf_common.h +102 -0
- package/dist/node/include/node_platform.h +238 -0
- package/dist/node/include/node_process-inl.h +26 -0
- package/dist/node/include/node_process.h +112 -0
- package/dist/node/include/node_realm-inl.h +151 -0
- package/dist/node/include/node_realm.h +183 -0
- package/dist/node/include/node_report.h +43 -0
- package/dist/node/include/node_revert.h +82 -0
- package/dist/node/include/node_root_certs.h +3520 -0
- package/dist/node/include/node_sea.h +74 -0
- package/dist/node/include/node_shadow_realm.h +46 -0
- package/dist/node/include/node_snapshot_builder.h +57 -0
- package/dist/node/include/node_snapshotable.h +174 -0
- package/dist/node/include/node_sockaddr-inl.h +257 -0
- package/dist/node/include/node_sockaddr.h +394 -0
- package/dist/node/include/node_sqlite.h +270 -0
- package/dist/node/include/node_stat_watcher.h +73 -0
- package/dist/node/include/node_task_runner.h +92 -0
- package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
- package/dist/node/include/node_threadsafe_cow.h +105 -0
- package/dist/node/include/node_union_bytes.h +81 -0
- package/dist/node/include/node_url.h +96 -0
- package/dist/node/include/node_v8.h +77 -0
- package/dist/node/include/node_v8_platform-inl.h +185 -0
- package/dist/node/include/node_version.h +110 -0
- package/dist/node/include/node_wasi.h +184 -0
- package/dist/node/include/node_wasm_web_api.h +55 -0
- package/dist/node/include/node_watchdog.h +154 -0
- package/dist/node/include/node_webstorage.h +60 -0
- package/dist/node/include/node_worker.h +158 -0
- package/dist/node/include/path.h +33 -0
- package/dist/node/include/permission/addon_permission.h +31 -0
- package/dist/node/include/permission/child_process_permission.h +31 -0
- package/dist/node/include/permission/fs_permission.h +167 -0
- package/dist/node/include/permission/inspector_permission.h +31 -0
- package/dist/node/include/permission/permission.h +138 -0
- package/dist/node/include/permission/permission_base.h +65 -0
- package/dist/node/include/permission/wasi_permission.h +31 -0
- package/dist/node/include/permission/worker_permission.h +31 -0
- package/dist/node/include/pipe_wrap.h +80 -0
- package/dist/node/include/quic/application.h +159 -0
- package/dist/node/include/quic/bindingdata.h +272 -0
- package/dist/node/include/quic/cid.h +127 -0
- package/dist/node/include/quic/data.h +148 -0
- package/dist/node/include/quic/defs.h +245 -0
- package/dist/node/include/quic/endpoint.h +458 -0
- package/dist/node/include/quic/http3.h +15 -0
- package/dist/node/include/quic/logstream.h +81 -0
- package/dist/node/include/quic/packet.h +152 -0
- package/dist/node/include/quic/preferredaddress.h +72 -0
- package/dist/node/include/quic/session.h +443 -0
- package/dist/node/include/quic/sessionticket.h +108 -0
- package/dist/node/include/quic/streams.h +232 -0
- package/dist/node/include/quic/tlscontext.h +227 -0
- package/dist/node/include/quic/tokens.h +256 -0
- package/dist/node/include/quic/transportparams.h +165 -0
- package/dist/node/include/req_wrap-inl.h +171 -0
- package/dist/node/include/req_wrap.h +77 -0
- package/dist/node/include/spawn_sync.h +243 -0
- package/dist/node/include/stream_base-inl.h +173 -0
- package/dist/node/include/stream_base.h +478 -0
- package/dist/node/include/stream_pipe.h +76 -0
- package/dist/node/include/stream_wrap.h +132 -0
- package/dist/node/include/string_bytes.h +113 -0
- package/dist/node/include/string_decoder-inl.h +31 -0
- package/dist/node/include/string_decoder.h +49 -0
- package/dist/node/include/tcp_wrap.h +105 -0
- package/dist/node/include/threadpoolwork-inl.h +70 -0
- package/dist/node/include/timer_wrap-inl.h +32 -0
- package/dist/node/include/timer_wrap.h +85 -0
- package/dist/node/include/timers.h +70 -0
- package/dist/node/include/tracing/agent.h +195 -0
- package/dist/node/include/tracing/node_trace_buffer.h +83 -0
- package/dist/node/include/tracing/node_trace_writer.h +75 -0
- package/dist/node/include/tracing/trace_event.h +722 -0
- package/dist/node/include/tracing/trace_event_common.h +1109 -0
- package/dist/node/include/tracing/traced_value.h +129 -0
- package/dist/node/include/tty_wrap.h +65 -0
- package/dist/node/include/udp_wrap.h +230 -0
- package/dist/node/include/undici_version.h +6 -0
- package/dist/node/include/util-inl.h +700 -0
- package/dist/node/include/util.h +1021 -0
- package/dist/node/include/uv/aix.h +32 -0
- package/dist/node/include/uv/bsd.h +34 -0
- package/dist/node/include/uv/darwin.h +61 -0
- package/dist/node/include/uv/errno.h +483 -0
- package/dist/node/include/uv/linux.h +34 -0
- package/dist/node/include/uv/os390.h +33 -0
- package/dist/node/include/uv/posix.h +31 -0
- package/dist/node/include/uv/sunos.h +44 -0
- package/dist/node/include/uv/threadpool.h +37 -0
- package/dist/node/include/uv/tree.h +521 -0
- package/dist/node/include/uv/unix.h +512 -0
- package/dist/node/include/uv/version.h +43 -0
- package/dist/node/include/uv/win.h +698 -0
- package/dist/node/include/uv.h +1990 -0
- package/dist/node/include/v8-array-buffer.h +525 -0
- package/dist/node/include/v8-callbacks.h +462 -0
- package/dist/node/include/v8-container.h +183 -0
- package/dist/node/include/v8-context.h +485 -0
- package/dist/node/include/v8-cppgc.h +245 -0
- package/dist/node/include/v8-data.h +80 -0
- package/dist/node/include/v8-date.h +48 -0
- package/dist/node/include/v8-debug.h +168 -0
- package/dist/node/include/v8-embedder-heap.h +82 -0
- package/dist/node/include/v8-embedder-state-scope.h +52 -0
- package/dist/node/include/v8-exception.h +223 -0
- package/dist/node/include/v8-extension.h +62 -0
- package/dist/node/include/v8-external.h +37 -0
- package/dist/node/include/v8-fast-api-calls.h +984 -0
- package/dist/node/include/v8-forward.h +82 -0
- package/dist/node/include/v8-function-callback.h +607 -0
- package/dist/node/include/v8-function.h +140 -0
- package/dist/node/include/v8-handle-base.h +137 -0
- package/dist/node/include/v8-initialization.h +289 -0
- package/dist/node/include/v8-inspector-protocol.h +13 -0
- package/dist/node/include/v8-inspector.h +419 -0
- package/dist/node/include/v8-internal.h +1397 -0
- package/dist/node/include/v8-isolate.h +1767 -0
- package/dist/node/include/v8-json.h +47 -0
- package/dist/node/include/v8-local-handle.h +758 -0
- package/dist/node/include/v8-locker.h +138 -0
- package/dist/node/include/v8-maybe.h +160 -0
- package/dist/node/include/v8-memory-span.h +198 -0
- package/dist/node/include/v8-message.h +233 -0
- package/dist/node/include/v8-metrics.h +264 -0
- package/dist/node/include/v8-microtask-queue.h +157 -0
- package/dist/node/include/v8-microtask.h +28 -0
- package/dist/node/include/v8-object.h +824 -0
- package/dist/node/include/v8-persistent-handle.h +582 -0
- package/dist/node/include/v8-platform.h +1358 -0
- package/dist/node/include/v8-primitive-object.h +118 -0
- package/dist/node/include/v8-primitive.h +877 -0
- package/dist/node/include/v8-profiler.h +1302 -0
- package/dist/node/include/v8-promise.h +174 -0
- package/dist/node/include/v8-proxy.h +50 -0
- package/dist/node/include/v8-regexp.h +106 -0
- package/dist/node/include/v8-script.h +904 -0
- package/dist/node/include/v8-snapshot.h +266 -0
- package/dist/node/include/v8-source-location.h +92 -0
- package/dist/node/include/v8-statistics.h +238 -0
- package/dist/node/include/v8-template.h +1297 -0
- package/dist/node/include/v8-traced-handle.h +432 -0
- package/dist/node/include/v8-typed-array.h +390 -0
- package/dist/node/include/v8-unwinder-state.h +31 -0
- package/dist/node/include/v8-unwinder.h +132 -0
- package/dist/node/include/v8-util.h +665 -0
- package/dist/node/include/v8-value-serializer-version.h +24 -0
- package/dist/node/include/v8-value-serializer.h +316 -0
- package/dist/node/include/v8-value.h +655 -0
- package/dist/node/include/v8-version-string.h +38 -0
- package/dist/node/include/v8-version.h +20 -0
- package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
- package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
- package/dist/node/include/v8-wasm.h +201 -0
- package/dist/node/include/v8-weak-callback-info.h +80 -0
- package/dist/node/include/v8.h +88 -0
- package/dist/node/include/v8config.h +981 -0
- package/dist/node/include/zlib_version.h +6 -0
- package/dist/node/libnode.dll +0 -0
- package/dist/node/libnode.lib +0 -0
- package/dist/node/libnodebuildinfo.json +10 -0
- package/dist/node/link_node.lib +0 -0
- package/dist/node/link_node.node +0 -0
- package/index.js +5 -0
- package/libnode.release.json +8 -0
- package/package.json +29 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#ifndef SRC_NODE_REALM_INL_H_
|
|
2
|
+
#define SRC_NODE_REALM_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "node_context_data.h"
|
|
7
|
+
#include "node_realm.h"
|
|
8
|
+
#include "util-inl.h"
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
|
|
12
|
+
inline Realm* Realm::GetCurrent(v8::Isolate* isolate) {
|
|
13
|
+
if (!isolate->InContext()) [[unlikely]] {
|
|
14
|
+
return nullptr;
|
|
15
|
+
}
|
|
16
|
+
v8::HandleScope handle_scope(isolate);
|
|
17
|
+
return GetCurrent(isolate->GetCurrentContext());
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
inline Realm* Realm::GetCurrent(v8::Local<v8::Context> context) {
|
|
21
|
+
if (!ContextEmbedderTag::IsNodeContext(context)) [[unlikely]] {
|
|
22
|
+
return nullptr;
|
|
23
|
+
}
|
|
24
|
+
return static_cast<Realm*>(
|
|
25
|
+
context->GetAlignedPointerFromEmbedderData(ContextEmbedderIndex::kRealm));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
inline Realm* Realm::GetCurrent(
|
|
29
|
+
const v8::FunctionCallbackInfo<v8::Value>& info) {
|
|
30
|
+
return GetCurrent(info.GetIsolate()->GetCurrentContext());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
template <typename T>
|
|
34
|
+
inline Realm* Realm::GetCurrent(const v8::PropertyCallbackInfo<T>& info) {
|
|
35
|
+
return GetCurrent(info.GetIsolate()->GetCurrentContext());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
inline IsolateData* Realm::isolate_data() const {
|
|
39
|
+
return env_->isolate_data();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
inline Environment* Realm::env() const {
|
|
43
|
+
return env_;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
inline v8::Isolate* Realm::isolate() const {
|
|
47
|
+
return isolate_;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
inline v8::Local<v8::Context> Realm::context() const {
|
|
51
|
+
return PersistentToLocal::Strong(context_);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
inline Realm::Kind Realm::kind() const {
|
|
55
|
+
return kind_;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
inline bool Realm::has_run_bootstrapping_code() const {
|
|
59
|
+
return has_run_bootstrapping_code_;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// static
|
|
63
|
+
template <typename T, typename U>
|
|
64
|
+
inline T* Realm::GetBindingData(const v8::PropertyCallbackInfo<U>& info) {
|
|
65
|
+
return GetBindingData<T>(info.GetIsolate()->GetCurrentContext());
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// static
|
|
69
|
+
template <typename T>
|
|
70
|
+
inline T* Realm::GetBindingData(
|
|
71
|
+
const v8::FunctionCallbackInfo<v8::Value>& info) {
|
|
72
|
+
return GetBindingData<T>(info.GetIsolate()->GetCurrentContext());
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// static
|
|
76
|
+
template <typename T>
|
|
77
|
+
inline T* Realm::GetBindingData(v8::Local<v8::Context> context) {
|
|
78
|
+
Realm* realm = GetCurrent(context);
|
|
79
|
+
return realm->GetBindingData<T>();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template <typename T>
|
|
83
|
+
inline T* Realm::GetBindingData() {
|
|
84
|
+
constexpr size_t binding_index = static_cast<size_t>(T::binding_type_int);
|
|
85
|
+
static_assert(binding_index < std::tuple_size_v<BindingDataStore>);
|
|
86
|
+
auto ptr = binding_data_store_[binding_index];
|
|
87
|
+
if (!ptr) [[unlikely]] {
|
|
88
|
+
return nullptr;
|
|
89
|
+
}
|
|
90
|
+
T* result = static_cast<T*>(ptr.get());
|
|
91
|
+
DCHECK_NOT_NULL(result);
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template <typename T, typename... Args>
|
|
96
|
+
inline T* Realm::AddBindingData(v8::Local<v8::Object> target, Args&&... args) {
|
|
97
|
+
// This won't compile if T is not a BaseObject subclass.
|
|
98
|
+
static_assert(std::is_base_of_v<BaseObject, T>);
|
|
99
|
+
// The binding data must be weak so that it won't keep the realm reachable
|
|
100
|
+
// from strong GC roots indefinitely. The wrapper object of binding data
|
|
101
|
+
// should be referenced from JavaScript, thus the binding data should be
|
|
102
|
+
// reachable throughout the lifetime of the realm.
|
|
103
|
+
BaseObjectWeakPtr<T> item =
|
|
104
|
+
MakeWeakBaseObject<T>(this, target, std::forward<Args>(args)...);
|
|
105
|
+
constexpr size_t binding_index = static_cast<size_t>(T::binding_type_int);
|
|
106
|
+
static_assert(binding_index < std::tuple_size_v<BindingDataStore>);
|
|
107
|
+
// Each slot is expected to be assigned only once.
|
|
108
|
+
CHECK(!binding_data_store_[binding_index]);
|
|
109
|
+
binding_data_store_[binding_index] = item;
|
|
110
|
+
return item.get();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
inline BindingDataStore* Realm::binding_data_store() {
|
|
114
|
+
return &binding_data_store_;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
template <typename T>
|
|
118
|
+
void Realm::ForEachBaseObject(T&& iterator) const {
|
|
119
|
+
for (auto bo : base_object_list_) {
|
|
120
|
+
iterator(bo);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
int64_t Realm::base_object_created_after_bootstrap() const {
|
|
125
|
+
return base_object_count_ - base_object_created_by_bootstrap_;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
int64_t Realm::base_object_count() const {
|
|
129
|
+
return base_object_count_;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
void Realm::TrackBaseObject(BaseObject* bo) {
|
|
133
|
+
DCHECK_EQ(bo->realm(), this);
|
|
134
|
+
base_object_list_.PushBack(bo);
|
|
135
|
+
++base_object_count_;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void Realm::UntrackBaseObject(BaseObject* bo) {
|
|
139
|
+
DCHECK_EQ(bo->realm(), this);
|
|
140
|
+
--base_object_count_;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
bool Realm::PendingCleanup() const {
|
|
144
|
+
return !base_object_list_.IsEmpty();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
} // namespace node
|
|
148
|
+
|
|
149
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
150
|
+
|
|
151
|
+
#endif // SRC_NODE_REALM_INL_H_
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#ifndef SRC_NODE_REALM_H_
|
|
2
|
+
#define SRC_NODE_REALM_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include <v8.h>
|
|
7
|
+
#include <unordered_map>
|
|
8
|
+
#include "cleanup_queue.h"
|
|
9
|
+
#include "env_properties.h"
|
|
10
|
+
#include "memory_tracker.h"
|
|
11
|
+
#include "node_snapshotable.h"
|
|
12
|
+
|
|
13
|
+
namespace node {
|
|
14
|
+
|
|
15
|
+
struct RealmSerializeInfo {
|
|
16
|
+
std::vector<std::string> builtins;
|
|
17
|
+
std::vector<PropInfo> persistent_values;
|
|
18
|
+
std::vector<PropInfo> native_objects;
|
|
19
|
+
|
|
20
|
+
SnapshotIndex context;
|
|
21
|
+
friend std::ostream& operator<<(std::ostream& o, const RealmSerializeInfo& i);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
using BindingDataStore =
|
|
25
|
+
std::array<BaseObjectWeakPtr<BaseObject>,
|
|
26
|
+
static_cast<size_t>(BindingDataType::kBindingDataTypeCount)>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* node::Realm is a container for a set of JavaScript objects and functions
|
|
30
|
+
* that associated with a particular global environment.
|
|
31
|
+
*
|
|
32
|
+
* An ECMAScript realm (https://tc39.es/ecma262/#sec-code-realms) representing
|
|
33
|
+
* a global environment in which script is run. Each ECMAScript realm comes
|
|
34
|
+
* with a global object and a set of intrinsic objects. An ECMAScript realm has
|
|
35
|
+
* a [[HostDefined]] field, which contains the node::Realm object.
|
|
36
|
+
*
|
|
37
|
+
* Realm can be a principal realm or a synthetic realm. A principal realm is
|
|
38
|
+
* created with an Environment as its principal global environment to evaluate
|
|
39
|
+
* scripts. A synthetic realm is created with JS APIs like ShadowRealm.
|
|
40
|
+
*
|
|
41
|
+
* Native bindings and builtin modules can be evaluated in either a principal
|
|
42
|
+
* realm or a synthetic realm.
|
|
43
|
+
*/
|
|
44
|
+
class Realm : public MemoryRetainer {
|
|
45
|
+
public:
|
|
46
|
+
enum Kind {
|
|
47
|
+
kPrincipal,
|
|
48
|
+
kShadowRealm,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
static inline Realm* GetCurrent(v8::Isolate* isolate);
|
|
52
|
+
static inline Realm* GetCurrent(v8::Local<v8::Context> context);
|
|
53
|
+
static inline Realm* GetCurrent(
|
|
54
|
+
const v8::FunctionCallbackInfo<v8::Value>& info);
|
|
55
|
+
template <typename T>
|
|
56
|
+
static inline Realm* GetCurrent(const v8::PropertyCallbackInfo<T>& info);
|
|
57
|
+
|
|
58
|
+
Realm(Environment* env, v8::Local<v8::Context> context, Kind kind);
|
|
59
|
+
|
|
60
|
+
Realm(const Realm&) = delete;
|
|
61
|
+
Realm& operator=(const Realm&) = delete;
|
|
62
|
+
Realm(Realm&&) = delete;
|
|
63
|
+
Realm& operator=(Realm&&) = delete;
|
|
64
|
+
|
|
65
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
66
|
+
|
|
67
|
+
void CreateProperties();
|
|
68
|
+
RealmSerializeInfo Serialize(v8::SnapshotCreator* creator);
|
|
69
|
+
void DeserializeProperties(const RealmSerializeInfo* info);
|
|
70
|
+
|
|
71
|
+
v8::MaybeLocal<v8::Value> ExecuteBootstrapper(const char* id);
|
|
72
|
+
v8::MaybeLocal<v8::Value> RunBootstrapping();
|
|
73
|
+
|
|
74
|
+
inline void TrackBaseObject(BaseObject* bo);
|
|
75
|
+
inline void UntrackBaseObject(BaseObject* bo);
|
|
76
|
+
inline bool PendingCleanup() const;
|
|
77
|
+
void RunCleanup();
|
|
78
|
+
|
|
79
|
+
template <typename T>
|
|
80
|
+
void ForEachBaseObject(T&& iterator) const;
|
|
81
|
+
|
|
82
|
+
void PrintInfoForSnapshot();
|
|
83
|
+
void VerifyNoStrongBaseObjects();
|
|
84
|
+
|
|
85
|
+
inline IsolateData* isolate_data() const;
|
|
86
|
+
inline Environment* env() const;
|
|
87
|
+
inline v8::Isolate* isolate() const;
|
|
88
|
+
inline Kind kind() const;
|
|
89
|
+
inline virtual v8::Local<v8::Context> context() const;
|
|
90
|
+
inline bool has_run_bootstrapping_code() const;
|
|
91
|
+
|
|
92
|
+
// Methods created using SetMethod(), SetPrototypeMethod(), etc. inside
|
|
93
|
+
// this scope can access the created T* object using
|
|
94
|
+
// GetBindingData<T>(args) later.
|
|
95
|
+
template <typename T, typename... Args>
|
|
96
|
+
T* AddBindingData(v8::Local<v8::Object> target, Args&&... args);
|
|
97
|
+
template <typename T, typename U>
|
|
98
|
+
static inline T* GetBindingData(const v8::PropertyCallbackInfo<U>& info);
|
|
99
|
+
template <typename T>
|
|
100
|
+
static inline T* GetBindingData(
|
|
101
|
+
const v8::FunctionCallbackInfo<v8::Value>& info);
|
|
102
|
+
template <typename T>
|
|
103
|
+
static inline T* GetBindingData(v8::Local<v8::Context> context);
|
|
104
|
+
template <typename T>
|
|
105
|
+
inline T* GetBindingData();
|
|
106
|
+
inline BindingDataStore* binding_data_store();
|
|
107
|
+
|
|
108
|
+
// The BaseObject count is a debugging helper that makes sure that there are
|
|
109
|
+
// no memory leaks caused by BaseObjects staying alive longer than expected
|
|
110
|
+
// (in particular, no circular BaseObjectPtr references).
|
|
111
|
+
inline int64_t base_object_count() const;
|
|
112
|
+
|
|
113
|
+
// Base object count created after the bootstrap of the realm.
|
|
114
|
+
inline int64_t base_object_created_after_bootstrap() const;
|
|
115
|
+
|
|
116
|
+
#define V(PropertyName, TypeName) \
|
|
117
|
+
virtual v8::Local<TypeName> PropertyName() const = 0; \
|
|
118
|
+
virtual void set_##PropertyName(v8::Local<TypeName> value) = 0;
|
|
119
|
+
PER_REALM_STRONG_PERSISTENT_VALUES(V)
|
|
120
|
+
#undef V
|
|
121
|
+
|
|
122
|
+
std::set<struct node_module*> internal_bindings;
|
|
123
|
+
std::set<std::string> builtins_with_cache;
|
|
124
|
+
std::set<std::string> builtins_without_cache;
|
|
125
|
+
// This is only filled during deserialization. We use a vector since
|
|
126
|
+
// it's only used for tests.
|
|
127
|
+
std::vector<std::string> builtins_in_snapshot;
|
|
128
|
+
|
|
129
|
+
protected:
|
|
130
|
+
~Realm();
|
|
131
|
+
|
|
132
|
+
virtual v8::MaybeLocal<v8::Value> BootstrapRealm() = 0;
|
|
133
|
+
|
|
134
|
+
Environment* env_;
|
|
135
|
+
// Shorthand for isolate pointer.
|
|
136
|
+
v8::Isolate* isolate_;
|
|
137
|
+
v8::Global<v8::Context> context_;
|
|
138
|
+
|
|
139
|
+
#define V(PropertyName, TypeName) v8::Global<TypeName> PropertyName##_;
|
|
140
|
+
PER_REALM_STRONG_PERSISTENT_VALUES(V)
|
|
141
|
+
#undef V
|
|
142
|
+
|
|
143
|
+
private:
|
|
144
|
+
void InitializeContext(v8::Local<v8::Context> context,
|
|
145
|
+
const RealmSerializeInfo* realm_info);
|
|
146
|
+
void DoneBootstrapping();
|
|
147
|
+
|
|
148
|
+
Kind kind_;
|
|
149
|
+
bool has_run_bootstrapping_code_ = false;
|
|
150
|
+
|
|
151
|
+
int64_t base_object_count_ = 0;
|
|
152
|
+
int64_t base_object_created_by_bootstrap_ = 0;
|
|
153
|
+
|
|
154
|
+
BindingDataStore binding_data_store_;
|
|
155
|
+
|
|
156
|
+
BaseObjectList base_object_list_;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
class PrincipalRealm final : public Realm {
|
|
160
|
+
public:
|
|
161
|
+
PrincipalRealm(Environment* env,
|
|
162
|
+
v8::Local<v8::Context> context,
|
|
163
|
+
const RealmSerializeInfo* realm_info);
|
|
164
|
+
~PrincipalRealm();
|
|
165
|
+
|
|
166
|
+
SET_MEMORY_INFO_NAME(PrincipalRealm)
|
|
167
|
+
SET_SELF_SIZE(PrincipalRealm)
|
|
168
|
+
|
|
169
|
+
#define V(PropertyName, TypeName) \
|
|
170
|
+
v8::Local<TypeName> PropertyName() const override; \
|
|
171
|
+
void set_##PropertyName(v8::Local<TypeName> value) override;
|
|
172
|
+
PER_REALM_STRONG_PERSISTENT_VALUES(V)
|
|
173
|
+
#undef V
|
|
174
|
+
|
|
175
|
+
protected:
|
|
176
|
+
v8::MaybeLocal<v8::Value> BootstrapRealm() override;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
} // namespace node
|
|
180
|
+
|
|
181
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
182
|
+
|
|
183
|
+
#endif // SRC_NODE_REALM_H_
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#ifndef SRC_NODE_REPORT_H_
|
|
2
|
+
#define SRC_NODE_REPORT_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "node.h"
|
|
7
|
+
#include "node_buffer.h"
|
|
8
|
+
#include "uv.h"
|
|
9
|
+
#include "util.h"
|
|
10
|
+
|
|
11
|
+
#ifndef _WIN32
|
|
12
|
+
#include <sys/types.h>
|
|
13
|
+
#include <unistd.h>
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
#include <iomanip>
|
|
17
|
+
#include <sstream>
|
|
18
|
+
|
|
19
|
+
namespace node {
|
|
20
|
+
namespace report {
|
|
21
|
+
// Function declarations - utility functions in src/node_report_utils.cc
|
|
22
|
+
void WalkHandleNetwork(uv_handle_t* h, void* arg);
|
|
23
|
+
void WalkHandleNoNetwork(uv_handle_t* h, void* arg);
|
|
24
|
+
|
|
25
|
+
template <typename T>
|
|
26
|
+
std::string ValueToHexString(T value) {
|
|
27
|
+
std::stringstream hex;
|
|
28
|
+
|
|
29
|
+
hex << "0x" << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex <<
|
|
30
|
+
value;
|
|
31
|
+
return hex.str();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Function declarations - export functions in src/node_report_module.cc
|
|
35
|
+
void WriteReport(const v8::FunctionCallbackInfo<v8::Value>& info);
|
|
36
|
+
void GetReport(const v8::FunctionCallbackInfo<v8::Value>& info);
|
|
37
|
+
|
|
38
|
+
} // namespace report
|
|
39
|
+
} // namespace node
|
|
40
|
+
|
|
41
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
42
|
+
|
|
43
|
+
#endif // SRC_NODE_REPORT_H_
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#ifndef SRC_NODE_REVERT_H_
|
|
2
|
+
#define SRC_NODE_REVERT_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "node.h"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Note that it is expected for this list to vary across specific LTS and
|
|
10
|
+
* Stable versions! Only CVE's whose fixes require *breaking* changes within
|
|
11
|
+
* a given LTS or Stable may be added to this list, and only with TSC
|
|
12
|
+
* consensus.
|
|
13
|
+
*
|
|
14
|
+
* For *main* this list should always be empty!
|
|
15
|
+
**/
|
|
16
|
+
namespace node {
|
|
17
|
+
|
|
18
|
+
#define SECURITY_REVERSIONS(XX) \
|
|
19
|
+
// XX(CVE_2016_PEND, "CVE-2016-PEND", "Vulnerability Title")
|
|
20
|
+
|
|
21
|
+
enum reversion {
|
|
22
|
+
#define V(code, ...) SECURITY_REVERT_##code,
|
|
23
|
+
SECURITY_REVERSIONS(V)
|
|
24
|
+
#undef V
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
namespace per_process {
|
|
28
|
+
extern unsigned int reverted_cve;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#ifdef _MSC_VER
|
|
32
|
+
#pragma warning(push)
|
|
33
|
+
// MSVC C4065: switch statement contains 'default' but no 'case' labels
|
|
34
|
+
#pragma warning(disable : 4065)
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
inline const char* RevertMessage(const reversion cve) {
|
|
38
|
+
#define V(code, label, msg) case SECURITY_REVERT_##code: return label ": " msg;
|
|
39
|
+
switch (cve) {
|
|
40
|
+
SECURITY_REVERSIONS(V)
|
|
41
|
+
default:
|
|
42
|
+
return "Unknown";
|
|
43
|
+
}
|
|
44
|
+
#undef V
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#ifdef _MSC_VER
|
|
48
|
+
#pragma warning(pop)
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
inline void Revert(const reversion cve) {
|
|
52
|
+
per_process::reverted_cve |= 1 << cve;
|
|
53
|
+
printf("SECURITY WARNING: Reverting %s\n", RevertMessage(cve));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
inline void Revert(const char* cve, std::string* error) {
|
|
57
|
+
#define V(code, label, _) \
|
|
58
|
+
if (strcmp(cve, label) == 0) return Revert(SECURITY_REVERT_##code);
|
|
59
|
+
SECURITY_REVERSIONS(V)
|
|
60
|
+
#undef V
|
|
61
|
+
*error = "Error: Attempt to revert an unknown CVE [";
|
|
62
|
+
*error += cve;
|
|
63
|
+
*error += ']';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
inline bool IsReverted(const reversion cve) {
|
|
67
|
+
return per_process::reverted_cve & (1 << cve);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
inline bool IsReverted(const char* cve) {
|
|
71
|
+
#define V(code, label, _) \
|
|
72
|
+
if (strcmp(cve, label) == 0) return IsReverted(SECURITY_REVERT_##code);
|
|
73
|
+
SECURITY_REVERSIONS(V)
|
|
74
|
+
return false;
|
|
75
|
+
#undef V
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} // namespace node
|
|
79
|
+
|
|
80
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
81
|
+
|
|
82
|
+
#endif // SRC_NODE_REVERT_H_
|