1 #include "JSReferencesCache.h" 2 3 namespace expo { 4 JSReferencesCache::JSReferencesCache(jsi::Runtime &runtime) { 5 jsObjectRegistry.emplace( 6 JSKeys::PROMISE, 7 std::make_unique<jsi::Object>( 8 runtime.global().getPropertyAsFunction(runtime, "Promise") 9 ) 10 ); 11 12 if (runtime.global().hasProperty(runtime, "ExpoModulesCore_CodedError")) { 13 auto jsCodedError = runtime.global() 14 .getPropertyAsFunction(runtime, "ExpoModulesCore_CodedError"); 15 16 jsObjectRegistry.emplace( 17 JSKeys::CODED_ERROR, 18 std::make_unique<jsi::Object>(std::move(jsCodedError)) 19 ); 20 } 21 } 22 23 jsi::PropNameID &JSReferencesCache::getPropNameID( 24 jsi::Runtime &runtime, 25 const std::string &name 26 ) { 27 auto propName = propNameIDRegistry.find(name); 28 29 if (propName == propNameIDRegistry.end()) { 30 auto propNameID = std::make_unique<jsi::PropNameID>(jsi::PropNameID::forAscii(runtime, name)); 31 auto [result, _] = propNameIDRegistry.emplace(name, std::move(propNameID)); 32 return *result->second; 33 } 34 return *propName->second; 35 } 36 } // namespace expo 37