From 93333fe52b0d8aaf10314a89a4c04d64debc7382 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Fri, 30 Jan 2026 18:22:49 +0100 Subject: [PATCH 1/2] Add String::New overload for string_view --- napi-inl.h | 9 +++++++++ napi.h | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/napi-inl.h b/napi-inl.h index 0f1717ecd..8e05bbcce 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -20,6 +20,9 @@ #endif // NAPI_HAS_THREADS #include #include +#if __cplusplus >= 201703L +#include +#endif #if defined(__clang__) || defined(__GNUC__) #define NAPI_NO_SANITIZE_VPTR __attribute__((no_sanitize("vptr"))) @@ -1255,6 +1258,12 @@ inline String String::New(napi_env env, const std::u16string& val) { return String::New(env, val.c_str(), val.size()); } +#if __cplusplus >= 201703L +inline String String::New(napi_env env, const std::string_view& val) { + return String::New(env, val.data(), val.size()); +} +#endif + inline String String::New(napi_env env, const char* val) { // TODO(@gabrielschulhof) Remove if-statement when core's error handling is // available in all supported versions. diff --git a/napi.h b/napi.h index 013a9114d..c6e925d1d 100644 --- a/napi.h +++ b/napi.h @@ -19,6 +19,9 @@ #endif // NAPI_HAS_THREADS #include #include +#if __cplusplus >= 201703L +#include +#endif // VS2015 RTM has bugs with constexpr, so require min of VS2015 Update 3 (known // good version) @@ -718,6 +721,14 @@ class String : public Name { const std::u16string& value ///< UTF-16 encoded C++ string ); +#if __cplusplus >= 201703L + /// Creates a new String value from a UTF-8 encoded C++ string view. + static String New( + napi_env env, ///< Node-API environment + const std::string_view& value ///< UTF-8 encoded C++ string view + ); +#endif + /// Creates a new String value from a UTF-8 encoded C string. static String New( napi_env env, ///< Node-API environment From 5b7448e8b2e109bb9bda5cd19d9f6c3bca14b35d Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Fri, 30 Jan 2026 19:42:56 +0100 Subject: [PATCH 2/2] Add Symbol::New with string_view --- napi-inl.h | 9 ++++++++- napi.h | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/napi-inl.h b/napi-inl.h index 8e05bbcce..b7cf63c1b 100644 --- a/napi-inl.h +++ b/napi-inl.h @@ -1259,7 +1259,7 @@ inline String String::New(napi_env env, const std::u16string& val) { } #if __cplusplus >= 201703L -inline String String::New(napi_env env, const std::string_view& val) { +inline String String::New(napi_env env, std::string_view val) { return String::New(env, val.data(), val.size()); } #endif @@ -1373,6 +1373,13 @@ inline Symbol Symbol::New(napi_env env, const std::string& description) { return Symbol::New(env, descriptionValue); } +#if __cplusplus >= 201703L +inline Symbol Symbol::New(napi_env env, std::string_view description) { + napi_value descriptionValue = String::New(env, description); + return Symbol::New(env, descriptionValue); +} +#endif + inline Symbol Symbol::New(napi_env env, String description) { napi_value descriptionValue = description; return Symbol::New(env, descriptionValue); diff --git a/napi.h b/napi.h index c6e925d1d..d9c4c4add 100644 --- a/napi.h +++ b/napi.h @@ -723,9 +723,8 @@ class String : public Name { #if __cplusplus >= 201703L /// Creates a new String value from a UTF-8 encoded C++ string view. - static String New( - napi_env env, ///< Node-API environment - const std::string_view& value ///< UTF-8 encoded C++ string view + static String New(napi_env env, ///< Node-API environment + std::string_view value ///< UTF-8 encoded C++ string view ); #endif @@ -802,6 +801,15 @@ class Symbol : public Name { description ///< UTF-8 encoded C++ string describing the symbol ); +#if __cplusplus >= 201703L + /// Creates a new Symbol value with a description. + static Symbol New( + napi_env env, ///< Node-API environment + std::string_view + description ///< UTF-8 encoded C++ string view describing the symbol + ); +#endif + /// Creates a new Symbol value with a description. static Symbol New(napi_env env, ///< Node-API environment String description ///< String value describing the symbol