diff --git a/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h b/Polyfills/Blob/Include/Babylon/Polyfills/Blob.h index 744b90e5..f8b8f9fd 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..e29930c1 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( @@ -17,13 +18,30 @@ namespace Babylon::Polyfills::Internal 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); } } + 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 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) { @@ -133,4 +151,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..e91fa49c 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: