diff --git a/native/dist/ext_nan/CMakeLists.txt b/native/dist/ext_nan/CMakeLists.txt index 130e454..a19a557 100644 --- a/native/dist/ext_nan/CMakeLists.txt +++ b/native/dist/ext_nan/CMakeLists.txt @@ -5,4 +5,12 @@ project(nan_ext VERSION 1.0.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") -add_add_executable(test test/main.cpp) \ No newline at end of file +add_executable(nan_helper_tests test/main.cpp) + +add_library(Nan__Helpers INTERFACE) +target_include_directories(Nan__Helpers INTERFACE + include/ + #$ + #$ +) +add_library(Nan::Helpers ALIAS Nan__Helpers) \ No newline at end of file diff --git a/native/dist/ext_nan/NanEventCallback.h b/native/dist/ext_nan/include/NanEventCallback.h similarity index 100% rename from native/dist/ext_nan/NanEventCallback.h rename to native/dist/ext_nan/include/NanEventCallback.h diff --git a/native/dist/ext_nan/NanException.h b/native/dist/ext_nan/include/NanException.h similarity index 100% rename from native/dist/ext_nan/NanException.h rename to native/dist/ext_nan/include/NanException.h diff --git a/native/dist/ext_nan/include/NanStrings.h b/native/dist/ext_nan/include/NanStrings.h new file mode 100644 index 0000000..3d4c65d --- /dev/null +++ b/native/dist/ext_nan/include/NanStrings.h @@ -0,0 +1,66 @@ +#pragma once + +#include +#include + +namespace Nan { + /* UTF-8 Helpers */ + inline v8::Local StringUTF8(std::string_view buffer) { + Nan::EscapableHandleScope scope{}; + auto data = v8::String::NewFromUtf8(Nan::GetCurrentContext()->GetIsolate(), buffer.data(), v8::NewStringType::kNormal, buffer.length()); + + v8::Local response{}; + if(!data.ToLocal(&response)) + throw std::bad_alloc{}; + return scope.Escape(response); + } + + template + inline v8::Local StringUTF8(const char (&buffer)[S]) { + return Nan::StringUTF8(buffer, S); + } + + inline v8::Local StringUTF8(const char* buffer, size_t length) { + return Nan::StringUTF8(std::string_view{buffer, length}); + } + + /* Latin1 Helpers */ + inline v8::Local String(std::string_view buffer) { + Nan::EscapableHandleScope scope{}; + auto data = v8::String::NewFromOneByte(Nan::GetCurrentContext()->GetIsolate(), (uint8_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length()); + + v8::Local response{}; + if(!data.ToLocal(&response)) + throw std::bad_alloc{}; + return scope.Escape(response); + } + + template + inline v8::Local String(const char (&buffer)[S]) { + return Nan::StringUTF8(buffer, S); + } + + inline v8::Local String(const char* buffer, size_t length) { + return Nan::StringUTF8(std::string_view{buffer, length}); + } + + /* Wide char helpers */ + inline v8::Local String(std::wstring_view buffer) { + Nan::EscapableHandleScope scope{}; + auto data = v8::String::NewFromTwoByte(Nan::GetCurrentContext()->GetIsolate(), (uint16_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length()); + + v8::Local response{}; + if(!data.ToLocal(&response)) + throw std::bad_alloc{}; + return scope.Escape(response); + } + + template + inline v8::Local String(const wchar_t (&buffer)[S]) { + return Nan::String(buffer, S); + } + + inline v8::Local String(const wchar_t* buffer, size_t length) { + return Nan::String(std::wstring_view{buffer, length}); + } +} \ No newline at end of file diff --git a/native/dist/ext_nan/test/main.cpp b/native/dist/ext_nan/test/main.cpp index 58d1f56..3ac0fea 100644 --- a/native/dist/ext_nan/test/main.cpp +++ b/native/dist/ext_nan/test/main.cpp @@ -1,2 +1,7 @@ -#include "../NanEventCallback.h" -#include "../NanException.h" \ No newline at end of file +#include "include/NanEventCallback.h" +#include "include/NanException.h" +#include "include/NanStrings.h" + +int main() { + auto str = Nan::StringUTF8("Hello World"); +} \ No newline at end of file