1fa88aeb8STomasz Sapeta // Copyright 2022-present 650 Industries. All rights reserved.
2fa88aeb8STomasz Sapeta
3fa88aeb8STomasz Sapeta #include "JSIUtils.h"
4fa88aeb8STomasz Sapeta
5*e1f25825SŁukasz Kosmaty namespace expo::common {
6fa88aeb8STomasz Sapeta
jsiArrayToPropNameIdsVector(jsi::Runtime & runtime,const jsi::Array & array)7fa88aeb8STomasz Sapeta std::vector<jsi::PropNameID> jsiArrayToPropNameIdsVector(jsi::Runtime &runtime, const jsi::Array &array) {
8fa88aeb8STomasz Sapeta size_t size = array.size(runtime);
9fa88aeb8STomasz Sapeta std::vector<jsi::PropNameID> vector;
10fa88aeb8STomasz Sapeta
11fa88aeb8STomasz Sapeta vector.reserve(size);
12fa88aeb8STomasz Sapeta
13fa88aeb8STomasz Sapeta for (size_t i = 0; i < size; i++) {
14fa88aeb8STomasz Sapeta jsi::String name = array.getValueAtIndex(runtime, i).getString(runtime);
15fa88aeb8STomasz Sapeta vector.push_back(jsi::PropNameID::forString(runtime, name));
16fa88aeb8STomasz Sapeta }
17fa88aeb8STomasz Sapeta return vector;
18fa88aeb8STomasz Sapeta }
19fa88aeb8STomasz Sapeta
definePropertyOnJSIObject(jsi::Runtime & runtime,jsi::Object * jsthis,const char * name,jsi::Object descriptor)20*e1f25825SŁukasz Kosmaty void definePropertyOnJSIObject(
21*e1f25825SŁukasz Kosmaty jsi::Runtime &runtime,
22*e1f25825SŁukasz Kosmaty jsi::Object *jsthis,
23*e1f25825SŁukasz Kosmaty const char *name,
24*e1f25825SŁukasz Kosmaty jsi::Object descriptor
25*e1f25825SŁukasz Kosmaty ) {
26*e1f25825SŁukasz Kosmaty jsi::Object global = runtime.global();
27*e1f25825SŁukasz Kosmaty jsi::Object objectClass = global.getPropertyAsObject(runtime, "Object");
28*e1f25825SŁukasz Kosmaty jsi::Function definePropertyFunction = objectClass.getPropertyAsFunction(
29*e1f25825SŁukasz Kosmaty runtime,
30*e1f25825SŁukasz Kosmaty "defineProperty"
31*e1f25825SŁukasz Kosmaty );
32*e1f25825SŁukasz Kosmaty
33*e1f25825SŁukasz Kosmaty // This call is basically the same as `Object.defineProperty(object, name, descriptor)` in JS
34*e1f25825SŁukasz Kosmaty definePropertyFunction.callWithThis(runtime, objectClass, {
35*e1f25825SŁukasz Kosmaty jsi::Value(runtime, *jsthis),
36*e1f25825SŁukasz Kosmaty jsi::String::createFromUtf8(runtime, name),
37*e1f25825SŁukasz Kosmaty std::move(descriptor),
38*e1f25825SŁukasz Kosmaty });
39*e1f25825SŁukasz Kosmaty }
40*e1f25825SŁukasz Kosmaty
41*e1f25825SŁukasz Kosmaty } // namespace expo::common
42