@interopio/gateway
Version:
[](https://www.npmjs.com/package/@interopio/gateway)
8 lines (7 loc) • 6.84 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/logging/core.ts"],
"sourcesContent": ["import * as API from '../../types/logging/core';\n\nenum LogLevel {\n off = 0,\n error = 200,\n warn = 300,\n info = 400,\n debug = 500,\n trace = 600,\n all = Number.MAX_SAFE_INTEGER\n}\n\nconst loggers: {[key: string]: Logger} = Object.create(null);\nconst logLevels: Record<string, LogLevel> = {};\nexport const ROOT_LOGGER_NAME = 'gateway';\nlogLevels[ROOT_LOGGER_NAME] = LogLevel.trace;\nlet appender : (e: API.LogEvent) => void = (e) => {\n console[e.level](`${e.time.toISOString()} ${e.level.toUpperCase()} [${e.name}] - ${e.message}`, ...e.data);\n};\n\ntype LogLevelKey = Exclude<keyof typeof LogLevel, 'off' | 'all'>;\n\nexport interface Logger extends API.Logger {\n (level: LogLevelKey, message?: string, ...args: unknown[])\n}\n\nexport function logEvent(event: API.LogEvent) {\n const { name, level } = event;\n checkNameAndConfigureLevel(name);\n if (isLevelEnabledFor(level, name)) {\n appender(event);\n }\n}\n\nfunction log(this: Logger, name: string, level: LogLevelKey, message: string, ...data: unknown[]) {\n if (this.enabledFor(level)) {\n const time = new Date();\n const event: API.LogEvent = {time, level, name, message, data};\n appender(event);\n }\n}\n\nfunction isLevelEnabledFor(level: LogLevelKey, name: string) {\n const logLevelValue = LogLevel[level];\n const configuredLevel = logLevels[name];\n return configuredLevel >= logLevelValue;\n}\n\nfunction newLogger(name: string): Logger {\n checkNameAndConfigureLevel(name);\n const logger: Logger = function(level: LogLevelKey, message: string, ...args:unknown[]) {\n log.call(logger, name, level, message, ...args);\n } as Logger;\n function methods(key: string): key is LogLevelKey {\n return isNaN(Number(key));\n }\n for (const method of Object.keys(LogLevel).filter(methods)) {\n logger[method] = function(message: string, ...args: unknown[]) {\n log.call(logger, name, method, message, ...args);\n };\n }\n logger.enabledFor = function(level: LogLevelKey) {\n return isLevelEnabledFor(level, name);\n }\n logger.child = function (suffix: string) {\n return getLogger(`${name}.${suffix}`);\n }\n return logger;\n}\n\nfunction checkNameAndConfigureLevel(name: string) {\n if (!name.startsWith(ROOT_LOGGER_NAME)) throw new Error(`Logger name must start with ${ROOT_LOGGER_NAME}`);\n if (!logLevels[name]) {\n const orderedEntries = Object.entries(logLevels).sort(([n1,], [n2,])=> n2.localeCompare(n1));\n const [, level] = orderedEntries.find(([prefix,]) => name.startsWith(prefix))!;\n logLevels[name] = level;\n }\n}\n\nexport function getLogger(name: string): API.Logger {\n let logger: Logger | undefined = loggers[name];\n if (logger === undefined) {\n logger = newLogger(name);\n loggers[name] = logger;\n }\n return logger;\n}\n\nexport function configure(config: API.LogConfig) {\n function updateLevels(prefix: string, level: API.LogConfigLevel) {\n for (const name of Object.keys(logLevels).filter(k => k.startsWith(prefix))) {\n logLevels[name] = LogLevel[level];\n }\n if (logLevels[prefix] === undefined) {\n logLevels[prefix] = LogLevel[level];\n }\n }\n\n const logLevel = config.level;\n\n if (typeof logLevel === 'string') {\n logLevels[ROOT_LOGGER_NAME] = LogLevel[logLevel];\n updateLevels(ROOT_LOGGER_NAME, logLevel);\n }\n else if (typeof logLevel === 'object') {\n const orderedEntries = Object.entries(logLevel).sort(([n1], [n2]) => n1.localeCompare(n2));\n for (const [prefix, level] of orderedEntries) {\n updateLevels(prefix, level);\n }\n }\n\n appender = config.appender ?? appender;\n}\n"],
"mappings": "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",
"names": ["core_exports", "__export", "ROOT_LOGGER_NAME", "configure", "getLogger", "logEvent", "__toCommonJS", "LogLevel", "loggers", "logLevels", "appender", "event", "name", "level", "checkNameAndConfigureLevel", "isLevelEnabledFor", "log", "message", "data", "logLevelValue", "newLogger", "logger", "args", "methods", "key", "method", "suffix", "orderedEntries", "n1", "n2", "prefix", "config", "updateLevels", "k", "logLevel"]
}