import chalk from "chalk"; class Logging { visible: boolean source: string /** * @param {string} source Module identifier. Used in every line to identify the module that sent the message. * @param {boolean} silent Set to false to log a message when the logger instantiates. Useful for debugging. * @returns A source for logging messages to the console. Functions for info, warnings, errors, debug statements, and network events are provided and have shorthands. */ constructor(source: string, silent?: boolean) { this.visible = true; this.source = source; if (typeof silent == 'boolean' && !silent) this.info(`Instantiated module logging`); } log(type: MessageType, ...msgs: string[]) { if (type == MessageType.Info) this.i(...msgs); if (type == MessageType.Warn) this.w(...msgs); if (type == MessageType.Error) this.e(...msgs); if (type == MessageType.Debug) this.d(...msgs); if (type == MessageType.Network) this.n(...msgs); } i(...msgs: string[]) {this.info(...msgs);} info(...msgs: string[]) { if (this.visible !== true) return; console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgWhite.black(`${this.source} [INFO]`) + chalk.whiteBright(' ' + msgs.join(' '))); } w(...msgs: string[]) {this.warn(...msgs);} warn(...msgs: string[]) { if (this.visible !== true) return; console.warn(chalk.gray(`${new Date().toISOString()} `) + chalk.bgYellow.black(`${this.source} [WARN]`) + chalk.yellowBright(' ' + msgs.join(' '))); } e(...msgs: string[]) {this.error(...msgs);} error(...msgs: string[]) { if (this.visible !== true) return; console.error(chalk.gray(`${new Date().toISOString()} `) + chalk.bgRed.black(`${this.source} [ERROR]`) + chalk.redBright(' ' + msgs.join(' '))); } d(...msgs: string[]) {this.debug(...msgs);} debug(...msgs: string[]) { if (this.visible !== true) return; console.debug(chalk.gray(`${new Date().toISOString()} `) + chalk.bgGreen.black(`${this.source} [DEBUG]`) + chalk.greenBright(' ' + msgs.join(' '))); } n(...msgs: string[]) {this.network(...msgs);} network(...msgs: string[]) { if (this.visible !== true) return; console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgCyan.black(`${this.source} [NETWORK]`) + chalk.cyanBright(' ' + msgs.join(' '))); } } enum MessageType { Info, Warn, Error, Debug, Network } export { MessageType }; export default Logging;