#!/usr/bin/env node const readline = require("readline") const { LoadConfig } = require("../lib/config") const { Check } = require("./commands/check") const { Generate } = require("./commands/generate") const { Merge } = require("./commands/merge") const { CleanGenerated, CleanLatest, CleanAll } = require("./commands/clean") const { ListMods } = require("./commands/list") const pkg = require("../package.json") const config = LoadConfig() const { minecraft_version } = config const ShowHelp = () => { console.log(` Commands: list-mods List configured mods check Check if all mods are compatible before generating generate Download mods + server, run to generate files merge Backup server, move generated files to server location clean generated Remove server directory clean latest Remove latest backup zip clean all Remove both generated and latest backup help Show this help exit Exit `) } const ProcessCommand = async (input, rl) => { const parts = input.trim().toLowerCase().split(/\s+/) const cmd = parts[0] const arg = parts[1] switch (cmd) { case "list-mods": ListMods() break case "check": await Check() break case "generate": await Generate(rl) break case "merge": await Merge() break case "clean": if (arg === "generated") await CleanGenerated() else if (arg === "latest") await CleanLatest() else if (arg === "all") await CleanAll() else console.log(" Usage: clean generated | clean latest | clean all") break case "help": case "?": ShowHelp() break case "exit": case "quit": case "q": console.log(" Goodbye!\n") process.exit(0) case "": break default: console.log(` Unknown command: ${cmd}. Type 'help' for commands.`) } } const DrawBox = (lines) => { const maxLen = Math.max(...lines.map(l => l.length)) const pad = (str) => str + " ".repeat(maxLen - str.length) const top = "╔" + "═".repeat(maxLen + 2) + "╗" const bot = "╚" + "═".repeat(maxLen + 2) + "╝" const mid = lines.map(l => "║ " + pad(l) + " ║").join("\n ") return ` ${top}\n ${mid}\n ${bot}` } const Main = () => { const title = `BENSON CLI v${pkg.version}` const subtitle = `Fabric Server for MC ${minecraft_version}` const box = DrawBox([title, subtitle]) console.log(` ${box} Type 'help' for commands. `) const rl = readline.createInterface ({ input: process.stdin, output: process.stdout }) const Prompt = () => { rl.question("benson> ", async (input) => { await ProcessCommand(input, rl) Prompt() }) } rl.on("close", () => { console.log("\n Goodbye!\n") process.exit(0) }) Prompt() } Main()