mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 06:56:03 +01:00
refactor(resource/init): dynamic module loading
This commit is contained in:
@@ -33,16 +33,11 @@ files {
|
||||
shared_script 'resource/init.lua'
|
||||
|
||||
shared_scripts {
|
||||
'imports/locale/shared.lua',
|
||||
'resource/**/shared.lua',
|
||||
-- 'resource/**/shared/*.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
'imports/callback/client.lua',
|
||||
'imports/requestModel/client.lua',
|
||||
'imports/requestAnimDict/client.lua',
|
||||
'imports/addKeybind/client.lua',
|
||||
'resource/**/client.lua',
|
||||
'resource/**/client/*.lua'
|
||||
}
|
||||
|
||||
@@ -1,14 +1,38 @@
|
||||
local debug_getinfo = debug.getinfo
|
||||
|
||||
function noop() end
|
||||
|
||||
lib = setmetatable({
|
||||
name = 'ox_lib',
|
||||
context = IsDuplicityVersion() and 'server' or 'client',
|
||||
}, {
|
||||
__newindex = function(self, name, fn)
|
||||
rawset(self, name, fn)
|
||||
__newindex = function(self, key, fn)
|
||||
rawset(self, key, fn)
|
||||
|
||||
if debug_getinfo(2, 'S').short_src:find('@ox_lib/resource') then
|
||||
exports(name, fn)
|
||||
exports(key, fn)
|
||||
end
|
||||
end,
|
||||
|
||||
__index = function(self, key)
|
||||
local dir = ('imports/%s'):format(key)
|
||||
local chunk = LoadResourceFile(self.name, ('%s/%s.lua'):format(dir, self.context))
|
||||
local shared = LoadResourceFile(self.name, ('%s/shared.lua'):format(dir))
|
||||
|
||||
if shared then
|
||||
chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared
|
||||
end
|
||||
|
||||
if chunk then
|
||||
local fn, err = load(chunk, ('@@ox_lib/%s/%s.lua'):format(key, self.context))
|
||||
|
||||
if not fn or err then
|
||||
return error(('\n^1Error importing module (%s): %s^0'):format(dir, err), 3)
|
||||
end
|
||||
|
||||
rawset(self, key, fn() or noop)
|
||||
|
||||
return self[key]
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user