From 2bf8034be4348bb573cb005671184bf9fdaf9ae3 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Tue, 4 Nov 2025 16:04:49 -0500 Subject: [PATCH 1/4] Add C++ factory for Blob --- .../Blob/Include/Babylon/Polyfills/Blob.h | 8 +++++ Polyfills/Blob/Source/Blob.cpp | 29 ++++++++++++++++++- Polyfills/Blob/Source/Blob.h | 5 ++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h b/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h index 744b90e5..08f9efb5 100644 --- a/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h +++ b/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h @@ -1,9 +1,17 @@ #pragma once #include +#include #include +#include +#include namespace Babylon::Polyfills::Blob { void BABYLON_API Initialize(Napi::Env env); + + Napi::Value BABYLON_API CreateInstance( + Napi::Env env, + std::vector data, + std::string type = ""); } diff --git a/Polyfills/Blob/Source/Blob.cpp b/Polyfills/Blob/Source/Blob.cpp index fde4704b..01cf57b6 100644 --- a/Polyfills/Blob/Source/Blob.cpp +++ b/Polyfills/Blob/Source/Blob.cpp @@ -4,9 +4,10 @@ namespace Babylon::Polyfills::Internal { + static constexpr auto JS_BLOB_CONSTRUCTOR_NAME = "Blob"; + void Blob::Initialize(Napi::Env env) { - static constexpr auto JS_BLOB_CONSTRUCTOR_NAME = "Blob"; if (env.Global().Get(JS_BLOB_CONSTRUCTOR_NAME).IsUndefined()) { Napi::Function func = DefineClass( @@ -24,6 +25,24 @@ namespace Babylon::Polyfills::Internal } } + Napi::Value Blob::CreateInstance( + Napi::Env env, + std::vector data, + std::string type + ) { + Initialize(env); + + auto ctor{env.Global().Get(JS_BLOB_CONSTRUCTOR_NAME).As()}; + auto blobObj{ctor.New({})}; + + auto blob{Blob::Unwrap(blobObj)}; + blob->m_data = std::move(data); + blob->m_type = std::move(type); + + return blobObj; + } + + Blob::Blob(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { @@ -133,4 +152,12 @@ namespace Babylon::Polyfills::Blob { Internal::Blob::Initialize(env); } + + Napi::Value BABYLON_API CreateInstance( + Napi::Env env, + std::vector data, + std::string type) + { + return Internal::Blob::CreateInstance(env, std::move(data), std::move(type)); + } } diff --git a/Polyfills/Blob/Source/Blob.h b/Polyfills/Blob/Source/Blob.h index df04e834..6535ce5d 100644 --- a/Polyfills/Blob/Source/Blob.h +++ b/Polyfills/Blob/Source/Blob.h @@ -12,6 +12,11 @@ namespace Babylon::Polyfills::Internal public: static void Initialize(Napi::Env env); + static Napi::Value CreateInstance( + Napi::Env env, + std::vector data, + std::string type = ""); + explicit Blob(const Napi::CallbackInfo& info); private: From ea7836cd8c0f02e82d450964f4041ce2c8ef5e47 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Tue, 4 Nov 2025 18:44:22 -0500 Subject: [PATCH 2/4] Feedback --- Polyfills/Blob/Include/Babylon/Polyfills/Blob.h | 2 +- Polyfills/Blob/Source/Blob.cpp | 7 +++---- Polyfills/Blob/Source/Blob.h | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h b/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h index 08f9efb5..f8b8f9fd 100644 --- a/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h +++ b/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h @@ -13,5 +13,5 @@ namespace Babylon::Polyfills::Blob Napi::Value BABYLON_API CreateInstance( Napi::Env env, std::vector data, - std::string type = ""); + std::string type); } diff --git a/Polyfills/Blob/Source/Blob.cpp b/Polyfills/Blob/Source/Blob.cpp index 01cf57b6..a2478ff9 100644 --- a/Polyfills/Blob/Source/Blob.cpp +++ b/Polyfills/Blob/Source/Blob.cpp @@ -33,15 +33,14 @@ namespace Babylon::Polyfills::Internal Initialize(env); auto ctor{env.Global().Get(JS_BLOB_CONSTRUCTOR_NAME).As()}; - auto blobObj{ctor.New({})}; + auto jsBlob{ctor.New({})}; - auto blob{Blob::Unwrap(blobObj)}; + auto blob{Blob::Unwrap(jsBlob)}; blob->m_data = std::move(data); blob->m_type = std::move(type); - return blobObj; + return jsBlob; } - Blob::Blob(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) diff --git a/Polyfills/Blob/Source/Blob.h b/Polyfills/Blob/Source/Blob.h index 6535ce5d..da800a2f 100644 --- a/Polyfills/Blob/Source/Blob.h +++ b/Polyfills/Blob/Source/Blob.h @@ -15,7 +15,7 @@ namespace Babylon::Polyfills::Internal static Napi::Value CreateInstance( Napi::Env env, std::vector data, - std::string type = ""); + std::string type); explicit Blob(const Napi::CallbackInfo& info); From d6137cfa6b41dc005cd84bc434a1c12ac8792c57 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Tue, 4 Nov 2025 18:53:15 -0500 Subject: [PATCH 3/4] formatting --- Polyfills/Blob/Source/Blob.cpp | 18 ++++++++---------- Polyfills/Blob/Source/Blob.h | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Polyfills/Blob/Source/Blob.cpp b/Polyfills/Blob/Source/Blob.cpp index a2478ff9..180f1ff0 100644 --- a/Polyfills/Blob/Source/Blob.cpp +++ b/Polyfills/Blob/Source/Blob.cpp @@ -13,13 +13,11 @@ namespace Babylon::Polyfills::Internal Napi::Function func = DefineClass( env, JS_BLOB_CONSTRUCTOR_NAME, - { - InstanceAccessor("size", &Blob::GetSize, nullptr), + {InstanceAccessor("size", &Blob::GetSize, nullptr), InstanceAccessor("type", &Blob::GetType, nullptr), InstanceMethod("text", &Blob::Text), InstanceMethod("arrayBuffer", &Blob::ArrayBuffer), - InstanceMethod("bytes", &Blob::Bytes) - }); + InstanceMethod("bytes", &Blob::Bytes)}); env.Global().Set(JS_BLOB_CONSTRUCTOR_NAME, func); } @@ -28,20 +26,20 @@ namespace Babylon::Polyfills::Internal Napi::Value Blob::CreateInstance( Napi::Env env, std::vector data, - std::string type - ) { + std::string type) + { Initialize(env); - + auto ctor{env.Global().Get(JS_BLOB_CONSTRUCTOR_NAME).As()}; auto jsBlob{ctor.New({})}; - + auto blob{Blob::Unwrap(jsBlob)}; blob->m_data = std::move(data); blob->m_type = std::move(type); - + return jsBlob; } - + Blob::Blob(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { diff --git a/Polyfills/Blob/Source/Blob.h b/Polyfills/Blob/Source/Blob.h index da800a2f..e91fa49c 100644 --- a/Polyfills/Blob/Source/Blob.h +++ b/Polyfills/Blob/Source/Blob.h @@ -13,7 +13,7 @@ namespace Babylon::Polyfills::Internal static void Initialize(Napi::Env env); static Napi::Value CreateInstance( - Napi::Env env, + Napi::Env env, std::vector data, std::string type); From 23bbcf6ca02de77d938acac84580470c7705bf69 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:29:17 -0500 Subject: [PATCH 4/4] COMMA --- Polyfills/Blob/Source/Blob.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polyfills/Blob/Source/Blob.cpp b/Polyfills/Blob/Source/Blob.cpp index 180f1ff0..e29930c1 100644 --- a/Polyfills/Blob/Source/Blob.cpp +++ b/Polyfills/Blob/Source/Blob.cpp @@ -13,11 +13,13 @@ namespace Babylon::Polyfills::Internal Napi::Function func = DefineClass( env, JS_BLOB_CONSTRUCTOR_NAME, - {InstanceAccessor("size", &Blob::GetSize, nullptr), + { + InstanceAccessor("size", &Blob::GetSize, nullptr), InstanceAccessor("type", &Blob::GetType, nullptr), InstanceMethod("text", &Blob::Text), InstanceMethod("arrayBuffer", &Blob::ArrayBuffer), - InstanceMethod("bytes", &Blob::Bytes)}); + InstanceMethod("bytes", &Blob::Bytes), + }); env.Global().Set(JS_BLOB_CONSTRUCTOR_NAME, func); }