JSValueRef JSCNativeModules::getModule(JSContextRef context, JSStringRef jsName) { std::string moduleName = String::ref(context, jsName).str(); const auto it = m_objects.find(moduleName); if (it != m_objects.end()) { return static_cast<JSObjectRef>(it->second); } auto module = createModule(moduleName, context); if (!module.hasValue()) { return Value::makeUndefined(context); } // Protect since we'll be holding on to this value, even though JS may not module->makeProtected(); auto result = m_objects.emplace(std::move(moduleName), std::move(*module)).first; return static_cast<JSObjectRef>(result->second); }
JSValueRef JSCNativeModules::getModule(JSContextRef context, JSStringRef jsName) { if (!m_moduleRegistry) { return nullptr; } std::string moduleName = String::ref(context, jsName).str(); const auto it = m_objects.find(moduleName); if (it != m_objects.end()) { return static_cast<JSObjectRef>(it->second); } auto module = createModule(moduleName, context); if (!module.hasValue()) { // Allow lookup to continue in the objects own properties, which allows for overrides of NativeModules return nullptr; } // Protect since we'll be holding on to this value, even though JS may not module->makeProtected(); auto result = m_objects.emplace(std::move(moduleName), std::move(*module)).first; return static_cast<JSObjectRef>(result->second); }