prosody.loader: Ensure already loaded modules are found in old and new namespaces

Prevents modules being initialized twice, ensuring that
require"prosody.util.foo" == require"util.foo"
This commit is contained in:
Kim Alvefur 2023-03-17 15:11:26 +01:00
parent d06cc5176b
commit 93ddf6892c

View file

@ -19,3 +19,17 @@ else
end)
end
end
-- Look for already loaded module with or without prefix
setmetatable(package.loaded, {
__index = function(loaded, module_name)
local suffix = module_name:match("^prosody%.(.*)$");
if suffix then
return rawget(loaded, suffix);
end
local prefixed = rawget(loaded, "prosody." .. module_name);
if prefixed ~= nil then
return prefixed;
end
end;
})