Files
Basalt2/tools/bundler.lua
Robert Jelic 5dd2c77dbc - Update bundler to support core and full versions
- Update ScrollFrame's properties
2025-11-04 09:42:44 +01:00

106 lines
3.2 KiB
Lua

local minify = loadfile("tools/minify.lua")()
local function loadConfig()
local config = dofile("config.lua")
return config
end
local function isDefaultFile(path, config)
for _, category in pairs(config.categories) do
for fileName, fileInfo in pairs(category.files) do
if fileInfo.path == path and fileInfo.default == true then
return true
end
end
end
return false
end
local function scanDir(dir)
local files = {}
for file in io.popen('find "'..dir..'" -type f -name "*.lua"'):lines() do
if not file:match("LuaLS.lua$") then
table.insert(files, {
path = file:gsub("^src/", ""),
fullPath = file
})
end
end
return files
end
local function bundle(coreOnly)
local outputFile = coreOnly and "release/basalt-core.lua" or "release/basalt-full.lua"
local config = coreOnly and loadConfig() or nil
local files = scanDir("src")
local output = {
'local minified = true\n',
'local minified_elementDirectory = {}\n',
'local minified_pluginDirectory = {}\n',
'local project = {}\n',
'local loadedProject = {}\n',
'local baseRequire = require\n',
'require = function(path) if(project[path..".lua"])then if(loadedProject[path]==nil)then loadedProject[path] = project[path..".lua"]() end return loadedProject[path] end return baseRequire(path) end\n'
}
for _, file in ipairs(files) do
if not coreOnly or isDefaultFile(file.path, config) then
local elementName = file.path:match("^elements/(.+)%.lua$")
if elementName then
table.insert(output, string.format(
'minified_elementDirectory["%s"] = {}\n',
elementName
))
end
local pluginName = file.path:match("^plugins/(.+)%.lua$")
if pluginName then
table.insert(output, string.format(
'minified_pluginDirectory["%s"] = {}\n',
pluginName
))
end
end
end
local includedFiles = {}
for _, file in ipairs(files) do
if not coreOnly or isDefaultFile(file.path, config) then
table.insert(includedFiles, file)
local f = io.open(file.fullPath, "r")
local content = f:read("*all")
f:close()
local success, minified = minify(content)
if not success then
print("Failed to minify " .. file.path)
os.exit(1)
end
table.insert(output, string.format(
'project["%s"] = function(...) %s end\n',
file.path, minified
))
end
end
table.insert(output, 'return project["main.lua"]()')
local out = io.open(outputFile, "w")
out:write(table.concat(output))
out:close()
print("Successfully bundled " .. outputFile .. ":")
for _, file in ipairs(includedFiles) do
print("- " .. file.path)
end
print("Total files: " .. #includedFiles)
end
print("=== Building Full Version ===")
bundle(false)
print("\n=== Building Core Version ===")
bundle(true)