Highly ambitious ATProtocol AppView service and sdks
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();