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