1*ab11e3c9SKudo Chien #pragma once
2*ab11e3c9SKudo Chien 
3*ab11e3c9SKudo Chien #include <memory>
4*ab11e3c9SKudo Chien #include <vector>
5*ab11e3c9SKudo Chien 
6*ab11e3c9SKudo Chien #include "FrozenObject.h"
7*ab11e3c9SKudo Chien #include "JSIStoreValueUser.h"
8*ab11e3c9SKudo Chien #include "SharedParent.h"
9*ab11e3c9SKudo Chien 
10*ab11e3c9SKudo Chien using namespace facebook;
11*ab11e3c9SKudo Chien 
12*ab11e3c9SKudo Chien namespace reanimated {
13*ab11e3c9SKudo Chien 
14*ab11e3c9SKudo Chien class RemoteObject : public jsi::HostObject, public StoreUser {
15*ab11e3c9SKudo Chien  private:
16*ab11e3c9SKudo Chien   std::weak_ptr<jsi::Value> backing;
17*ab11e3c9SKudo Chien   std::unique_ptr<FrozenObject> initializer;
18*ab11e3c9SKudo Chien 
19*ab11e3c9SKudo Chien  public:
20*ab11e3c9SKudo Chien   void maybeInitializeOnWorkletRuntime(jsi::Runtime &rt);
RemoteObject(jsi::Runtime & rt,const jsi::Object & object,RuntimeManager * runtimeManager,std::shared_ptr<Scheduler> s)21*ab11e3c9SKudo Chien   RemoteObject(
22*ab11e3c9SKudo Chien       jsi::Runtime &rt,
23*ab11e3c9SKudo Chien       const jsi::Object &object,
24*ab11e3c9SKudo Chien       RuntimeManager *runtimeManager,
25*ab11e3c9SKudo Chien       std::shared_ptr<Scheduler> s)
26*ab11e3c9SKudo Chien       : StoreUser(s, *runtimeManager),
27*ab11e3c9SKudo Chien         initializer(
28*ab11e3c9SKudo Chien             std::make_unique<FrozenObject>(rt, object, runtimeManager)) {}
29*ab11e3c9SKudo Chien   void
30*ab11e3c9SKudo Chien   set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi::Value &value);
31*ab11e3c9SKudo Chien   jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &name);
32*ab11e3c9SKudo Chien   std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt);
33*ab11e3c9SKudo Chien };
34*ab11e3c9SKudo Chien 
35*ab11e3c9SKudo Chien } // namespace reanimated
36