dev
Documentation icon Module documentation
[create]

The documentation for this module is missing. Click here to create it.

-- Original at https://hypixel-skyblock.fandom.com/wiki/Module:MultiRequire
local checkType = require("libraryUtil").checkType
local checkTypeMulti = require("libraryUtil").checkTypeMulti

local function formatError(e, module)
	if type(e) ~= "string" then return nil end
	
	if e:match("not found") then
		return ("Module %q was not found"):format(module)
	elseif e:match("loop") then
		return ("Loop or previous error loading module %q"):format(module)
	elseif e:match("^Module:") then
		return ("Exception in loading module %q at line %s: %s"):format(module, e:match("^Module:%w+:(%d+)"), e:gsub("^Module:%w+:%d+:%s*", ""))
	end
end

local t = {multiRequire = error}

local function multiRequire(...)
	local modules = {...}
	local tp = type(modules[1])

	local ret = {}
	if tp == "string" then
		for i = 1, select("#", ...), 1 do 
			local module = modules[i]
			checkType("multiRequire", 1, module, "string")
			
			local success, res = pcall(require, module)
			if not success then
				t.multiRequire(formatError(res, module), 2)
			end
			
			table.insert(ret, res)
		end
	else
		checkTypeMulti("multiRequire", 1, modules[1], {"table", "string"})
		for _, module in ipairs(modules[1]) do
			local success, res = pcall(require, module)
			if not success then
				t.multiRequire(formatError(res, module), 2)
			end

			table.insert(ret, res)
		end
	end
	
	if tp == "string" then
		return unpack(ret)
	else
		return ret
	end
end

return multiRequire