2025-06-11 06:10:30 +08:00
|
|
|
import { VERSION } from "./version"
|
|
|
|
|
|
2025-06-05 23:50:54 +08:00
|
|
|
export namespace UI {
|
2025-06-11 03:43:14 +08:00
|
|
|
const LOGO = [
|
|
|
|
|
`█▀▀█ █▀▀█ █▀▀ █▀▀▄ █▀▀ █▀▀█ █▀▀▄ █▀▀`,
|
|
|
|
|
`█░░█ █░░█ █▀▀ █░░█ █░░ █░░█ █░░█ █▀▀`,
|
|
|
|
|
`▀▀▀▀ █▀▀▀ ▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀▀ ▀▀▀ ▀▀▀`,
|
|
|
|
|
]
|
|
|
|
|
|
2025-06-05 23:50:54 +08:00
|
|
|
export const Style = {
|
|
|
|
|
TEXT_HIGHLIGHT: "\x1b[96m",
|
|
|
|
|
TEXT_HIGHLIGHT_BOLD: "\x1b[96m\x1b[1m",
|
|
|
|
|
TEXT_DIM: "\x1b[90m",
|
|
|
|
|
TEXT_DIM_BOLD: "\x1b[90m\x1b[1m",
|
|
|
|
|
TEXT_NORMAL: "\x1b[0m",
|
|
|
|
|
TEXT_NORMAL_BOLD: "\x1b[1m",
|
|
|
|
|
TEXT_WARNING: "\x1b[93m",
|
|
|
|
|
TEXT_WARNING_BOLD: "\x1b[93m\x1b[1m",
|
|
|
|
|
TEXT_DANGER: "\x1b[91m",
|
|
|
|
|
TEXT_DANGER_BOLD: "\x1b[91m\x1b[1m",
|
|
|
|
|
TEXT_SUCCESS: "\x1b[92m",
|
|
|
|
|
TEXT_SUCCESS_BOLD: "\x1b[92m\x1b[1m",
|
|
|
|
|
TEXT_INFO: "\x1b[94m",
|
|
|
|
|
TEXT_INFO_BOLD: "\x1b[94m\x1b[1m",
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-11 01:30:08 +08:00
|
|
|
export function println(...message: string[]) {
|
|
|
|
|
print(...message)
|
|
|
|
|
Bun.stderr.write("\n")
|
|
|
|
|
}
|
2025-06-05 23:50:54 +08:00
|
|
|
|
|
|
|
|
export function print(...message: string[]) {
|
2025-06-11 01:30:08 +08:00
|
|
|
blank = false
|
2025-06-05 23:50:54 +08:00
|
|
|
Bun.stderr.write(message.join(" "))
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-11 01:30:08 +08:00
|
|
|
let blank = false
|
2025-06-05 23:50:54 +08:00
|
|
|
export function empty() {
|
2025-06-11 01:30:08 +08:00
|
|
|
if (blank) return
|
|
|
|
|
println("" + Style.TEXT_NORMAL)
|
|
|
|
|
blank = true
|
2025-06-05 23:50:54 +08:00
|
|
|
}
|
|
|
|
|
|
2025-06-11 03:43:14 +08:00
|
|
|
export function logo() {
|
2025-06-11 06:10:30 +08:00
|
|
|
empty()
|
2025-06-11 03:43:14 +08:00
|
|
|
for (const row of LOGO) {
|
|
|
|
|
print(" ")
|
|
|
|
|
for (let i = 0; i < row.length; i++) {
|
|
|
|
|
const color =
|
|
|
|
|
i > 18 ? Bun.color("white", "ansi") : Bun.color("gray", "ansi")
|
|
|
|
|
const char = row[i]
|
|
|
|
|
print(color + char)
|
|
|
|
|
}
|
|
|
|
|
println()
|
|
|
|
|
}
|
|
|
|
|
empty()
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-05 23:50:54 +08:00
|
|
|
export async function input(prompt: string): Promise<string> {
|
2025-06-11 01:30:08 +08:00
|
|
|
const readline = require("readline")
|
2025-06-05 23:50:54 +08:00
|
|
|
const rl = readline.createInterface({
|
|
|
|
|
input: process.stdin,
|
2025-06-11 01:30:08 +08:00
|
|
|
output: process.stdout,
|
2025-06-05 23:50:54 +08:00
|
|
|
})
|
2025-06-11 01:30:08 +08:00
|
|
|
|
2025-06-05 23:50:54 +08:00
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
rl.question(prompt, (answer: string) => {
|
|
|
|
|
rl.close()
|
|
|
|
|
resolve(answer.trim())
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|