Files
2026-07-13 12:32:21 +08:00

34 lines
1013 B
Lua

local type = type
local xpcall = xpcall
local require = require
local error = error
local find = string.find
local _M = {}
--- Try to load a module.
-- Will not throw an error if the module was not found, but will throw an error if the
-- loading failed for another reason (eg: syntax error).
-- @param module_name Path of the module to load (ex: kong.plugins.keyauth.api).
-- @return success A boolean indicating whether the module was found.
-- @return module The retrieved module, or the error in case of a failure
function _M.load_module_if_exists(module_name)
local status, res = xpcall(require, debug.traceback, module_name)
if status then
return true, res
end
-- Here we match any character because if a module has a dash '-' in its name, we would need to escape it.
if type(res) == "string" and find(res, "module '" .. module_name .. "' not found", nil, true) then
return false, res
end
error("error loading module '" .. module_name .. "':\n" .. res)
end
return _M