ui.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. export namespace UI {
  2. export const Style = {
  3. TEXT_HIGHLIGHT: "\x1b[96m",
  4. TEXT_HIGHLIGHT_BOLD: "\x1b[96m\x1b[1m",
  5. TEXT_DIM: "\x1b[90m",
  6. TEXT_DIM_BOLD: "\x1b[90m\x1b[1m",
  7. TEXT_NORMAL: "\x1b[0m",
  8. TEXT_NORMAL_BOLD: "\x1b[1m",
  9. TEXT_WARNING: "\x1b[93m",
  10. TEXT_WARNING_BOLD: "\x1b[93m\x1b[1m",
  11. TEXT_DANGER: "\x1b[91m",
  12. TEXT_DANGER_BOLD: "\x1b[91m\x1b[1m",
  13. TEXT_SUCCESS: "\x1b[92m",
  14. TEXT_SUCCESS_BOLD: "\x1b[92m\x1b[1m",
  15. TEXT_INFO: "\x1b[94m",
  16. TEXT_INFO_BOLD: "\x1b[94m\x1b[1m",
  17. }
  18. export function println(...message: string[]) {
  19. print(...message)
  20. Bun.stderr.write("\n")
  21. }
  22. export function print(...message: string[]) {
  23. blank = false
  24. Bun.stderr.write(message.join(" "))
  25. }
  26. let blank = false
  27. export function empty() {
  28. if (blank) return
  29. println("" + Style.TEXT_NORMAL)
  30. blank = true
  31. }
  32. export async function input(prompt: string): Promise<string> {
  33. const readline = require("readline")
  34. const rl = readline.createInterface({
  35. input: process.stdin,
  36. output: process.stdout,
  37. })
  38. return new Promise((resolve) => {
  39. rl.question(prompt, (answer: string) => {
  40. rl.close()
  41. resolve(answer.trim())
  42. })
  43. })
  44. }
  45. }