Highly ambitious ATProtocol AppView service and sdks
at main 91 lines 2.2 kB view raw
1import { cyan, green, red, yellow, bold, dim, gray } from "@std/fmt/colors"; 2 3export enum LogLevel { 4 DEBUG = 0, 5 INFO = 1, 6 WARN = 2, 7 ERROR = 3, 8} 9 10class Logger { 11 private level: LogLevel = LogLevel.INFO; 12 private verbose = false; 13 14 setVerbose(verbose: boolean) { 15 this.verbose = verbose; 16 if (verbose) { 17 this.level = LogLevel.DEBUG; 18 } 19 } 20 21 debug(message: string, ...args: unknown[]) { 22 if (this.level <= LogLevel.DEBUG) { 23 console.log(dim(" debug"), message, ...args); 24 } 25 } 26 27 info(message: string, ...args: unknown[]) { 28 if (this.level <= LogLevel.INFO) { 29 console.log("• ", message, ...args); 30 } 31 } 32 33 warn(message: string, ...args: unknown[]) { 34 if (this.level <= LogLevel.WARN) { 35 console.warn(yellow("!"), message, ...args); 36 } 37 } 38 39 error(message: string, ...args: unknown[]) { 40 if (this.level <= LogLevel.ERROR) { 41 console.error(red("✗"), message, ...args); 42 } 43 } 44 45 success(message: string, ...args: unknown[]) { 46 console.log(green("✓"), message, ...args); 47 } 48 49 step(message: string, ...args: unknown[]) { 50 console.log(cyan("→"), message, ...args); 51 } 52 53 progress(message: string, current: number, total: number) { 54 const percentage = Math.round((current / total) * 100); 55 const filled = Math.floor(percentage / 4); 56 const bar = "█".repeat(filled) + gray("░".repeat(25 - filled)); 57 Deno.stdout.writeSync(new TextEncoder().encode(`\r ${cyan("→")} ${message} ${bar} ${current}/${total}`)); 58 if (current === total) { 59 console.log(); 60 } 61 } 62 63 section(title: string) { 64 console.log(); 65 console.log(bold(title)); 66 } 67 68 result(message: string, value?: string) { 69 if (value) { 70 console.log(` ${message} ${dim(value)}`); 71 } else { 72 console.log(` ${message}`); 73 } 74 } 75 76 list(items: string[]) { 77 items.forEach(item => { 78 console.log(`${item}`); 79 }); 80 } 81 82 table(headers: string[], rows: string[][]) { 83 console.log(` ${headers.join(" ")}`); 84 console.log(` ${headers.map(h => "─".repeat(h.length)).join(" ")}`); 85 rows.forEach(row => { 86 console.log(` ${row.join(" ")}`); 87 }); 88 } 89} 90 91export const logger = new Logger();