import chalk from "chalk"; /** * A source for pretty and cool and fun logging */ class Logging { /** Can I be seen by the console? */ visible: boolean /** What is my name? */ source: string /** * Create a logging source * ```ts * const log = new Logging("Main"); * * log.i("Hello World!"); * ``` * @param source Module identifier. Used in every line to identify the module that sent the message. * @param 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`); } /** * * @param type The kind of message to log * @param msgs Your message(s) */ 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); } /** Logging Function */ i(...msgs: string[]) {this.info(...msgs);} /** Logging Function */ info(...msgs: string[]) { if (!MessageTypeVisibility.Info) return; if (this.visible !== true) return; console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgWhite.black(`${this.source} [INFO]`) + chalk.whiteBright(' ' + msgs.join(' '))); } /** Logging Function */ w(...msgs: string[]) {this.warn(...msgs);} /** Logging Function */ warn(...msgs: string[]) { if (!MessageTypeVisibility.Warn) return; if (this.visible !== true) return; console.warn(chalk.gray(`${new Date().toISOString()} `) + chalk.bgYellow.black(`${this.source} [WARN]`) + chalk.yellowBright(' ' + msgs.join(' '))); } /** Logging Function */ e(...msgs: string[]) {this.error(...msgs);} /** Logging Function */ error(...msgs: string[]) { if (!MessageTypeVisibility.Error) return; if (this.visible !== true) return; console.error(chalk.gray(`${new Date().toISOString()} `) + chalk.bgRed.black(`${this.source} [ERROR]`) + chalk.redBright(' ' + msgs.join(' '))); } /** Logging Function */ d(...msgs: string[]) {this.debug(...msgs);} /** Logging Function */ debug(...msgs: string[]) { if (!MessageTypeVisibility.Debug) return; if (this.visible !== true) return; console.debug(chalk.gray(`${new Date().toISOString()} `) + chalk.bgGreen.black(`${this.source} [DEBUG]`) + chalk.greenBright(' ' + msgs.join(' '))); } /** Logging Function */ n(...msgs: string[]) {this.network(...msgs);} /** Logging Function */ network(...msgs: string[]) { if (!MessageTypeVisibility.Network) return; if (this.visible !== true) return; console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgCyan.black(`${this.source} [NETWORK]`) + chalk.cyanBright(' ' + msgs.join(' '))); } } /** Useful for conditional logging with the `log` function */ enum MessageType { Info, Warn, Error, Debug, Network } /** Enable/disable logging of certain message types across all logging sources */ const MessageTypeVisibility = { Info: true, Warn: true, Error: true, Debug: true, Network: true } export { MessageType, MessageTypeVisibility }; export default Logging;