diff --git a/scripts/bundle-prod.sh b/scripts/bundle-prod.sh index a32e5e5..2199d56 100644 --- a/scripts/bundle-prod.sh +++ b/scripts/bundle-prod.sh @@ -1 +1 @@ -darklua process src/init.luau dist/codenamer.luau | sed 's/^/[darklua]: /' +([[ $WALLY_BUILD ]] && darklua process src/init.luau dist/codenamer.luau | sed 's/^/[darklua]: /') || echo "[!] Depth build not supported yet!" diff --git a/scripts/install-deps.luau b/scripts/install-deps.luau index 9679b48..f18dee7 100644 --- a/scripts/install-deps.luau +++ b/scripts/install-deps.luau @@ -1,112 +1,135 @@ --!strict local fs = require("@lune/fs") local process = require("@lune/process") +local task = require("@lune/task") + local DEPENDENCY_META = table.freeze({ - { - ["author"] = "kdudedev", - ["pkgname"] = "infinite-math", - ["version"] = "1.3.2" - } + { + ["author"] = "kdudedev", + ["pkgname"] = "infinite-math", + ["version"] = "1.3.2", + }, }) -local match = function (val, arms: {[any]: any}): any? - if arms[val] then - if typeof(arms[val]) == 'function' then - return arms[val]() - else - return arms[val] - end - elseif _G["DEBUG"] then - print("non exhuastive pattern for ", val) - end +local match = function(val, arms: { [any]: any }): R + if arms[val] then + if typeof(arms[val]) == "function" then + return arms[val]() + else + return arms[val] + end + elseif _G["DEBUG"] then + print("non exhuastive pattern for ", val) + end - - if arms["_"] then - if typeof(arms["_"]) == 'function' then - return arms["_"]() - else - return arms["_"] - end - end + if arms["_"] then + if typeof(arms["_"]) == "function" then + return arms["_"]() + else + return arms["_"] + end + end end +local log = function(kind: "ERROR" | "INFO" | "WARN", msg: string) + local prefix = match(kind, { + ["ERROR"] = "[!]", + ["INFO"] = "[*]", + ["WARN"] = "[#]", + ["_"] = function() + error("invalid log kind") + end, + }) -local log = function (kind: "ERROR" | "INFO" | "WARN", msg: string) - local prefix = match (kind, { - ["ERROR"] = "[!]", - ["INFO"] = "[*]", - ["WARN"] = "[#]", - ["_"] = function () - error("invalid log kind") - end - }) - - print(`{prefix} {msg}`) + print(`{prefix} {msg}`) end - -- Converts kebab-case to upper CamelCase -local to_camel_case = function (str: string) - local parts = string.split(str, "-") +local to_camel_case = function(str: string) + local parts = string.split(str, "-") - for pos, part in parts do - parts[pos] = string.gsub(part, "^%l", string.upper) - end + for pos, part in parts do + parts[pos] = string.gsub(part, "^%l", string.upper) + end - return table.concat(parts, "") + return table.concat(parts, "") end -- Converts kebab-case to upper snake_case -local to_snake_case = function (str: string) - local parts = string.split(str, "-") +local to_snake_case = function(str: string) + local parts = string.split(str, "-") - return table.concat(parts, "_") + return table.concat(parts, "_") end -for _, cmd in { "aftman", "wally" } do - log("INFO", `Running \`{cmd} install\``) +function main() + local shell: {[number]: string} = match(process.os, { + ["windows"] = { "cmd.exe" }, + ["_"] = { "sh", "-c" } + }) - process.spawn("sh", { "-c", `{cmd} install`, "|", `sed 's/^/[{cmd}]: /'` }, { - ["stdio"] = "inherit" - }) -end - -for _, DEPENDENCY_DATA in DEPENDENCY_META do - local start = os.clock() - - local dependency_src_dir = `Packages/_Index/{DEPENDENCY_DATA.author}_{DEPENDENCY_DATA.pkgname}@{DEPENDENCY_DATA.version}/{DEPENDENCY_DATA.pkgname}/src/{to_camel_case(DEPENDENCY_DATA.pkgname)}` - local entrypoint_path = dependency_src_dir .. "/init.lua" - local values_dir: string? - - if DEPENDENCY_DATA.pkgname == "infinite-math" then values_dir = dependency_src_dir .. "/Values" end - - log("INFO", `Constructed entrypoint path for {DEPENDENCY_DATA.pkgname} -> {string.sub(entrypoint_path, 1, #entrypoint_path - 45) .. "..."}`) - - if not fs.metadata(entrypoint_path).exists then - log("ERROR", `Could not find {DEPENDENCY_DATA.pkgname} entrypoint file`) - process.exit(1) - end - - if values_dir then - log("INFO", `Patching values for {DEPENDENCY_DATA.pkgname}`) - - for _, file in fs.readDir(values_dir) do - fs.move(values_dir .. "/" .. file, dependency_src_dir .. "/" .. file) - end - - fs.removeDir(values_dir) - - local entrypoint_contents = fs.readFile(entrypoint_path) - entrypoint_contents = string.gsub(entrypoint_contents, "local values = script.Values", "") - entrypoint_contents = string.gsub(entrypoint_contents, "values.Suffixes", "./Suffixes.lua") - entrypoint_contents = string.gsub(entrypoint_contents, "values.FullNames", "./FullNames.lua") - - fs.writeFile(dependency_src_dir .. "/" .. to_snake_case(DEPENDENCY_DATA.pkgname) .. ".lua", entrypoint_contents) - - log("INFO", `Patched values for {DEPENDENCY_DATA.pkgname}`) - end - - log("INFO", `Done with {DEPENDENCY_DATA.pkgname} in {string.sub(tostring(os.clock() - start), 1, 5)}s`) + local sh_cmd = table.remove(shell, 1) + + for _, cmd in { "aftman", "wally" } do + log("INFO", `Running \`{cmd} install\``) + + local log_scope_pat: string = match(process.os, { + ["windows"] = "", + ["_"] = `| sed 's/^/[{cmd}]: /'` + }) + + process.spawn(sh_cmd, { shell[1] or "", `{cmd} install`, log_scope_pat }, { + ["stdio"] = "inherit", + }) + end + + for _, DEPENDENCY_DATA in DEPENDENCY_META do + local start = os.clock() + + local dependency_src_dir = + `Packages/_Index/{DEPENDENCY_DATA.author}_{DEPENDENCY_DATA.pkgname}@{DEPENDENCY_DATA.version}/{DEPENDENCY_DATA.pkgname}/src/{to_camel_case(DEPENDENCY_DATA.pkgname)}` + local entrypoint_path = dependency_src_dir .. "/init.lua" + local values_dir: string? + + if DEPENDENCY_DATA.pkgname == "infinite-math" then + values_dir = dependency_src_dir .. "/Values" + end + + log( + "INFO", + `Constructed entrypoint path for {DEPENDENCY_DATA.pkgname} -> {string.sub(entrypoint_path, 1, #entrypoint_path - 45) .. "..."}` + ) + + if not fs.metadata(entrypoint_path).exists then + log("ERROR", `Could not find {DEPENDENCY_DATA.pkgname} entrypoint file`) + process.exit(1) + end + + if values_dir then + log("INFO", `Patching values for {DEPENDENCY_DATA.pkgname}`) + + for _, file in fs.readDir(values_dir) do + fs.move(values_dir .. "/" .. file, dependency_src_dir .. "/" .. file) + end + + fs.removeDir(values_dir) + + local entrypoint_contents = fs.readFile(entrypoint_path) + entrypoint_contents = string.gsub(entrypoint_contents, "local values = script.Values", "") + entrypoint_contents = string.gsub(entrypoint_contents, "values.Suffixes", "'./Suffixes'") + entrypoint_contents = string.gsub(entrypoint_contents, "values.FullNames", "'./FullNames'") + + fs.writeFile( + dependency_src_dir .. "/" .. to_snake_case(DEPENDENCY_DATA.pkgname) .. ".lua", + entrypoint_contents + ) + + log("INFO", `Patched values for {DEPENDENCY_DATA.pkgname}`) + end + + log("INFO", `Done with {DEPENDENCY_DATA.pkgname} in {string.sub(tostring(os.clock() - start), 1, 5)}s`) + end end +task.spawn(main)