UNPKG

socio

Version:

A WebSocket Real-Time Communication (RTC) API framework.

139 lines (138 loc) 5.61 kB
export const colors = { Reset: "\x1b[0m", FgBlack: "\x1b[30m", FgWhite: "\x1b[37m", BgBlack: "\x1b[40m", BgRed: "\x1b[41m", BgGreen: "\x1b[42m", BgYellow: "\x1b[43m", }; export var LogLevel; (function (LogLevel) { LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; LogLevel[LogLevel["INFO"] = 1] = "INFO"; LogLevel[LogLevel["DONE"] = 2] = "DONE"; LogLevel[LogLevel["WARN"] = 3] = "WARN"; LogLevel[LogLevel["ERROR"] = 4] = "ERROR"; })(LogLevel || (LogLevel = {})); ; export var ErrorOrigin; (function (ErrorOrigin) { ErrorOrigin[ErrorOrigin["SERVER"] = 0] = "SERVER"; ErrorOrigin[ErrorOrigin["CLIENT"] = 1] = "CLIENT"; ErrorOrigin[ErrorOrigin["FOREIGN_CLIENT"] = 2] = "FOREIGN_CLIENT"; })(ErrorOrigin || (ErrorOrigin = {})); export class E extends Error { logs; origin; constructor(msg = '', ...logs) { super(msg); this.logs = logs; } } export class LogHandler { verbose; hard_crash; prefix; log_level = LogLevel.INFO; log_handlers = { error: null, info: null, debug: null }; static use_color = true; constructor({ verbose = false, hard_crash = false, prefix = '', use_color = undefined, log_level = undefined, log_handlers = undefined } = {}) { this.verbose = verbose; this.hard_crash = hard_crash; this.prefix = prefix; if (log_level !== undefined) { if (typeof log_level === 'string') { if (Object.keys(LogLevel).includes(log_level.toUpperCase())) this.log_level = LogLevel[log_level.toUpperCase()]; else LogHandler.info(`Log level must be a string or number (${Object.keys(LogLevel)}), got ${log_level}`); } else if (typeof log_level === 'number') { if (log_level >= LogLevel.DEBUG && log_level <= LogLevel.ERROR) this.log_level = log_level; else LogHandler.info(`Log level must be a string or number (${Object.keys(LogLevel)}`); } else LogHandler.info(`Log level must be a string or number (${Object.keys(LogLevel)}), got ${typeof log_level}`); if (!this.log_level) this.log_level = LogLevel.DEBUG; } if (log_handlers !== undefined) this.log_handlers = log_handlers; if (use_color !== undefined) LogHandler.use_color = use_color; else { if (typeof window !== 'undefined') { const isFirefox = typeof InstallTrigger !== 'undefined'; if (isFirefox) LogHandler.use_color = false; } } } BaseLog(level, prefix, color, msg, ...args) { if (level >= this.log_level) console.log(`${LogHandler.prefix(prefix, color)} ${msg}`, ...args); } HandleError(e, origin) { if (e && (e instanceof E || e instanceof Error)) e['origin'] = origin; if (this.hard_crash) throw e instanceof E ? e.message : e; if (this.log_handlers?.error && typeof this.log_handlers.error === 'function') this.log_handlers.error(e); if (this.verbose) { if (typeof e == 'string') this.soft_error(e); else this.soft_error(e, ...e?.logs || []); } } HandleInfo(...args) { if (this.log_handlers?.info && typeof this.log_handlers.info === 'function') this.log_handlers.info(...args); if (this.verbose) this.info(...args); } HandleDebug(...args) { if (this.log_handlers?.debug && typeof this.log_handlers.debug === 'function') this.log_handlers.debug(...args); if (this.verbose) this.info(...args); } static prefix(p, color) { return p ? `${LogHandler.use_color ? color : ''}[${p}]${LogHandler.use_color ? colors.Reset : ''}` : ''; } static log(...args) { console.log(...args); } debug(msg, ...args) { this.BaseLog(LogLevel.DEBUG, this.prefix, '', msg, ...args); } static debug(msg, ...args) { console.debug(`[Socio DEBUG] ${msg}`, ...args); } info(msg, ...args) { this.BaseLog(LogLevel.INFO, this.prefix, colors.BgYellow + colors.FgBlack, msg, ...args); } static info(msg, ...args) { console.log(`${LogHandler.prefix('Socio', colors.BgYellow + colors.FgBlack)} ${msg}`, ...args); } done(msg, ...args) { this.BaseLog(LogLevel.DONE, this.prefix, colors.BgGreen + colors.FgBlack, msg, ...args); } static done(msg, ...args) { console.log(`${LogHandler.prefix('Socio', colors.BgGreen + colors.FgBlack)} ${msg}`, ...args); } soft_error(e, ...args) { this.BaseLog(LogLevel.WARN, this.prefix + (e instanceof E && e?.origin !== undefined ? ` | ${ErrorOrigin[e.origin]} Error` : '') + ' | WARN', colors.BgRed + colors.FgBlack, (e instanceof E ? e.message : e)); if (args) console.error((e instanceof E ? e.message : e), ...args, '\n'); } static soft_error(msg, ...args) { console.log(`${LogHandler.prefix(`Socio WARN`, colors.BgRed + colors.FgBlack)} ${msg}`); if (args) console.error(msg, ...args, '\n'); } } export function log(...args) { LogHandler.log(...args); } export function info(msg, ...args) { LogHandler.info(msg, ...args); } export function done(msg, ...args) { LogHandler.done(msg, ...args); } export function soft_error(msg, ...args) { LogHandler.soft_error(msg, ...args); }