@akala/core
Version:
149 lines • 5.04 kB
JavaScript
import { bold, italic, strikethrough, underline } from 'yoctocolors';
import { each } from '../each.js';
/**
* Enum representing logging levels mapped to numeric priorities
* @enum {number}
* @property {number} error - Highest priority error level (0)
* @property {number} warn - Warning level (1)
* @property {number} help - Help information (2)
* @property {number} data - Data tracing (3)
* @property {number} info - General information (4)
* @property {number} debug - Debug-level messages (5)
* @property {number} prompt - Prompt messages (6)
* @property {number} verbose - Verbose output (7)
* @property {number} input - Input tracing (8)
* @property {number} silly - Lowest priority tracing (9)
*/
export var LogLevels;
(function (LogLevels) {
LogLevels[LogLevels["error"] = 0] = "error";
LogLevels[LogLevels["warn"] = 1] = "warn";
LogLevels[LogLevels["help"] = 2] = "help";
LogLevels[LogLevels["data"] = 3] = "data";
LogLevels[LogLevels["info"] = 4] = "info";
LogLevels[LogLevels["debug"] = 5] = "debug";
LogLevels[LogLevels["prompt"] = 6] = "prompt";
LogLevels[LogLevels["verbose"] = 7] = "verbose";
LogLevels[LogLevels["input"] = 8] = "input";
LogLevels[LogLevels["silly"] = 9] = "silly";
})(LogLevels || (LogLevels = {}));
export class LoggerAdapterMiddleware {
logger;
constructor(logger) {
this.logger = logger;
}
handle(logLevel, namespaces, ...context) {
return this.logger[LogLevels[logLevel]].handle(logLevel, namespaces, ...context);
}
}
export const logConfig = { defaultLevel: LogLevels.error, namespaceConfig: {} };
export function configureLogging(config) {
if (typeof config.defaultLevel !== 'undefined')
logConfig.defaultLevel = config.defaultLevel;
if (typeof config.namespaceConfig != 'undefined') {
deepMerge(logConfig.namespaceConfig, config.namespaceConfig);
}
}
function deepMerge(a, b) {
each(b, (c, k) => {
if (typeof a[k] == 'undefined')
if (typeof c == 'number')
a[k] = { level: c };
else
deepMerge(a[k] = {}, c);
else if (typeof c == 'number')
a[k].level = c;
else
deepMerge(a[k], c);
});
}
export class LoggerMiddleware {
logger;
logLevel;
namespace;
constructor(logger, logLevel, namespace) {
this.logger = logger;
this.logLevel = logLevel;
this.namespace = namespace;
}
handle(logLevel, namespaces, ...context) {
if (this.shouldHandle(logLevel, namespaces))
return this.logger(logLevel, namespaces, ...context);
}
shouldHandle(logLevel, namespaces) {
if (this.logLevel < logLevel)
return false;
if (this.namespace !== '*' && this.namespace !== namespaces[0])
return false;
return true;
}
}
export class LogMiddlewareWrapper {
logger;
logLevel;
namespace;
constructor(logger, logLevel, namespace) {
this.logger = logger;
this.logLevel = logLevel;
this.namespace = namespace;
}
handle(logLevel, namespaces, ...context) {
if (this.shouldHandle(logLevel, namespaces))
return this.logger.handle(logLevel, namespaces, ...context);
return;
}
shouldHandle(logLevel, namespaces) {
if (this.logLevel < logLevel)
return false;
if (this.namespace !== '*' && this.namespace != namespaces[0])
return false;
return this.logger.shouldHandle(logLevel, namespaces.slice(1));
}
}
export const emojiMap = {
smile: '😄',
thumbsup: '👍',
heart: '❤️',
fire: '🔥',
star: '⭐',
cry: '😢',
laugh: '😂',
wink: '😉',
clap: '👏',
angry: '😠',
shocked: '😲',
cool: '😎',
poop: '💩',
party: '🥳',
thinking: '🤔',
pray: '🙏',
hug: '🤗',
ok: '👌',
eyes: '👀',
grin: '😁',
sleepy: '😴',
kiss: '😘',
celebration: '🎉',
check: '✅',
cross: '❌',
question: '❓',
wave: '👋',
rocket: '🚀',
100: '💯'
};
const oldErrorLog = console.error;
console.error = function (format, ...args) {
if (typeof format == 'string')
oldErrorLog.call(console, format
.replace(/__((?:[^_]|_[^_])+)__/g, (_, text) => bold(text))
.replace(/\*\*((?:[^\*]|\*[^\*])+)\*\*/g, (_, text) => bold(text))
.replace(/_([^_]+)_/g, (_, text) => underline(text))
.replace(/\*([^\*]+)\*/g, (_, text) => italic(text))
.replace(/```.*\n((?:[^`]|\n)+)\n```/g, (_, text) => italic(bold(text)))
.replace(/`([^`]+)`/g, (_, text) => italic(bold(text)))
.replace(/~~((?:[^~]|~[^~])+)~~/g, (_, text) => strikethrough(text))
.replace(/:([a-z_]+):/g, (_, emojiName) => emojiMap[emojiName] || `:${emojiName}:`), ...args);
else
oldErrorLog.call(console, format, ...args);
};
//# sourceMappingURL=shared.js.map