1*4440fb50SKudo Chien #include "NativeReanimatedModuleSpec.h"
2*4440fb50SKudo Chien 
3*4440fb50SKudo Chien #include <utility>
4*4440fb50SKudo Chien 
5*4440fb50SKudo Chien #define SPEC_PREFIX(FN_NAME) __hostFunction_NativeReanimatedModuleSpec_##FN_NAME
6*4440fb50SKudo Chien 
7*4440fb50SKudo Chien namespace reanimated {
8*4440fb50SKudo Chien 
SPEC_PREFIX(installCoreFunctions)9*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(installCoreFunctions)(
10*4440fb50SKudo Chien     jsi::Runtime &rt,
11*4440fb50SKudo Chien     TurboModule &turboModule,
12*4440fb50SKudo Chien     const jsi::Value *args,
13*4440fb50SKudo Chien     size_t count) {
14*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
15*4440fb50SKudo Chien       ->installCoreFunctions(rt, std::move(args[0]), std::move(args[1]));
16*4440fb50SKudo Chien   return jsi::Value::undefined();
17*4440fb50SKudo Chien }
18*4440fb50SKudo Chien 
19*4440fb50SKudo Chien // SharedValue
20*4440fb50SKudo Chien 
SPEC_PREFIX(makeShareableClone)21*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(makeShareableClone)(
22*4440fb50SKudo Chien     jsi::Runtime &rt,
23*4440fb50SKudo Chien     TurboModule &turboModule,
24*4440fb50SKudo Chien     const jsi::Value *args,
25*4440fb50SKudo Chien     size_t count) {
26*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
27*4440fb50SKudo Chien       ->makeShareableClone(rt, std::move(args[0]), std::move(args[1]));
28*4440fb50SKudo Chien }
29*4440fb50SKudo Chien 
30*4440fb50SKudo Chien // Sync methods
31*4440fb50SKudo Chien 
SPEC_PREFIX(makeSynchronizedDataHolder)32*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(makeSynchronizedDataHolder)(
33*4440fb50SKudo Chien     jsi::Runtime &rt,
34*4440fb50SKudo Chien     TurboModule &turboModule,
35*4440fb50SKudo Chien     const jsi::Value *args,
36*4440fb50SKudo Chien     size_t count) {
37*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
38*4440fb50SKudo Chien       ->makeSynchronizedDataHolder(rt, std::move(args[0]));
39*4440fb50SKudo Chien }
40*4440fb50SKudo Chien 
SPEC_PREFIX(getDataSynchronously)41*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(getDataSynchronously)(
42*4440fb50SKudo Chien     jsi::Runtime &rt,
43*4440fb50SKudo Chien     TurboModule &turboModule,
44*4440fb50SKudo Chien     const jsi::Value *args,
45*4440fb50SKudo Chien     size_t count) {
46*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
47*4440fb50SKudo Chien       ->getDataSynchronously(rt, std::move(args[0]));
48*4440fb50SKudo Chien }
49*4440fb50SKudo Chien 
50*4440fb50SKudo Chien // scheduler
51*4440fb50SKudo Chien 
SPEC_PREFIX(scheduleOnUI)52*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(scheduleOnUI)(
53*4440fb50SKudo Chien     jsi::Runtime &rt,
54*4440fb50SKudo Chien     TurboModule &turboModule,
55*4440fb50SKudo Chien     const jsi::Value *args,
56*4440fb50SKudo Chien     size_t count) {
57*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
58*4440fb50SKudo Chien       ->scheduleOnUI(rt, std::move(args[0]));
59*4440fb50SKudo Chien   return jsi::Value::undefined();
60*4440fb50SKudo Chien }
61*4440fb50SKudo Chien 
SPEC_PREFIX(registerEventHandler)62*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(registerEventHandler)(
63*4440fb50SKudo Chien     jsi::Runtime &rt,
64*4440fb50SKudo Chien     TurboModule &turboModule,
65*4440fb50SKudo Chien     const jsi::Value *args,
66*4440fb50SKudo Chien     size_t count) {
67*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
68*4440fb50SKudo Chien       ->registerEventHandler(rt, std::move(args[0]), std::move(args[1]));
69*4440fb50SKudo Chien }
70*4440fb50SKudo Chien 
SPEC_PREFIX(unregisterEventHandler)71*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(unregisterEventHandler)(
72*4440fb50SKudo Chien     jsi::Runtime &rt,
73*4440fb50SKudo Chien     TurboModule &turboModule,
74*4440fb50SKudo Chien     const jsi::Value *args,
75*4440fb50SKudo Chien     size_t count) {
76*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
77*4440fb50SKudo Chien       ->unregisterEventHandler(rt, std::move(args[0]));
78*4440fb50SKudo Chien   return jsi::Value::undefined();
79*4440fb50SKudo Chien }
80*4440fb50SKudo Chien 
SPEC_PREFIX(getViewProp)81*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(getViewProp)(
82*4440fb50SKudo Chien     jsi::Runtime &rt,
83*4440fb50SKudo Chien     TurboModule &turboModule,
84*4440fb50SKudo Chien     const jsi::Value *args,
85*4440fb50SKudo Chien     size_t count) {
86*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
87*4440fb50SKudo Chien       ->getViewProp(
88*4440fb50SKudo Chien           rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
89*4440fb50SKudo Chien   return jsi::Value::undefined();
90*4440fb50SKudo Chien }
91*4440fb50SKudo Chien 
SPEC_PREFIX(enableLayoutAnimations)92*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(enableLayoutAnimations)(
93*4440fb50SKudo Chien     jsi::Runtime &rt,
94*4440fb50SKudo Chien     TurboModule &turboModule,
95*4440fb50SKudo Chien     const jsi::Value *args,
96*4440fb50SKudo Chien     size_t count) {
97*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
98*4440fb50SKudo Chien       ->enableLayoutAnimations(rt, std::move(args[0]));
99*4440fb50SKudo Chien   return jsi::Value::undefined();
100*4440fb50SKudo Chien }
101*4440fb50SKudo Chien 
SPEC_PREFIX(registerSensor)102*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(registerSensor)(
103*4440fb50SKudo Chien     jsi::Runtime &rt,
104*4440fb50SKudo Chien     TurboModule &turboModule,
105*4440fb50SKudo Chien     const jsi::Value *args,
106*4440fb50SKudo Chien     size_t count) {
107*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
108*4440fb50SKudo Chien       ->registerSensor(
109*4440fb50SKudo Chien           rt,
110*4440fb50SKudo Chien           std::move(args[0]),
111*4440fb50SKudo Chien           std::move(args[1]),
112*4440fb50SKudo Chien           std::move(args[2]),
113*4440fb50SKudo Chien           std::move(args[3]));
114*4440fb50SKudo Chien }
115*4440fb50SKudo Chien 
SPEC_PREFIX(unregisterSensor)116*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(unregisterSensor)(
117*4440fb50SKudo Chien     jsi::Runtime &rt,
118*4440fb50SKudo Chien     TurboModule &turboModule,
119*4440fb50SKudo Chien     const jsi::Value *args,
120*4440fb50SKudo Chien     size_t count) {
121*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
122*4440fb50SKudo Chien       ->unregisterSensor(rt, std::move(args[0]));
123*4440fb50SKudo Chien   return jsi::Value::undefined();
124*4440fb50SKudo Chien }
125*4440fb50SKudo Chien 
SPEC_PREFIX(configureProps)126*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(configureProps)(
127*4440fb50SKudo Chien     jsi::Runtime &rt,
128*4440fb50SKudo Chien     TurboModule &turboModule,
129*4440fb50SKudo Chien     const jsi::Value *args,
130*4440fb50SKudo Chien     size_t count) {
131*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
132*4440fb50SKudo Chien       ->configureProps(rt, std::move(args[0]), std::move(args[1]));
133*4440fb50SKudo Chien   return jsi::Value::undefined();
134*4440fb50SKudo Chien }
135*4440fb50SKudo Chien 
SPEC_PREFIX(subscribeForKeyboardEvents)136*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(subscribeForKeyboardEvents)(
137*4440fb50SKudo Chien     jsi::Runtime &rt,
138*4440fb50SKudo Chien     TurboModule &turboModule,
139*4440fb50SKudo Chien     const jsi::Value *args,
140*4440fb50SKudo Chien     size_t count) {
141*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
142*4440fb50SKudo Chien       ->subscribeForKeyboardEvents(rt, std::move(args[0]), std::move(args[1]));
143*4440fb50SKudo Chien }
144*4440fb50SKudo Chien 
SPEC_PREFIX(unsubscribeFromKeyboardEvents)145*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(unsubscribeFromKeyboardEvents)(
146*4440fb50SKudo Chien     jsi::Runtime &rt,
147*4440fb50SKudo Chien     TurboModule &turboModule,
148*4440fb50SKudo Chien     const jsi::Value *args,
149*4440fb50SKudo Chien     size_t count) {
150*4440fb50SKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
151*4440fb50SKudo Chien       ->unsubscribeFromKeyboardEvents(rt, std::move(args[0]));
152*4440fb50SKudo Chien   return jsi::Value::undefined();
153*4440fb50SKudo Chien }
154*4440fb50SKudo Chien 
SPEC_PREFIX(configureLayoutAnimation)155*4440fb50SKudo Chien static jsi::Value SPEC_PREFIX(configureLayoutAnimation)(
156*4440fb50SKudo Chien     jsi::Runtime &rt,
157*4440fb50SKudo Chien     TurboModule &turboModule,
158*4440fb50SKudo Chien     const jsi::Value *args,
159*4440fb50SKudo Chien     size_t count) {
160*4440fb50SKudo Chien   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
161*4440fb50SKudo Chien       ->configureLayoutAnimation(
162*4440fb50SKudo Chien           rt,
163*4440fb50SKudo Chien           std::move(args[0]),
164*4440fb50SKudo Chien           std::move(args[1]),
165*4440fb50SKudo Chien           std::move(args[2]),
166*4440fb50SKudo Chien           std::move(args[3]));
167*4440fb50SKudo Chien }
168*4440fb50SKudo Chien 
NativeReanimatedModuleSpec(std::shared_ptr<CallInvoker> jsInvoker)169*4440fb50SKudo Chien NativeReanimatedModuleSpec::NativeReanimatedModuleSpec(
170*4440fb50SKudo Chien     std::shared_ptr<CallInvoker> jsInvoker)
171*4440fb50SKudo Chien     : TurboModule("NativeReanimated", jsInvoker) {
172*4440fb50SKudo Chien   methodMap_["installCoreFunctions"] =
173*4440fb50SKudo Chien       MethodMetadata{2, SPEC_PREFIX(installCoreFunctions)};
174*4440fb50SKudo Chien 
175*4440fb50SKudo Chien   methodMap_["makeShareableClone"] =
176*4440fb50SKudo Chien       MethodMetadata{2, SPEC_PREFIX(makeShareableClone)};
177*4440fb50SKudo Chien 
178*4440fb50SKudo Chien   methodMap_["makeSynchronizedDataHolder"] =
179*4440fb50SKudo Chien       MethodMetadata{1, SPEC_PREFIX(makeSynchronizedDataHolder)};
180*4440fb50SKudo Chien   methodMap_["getDataSynchronously"] =
181*4440fb50SKudo Chien       MethodMetadata{1, SPEC_PREFIX(getDataSynchronously)};
182*4440fb50SKudo Chien 
183*4440fb50SKudo Chien   methodMap_["scheduleOnUI"] = MethodMetadata{1, SPEC_PREFIX(scheduleOnUI)};
184*4440fb50SKudo Chien 
185*4440fb50SKudo Chien   methodMap_["registerEventHandler"] =
186*4440fb50SKudo Chien       MethodMetadata{2, SPEC_PREFIX(registerEventHandler)};
187*4440fb50SKudo Chien   methodMap_["unregisterEventHandler"] =
188*4440fb50SKudo Chien       MethodMetadata{1, SPEC_PREFIX(unregisterEventHandler)};
189*4440fb50SKudo Chien 
190*4440fb50SKudo Chien   methodMap_["getViewProp"] = MethodMetadata{3, SPEC_PREFIX(getViewProp)};
191*4440fb50SKudo Chien   methodMap_["enableLayoutAnimations"] =
192*4440fb50SKudo Chien       MethodMetadata{2, SPEC_PREFIX(enableLayoutAnimations)};
193*4440fb50SKudo Chien   methodMap_["registerSensor"] = MethodMetadata{4, SPEC_PREFIX(registerSensor)};
194*4440fb50SKudo Chien   methodMap_["unregisterSensor"] =
195*4440fb50SKudo Chien       MethodMetadata{1, SPEC_PREFIX(unregisterSensor)};
196*4440fb50SKudo Chien   methodMap_["configureProps"] = MethodMetadata{2, SPEC_PREFIX(configureProps)};
197*4440fb50SKudo Chien   methodMap_["subscribeForKeyboardEvents"] =
198*4440fb50SKudo Chien       MethodMetadata{2, SPEC_PREFIX(subscribeForKeyboardEvents)};
199*4440fb50SKudo Chien   methodMap_["unsubscribeFromKeyboardEvents"] =
200*4440fb50SKudo Chien       MethodMetadata{1, SPEC_PREFIX(unsubscribeFromKeyboardEvents)};
201*4440fb50SKudo Chien 
202*4440fb50SKudo Chien   methodMap_["configureLayoutAnimation"] =
203*4440fb50SKudo Chien       MethodMetadata{4, SPEC_PREFIX(configureLayoutAnimation)};
204*4440fb50SKudo Chien }
205*4440fb50SKudo Chien } // namespace reanimated
206