/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include #include #include #include namespace facebook { namespace react { jsi::Object deepCopyJSIObject(jsi::Runtime &rt, const jsi::Object &obj); jsi::Array deepCopyJSIArray(jsi::Runtime &rt, const jsi::Array &arr); struct Promise : public LongLivedObject { Promise(jsi::Runtime &rt, jsi::Function resolve, jsi::Function reject); void resolve(const jsi::Value &result); void reject(const std::string &error); jsi::Runtime &runtime_; jsi::Function resolve_; jsi::Function reject_; }; using PromiseSetupFunctionType = std::function)>; jsi::Value createPromiseAsJSIValue( jsi::Runtime &rt, const PromiseSetupFunctionType func); class RAIICallbackWrapperDestroyer { public: RAIICallbackWrapperDestroyer(std::weak_ptr callbackWrapper) : callbackWrapper_(callbackWrapper) {} ~RAIICallbackWrapperDestroyer() { auto strongWrapper = callbackWrapper_.lock(); if (!strongWrapper) { return; } strongWrapper->destroy(); } private: std::weak_ptr callbackWrapper_; }; } // namespace react } // namespace facebook