mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
8aea93022b
Summary: The TurboModuleUtils.h includes "folly/Optional.h" which is not used and creates an unnecessary dependency on Folly. In this PR we remove this unnecessary include. It is required for the https://github.com/microsoft/react-native-windows/pull/6804 where we add an experimental support for the C++ TurboModules. While the C++ TurboModules use the same JSI and TurboModule code defined in react-native, we provide a layer that let them to work over the ABI-safe Microsoft.ReactNative.dll boundary. The RNW Nuget distribution with DLL files includes a few source files to create native/turbo modules that work through the ABI-safe API. The TurboModuleUtils.h is one of such files. By removing the dependency on Folly we reduce requirements for the native module code. After this PR is merged we will remove the fork of the TurboModuleUtils.h added in https://github.com/microsoft/react-native-windows/pull/6804. ## Changelog [Internal] [Fixed] - Remove dependency on Folly in TurboModuleUtils.h Pull Request resolved: https://github.com/facebook/react-native/pull/30672 Test Plan: The change does not bring any functional changes. It may only affect code compilation where some code may depend on TurboModuleUtils.h when it needs the "folly/Optional.h". The fix is add the `#include <folly/Optional.h>` there explicitly. I had run the iOS tests and they passed: ``` yarn pod install in packages\rn-tester ./scripts/objc-test.sh test ``` Reviewed By: mdvacca Differential Revision: D25758927 Pulled By: fkgozali fbshipit-source-id: 347d8f6bc333a3df67095ea0dc7221c818432fab
89 lines
2.1 KiB
C++
89 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its 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 <cassert>
|
|
#include <string>
|
|
|
|
#include <jsi/jsi.h>
|
|
|
|
#include <ReactCommon/CallInvoker.h>
|
|
#include <ReactCommon/LongLivedObject.h>
|
|
|
|
using namespace facebook;
|
|
|
|
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<void(jsi::Runtime &rt, std::shared_ptr<Promise>)>;
|
|
jsi::Value createPromiseAsJSIValue(
|
|
jsi::Runtime &rt,
|
|
const PromiseSetupFunctionType func);
|
|
|
|
// Helper for passing jsi::Function arg to other methods.
|
|
class CallbackWrapper : public LongLivedObject {
|
|
private:
|
|
CallbackWrapper(
|
|
jsi::Function &&callback,
|
|
jsi::Runtime &runtime,
|
|
std::shared_ptr<CallInvoker> jsInvoker)
|
|
: callback_(std::move(callback)),
|
|
runtime_(runtime),
|
|
jsInvoker_(std::move(jsInvoker)) {}
|
|
|
|
jsi::Function callback_;
|
|
jsi::Runtime &runtime_;
|
|
std::shared_ptr<CallInvoker> jsInvoker_;
|
|
|
|
public:
|
|
static std::weak_ptr<CallbackWrapper> createWeak(
|
|
jsi::Function &&callback,
|
|
jsi::Runtime &runtime,
|
|
std::shared_ptr<CallInvoker> jsInvoker) {
|
|
auto wrapper = std::shared_ptr<CallbackWrapper>(
|
|
new CallbackWrapper(std::move(callback), runtime, jsInvoker));
|
|
LongLivedObjectCollection::get().add(wrapper);
|
|
return wrapper;
|
|
}
|
|
|
|
// Delete the enclosed jsi::Function
|
|
void destroy() {
|
|
allowRelease();
|
|
}
|
|
|
|
jsi::Function &callback() {
|
|
return callback_;
|
|
}
|
|
|
|
jsi::Runtime &runtime() {
|
|
return runtime_;
|
|
}
|
|
|
|
CallInvoker &jsInvoker() {
|
|
return *(jsInvoker_);
|
|
}
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|