JSValue GlobalObject::requireModule(const JSObject& parent, const std::string& moduleId) { TITANIUM_GLOBALOBJECT_LOCK_GUARD; const auto js_context = parent.get_context(); // check if we have special module such as ti.map if (requiredBuiltinModuleExists(js_context, moduleId)) { return requireBuiltinModule(js_context, moduleId); } // check if we have native module if (requiredNativeModuleExists(js_context, moduleId)) { return requireNativeModule(js_context, moduleId); } auto module_path = requestResolveModule(parent, moduleId); if (module_path.empty()) { // Fall back to assuming equivalent of "/" + moduleId? module_path = requestResolveModule(parent, "/" + moduleId); if (module_path.empty()) { detail::ThrowRuntimeError("require", "Could not load module " + moduleId); } } // check if we have already loaded the module if (module_cache__.find(module_path) != module_cache__.end()) { return module_cache__.at(module_path); } const auto module_js = readRequiredModule(parent, module_path); if (module_js.empty()) { detail::ThrowRuntimeError("require", "Could not load module " + moduleId); } try { JSValue result = js_context.CreateUndefined(); if (boost::ends_with(module_path, ".json")){ result = js_context.CreateValueFromJSON(module_js); } else if (js_context.JSCheckScriptSyntax(module_js, moduleId)) { const std::vector<JSValue> args = { js_context.CreateString(moduleId), js_context.CreateString(module_js) }; result = require_function__(args, js_context.get_global_object()); } else { detail::ThrowRuntimeError("require", "Could not load module "+moduleId); } if (!result.IsObject()) { TITANIUM_LOG_WARN("GlobalObject::require: module '", moduleId, "' replaced 'exports' with a non-object: ", to_string(result)); } // cache it so that we can reuse it module_cache__.insert({module_path, result}); return result; } catch (const std::exception& exception) { detail::ThrowRuntimeError("require", "Error while require("+moduleId+") "+static_cast<std::string>(exception.what())); } catch (...) { detail::ThrowRuntimeError("require", "Unknown error while require("+moduleId+")"); } return js_context.CreateUndefined(); }
NativeViewLayoutDelegate::NativeViewLayoutDelegate(JSObject& this_object) { this_object.SetProperty("NativeViewLayoutDelegate_called", this_object.get_context().CreateBoolean(true)); }