socio
Version:
A WebSocket Real-Time Communication (RTC) API framework.
139 lines (138 loc) • 5.61 kB
JavaScript
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); }