diff --git a/ReactCommon/cxxreact/BUCK b/ReactCommon/cxxreact/BUCK index 49b2b54e5..65cafc150 100644 --- a/ReactCommon/cxxreact/BUCK +++ b/ReactCommon/cxxreact/BUCK @@ -132,11 +132,11 @@ CXXREACT_PUBLIC_HEADERS = [ "ExecutorToken.h", "ExecutorTokenFactory.h", "Instance.h", + "JSBigString.h", + "JSBundleType.h", "JSCExecutor.h", "JSCNativeModules.h", "JSCWebWorker.h", - "JSBigString.h", - "JSBundleType.h", "JSIndexedRAMBundle.h", "JSModulesUnbundle.h", "MessageQueueThread.h", @@ -146,6 +146,7 @@ CXXREACT_PUBLIC_HEADERS = [ "NativeToJsBridge.h", "Platform.h", "RecoverableError.h", + "SharedProxyCxxModule.h", "SystraceSection.h", ] diff --git a/ReactCommon/cxxreact/SharedProxyCxxModule.h b/ReactCommon/cxxreact/SharedProxyCxxModule.h new file mode 100644 index 000000000..b8c9769a6 --- /dev/null +++ b/ReactCommon/cxxreact/SharedProxyCxxModule.h @@ -0,0 +1,35 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include + +#include + +namespace facebook { namespace xplat { namespace module { + +// Allows a Cxx-module to be shared or reused across multiple React instances +// Caveat: the setInstance call is not forwarded, so usages of getInstance inside your +// module (e.g. dispatching events) will always be nullptr. +class SharedProxyCxxModule : public CxxModule { +public: + explicit SharedProxyCxxModule(std::shared_ptr shared) + : shared_(shared) {} + + std::string getName() override { + return shared_->getName(); + } + + auto getConstants() -> std::map override { + return shared_->getConstants(); + } + + auto getMethods() -> std::vector override { + return shared_->getMethods(); + } + +private: + std::shared_ptr shared_; +}; + +} +} +}