/* * 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 namespace facebook::react { class HermesExecutorFactory : public JSExecutorFactory { public: explicit HermesExecutorFactory( JSIExecutor::RuntimeInstaller runtimeInstaller, const JSIScopedTimeoutInvoker& timeoutInvoker = JSIExecutor::defaultTimeoutInvoker, ::hermes::vm::RuntimeConfig runtimeConfig = defaultRuntimeConfig()) : runtimeInstaller_(runtimeInstaller), timeoutInvoker_(timeoutInvoker), runtimeConfig_(std::move(runtimeConfig)) { assert(timeoutInvoker_ && "Should not have empty timeoutInvoker"); } void setEnableDebugger(bool enableDebugger); void setDebuggerName(const std::string& debuggerName); std::unique_ptr createJSExecutor( std::shared_ptr delegate, std::shared_ptr jsQueue) override; private: static ::hermes::vm::RuntimeConfig defaultRuntimeConfig(); JSIExecutor::RuntimeInstaller runtimeInstaller_; JSIScopedTimeoutInvoker timeoutInvoker_; ::hermes::vm::RuntimeConfig runtimeConfig_; bool enableDebugger_ = true; std::string debuggerName_ = "Hermes React Native"; }; class HermesExecutor : public JSIExecutor { public: HermesExecutor( std::shared_ptr runtime, std::shared_ptr delegate, std::shared_ptr jsQueue, const JSIScopedTimeoutInvoker& timeoutInvoker, RuntimeInstaller runtimeInstaller); private: JSIScopedTimeoutInvoker timeoutInvoker_; }; } // namespace facebook::react