prosody.loader: Ensure already loaded modules are found in old and new namespaces
authorKim Alvefur <zash@zash.se>
Fri, 17 Mar 2023 15:11:26 +0100
changeset 12953 2f61ebcf37c0
parent 12952 29983f09c913
child 12954 2cb5994e3f94
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"
loader.lua
--- 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;
+})