CCCPaste

ModuleLoader example

-- Variables:
local Cache = {}

-- Main Module:
local ModuleLoader = {}

function ModuleLoader.Get(Name: string)
    local Module = Cache[Name]
    
    if not Module then
        warn(`[ModuleLoader]: Module '{Name}' has not been loaded`)
    end
    
    return Module
end

function ModuleLoader.Load(List: {
    ModuleScript | Folder    
})
    for _, V in List do
        if V:IsA("ModuleScript") then
            local Success, Module = pcall(require, V)
            
            if Success then
                Cache[V.Name] = Module
                
                if Module.Init then
                    task.defer(Module.Init, Module)
                end
            else
                warn(`[ModuleLoader]: Failed to load module '{V:GetFullName()}'`)
            end
        elseif V:IsA("Folder") then
            ModuleLoader.Load(V:GetChildren())
        end
    end
end

return ModuleLoader