diff --git a/CHANGELOG.md b/CHANGELOG.md
index 91a861edd201f9..1a070b8d70d059 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -38,7 +38,8 @@ release.
-23.0.0
+23.1.0
+23.0.0
22.10.0
diff --git a/README.md b/README.md
index b60e3c5df619a4..efbd31e03f9bdb 100644
--- a/README.md
+++ b/README.md
@@ -104,11 +104,10 @@ To download `SHASUMS256.txt` using `curl`:
curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt
```
-To check that a downloaded file matches the checksum, run
-it through `sha256sum` with a command such as:
+To check that downloaded files match the checksum, use `sha256sum`:
```bash
-grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c -
+sha256sum -c SHASUMS256.txt --ignore-missing
```
For Current and LTS, the GPG detached signature of `SHASUMS256.txt` is in
@@ -320,8 +319,6 @@ For information about the governance of the Node.js project, see
**Kohei Ueno** <> (he/him)
* [daeyeon](https://github.com/daeyeon) -
**Daeyeon Jeong** <> (he/him)
-* [danielleadams](https://github.com/danielleadams) -
- **Danielle Adams** <> (she/her)
* [debadree25](https://github.com/debadree25) -
**Debadree Chatterjee** <> (he/him)
* [deokjinkim](https://github.com/deokjinkim) -
@@ -502,6 +499,8 @@ For information about the governance of the Node.js project, see
**Claudio Rodriguez** <>
* [danbev](https://github.com/danbev) -
**Daniel Bevenius** <> (he/him)
+* [danielleadams](https://github.com/danielleadams) -
+ **Danielle Adams** <> (she/her)
* [DavidCai1993](https://github.com/DavidCai1993) -
**David Cai** <> (he/him)
* [davisjam](https://github.com/davisjam) -
diff --git a/common.gypi b/common.gypi
index 350b54ad9d54cd..23196aae451f6a 100644
--- a/common.gypi
+++ b/common.gypi
@@ -36,7 +36,7 @@
# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
- 'v8_embedder_string': '-node.10',
+ 'v8_embedder_string': '-node.11',
##### V8 defaults for Node.js #####
diff --git a/deps/ada/ada.cpp b/deps/ada/ada.cpp
index 72512a0651826e..d7f9b3a92c5330 100644
--- a/deps/ada/ada.cpp
+++ b/deps/ada/ada.cpp
@@ -1,4 +1,4 @@
-/* auto-generated on 2024-07-06 17:38:56 -0400. Do not edit! */
+/* auto-generated on 2024-09-02 20:07:32 -0400. Do not edit! */
/* begin file src/ada.cpp */
#include "ada.h"
/* begin file src/checkers.cpp */
@@ -11553,21 +11553,21 @@ ada_really_inline bool url::parse_scheme(const std::string_view input) {
// If url's scheme is not a special scheme and buffer is a special scheme,
// then return.
if (is_special() != is_input_special) {
- return true;
+ return false;
}
// If url includes credentials or has a non-null port, and buffer is
// "file", then return.
if ((has_credentials() || port.has_value()) &&
parsed_type == ada::scheme::type::FILE) {
- return true;
+ return false;
}
// If url's scheme is "file" and its host is an empty host, then return.
// An empty host is the empty string.
if (type == ada::scheme::type::FILE && host.has_value() &&
host.value().empty()) {
- return true;
+ return false;
}
}
@@ -13215,21 +13215,21 @@ template
// If url's scheme is not a special scheme and buffer is a special scheme,
// then return.
if (is_special() != is_input_special) {
- return true;
+ return false;
}
// If url includes credentials or has a non-null port, and buffer is
// "file", then return.
if ((has_credentials() || components.port != url_components::omitted) &&
parsed_type == ada::scheme::type::FILE) {
- return true;
+ return false;
}
// If url's scheme is "file" and its host is an empty host, then return.
// An empty host is the empty string.
if (type == ada::scheme::type::FILE &&
components.host_start == components.host_end) {
- return true;
+ return false;
}
}
@@ -13830,7 +13830,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return "null";
}
-[[nodiscard]] std::string_view url_aggregator::get_username() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_username() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_username");
if (has_non_empty_username()) {
return helpers::substring(buffer, components.protocol_end + 2,
@@ -13839,7 +13840,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return "";
}
-[[nodiscard]] std::string_view url_aggregator::get_password() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_password() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_password");
if (has_non_empty_password()) {
return helpers::substring(buffer, components.username_end + 1,
@@ -13848,7 +13850,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return "";
}
-[[nodiscard]] std::string_view url_aggregator::get_port() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_port() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_port");
if (components.port == url_components::omitted) {
return "";
@@ -13857,7 +13860,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
components.pathname_start);
}
-[[nodiscard]] std::string_view url_aggregator::get_hash() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_hash() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_hash");
// If this's URL's fragment is either null or the empty string, then return
// the empty string. Return U+0023 (#), followed by this's URL's fragment.
@@ -13870,7 +13874,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return helpers::substring(buffer, components.hash_start);
}
-[[nodiscard]] std::string_view url_aggregator::get_host() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_host() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_host");
// Technically, we should check if there is a hostname, but
// the code below works even if there isn't.
@@ -13888,7 +13893,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return helpers::substring(buffer, start, components.pathname_start);
}
-[[nodiscard]] std::string_view url_aggregator::get_hostname() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_hostname() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_hostname");
// Technically, we should check if there is a hostname, but
// the code below works even if there isn't.
@@ -13902,7 +13908,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return helpers::substring(buffer, start, components.host_end);
}
-[[nodiscard]] std::string_view url_aggregator::get_pathname() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_pathname() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_pathname pathname_start = ",
components.pathname_start, " buffer.size() = ", buffer.size(),
" components.search_start = ", components.search_start,
@@ -13916,7 +13923,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return helpers::substring(buffer, components.pathname_start, ending_index);
}
-[[nodiscard]] std::string_view url_aggregator::get_search() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_search() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_search");
// If this's URL's query is either null or the empty string, then return the
// empty string. Return U+003F (?), followed by this's URL's query.
@@ -13933,7 +13941,8 @@ bool url_aggregator::set_hostname(const std::string_view input) {
return helpers::substring(buffer, components.search_start, ending_index);
}
-[[nodiscard]] std::string_view url_aggregator::get_protocol() const noexcept {
+[[nodiscard]] std::string_view url_aggregator::get_protocol() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_protocol");
return helpers::substring(buffer, 0, components.protocol_end);
}
diff --git a/deps/ada/ada.h b/deps/ada/ada.h
index 00ccd803505087..4b00198e6a4bac 100644
--- a/deps/ada/ada.h
+++ b/deps/ada/ada.h
@@ -1,4 +1,4 @@
-/* auto-generated on 2024-07-06 17:38:56 -0400. Do not edit! */
+/* auto-generated on 2024-09-02 20:07:32 -0400. Do not edit! */
/* begin file include/ada.h */
/**
* @file ada.h
@@ -479,6 +479,18 @@ namespace ada {
#define ADA_NEON 1
#endif
+#ifndef __has_cpp_attribute
+#define ada_lifetime_bound
+#elif __has_cpp_attribute(msvc::lifetimebound)
+#define ada_lifetime_bound [[msvc::lifetimebound]]
+#elif __has_cpp_attribute(clang::lifetimebound)
+#define ada_lifetime_bound [[clang::lifetimebound]]
+#elif __has_cpp_attribute(lifetimebound)
+#define ada_lifetime_bound [[lifetimebound]]
+#else
+#define ada_lifetime_bound
+#endif
+
#endif // ADA_COMMON_DEFS_H
/* end file include/ada/common_defs.h */
#include
@@ -4845,35 +4857,38 @@ struct url_aggregator : url_base {
* @see https://url.spec.whatwg.org/#dom-url-href
* @see https://url.spec.whatwg.org/#concept-url-serializer
*/
- [[nodiscard]] inline std::string_view get_href() const noexcept;
+ [[nodiscard]] inline std::string_view get_href() const noexcept
+ ada_lifetime_bound;
/**
* The username getter steps are to return this's URL's username.
* This function does not allocate memory.
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-username
*/
- [[nodiscard]] std::string_view get_username() const noexcept;
+ [[nodiscard]] std::string_view get_username() const noexcept
+ ada_lifetime_bound;
/**
* The password getter steps are to return this's URL's password.
* This function does not allocate memory.
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-password
*/
- [[nodiscard]] std::string_view get_password() const noexcept;
+ [[nodiscard]] std::string_view get_password() const noexcept
+ ada_lifetime_bound;
/**
* Return this's URL's port, serialized.
* This function does not allocate memory.
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-port
*/
- [[nodiscard]] std::string_view get_port() const noexcept;
+ [[nodiscard]] std::string_view get_port() const noexcept ada_lifetime_bound;
/**
* Return U+0023 (#), followed by this's URL's fragment.
* This function does not allocate memory.
* @return a lightweight std::string_view..
* @see https://url.spec.whatwg.org/#dom-url-hash
*/
- [[nodiscard]] std::string_view get_hash() const noexcept;
+ [[nodiscard]] std::string_view get_hash() const noexcept ada_lifetime_bound;
/**
* Return url's host, serialized, followed by U+003A (:) and url's port,
* serialized.
@@ -4882,7 +4897,7 @@ struct url_aggregator : url_base {
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-host
*/
- [[nodiscard]] std::string_view get_host() const noexcept;
+ [[nodiscard]] std::string_view get_host() const noexcept ada_lifetime_bound;
/**
* Return this's URL's host, serialized.
* This function does not allocate memory.
@@ -4890,7 +4905,8 @@ struct url_aggregator : url_base {
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-hostname
*/
- [[nodiscard]] std::string_view get_hostname() const noexcept;
+ [[nodiscard]] std::string_view get_hostname() const noexcept
+ ada_lifetime_bound;
/**
* The pathname getter steps are to return the result of URL path serializing
* this's URL.
@@ -4898,7 +4914,8 @@ struct url_aggregator : url_base {
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-pathname
*/
- [[nodiscard]] std::string_view get_pathname() const noexcept;
+ [[nodiscard]] std::string_view get_pathname() const noexcept
+ ada_lifetime_bound;
/**
* Compute the pathname length in bytes without instantiating a view or a
* string.
@@ -4912,7 +4929,7 @@ struct url_aggregator : url_base {
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-search
*/
- [[nodiscard]] std::string_view get_search() const noexcept;
+ [[nodiscard]] std::string_view get_search() const noexcept ada_lifetime_bound;
/**
* The protocol getter steps are to return this's URL's scheme, followed by
* U+003A (:).
@@ -4920,7 +4937,8 @@ struct url_aggregator : url_base {
* @return a lightweight std::string_view.
* @see https://url.spec.whatwg.org/#dom-url-protocol
*/
- [[nodiscard]] std::string_view get_protocol() const noexcept;
+ [[nodiscard]] std::string_view get_protocol() const noexcept
+ ada_lifetime_bound;
/**
* A URL includes credentials if its username or password is not the empty
@@ -5828,7 +5846,7 @@ inline void url::set_scheme(std::string &&new_scheme) noexcept {
type = ada::scheme::get_scheme_type(new_scheme);
// We only move the 'scheme' if it is non-special.
if (!is_special()) {
- non_special_scheme = new_scheme;
+ non_special_scheme = std::move(new_scheme);
}
}
@@ -5877,10 +5895,15 @@ inline void url::copy_scheme(const ada::url &u) {
ada_really_inline size_t url::parse_port(std::string_view view,
bool check_trailing_content) noexcept {
ada_log("parse_port('", view, "') ", view.size());
+ if (!view.empty() && view[0] == '-') {
+ ada_log("parse_port: view[0] == '0' && view.size() > 1");
+ is_valid = false;
+ return 0;
+ }
uint16_t parsed_port{};
auto r = std::from_chars(view.data(), view.data() + view.size(), parsed_port);
if (r.ec == std::errc::result_out_of_range) {
- ada_log("parse_port: std::errc::result_out_of_range");
+ ada_log("parse_port: r.ec == std::errc::result_out_of_range");
is_valid = false;
return 0;
}
@@ -6776,8 +6799,8 @@ inline bool url_aggregator::has_port() const noexcept {
buffer[components.host_end + 1] == '.';
}
-[[nodiscard]] inline std::string_view url_aggregator::get_href()
- const noexcept {
+[[nodiscard]] inline std::string_view url_aggregator::get_href() const noexcept
+ ada_lifetime_bound {
ada_log("url_aggregator::get_href");
return buffer;
}
@@ -6785,10 +6808,15 @@ inline bool url_aggregator::has_port() const noexcept {
ada_really_inline size_t url_aggregator::parse_port(
std::string_view view, bool check_trailing_content) noexcept {
ada_log("url_aggregator::parse_port('", view, "') ", view.size());
+ if (!view.empty() && view[0] == '-') {
+ ada_log("parse_port: view[0] == '0' && view.size() > 1");
+ is_valid = false;
+ return 0;
+ }
uint16_t parsed_port{};
auto r = std::from_chars(view.data(), view.data() + view.size(), parsed_port);
if (r.ec == std::errc::result_out_of_range) {
- ada_log("parse_port: std::errc::result_out_of_range");
+ ada_log("parse_port: r.ec == std::errc::result_out_of_range");
is_valid = false;
return 0;
}
@@ -7279,14 +7307,14 @@ url_search_params_entries_iter::next() {
#ifndef ADA_ADA_VERSION_H
#define ADA_ADA_VERSION_H
-#define ADA_VERSION "2.9.0"
+#define ADA_VERSION "2.9.2"
namespace ada {
enum {
ADA_VERSION_MAJOR = 2,
ADA_VERSION_MINOR = 9,
- ADA_VERSION_REVISION = 0,
+ ADA_VERSION_REVISION = 2,
};
} // namespace ada
diff --git a/deps/cares/CMakeLists.txt b/deps/cares/CMakeLists.txt
index 39963f1e8c3cb4..cf9a516414d1ab 100644
--- a/deps/cares/CMakeLists.txt
+++ b/deps/cares/CMakeLists.txt
@@ -12,7 +12,7 @@ INCLUDE (CheckCSourceCompiles)
INCLUDE (CheckStructHasMember)
INCLUDE (CheckLibraryExists)
-PROJECT (c-ares LANGUAGES C VERSION "1.34.1" )
+PROJECT (c-ares LANGUAGES C VERSION "1.34.2" )
# Set this version before release
SET (CARES_VERSION "${PROJECT_VERSION}")
diff --git a/deps/cares/RELEASE-NOTES.md b/deps/cares/RELEASE-NOTES.md
index fa1db666083365..cbd4788600f3ac 100644
--- a/deps/cares/RELEASE-NOTES.md
+++ b/deps/cares/RELEASE-NOTES.md
@@ -1,4 +1,10 @@
-## c-ares version 1.34.1 - Octover 9 2024
+## c-ares version 1.34.2 - October 15 2024
+
+This release contains a fix for downstream packages detecting the c-ares
+version based on the contents of the header file rather than the
+distributed pkgconf or cmake files.
+
+## c-ares version 1.34.1 - October 9 2024
This release fixes a packaging issue.
diff --git a/deps/cares/aminclude_static.am b/deps/cares/aminclude_static.am
index 7cc94c822cf773..9e346c39c815a1 100644
--- a/deps/cares/aminclude_static.am
+++ b/deps/cares/aminclude_static.am
@@ -1,6 +1,6 @@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Wed Oct 9 20:58:25 EDT 2024
+# from AX_AM_MACROS_STATIC on Tue Oct 15 06:09:51 EDT 2024
# Code coverage
diff --git a/deps/cares/configure b/deps/cares/configure
index 635872c9f18e1a..a6b48c9872767b 100755
--- a/deps/cares/configure
+++ b/deps/cares/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for c-ares 1.34.1.
+# Generated by GNU Autoconf 2.72 for c-ares 1.34.2.
#
# Report bugs to .
#
@@ -614,8 +614,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='c-ares'
PACKAGE_TARNAME='c-ares'
-PACKAGE_VERSION='1.34.1'
-PACKAGE_STRING='c-ares 1.34.1'
+PACKAGE_VERSION='1.34.2'
+PACKAGE_STRING='c-ares 1.34.2'
PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares'
PACKAGE_URL=''
@@ -1423,7 +1423,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-'configure' configures c-ares 1.34.1 to adapt to many kinds of systems.
+'configure' configures c-ares 1.34.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1494,7 +1494,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of c-ares 1.34.1:";;
+ short | recursive ) echo "Configuration of c-ares 1.34.2:";;
esac
cat <<\_ACEOF
@@ -1635,7 +1635,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-c-ares configure 1.34.1
+c-ares configure 1.34.2
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2279,7 +2279,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by c-ares $as_me 1.34.1, which was
+It was created by c-ares $as_me 1.34.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -6192,7 +6192,7 @@ fi
# Define the identity of the package.
PACKAGE='c-ares'
- VERSION='1.34.1'
+ VERSION='1.34.2'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -26823,7 +26823,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by c-ares $as_me 1.34.1, which was
+This file was extended by c-ares $as_me 1.34.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -26891,7 +26891,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-c-ares config.status 1.34.1
+c-ares config.status 1.34.2
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
diff --git a/deps/cares/configure.ac b/deps/cares/configure.ac
index cc52c2c6c5de0a..0ebda1c63f5f5e 100644
--- a/deps/cares/configure.ac
+++ b/deps/cares/configure.ac
@@ -2,7 +2,7 @@ dnl Copyright (C) The c-ares project and its contributors
dnl SPDX-License-Identifier: MIT
AC_PREREQ([2.69])
-AC_INIT([c-ares], [1.34.1],
+AC_INIT([c-ares], [1.34.2],
[c-ares mailing list: http://lists.haxx.se/listinfo/c-ares])
CARES_VERSION_INFO="21:1:19"
diff --git a/deps/cares/docs/Makefile.in b/deps/cares/docs/Makefile.in
index 75b3f3d942bbd6..da57136dad9a88 100644
--- a/deps/cares/docs/Makefile.in
+++ b/deps/cares/docs/Makefile.in
@@ -386,6 +386,7 @@ MANPAGES = ares_cancel.3 \
ares_dns_rr.3 \
ares_dns_rr_add_abin.3 \
ares_dns_rr_del_abin.3 \
+ ares_dns_rr_del_opt_byid.3 \
ares_dns_rr_get_abin.3 \
ares_dns_rr_get_abin_cnt.3 \
ares_dns_rr_get_addr.3 \
@@ -483,6 +484,7 @@ MANPAGES = ares_cancel.3 \
ares_set_socket_callback.3 \
ares_set_socket_configure_callback.3 \
ares_set_socket_functions.3 \
+ ares_set_socket_functions_ex.3 \
ares_set_sortlist.3 \
ares_strerror.3 \
ares_svcb_param_t.3 \
diff --git a/deps/cares/docs/Makefile.inc b/deps/cares/docs/Makefile.inc
index d6ad73246b3f99..b5519369aa9ea5 100644
--- a/deps/cares/docs/Makefile.inc
+++ b/deps/cares/docs/Makefile.inc
@@ -43,6 +43,7 @@ MANPAGES = ares_cancel.3 \
ares_dns_rr.3 \
ares_dns_rr_add_abin.3 \
ares_dns_rr_del_abin.3 \
+ ares_dns_rr_del_opt_byid.3 \
ares_dns_rr_get_abin.3 \
ares_dns_rr_get_abin_cnt.3 \
ares_dns_rr_get_addr.3 \
@@ -140,6 +141,7 @@ MANPAGES = ares_cancel.3 \
ares_set_socket_callback.3 \
ares_set_socket_configure_callback.3 \
ares_set_socket_functions.3 \
+ ares_set_socket_functions_ex.3 \
ares_set_sortlist.3 \
ares_strerror.3 \
ares_svcb_param_t.3 \
diff --git a/deps/cares/docs/ares_dns_rr_del_opt_byid.3 b/deps/cares/docs/ares_dns_rr_del_opt_byid.3
new file mode 100644
index 00000000000000..b93e4cd4e37fa8
--- /dev/null
+++ b/deps/cares/docs/ares_dns_rr_del_opt_byid.3
@@ -0,0 +1,3 @@
+.\" Copyright (C) 2023 The c-ares project and its contributors.
+.\" SPDX-License-Identifier: MIT
+.so man3/ares_dns_rr.3
diff --git a/deps/cares/docs/ares_set_socket_functions_ex.3 b/deps/cares/docs/ares_set_socket_functions_ex.3
new file mode 100644
index 00000000000000..a0f02456c320cb
--- /dev/null
+++ b/deps/cares/docs/ares_set_socket_functions_ex.3
@@ -0,0 +1,3 @@
+.\" Copyright (C) 2024 The c-ares project and its contributors.
+.\" SPDX-License-Identifier: MIT
+.so man3/ares_set_socket_functions.3
diff --git a/deps/cares/include/ares_version.h b/deps/cares/include/ares_version.h
index ba98e6949d53c8..d7a9c9e61e36d2 100644
--- a/deps/cares/include/ares_version.h
+++ b/deps/cares/include/ares_version.h
@@ -32,20 +32,16 @@
#define ARES_VERSION_MAJOR 1
#define ARES_VERSION_MINOR 34
-#define ARES_VERSION_PATCH 1
+#define ARES_VERSION_PATCH 2
+#define ARES_VERSION_STR "1.34.2"
+
+/* NOTE: We cannot make the version string a C preprocessor stringify operation
+ * due to assumptions made by integrators that aren't properly using
+ * pkgconf or cmake and are doing their own detection based on parsing
+ * this header */
#define ARES_VERSION \
((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \
(ARES_VERSION_PATCH))
-
-/* Need a level of indirection due to argument prescan to stringify a macro
- * value. */
-#define ARES_STRINGIFY_PRE(s) #s
-#define ARES_STRINGIFY(s) ARES_STRINGIFY_PRE(s)
-
-#define ARES_VERSION_STR \
- ARES_STRINGIFY(ARES_VERSION_MAJOR) \
- "." ARES_STRINGIFY(ARES_VERSION_MINOR) "." ARES_STRINGIFY(ARES_VERSION_PATCH)
-
#endif
diff --git a/deps/cares/src/lib/Makefile.in b/deps/cares/src/lib/Makefile.in
index 6fdb27835828af..db6b17f2f53112 100644
--- a/deps/cares/src/lib/Makefile.in
+++ b/deps/cares/src/lib/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Wed Oct 9 20:58:25 EDT 2024
+# from AX_AM_MACROS_STATIC on Tue Oct 15 06:09:51 EDT 2024
# Copyright (C) The c-ares project and its contributors
# SPDX-License-Identifier: MIT
diff --git a/deps/cares/src/lib/event/ares_event_wake_pipe.c b/deps/cares/src/lib/event/ares_event_wake_pipe.c
index 282d013dc62b24..d3b166a3d6cb78 100644
--- a/deps/cares/src/lib/event/ares_event_wake_pipe.c
+++ b/deps/cares/src/lib/event/ares_event_wake_pipe.c
@@ -92,9 +92,9 @@ static ares_pipeevent_t *ares_pipeevent_init(void)
}
# endif
-# ifdef O_CLOEXEC
- fcntl(p->filedes[0], F_SETFD, O_CLOEXEC);
- fcntl(p->filedes[1], F_SETFD, O_CLOEXEC);
+# ifdef FD_CLOEXEC
+ fcntl(p->filedes[0], F_SETFD, FD_CLOEXEC);
+ fcntl(p->filedes[1], F_SETFD, FD_CLOEXEC);
# endif
# endif
diff --git a/deps/cares/unofficial.gni b/deps/cares/unofficial.gni
index 9296548239fcde..e02d7f425194c9 100644
--- a/deps/cares/unofficial.gni
+++ b/deps/cares/unofficial.gni
@@ -38,7 +38,10 @@ template("cares_gn_build") {
]
}
- include_dirs = [ "src/lib" ]
+ include_dirs = [
+ "src/lib",
+ "src/lib/include",
+ ]
if (is_win) {
include_dirs += [ "config/win32" ]
} else if (is_linux) {
@@ -55,9 +58,6 @@ template("cares_gn_build") {
}
sources = gypi_values.cares_sources_common
- if (is_win) {
- sources += gypi_values.cares_sources_win
- }
if (is_linux) {
sources += [ "config/linux/ares_config.h" ]
}
diff --git a/deps/googletest/src/gtest.cc b/deps/googletest/src/gtest.cc
index 6662a13ce1455f..c08ab4197c5500 100644
--- a/deps/googletest/src/gtest.cc
+++ b/deps/googletest/src/gtest.cc
@@ -1660,10 +1660,25 @@ std::string GetBoolAssertionFailureMessage(
return msg.GetString();
}
-// Helper function for implementing ASSERT_NEAR.
+// Helper function for implementing ASSERT_NEAR. Treats infinity as a specific
+// value, such that comparing infinity to infinity is equal, the distance
+// between -infinity and +infinity is infinity, and infinity <= infinity is
+// true.
AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2,
const char* abs_error_expr, double val1,
double val2, double abs_error) {
+ // We want to return success when the two values are infinity and at least
+ // one of the following is true:
+ // * The values are the same-signed infinity.
+ // * The error limit itself is infinity.
+ // This is done here so that we don't end up with a NaN when calculating the
+ // difference in values.
+ if (std::isinf(val1) && std::isinf(val2) &&
+ (std::signbit(val1) == std::signbit(val2) ||
+ (abs_error > 0.0 && std::isinf(abs_error)))) {
+ return AssertionSuccess();
+ }
+
const double diff = fabs(val1 - val2);
if (diff <= abs_error) return AssertionSuccess();
diff --git a/deps/uv/unofficial.gni b/deps/uv/unofficial.gni
index ce30341044e907..7a73f891e3fc32 100644
--- a/deps/uv/unofficial.gni
+++ b/deps/uv/unofficial.gni
@@ -40,6 +40,7 @@ template("uv_gn_build") {
"-Wno-extra-semi",
"-Wno-implicit-fallthrough",
"-Wno-missing-braces",
+ "-Wno-sign-compare",
"-Wno-string-conversion",
"-Wno-shadow",
"-Wno-unreachable-code",
diff --git a/deps/v8/src/codegen/compiler.cc b/deps/v8/src/codegen/compiler.cc
index a6407a56aa8d6d..ce82b744f327d5 100644
--- a/deps/v8/src/codegen/compiler.cc
+++ b/deps/v8/src/codegen/compiler.cc
@@ -1338,7 +1338,14 @@ MaybeHandle GetOrCompileOptimized(
}
// Do not optimize when debugger needs to hook into every call.
- if (isolate->debug()->needs_check_on_function_call()) return {};
+ if (isolate->debug()->needs_check_on_function_call()) {
+ // Reset the OSR urgency to avoid triggering this compilation request on
+ // every iteration and thereby skipping other interrupts.
+ if (IsOSR(osr_offset)) {
+ function->feedback_vector()->reset_osr_urgency();
+ }
+ return {};
+ }
// Do not optimize if we need to be able to set break points.
if (shared->HasBreakInfo(isolate)) return {};
diff --git a/deps/v8/test/debugger/regress/regress-374013413.js b/deps/v8/test/debugger/regress/regress-374013413.js
new file mode 100644
index 00000000000000..d414dfdffa8e6d
--- /dev/null
+++ b/deps/v8/test/debugger/regress/regress-374013413.js
@@ -0,0 +1,15 @@
+// Copyright 2024 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --enable-inspector
+
+var Debug = debug.Debug;
+Debug.sendMessageForMethodChecked('Runtime.enable', {});
+const {msgid, msg} = Debug.createMessage('Runtime.evaluate', {
+ expression: 'while(true) {}',
+ throwOnSideEffect: true,
+ timeout: 1000,
+})
+Debug.sendMessage(msg);
+Debug.takeReplyChecked(msgid).toString();
diff --git a/doc/api/child_process.md b/doc/api/child_process.md
index 045f34352a92ee..f70d96a3395300 100644
--- a/doc/api/child_process.md
+++ b/doc/api/child_process.md
@@ -1061,6 +1061,15 @@ pipes between the parent and child. The value is one of the following:
corresponds to the index in the `stdio` array. The stream must have an
underlying descriptor (file streams do not start until the `'open'` event has
occurred).
+ **NOTE:** While it is technically possible to pass `stdin` as a writable or
+ `stdout`/`stderr` as readable, it is not recommended.
+ Readable and writable streams are designed with distinct behaviors, and using
+ them incorrectly (e.g., passing a readable stream where a writable stream is
+ expected) can lead to unexpected results or errors. This practice is discouraged
+ as it may result in undefined behavior or dropped callbacks if the stream
+ encounters errors. Always ensure that `stdin` is used as writable and
+ `stdout`/`stderr` as readable to maintain the intended flow of data between
+ the parent and child processes.
7. Positive integer: The integer value is interpreted as a file descriptor
that is open in the parent process. It is shared with the child
process, similar to how {Stream} objects can be shared. Passing sockets
diff --git a/doc/api/dgram.md b/doc/api/dgram.md
index 26e01f100258f0..2243b6abdea9bc 100644
--- a/doc/api/dgram.md
+++ b/doc/api/dgram.md
@@ -343,7 +343,9 @@ used when using `dgram.Socket` objects with the [`cluster`][] module. When
`exclusive` is set to `false` (the default), cluster workers will use the same
underlying socket handle allowing connection handling duties to be shared.
When `exclusive` is `true`, however, the handle is not shared and attempted
-port sharing results in an error.
+port sharing results in an error. Creating a `dgram.Socket` with the `reusePort`
+option set to `true` causes `exclusive` to always be `true` when `socket.bind()`
+is called.
A bound datagram socket keeps the Node.js process running to receive
datagram messages.
@@ -916,6 +918,9 @@ chained.
+
+> Stability: 1.0 - Early development
+
+* `code` {string} The code to strip type annotations from.
+* `options` {Object}
+ * `mode` {string} **Default:** `'strip'`. Possible values are:
+ * `'strip'` Only strip type annotations without performing the transformation of TypeScript features.
+ * `'transform'` Strip type annotations and transform TypeScript features to JavaScript.
+ * `sourceMap` {boolean} **Default:** `false`. Only when `mode` is `'transform'`, if `true`, a source map
+ will be generated for the transformed code.
+ * `sourceUrl` {string} Specifies the source url used in the source map.
+* Returns: {string} The code with type annotations stripped.
+ `module.stripTypeScriptTypes()` removes type annotations from TypeScript code. It
+ can be used to strip type annotations from TypeScript code before running it
+ with `vm.runInContext()` or `vm.compileFunction()`.
+ By default, it will throw an error if the code contains TypeScript features
+ that require transformation such as `Enums`,
+ see [type-stripping][] for more information.
+ When mode is `'transform'`, it also transforms TypeScript features to JavaScript,
+ see [transform TypeScript features][] for more information.
+ When mode is `'strip'`, source maps are not generated, because locations are preserved.
+ If `sourceMap` is provided, when mode is `'strip'`, an error will be thrown.
+
+_WARNING_: The output of this function should not be considered stable across Node.js versions,
+due to changes in the TypeScript parser.
+
+```mjs
+import { stripTypeScriptTypes } from 'node:module';
+const code = 'const a: number = 1;';
+const strippedCode = stripTypeScriptTypes(code);
+console.log(strippedCode);
+// Prints: const a = 1;
+```
+
+```cjs
+const { stripTypeScriptTypes } = require('node:module');
+const code = 'const a: number = 1;';
+const strippedCode = stripTypeScriptTypes(code);
+console.log(strippedCode);
+// Prints: const a = 1;
+```
+
+If `sourceUrl` is provided, it will be used appended as a comment at the end of the output:
+
+```mjs
+import { stripTypeScriptTypes } from 'node:module';
+const code = 'const a: number = 1;';
+const strippedCode = stripTypeScriptTypes(code, { mode: 'strip', sourceUrl: 'source.ts' });
+console.log(strippedCode);
+// Prints: const a = 1\n\n//# sourceURL=source.ts;
+```
+
+```cjs
+const { stripTypeScriptTypes } = require('node:module');
+const code = 'const a: number = 1;';
+const strippedCode = stripTypeScriptTypes(code, { mode: 'strip', sourceUrl: 'source.ts' });
+console.log(strippedCode);
+// Prints: const a = 1\n\n//# sourceURL=source.ts;
+```
+
+When `mode` is `'transform'`, the code is transformed to JavaScript:
+
+```mjs
+import { stripTypeScriptTypes } from 'node:module';
+const code = `
+ namespace MathUtil {
+ export const add = (a: number, b: number) => a + b;
+ }`;
+const strippedCode = stripTypeScriptTypes(code, { mode: 'transform', sourceMap: true });
+console.log(strippedCode);
+// Prints:
+// var MathUtil;
+// (function(MathUtil) {
+// MathUtil.add = (a, b)=>a + b;
+// })(MathUtil || (MathUtil = {}));
+// # sourceMappingURL=data:application/json;base64, ...
+```
+
+```cjs
+const { stripTypeScriptTypes } = require('node:module');
+const code = `
+ namespace MathUtil {
+ export const add = (a: number, b: number) => a + b;
+ }`;
+const strippedCode = stripTypeScriptTypes(code, { mode: 'transform', sourceMap: true });
+console.log(strippedCode);
+// Prints:
+// var MathUtil;
+// (function(MathUtil) {
+// MathUtil.add = (a, b)=>a + b;
+// })(MathUtil || (MathUtil = {}));
+// # sourceMappingURL=data:application/json;base64, ...
+```
+
### `module.syncBuiltinESMExports()`
* {boolean}
diff --git a/doc/api/packages.md b/doc/api/packages.md
index 6c5f8e8cbea912..72494bf90d4b40 100644
--- a/doc/api/packages.md
+++ b/doc/api/packages.md
@@ -902,273 +902,7 @@ $ node other.js
## Dual CommonJS/ES module packages
-
-
-Prior to the introduction of support for ES modules in Node.js, it was a common
-pattern for package authors to include both CommonJS and ES module JavaScript
-sources in their package, with `package.json` [`"main"`][] specifying the
-CommonJS entry point and `package.json` `"module"` specifying the ES module
-entry point.
-This enabled Node.js to run the CommonJS entry point while build tools such as
-bundlers used the ES module entry point, since Node.js ignored (and still
-ignores) the top-level `"module"` field.
-
-Node.js can now run ES module entry points, and a package can contain both
-CommonJS and ES module entry points (either via separate specifiers such as
-`'pkg'` and `'pkg/es-module'`, or both at the same specifier via [Conditional
-exports][]). Unlike in the scenario where top-level `"module"` field is only used by bundlers,
-or ES module files are transpiled into CommonJS on the fly before evaluation by
-Node.js, the files referenced by the ES module entry point are evaluated as ES
-modules.
-
-### Dual package hazard
-
-When an application is using a package that provides both CommonJS and ES module
-sources, there is a risk of certain bugs if both versions of the package get
-loaded. This potential comes from the fact that the `pkgInstance` created by
-`const pkgInstance = require('pkg')` is not the same as the `pkgInstance`
-created by `import pkgInstance from 'pkg'` (or an alternative main path like
-`'pkg/module'`). This is the “dual package hazard,” where two versions of the
-same package can be loaded within the same runtime environment. While it is
-unlikely that an application or package would intentionally load both versions
-directly, it is common for an application to load one version while a dependency
-of the application loads the other version. This hazard can happen because
-Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected
-behavior.
-
-If the package main export is a constructor, an `instanceof` comparison of
-instances created by the two versions returns `false`, and if the export is an
-object, properties added to one (like `pkgInstance.foo = 3`) are not present on
-the other. This differs from how `import` and `require` statements work in
-all-CommonJS or all-ES module environments, respectively, and therefore is
-surprising to users. It also differs from the behavior users are familiar with
-when using transpilation via tools like [Babel][] or [`esm`][].
-
-### Writing dual packages while avoiding or minimizing hazards
-
-First, the hazard described in the previous section occurs when a package
-contains both CommonJS and ES module sources and both sources are provided for
-use in Node.js, either via separate main entry points or exported paths. A
-package might instead be written where any version of Node.js receives only
-CommonJS sources, and any separate ES module sources the package might contain
-are intended only for other environments such as browsers. Such a package
-would be usable by any version of Node.js, since `import` can refer to CommonJS
-files; but it would not provide any of the advantages of using ES module syntax.
-
-A package might also switch from CommonJS to ES module syntax in a [breaking
-change](https://semver.org/) version bump. This has the disadvantage that the
-newest version of the package would only be usable in ES module-supporting
-versions of Node.js.
-
-Every pattern has tradeoffs, but there are two broad approaches that satisfy the
-following conditions:
-
-1. The package is usable via both `require` and `import`.
-2. The package is usable in both current Node.js and older versions of Node.js
- that lack support for ES modules.
-3. The package main entry point, e.g. `'pkg'` can be used by both `require` to
- resolve to a CommonJS file and by `import` to resolve to an ES module file.
- (And likewise for exported paths, e.g. `'pkg/feature'`.)
-4. The package provides named exports, e.g. `import { name } from 'pkg'` rather
- than `import pkg from 'pkg'; pkg.name`.
-5. The package is potentially usable in other ES module environments such as
- browsers.
-6. The hazards described in the previous section are avoided or minimized.
-
-#### Approach #1: Use an ES module wrapper
-
-Write the package in CommonJS or transpile ES module sources into CommonJS, and
-create an ES module wrapper file that defines the named exports. Using
-[Conditional exports][], the ES module wrapper is used for `import` and the
-CommonJS entry point for `require`.
-
-```json
-// ./node_modules/pkg/package.json
-{
- "type": "module",
- "exports": {
- "import": "./wrapper.mjs",
- "require": "./index.cjs"
- }
-}
-```
-
-The preceding example uses explicit extensions `.mjs` and `.cjs`.
-If your files use the `.js` extension, `"type": "module"` will cause such files
-to be treated as ES modules, just as `"type": "commonjs"` would cause them
-to be treated as CommonJS.
-See [Enabling](esm.md#enabling).
-
-```cjs
-// ./node_modules/pkg/index.cjs
-exports.name = 'value';
-```
-
-```js
-// ./node_modules/pkg/wrapper.mjs
-import cjsModule from './index.cjs';
-export const name = cjsModule.name;
-```
-
-In this example, the `name` from `import { name } from 'pkg'` is the same
-singleton as the `name` from `const { name } = require('pkg')`. Therefore `===`
-returns `true` when comparing the two `name`s and the divergent specifier hazard
-is avoided.
-
-If the module is not simply a list of named exports, but rather contains a
-unique function or object export like `module.exports = function () { ... }`,
-or if support in the wrapper for the `import pkg from 'pkg'` pattern is desired,
-then the wrapper would instead be written to export the default optionally
-along with any named exports as well:
-
-```js
-import cjsModule from './index.cjs';
-export const name = cjsModule.name;
-export default cjsModule;
-```
-
-This approach is appropriate for any of the following use cases:
-
-* The package is currently written in CommonJS and the author would prefer not
- to refactor it into ES module syntax, but wishes to provide named exports for
- ES module consumers.
-* The package has other packages that depend on it, and the end user might
- install both this package and those other packages. For example a `utilities`
- package is used directly in an application, and a `utilities-plus` package
- adds a few more functions to `utilities`. Because the wrapper exports
- underlying CommonJS files, it doesn't matter if `utilities-plus` is written in
- CommonJS or ES module syntax; it will work either way.
-* The package stores internal state, and the package author would prefer not to
- refactor the package to isolate its state management. See the next section.
-
-A variant of this approach not requiring conditional exports for consumers could
-be to add an export, e.g. `"./module"`, to point to an all-ES module-syntax
-version of the package. This could be used via `import 'pkg/module'` by users
-who are certain that the CommonJS version will not be loaded anywhere in the
-application, such as by dependencies; or if the CommonJS version can be loaded
-but doesn't affect the ES module version (for example, because the package is
-stateless):
-
-```json
-// ./node_modules/pkg/package.json
-{
- "type": "module",
- "exports": {
- ".": "./index.cjs",
- "./module": "./wrapper.mjs"
- }
-}
-```
-
-#### Approach #2: Isolate state
-
-A [`package.json`][] file can define the separate CommonJS and ES module entry
-points directly:
-
-```json
-// ./node_modules/pkg/package.json
-{
- "type": "module",
- "exports": {
- "import": "./index.mjs",
- "require": "./index.cjs"
- }
-}
-```
-
-This can be done if both the CommonJS and ES module versions of the package are
-equivalent, for example because one is the transpiled output of the other; and
-the package's management of state is carefully isolated (or the package is
-stateless).
-
-The reason that state is an issue is because both the CommonJS and ES module
-versions of the package might get used within an application; for example, the
-user's application code could `import` the ES module version while a dependency
-`require`s the CommonJS version. If that were to occur, two copies of the
-package would be loaded in memory and therefore two separate states would be
-present. This would likely cause hard-to-troubleshoot bugs.
-
-Aside from writing a stateless package (if JavaScript's `Math` were a package,
-for example, it would be stateless as all of its methods are static), there are
-some ways to isolate state so that it's shared between the potentially loaded
-CommonJS and ES module instances of the package:
-
-1. If possible, contain all state within an instantiated object. JavaScript's
- `Date`, for example, needs to be instantiated to contain state; if it were a
- package, it would be used like this:
-
- ```js
- import Date from 'date';
- const someDate = new Date();
- // someDate contains state; Date does not
- ```
-
- The `new` keyword isn't required; a package's function can return a new
- object, or modify a passed-in object, to keep the state external to the
- package.
-
-2. Isolate the state in one or more CommonJS files that are shared between the
- CommonJS and ES module versions of the package. For example, if the CommonJS
- and ES module entry points are `index.cjs` and `index.mjs`, respectively:
-
- ```cjs
- // ./node_modules/pkg/index.cjs
- const state = require('./state.cjs');
- module.exports.state = state;
- ```
-
- ```js
- // ./node_modules/pkg/index.mjs
- import state from './state.cjs';
- export {
- state,
- };
- ```
-
- Even if `pkg` is used via both `require` and `import` in an application (for
- example, via `import` in application code and via `require` by a dependency)
- each reference of `pkg` will contain the same state; and modifying that
- state from either module system will apply to both.
-
-Any plugins that attach to the package's singleton would need to separately
-attach to both the CommonJS and ES module singletons.
-
-This approach is appropriate for any of the following use cases:
-
-* The package is currently written in ES module syntax and the package author
- wants that version to be used wherever such syntax is supported.
-* The package is stateless or its state can be isolated without too much
- difficulty.
-* The package is unlikely to have other public packages that depend on it, or if
- it does, the package is stateless or has state that need not be shared between
- dependencies or with the overall application.
-
-Even with isolated state, there is still the cost of possible extra code
-execution between the CommonJS and ES module versions of a package.
-
-As with the previous approach, a variant of this approach not requiring
-conditional exports for consumers could be to add an export, e.g.
-`"./module"`, to point to an all-ES module-syntax version of the package:
-
-```json
-// ./node_modules/pkg/package.json
-{
- "type": "module",
- "exports": {
- ".": "./index.cjs",
- "./module": "./index.mjs"
- }
-}
-```
+See [the package examples repository][] for details.
## Node.js `package.json` field definitions
@@ -1412,7 +1146,6 @@ Package imports permit mapping to external packages.
This field defines [subpath imports][] for the current package.
-[Babel]: https://babeljs.io/
[CommonJS]: modules.md
[Conditional exports]: #conditional-exports
[Corepack]: corepack.md
@@ -1432,7 +1165,6 @@ This field defines [subpath imports][] for the current package.
[`--experimental-default-type`]: cli.md#--experimental-default-typetype
[`--no-addons` flag]: cli.md#--no-addons
[`ERR_PACKAGE_PATH_NOT_EXPORTED`]: errors.md#err_package_path_not_exported
-[`esm`]: https://github.com/standard-things/esm#readme
[`package.json`]: #nodejs-packagejson-field-definitions
[entry points]: #package-entry-points
[folders as modules]: modules.md#folders-as-modules
@@ -1446,3 +1178,4 @@ This field defines [subpath imports][] for the current package.
[supported package managers]: corepack.md#supported-package-managers
[the dual CommonJS/ES module packages section]: #dual-commonjses-module-packages
[the full specifier path]: esm.md#mandatory-file-extensions
+[the package examples repository]: https://github.com/nodejs/package-examples
diff --git a/doc/api/test.md b/doc/api/test.md
index b7f7c1d79ab079..a6ca7531d503a2 100644
--- a/doc/api/test.md
+++ b/doc/api/test.md
@@ -2225,7 +2225,7 @@ added:
- v20.4.0
- v18.19.0
changes:
- - version: REPLACEME
+ - version: v23.1.0
pr-url: https://github.com/nodejs/node/pull/55398
description: The Mock Timers is now stable.
-->
diff --git a/doc/api/util.md b/doc/api/util.md
index 3d61e24d148596..12527b794d0948 100644
--- a/doc/api/util.md
+++ b/doc/api/util.md
@@ -466,7 +466,7 @@ fs.access('file/that/does/not/exist', (err) => {
## `util.getSystemErrorMessage(err)`
* `err` {number}
@@ -2379,6 +2379,24 @@ util.types.isBigInt64Array(new BigInt64Array()); // Returns true
util.types.isBigInt64Array(new BigUint64Array()); // Returns false
```
+### `util.types.isBigIntObject(value)`
+
+
+
+* `value` {any}
+* Returns: {boolean}
+
+Returns `true` if the value is a BigInt object, e.g. created
+by `Object(BigInt(123))`.
+
+```js
+util.types.isBigIntObject(Object(BigInt(123))); // Returns true
+util.types.isBigIntObject(BigInt(123)); // Returns false
+util.types.isBigIntObject(123); // Returns false
+```
+
### `util.types.isBigUint64Array(value)`
|