feat(require): external module support for require (#422)

This commit is contained in:
Linden
2023-09-19 20:25:17 +10:00
committed by GitHub
parent cb6d6517f4
commit 699884aa17

View File

@@ -17,12 +17,10 @@ local _require = require
function lib.require(modname)
if type(modname) ~= 'string' then return end
local modpath = modname:gsub('%.', '/')
local module = loaded[modname]
if not module then
if module == false then
error(("^1circular-dependency occurred when loading module '%s'^0"):format(modname), 2)
end
if module then return module end
local success, result = pcall(_require, modname)
@@ -31,15 +29,49 @@ function lib.require(modname)
return result
end
local modpath = modname:gsub('%.', '/')
local resourceSrc
if not modpath:find('^@') then
local idx = 1
while true do
local di = debug.getinfo(idx, 'S')
if di then
if not di.short_src:find('^@ox_lib/imports/require') and not di.short_src:find('^%[C%]') and not di.short_src:find('^citizen') then
resourceSrc = di.short_src:gsub('^@(.-)/.+', '%1')
break
end
else
resourceSrc = cache.resource
break
end
idx += 1
end
if resourceSrc ~= cache.resource then
modname = ('@%s.%s'):format(resourceSrc, modname)
end
end
if not module then
if module == false then
error(("^1circular-dependency occurred when loading module '%s'^0"):format(modname), 2)
end
if not resourceSrc then
resourceSrc = modpath:gsub('^@(.-)/.+', '%1')
modpath = modpath:sub(#resourceSrc + 3)
end
for path in package.path:gmatch('[^;]+') do
local scriptPath = path:gsub('?', modpath):gsub('%.+%/+', '')
local resourceFile = LoadResourceFile(cache.resource, scriptPath)
local resourceFile = LoadResourceFile(resourceSrc, scriptPath)
if resourceFile then
loaded[modname] = false
scriptPath = ('@@%s/%s'):format(cache.resource, scriptPath)
scriptPath = ('@@%s/%s'):format(resourceSrc, scriptPath)
local chunk, err = load(resourceFile, scriptPath)