| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | /** @typedef {"info" | "warning" | "error"} LogLevel *//** @type {LogLevel} */var logLevel = "info";function dummy() {}/** * @param {LogLevel} level log level * @returns {boolean} true, if should log */function shouldLog(level) {	var shouldLog =		(logLevel === "info" && level === "info") ||		(["info", "warning"].indexOf(logLevel) >= 0 && level === "warning") ||		(["info", "warning", "error"].indexOf(logLevel) >= 0 && level === "error");	return shouldLog;}/** * @param {(msg?: string) => void} logFn log function * @returns {(level: LogLevel, msg?: string) => void} function that logs when log level is sufficient */function logGroup(logFn) {	return function (level, msg) {		if (shouldLog(level)) {			logFn(msg);		}	};}/** * @param {LogLevel} level log level * @param {string|Error} msg message */module.exports = function (level, msg) {	if (shouldLog(level)) {		if (level === "info") {			console.log(msg);		} else if (level === "warning") {			console.warn(msg);		} else if (level === "error") {			console.error(msg);		}	}};/** * @param {Error} err error * @returns {string} formatted error */module.exports.formatError = function (err) {	var message = err.message;	var stack = err.stack;	if (!stack) {		return message;	} else if (stack.indexOf(message) < 0) {		return message + "\n" + stack;	}	return stack;};var group = console.group || dummy;var groupCollapsed = console.groupCollapsed || dummy;var groupEnd = console.groupEnd || dummy;module.exports.group = logGroup(group);module.exports.groupCollapsed = logGroup(groupCollapsed);module.exports.groupEnd = logGroup(groupEnd);/** * @param {LogLevel} level log level */module.exports.setLogLevel = function (level) {	logLevel = level;};
 |