97 lines
3.3 KiB
Lua
97 lines
3.3 KiB
Lua
local args = {...} -- example: bundle basalt main basalt.lua
|
|
local availableFiles = {}
|
|
|
|
local minifyURL = "https://raw.githubusercontent.com/Pyroxenium/basalt-docs/main/minify.lua"
|
|
|
|
local content = [[local bundled = true
|
|
local bundled_basaltContent = {}
|
|
local bundled_basaltLoaded = {}
|
|
local bundled_availableFiles = {}
|
|
|
|
local baseRequire = require
|
|
require = function(name)
|
|
if(bundled_basaltContent["basalt/"..name])then
|
|
if(bundled_basaltLoaded["basalt/"..name]==nil)then
|
|
bundled_basaltLoaded["basalt/"..name] = bundled_basaltContent["basalt/"..name]()
|
|
end
|
|
return bundled_basaltLoaded["basalt/"..name]
|
|
end
|
|
if(bundled_basaltContent["basalt/elements/"..name])then
|
|
if(bundled_basaltLoaded["basalt/elements/"..name]==nil)then
|
|
bundled_basaltLoaded["basalt/elements/"..name] = bundled_basaltContent["basalt/elements/"..name]()
|
|
end
|
|
return bundled_basaltLoaded["basalt/elements/"..name]
|
|
end
|
|
if(bundled_basaltContent["basalt/extensions/"..name])then
|
|
if(bundled_basaltLoaded["basalt/extensions/"..name]==nil)then
|
|
bundled_basaltLoaded["basalt/extensions/"..name] = bundled_basaltContent["basalt/extensions/"..name]()
|
|
end
|
|
return bundled_basaltLoaded["basalt/extensions/"..name]
|
|
end
|
|
if(bundled_basaltContent["basalt/libraries/"..name])then
|
|
if(bundled_basaltLoaded["basalt/libraries/"..name]==nil)then
|
|
bundled_basaltLoaded["basalt/libraries/"..name] = bundled_basaltContent["basalt/libraries/"..name]()
|
|
end
|
|
return bundled_basaltLoaded["basalt/libraries/"..name]
|
|
end
|
|
|
|
return baseRequire(name)
|
|
end
|
|
]]
|
|
|
|
local function bundleProject(mainFolder, mainFile, fileName, minify)
|
|
local function generateSingleFile(folder)
|
|
local newFolder = {}
|
|
for k,file in pairs(fs.list(folder)) do
|
|
if fs.isDir(fs.combine(folder, file)) then
|
|
generateSingleFile(fs.combine(folder, file))
|
|
else
|
|
local fileContent = fs.open(fs.combine(folder, file), "r")
|
|
local fileData = fileContent.readAll()
|
|
fileContent.close()
|
|
table.insert(newFolder, file)
|
|
local fName = file:gsub(".lua", "")
|
|
content = content .. "\nbundled_basaltContent[\"" .. fs.combine(folder, fName) .. "\"] = function(...)\n"..fileData.."\nend"
|
|
end
|
|
end
|
|
availableFiles[folder] = newFolder
|
|
end
|
|
|
|
generateSingleFile(mainFolder)
|
|
|
|
for k,v in pairs(availableFiles) do
|
|
content = content .. "\nbundled_availableFiles[\"" .. k .. "\"] = {"
|
|
for _,file in pairs(v) do
|
|
content = content .. "\"" .. file .. "\","
|
|
end
|
|
content = content .. "}"
|
|
end
|
|
|
|
content = content .. "\nreturn bundled_basaltContent['basalt/"..mainFile.."']()"
|
|
|
|
if(minify)then
|
|
local minScript = http.get(minifyURL)
|
|
print("Downloading minify script...")
|
|
if(minScript)then
|
|
local min = load(minScript.readAll(), nil, "t", _ENV)()
|
|
minScript.close()
|
|
local success, data = min(content)
|
|
if(success)then
|
|
content = data
|
|
else
|
|
error(data)
|
|
end
|
|
else
|
|
print("Failed to download minify script")
|
|
end
|
|
end
|
|
local file = fs.open(fileName, "w")
|
|
file.write(content:gsub("\t", " "):gsub("\n", " "))
|
|
file.close()
|
|
end
|
|
|
|
if(#args>=1)then
|
|
--bundleProject(args[1], args[2] or "main", args[3] or "basalt.lua", args[4] or false)
|
|
end
|
|
|
|
return bundleProject |