local M = {}
function M.isEmpty(value)
if value == nil then
return true
end
if type(value) == "string" and value == "" then
return true
end
if type(value) == "table" and next(value) == nil then
return true
end
return false
end
function M.deepCopy(original, seen)
if type(original) ~= "table" then
return original
end
seen = seen or {}
if seen[original] then
return seen[original]
end
local copy = {}
seen[original] = copy
for key, value in pairs(original) do
copy[M.deepCopy(key, seen)] = M.deepCopy(value, seen)
end
return setmetatable(copy, getmetatable(original))
end
function M.merge(base, override)
local result = M.deepCopy(base)
for key, value in pairs(override) do
if type(value) == "table" and type(result[key]) == "table" then
result[key] = M.merge(result[key], value)
else
result[key] = value
end
end
return result
end
function M.trim(s)
return s:match("^%s*(.-)%s*$")
end
function M.split(s, delimiter)
if not delimiter or delimiter == "" then
return {s}
end
local escaped_delimiter = delimiter:gsub("([%.%*%+%?%^%$%(%)%[%]%%%-])", "%%%1")
local result = {}
for match in (s .. delimiter):gmatch("(.-)" .. escaped_delimiter) do
table.insert(result, match)
end
return result
end
return M