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"
--- a/loader.lua Fri Mar 17 14:36:02 2023 +0100
+++ b/loader.lua Fri Mar 17 15:11:26 2023 +0100
@@ -19,3 +19,17 @@
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;
+})