1a48bc6c0SBrent Vatne #include "NativeReanimatedModuleSpec.h"
2a48bc6c0SBrent Vatne 
304819bfdSŁukasz Kosmaty #include <utility>
404819bfdSŁukasz Kosmaty 
53b78aaffSTomasz Sapeta #define SPEC_PREFIX(FN_NAME) __hostFunction_NativeReanimatedModuleSpec_##FN_NAME
63b78aaffSTomasz Sapeta 
7a48bc6c0SBrent Vatne namespace reanimated {
8a48bc6c0SBrent Vatne 
SPEC_PREFIX(installCoreFunctions)93b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(installCoreFunctions)(
10a48bc6c0SBrent Vatne     jsi::Runtime &rt,
11a48bc6c0SBrent Vatne     TurboModule &turboModule,
12a48bc6c0SBrent Vatne     const jsi::Value *args,
13a48bc6c0SBrent Vatne     size_t count) {
14a48bc6c0SBrent Vatne   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
15*5f154df9Saleqsio       ->installCoreFunctions(rt, std::move(args[0]), std::move(args[1]));
16a48bc6c0SBrent Vatne   return jsi::Value::undefined();
17a48bc6c0SBrent Vatne }
18a48bc6c0SBrent Vatne 
19a48bc6c0SBrent Vatne // SharedValue
20a48bc6c0SBrent Vatne 
SPEC_PREFIX(makeShareableClone)21*5f154df9Saleqsio static jsi::Value SPEC_PREFIX(makeShareableClone)(
22a48bc6c0SBrent Vatne     jsi::Runtime &rt,
23a48bc6c0SBrent Vatne     TurboModule &turboModule,
24a48bc6c0SBrent Vatne     const jsi::Value *args,
25a48bc6c0SBrent Vatne     size_t count) {
26a48bc6c0SBrent Vatne   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
27*5f154df9Saleqsio       ->makeShareableClone(rt, std::move(args[0]), std::move(args[1]));
28a48bc6c0SBrent Vatne }
29a48bc6c0SBrent Vatne 
30*5f154df9Saleqsio // Sync methods
31*5f154df9Saleqsio 
SPEC_PREFIX(makeSynchronizedDataHolder)32*5f154df9Saleqsio static jsi::Value SPEC_PREFIX(makeSynchronizedDataHolder)(
33a48bc6c0SBrent Vatne     jsi::Runtime &rt,
34a48bc6c0SBrent Vatne     TurboModule &turboModule,
35a48bc6c0SBrent Vatne     const jsi::Value *args,
36a48bc6c0SBrent Vatne     size_t count) {
37a48bc6c0SBrent Vatne   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
38*5f154df9Saleqsio       ->makeSynchronizedDataHolder(rt, std::move(args[0]));
39a48bc6c0SBrent Vatne }
40a48bc6c0SBrent Vatne 
SPEC_PREFIX(getDataSynchronously)41*5f154df9Saleqsio static jsi::Value SPEC_PREFIX(getDataSynchronously)(
42a48bc6c0SBrent Vatne     jsi::Runtime &rt,
43a48bc6c0SBrent Vatne     TurboModule &turboModule,
44a48bc6c0SBrent Vatne     const jsi::Value *args,
45a48bc6c0SBrent Vatne     size_t count) {
46a48bc6c0SBrent Vatne   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
47*5f154df9Saleqsio       ->getDataSynchronously(rt, std::move(args[0]));
48a48bc6c0SBrent Vatne }
49a48bc6c0SBrent Vatne 
50*5f154df9Saleqsio // scheduler
51a48bc6c0SBrent Vatne 
SPEC_PREFIX(scheduleOnUI)52*5f154df9Saleqsio static jsi::Value SPEC_PREFIX(scheduleOnUI)(
53a48bc6c0SBrent Vatne     jsi::Runtime &rt,
54a48bc6c0SBrent Vatne     TurboModule &turboModule,
55a48bc6c0SBrent Vatne     const jsi::Value *args,
56a48bc6c0SBrent Vatne     size_t count) {
57a48bc6c0SBrent Vatne   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
58*5f154df9Saleqsio       ->scheduleOnUI(rt, std::move(args[0]));
59a48bc6c0SBrent Vatne   return jsi::Value::undefined();
60a48bc6c0SBrent Vatne }
61a48bc6c0SBrent Vatne 
SPEC_PREFIX(registerEventHandler)623b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(registerEventHandler)(
63a48bc6c0SBrent Vatne     jsi::Runtime &rt,
64a48bc6c0SBrent Vatne     TurboModule &turboModule,
65a48bc6c0SBrent Vatne     const jsi::Value *args,
66a48bc6c0SBrent Vatne     size_t count) {
67a48bc6c0SBrent Vatne   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
68a48bc6c0SBrent Vatne       ->registerEventHandler(rt, std::move(args[0]), std::move(args[1]));
69a48bc6c0SBrent Vatne }
70a48bc6c0SBrent Vatne 
SPEC_PREFIX(unregisterEventHandler)713b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(unregisterEventHandler)(
72a48bc6c0SBrent Vatne     jsi::Runtime &rt,
73a48bc6c0SBrent Vatne     TurboModule &turboModule,
74a48bc6c0SBrent Vatne     const jsi::Value *args,
75a48bc6c0SBrent Vatne     size_t count) {
76a48bc6c0SBrent Vatne   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
77a48bc6c0SBrent Vatne       ->unregisterEventHandler(rt, std::move(args[0]));
78a48bc6c0SBrent Vatne   return jsi::Value::undefined();
79a48bc6c0SBrent Vatne }
80a48bc6c0SBrent Vatne 
SPEC_PREFIX(getViewProp)813b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(getViewProp)(
82a48bc6c0SBrent Vatne     jsi::Runtime &rt,
83a48bc6c0SBrent Vatne     TurboModule &turboModule,
84a48bc6c0SBrent Vatne     const jsi::Value *args,
85a48bc6c0SBrent Vatne     size_t count) {
86a48bc6c0SBrent Vatne   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
87c7e4709dSKudo Chien       ->getViewProp(
88c7e4709dSKudo Chien           rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
89a48bc6c0SBrent Vatne   return jsi::Value::undefined();
90a48bc6c0SBrent Vatne }
91a48bc6c0SBrent Vatne 
SPEC_PREFIX(enableLayoutAnimations)923b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(enableLayoutAnimations)(
93c7e4709dSKudo Chien     jsi::Runtime &rt,
94c7e4709dSKudo Chien     TurboModule &turboModule,
95c7e4709dSKudo Chien     const jsi::Value *args,
96c7e4709dSKudo Chien     size_t count) {
97c7e4709dSKudo Chien   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
98c7e4709dSKudo Chien       ->enableLayoutAnimations(rt, std::move(args[0]));
99c7e4709dSKudo Chien   return jsi::Value::undefined();
100c7e4709dSKudo Chien }
101c7e4709dSKudo Chien 
SPEC_PREFIX(registerSensor)1023b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(registerSensor)(
1033b78aaffSTomasz Sapeta     jsi::Runtime &rt,
1043b78aaffSTomasz Sapeta     TurboModule &turboModule,
1053b78aaffSTomasz Sapeta     const jsi::Value *args,
1063b78aaffSTomasz Sapeta     size_t count) {
1073b78aaffSTomasz Sapeta   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
1083b78aaffSTomasz Sapeta       ->registerSensor(
109*5f154df9Saleqsio           rt,
110*5f154df9Saleqsio           std::move(args[0]),
111*5f154df9Saleqsio           std::move(args[1]),
112*5f154df9Saleqsio           std::move(args[2]),
113*5f154df9Saleqsio           std::move(args[3]));
1143b78aaffSTomasz Sapeta }
1153b78aaffSTomasz Sapeta 
SPEC_PREFIX(unregisterSensor)1163b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(unregisterSensor)(
1173b78aaffSTomasz Sapeta     jsi::Runtime &rt,
1183b78aaffSTomasz Sapeta     TurboModule &turboModule,
1193b78aaffSTomasz Sapeta     const jsi::Value *args,
1203b78aaffSTomasz Sapeta     size_t count) {
1213b78aaffSTomasz Sapeta   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
1223b78aaffSTomasz Sapeta       ->unregisterSensor(rt, std::move(args[0]));
1233b78aaffSTomasz Sapeta   return jsi::Value::undefined();
1243b78aaffSTomasz Sapeta }
1253b78aaffSTomasz Sapeta 
SPEC_PREFIX(configureProps)1263b78aaffSTomasz Sapeta static jsi::Value SPEC_PREFIX(configureProps)(
1273b78aaffSTomasz Sapeta     jsi::Runtime &rt,
1283b78aaffSTomasz Sapeta     TurboModule &turboModule,
1293b78aaffSTomasz Sapeta     const jsi::Value *args,
1303b78aaffSTomasz Sapeta     size_t count) {
1313b78aaffSTomasz Sapeta   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
1323b78aaffSTomasz Sapeta       ->configureProps(rt, std::move(args[0]), std::move(args[1]));
1333b78aaffSTomasz Sapeta   return jsi::Value::undefined();
1343b78aaffSTomasz Sapeta }
1353b78aaffSTomasz Sapeta 
SPEC_PREFIX(subscribeForKeyboardEvents)13604819bfdSŁukasz Kosmaty static jsi::Value SPEC_PREFIX(subscribeForKeyboardEvents)(
13704819bfdSŁukasz Kosmaty     jsi::Runtime &rt,
13804819bfdSŁukasz Kosmaty     TurboModule &turboModule,
13904819bfdSŁukasz Kosmaty     const jsi::Value *args,
14004819bfdSŁukasz Kosmaty     size_t count) {
14104819bfdSŁukasz Kosmaty   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
142*5f154df9Saleqsio       ->subscribeForKeyboardEvents(rt, std::move(args[0]), std::move(args[1]));
14304819bfdSŁukasz Kosmaty }
14404819bfdSŁukasz Kosmaty 
SPEC_PREFIX(unsubscribeFromKeyboardEvents)14504819bfdSŁukasz Kosmaty static jsi::Value SPEC_PREFIX(unsubscribeFromKeyboardEvents)(
14604819bfdSŁukasz Kosmaty     jsi::Runtime &rt,
14704819bfdSŁukasz Kosmaty     TurboModule &turboModule,
14804819bfdSŁukasz Kosmaty     const jsi::Value *args,
14904819bfdSŁukasz Kosmaty     size_t count) {
15004819bfdSŁukasz Kosmaty   static_cast<NativeReanimatedModuleSpec *>(&turboModule)
15104819bfdSŁukasz Kosmaty       ->unsubscribeFromKeyboardEvents(rt, std::move(args[0]));
15204819bfdSŁukasz Kosmaty   return jsi::Value::undefined();
15304819bfdSŁukasz Kosmaty }
15404819bfdSŁukasz Kosmaty 
SPEC_PREFIX(configureLayoutAnimation)155*5f154df9Saleqsio static jsi::Value SPEC_PREFIX(configureLayoutAnimation)(
156*5f154df9Saleqsio     jsi::Runtime &rt,
157*5f154df9Saleqsio     TurboModule &turboModule,
158*5f154df9Saleqsio     const jsi::Value *args,
159*5f154df9Saleqsio     size_t count) {
160*5f154df9Saleqsio   return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
161*5f154df9Saleqsio       ->configureLayoutAnimation(
162*5f154df9Saleqsio           rt,
163*5f154df9Saleqsio           std::move(args[0]),
164*5f154df9Saleqsio           std::move(args[1]),
165*5f154df9Saleqsio           std::move(args[2]),
166*5f154df9Saleqsio           std::move(args[3]));
167*5f154df9Saleqsio }
168*5f154df9Saleqsio 
NativeReanimatedModuleSpec(std::shared_ptr<CallInvoker> jsInvoker)169c7e4709dSKudo Chien NativeReanimatedModuleSpec::NativeReanimatedModuleSpec(
170c7e4709dSKudo Chien     std::shared_ptr<CallInvoker> jsInvoker)
171a48bc6c0SBrent Vatne     : TurboModule("NativeReanimated", jsInvoker) {
1723b78aaffSTomasz Sapeta   methodMap_["installCoreFunctions"] =
173*5f154df9Saleqsio       MethodMetadata{2, SPEC_PREFIX(installCoreFunctions)};
174a48bc6c0SBrent Vatne 
175*5f154df9Saleqsio   methodMap_["makeShareableClone"] =
176*5f154df9Saleqsio       MethodMetadata{2, SPEC_PREFIX(makeShareableClone)};
177a48bc6c0SBrent Vatne 
178*5f154df9Saleqsio   methodMap_["makeSynchronizedDataHolder"] =
179*5f154df9Saleqsio       MethodMetadata{1, SPEC_PREFIX(makeSynchronizedDataHolder)};
180*5f154df9Saleqsio   methodMap_["getDataSynchronously"] =
181*5f154df9Saleqsio       MethodMetadata{1, SPEC_PREFIX(getDataSynchronously)};
182*5f154df9Saleqsio 
183*5f154df9Saleqsio   methodMap_["scheduleOnUI"] = MethodMetadata{1, SPEC_PREFIX(scheduleOnUI)};
184a48bc6c0SBrent Vatne 
1853b78aaffSTomasz Sapeta   methodMap_["registerEventHandler"] =
1863b78aaffSTomasz Sapeta       MethodMetadata{2, SPEC_PREFIX(registerEventHandler)};
1873b78aaffSTomasz Sapeta   methodMap_["unregisterEventHandler"] =
1883b78aaffSTomasz Sapeta       MethodMetadata{1, SPEC_PREFIX(unregisterEventHandler)};
189a48bc6c0SBrent Vatne 
1903b78aaffSTomasz Sapeta   methodMap_["getViewProp"] = MethodMetadata{3, SPEC_PREFIX(getViewProp)};
1913b78aaffSTomasz Sapeta   methodMap_["enableLayoutAnimations"] =
1923b78aaffSTomasz Sapeta       MethodMetadata{2, SPEC_PREFIX(enableLayoutAnimations)};
193*5f154df9Saleqsio   methodMap_["registerSensor"] = MethodMetadata{4, SPEC_PREFIX(registerSensor)};
1943b78aaffSTomasz Sapeta   methodMap_["unregisterSensor"] =
1953b78aaffSTomasz Sapeta       MethodMetadata{1, SPEC_PREFIX(unregisterSensor)};
1963b78aaffSTomasz Sapeta   methodMap_["configureProps"] = MethodMetadata{2, SPEC_PREFIX(configureProps)};
19704819bfdSŁukasz Kosmaty   methodMap_["subscribeForKeyboardEvents"] =
198*5f154df9Saleqsio       MethodMetadata{2, SPEC_PREFIX(subscribeForKeyboardEvents)};
19904819bfdSŁukasz Kosmaty   methodMap_["unsubscribeFromKeyboardEvents"] =
20004819bfdSŁukasz Kosmaty       MethodMetadata{1, SPEC_PREFIX(unsubscribeFromKeyboardEvents)};
201*5f154df9Saleqsio 
202*5f154df9Saleqsio   methodMap_["configureLayoutAnimation"] =
203*5f154df9Saleqsio       MethodMetadata{4, SPEC_PREFIX(configureLayoutAnimation)};
204a48bc6c0SBrent Vatne }
205c7e4709dSKudo Chien } // namespace reanimated
206