92 lines
2.2 KiB
TypeScript
92 lines
2.2 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Logger utilities for upstream merge automation
|
|
*/
|
|
|
|
export type LogLevel = "debug" | "info" | "warn" | "error" | "success"
|
|
|
|
const colors = {
|
|
reset: "\x1b[0m",
|
|
dim: "\x1b[2m",
|
|
red: "\x1b[31m",
|
|
green: "\x1b[32m",
|
|
yellow: "\x1b[33m",
|
|
blue: "\x1b[34m",
|
|
magenta: "\x1b[35m",
|
|
cyan: "\x1b[36m",
|
|
}
|
|
|
|
const levelColors: Record<LogLevel, string> = {
|
|
debug: colors.dim,
|
|
info: colors.blue,
|
|
warn: colors.yellow,
|
|
error: colors.red,
|
|
success: colors.green,
|
|
}
|
|
|
|
const levelPrefixes: Record<LogLevel, string> = {
|
|
debug: "[DEBUG]",
|
|
info: "[INFO]",
|
|
warn: "[WARN]",
|
|
error: "[ERROR]",
|
|
success: "[OK]",
|
|
}
|
|
|
|
let verbose = false
|
|
|
|
export function setVerbose(value: boolean): void {
|
|
verbose = value
|
|
}
|
|
|
|
export function log(level: LogLevel, message: string, ...args: unknown[]): void {
|
|
if (level === "debug" && !verbose) return
|
|
|
|
const color = levelColors[level]
|
|
const prefix = levelPrefixes[level]
|
|
|
|
console.log(`${color}${prefix}${colors.reset} ${message}`, ...args)
|
|
}
|
|
|
|
export function debug(message: string, ...args: unknown[]): void {
|
|
log("debug", message, ...args)
|
|
}
|
|
|
|
export function info(message: string, ...args: unknown[]): void {
|
|
log("info", message, ...args)
|
|
}
|
|
|
|
export function warn(message: string, ...args: unknown[]): void {
|
|
log("warn", message, ...args)
|
|
}
|
|
|
|
export function error(message: string, ...args: unknown[]): void {
|
|
log("error", message, ...args)
|
|
}
|
|
|
|
export function success(message: string, ...args: unknown[]): void {
|
|
log("success", message, ...args)
|
|
}
|
|
|
|
export function header(title: string): void {
|
|
console.log()
|
|
console.log(`${colors.cyan}${"=".repeat(60)}${colors.reset}`)
|
|
console.log(`${colors.cyan} ${title}${colors.reset}`)
|
|
console.log(`${colors.cyan}${"=".repeat(60)}${colors.reset}`)
|
|
console.log()
|
|
}
|
|
|
|
export function step(number: number, total: number, description: string): void {
|
|
console.log(`${colors.magenta}[${number}/${total}]${colors.reset} ${description}`)
|
|
}
|
|
|
|
export function list(items: string[], indent = 2): void {
|
|
const spaces = " ".repeat(indent)
|
|
for (const item of items) {
|
|
console.log(`${spaces}${colors.dim}-${colors.reset} ${item}`)
|
|
}
|
|
}
|
|
|
|
export function divider(): void {
|
|
console.log(`${colors.dim}${"-".repeat(60)}${colors.reset}`)
|
|
}
|