1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #pragma once 4 5 #include <jsi/jsi.h> 6 7 #include <memory> 8 9 namespace expo { 10 11 namespace jsi = facebook::jsi; 12 13 class JavaScriptRuntime; 14 15 class JSIInteropModuleRegistry; 16 17 /** 18 * A convenient class to access underlying jni::Runtime and hold a weak reference to expo::JavaScriptRuntime. 19 * It's working like std::weak_ptr but can have more helper methods. 20 */ 21 class WeakRuntimeHolder : public std::weak_ptr<JavaScriptRuntime> { 22 public: 23 WeakRuntimeHolder() = default; 24 25 WeakRuntimeHolder(WeakRuntimeHolder const &) = default; 26 27 WeakRuntimeHolder(WeakRuntimeHolder &&) = default; 28 29 WeakRuntimeHolder(std::weak_ptr<JavaScriptRuntime> runtime); 30 31 /** 32 * @return an reference to the jsi::Runtime. 33 */ 34 jsi::Runtime &getJSRuntime(); 35 36 JSIInteropModuleRegistry *getModuleRegistry(); 37 38 void ensureRuntimeIsValid(); 39 }; 40 } // namespace expo 41