UNPKG

echogarden

Version:

An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.

98 lines (73 loc) 2.21 kB
import chalk from 'chalk' import { Timer } from './Timer.js' import { logToStderr, writeToStderr, yieldToEventLoop } from './Utilities.js' import { LogLevel, logLevelGreaterOrEqualTo, logLevelSmallerThan } from '../api/GlobalOptions.js' let currentActiveLogger: Logger | null = null export class Logger { private timer = new Timer() active = false start(title: string, titleColor = chalk.cyanBright) { this.startAsync(title, false, titleColor) } async startAsync(title: string, yieldBeforeStart = true, titleColor = chalk.cyanBright) { if (currentActiveLogger != null && currentActiveLogger != this) { return } this.end() if (yieldBeforeStart) { await yieldToEventLoop() } if (logLevelGreaterOrEqualTo('info')) { writeToStderr(`${titleColor(title)}.. `) } this.setAsActiveLogger() this.timer.restart() } setAsActiveLogger() { this.active = true currentActiveLogger = this } unsetAsActiveLogger() { this.active = false currentActiveLogger = null } end() { if (this.active && currentActiveLogger == this) { const elapsedTime = this.timer.elapsedTime if (logLevelGreaterOrEqualTo('info')) { writeToStderr(`${elapsedTime.toFixed(1)}ms\n`) } currentActiveLogger = null } this.active = false } logDuration(message: any, startTime: number, titleColor = chalk.cyanBright, logLevel: LogLevel = 'info') { const duration = Timer.currentTime - startTime this.log(`${titleColor(message)}: ${duration.toFixed(1)}ms`, logLevel) } logTitledMessage(title: string, content: any, titleColor = chalk.cyanBright, logLevel: LogLevel = 'info') { this.log(`${titleColor(title)}: ${content}`, logLevel) } log(message: any, logLevel: LogLevel = 'info') { if (logLevelSmallerThan(logLevel)) { return } if (currentActiveLogger == this || currentActiveLogger == null) { logToStderr(message) } } write(message: any, logLevel: LogLevel = 'info') { if (logLevelSmallerThan(logLevel)) { return } if (currentActiveLogger == this || currentActiveLogger == null) { writeToStderr(message) } } getTimestamp() { return Timer.currentTime } } export function resetActiveLogger() { currentActiveLogger = null }