export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'profile'; export const LogLevels: LogLevel[] = ['debug', 'info', 'warn', 'error', 'profile']; export function isLogLevel(arg: any): arg is LogLevel { if (typeof arg !== "string") { return false; } for (const level of LogLevels) { if (level === arg) { return true; } } return false; } export interface TaggedLogger { log(level: LogLevel, ...args: any[]): void; debug(...args: any[]): void; info(...args: any[]): void; warn(...args: any[]): void; error(...args: any[]): void; profile(...args: any[]): void; } export interface Logger { tag(...tags: string[]): TaggedLogger; }