1*753557f6STomasz Sapeta #include "RemoteObject.h"
2*753557f6STomasz Sapeta #include <ABI47_0_0jsi/ABI47_0_0jsi.h>
3*753557f6STomasz Sapeta #include "RuntimeDecorator.h"
4*753557f6STomasz Sapeta #include "SharedParent.h"
5*753557f6STomasz Sapeta 
6*753557f6STomasz Sapeta using namespace ABI47_0_0facebook;
7*753557f6STomasz Sapeta 
8*753557f6STomasz Sapeta namespace ABI47_0_0reanimated {
9*753557f6STomasz Sapeta 
maybeInitializeOnWorkletRuntime(jsi::Runtime & rt)10*753557f6STomasz Sapeta void RemoteObject::maybeInitializeOnWorkletRuntime(jsi::Runtime &rt) {
11*753557f6STomasz Sapeta   if (initializer.get() != nullptr) {
12*753557f6STomasz Sapeta     backing = getWeakRef(rt);
13*753557f6STomasz Sapeta     *backing.lock() = initializer->shallowClone(rt);
14*753557f6STomasz Sapeta     initializer = nullptr;
15*753557f6STomasz Sapeta   }
16*753557f6STomasz Sapeta }
17*753557f6STomasz Sapeta 
get(jsi::Runtime & rt,const jsi::PropNameID & name)18*753557f6STomasz Sapeta jsi::Value RemoteObject::get(jsi::Runtime &rt, const jsi::PropNameID &name) {
19*753557f6STomasz Sapeta   if (RuntimeDecorator::isWorkletRuntime(rt)) {
20*753557f6STomasz Sapeta     return backing.lock()->getObject(rt).getProperty(rt, name);
21*753557f6STomasz Sapeta   }
22*753557f6STomasz Sapeta   return jsi::Value::undefined();
23*753557f6STomasz Sapeta }
24*753557f6STomasz Sapeta 
set(jsi::Runtime & rt,const jsi::PropNameID & name,const jsi::Value & value)25*753557f6STomasz Sapeta void RemoteObject::set(
26*753557f6STomasz Sapeta     jsi::Runtime &rt,
27*753557f6STomasz Sapeta     const jsi::PropNameID &name,
28*753557f6STomasz Sapeta     const jsi::Value &value) {
29*753557f6STomasz Sapeta   if (RuntimeDecorator::isWorkletRuntime(rt)) {
30*753557f6STomasz Sapeta     backing.lock()->getObject(rt).setProperty(rt, name, value);
31*753557f6STomasz Sapeta   }
32*753557f6STomasz Sapeta   // TODO: we should throw if trying to update remote from host runtime
33*753557f6STomasz Sapeta }
34*753557f6STomasz Sapeta 
getPropertyNames(jsi::Runtime & rt)35*753557f6STomasz Sapeta std::vector<jsi::PropNameID> RemoteObject::getPropertyNames(jsi::Runtime &rt) {
36*753557f6STomasz Sapeta   std::vector<jsi::PropNameID> res;
37*753557f6STomasz Sapeta   auto propertyNames = backing.lock()->getObject(rt).getPropertyNames(rt);
38*753557f6STomasz Sapeta   for (size_t i = 0, size = propertyNames.size(rt); i < size; i++) {
39*753557f6STomasz Sapeta     res.push_back(jsi::PropNameID::forString(
40*753557f6STomasz Sapeta         rt, propertyNames.getValueAtIndex(rt, i).asString(rt)));
41*753557f6STomasz Sapeta   }
42*753557f6STomasz Sapeta   return res;
43*753557f6STomasz Sapeta }
44*753557f6STomasz Sapeta 
45*753557f6STomasz Sapeta } // namespace reanimated
46