{
  "version": 3,
  "sources": ["../../../../src/processors/console-processor.ts"],
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport chalk from 'chalk';\nimport { inspect } from 'node:util';\n\nimport { getPrototypeSpecificInstanceId, pickBy } from '@dxos/util';\n\nimport { type LogConfig, LogLevel, shortLevelName } from '../config';\nimport { type LogProcessor, getContextFromEntry, shouldLog } from '../context';\n\nconst LEVEL_COLORS: Record<LogLevel, typeof chalk.ForegroundColor> = {\n  [LogLevel.TRACE]: 'gray',\n  [LogLevel.DEBUG]: 'gray',\n  [LogLevel.VERBOSE]: 'gray',\n  [LogLevel.INFO]: 'white',\n  [LogLevel.WARN]: 'yellow',\n  [LogLevel.ERROR]: 'red',\n};\n\nexport const truncate = (text?: string, length = 0, right = false) => {\n  const str = text && length ? (right ? text.slice(-length) : text.substring(0, length)) : (text ?? '');\n  return right ? str.padStart(length, ' ') : str.padEnd(length, ' ');\n};\n\n// TODO(burdon): Optional package name.\n// TODO(burdon): Show exceptions on one line.\nexport type FormatParts = {\n  path?: string;\n  line?: number;\n  timestamp?: string;\n  level: LogLevel;\n  message?: string;\n  context?: any;\n  error?: Error;\n  scope?: any;\n};\n\nexport type Formatter = (config: LogConfig, parts: FormatParts) => (string | undefined)[];\n\nexport const DEFAULT_FORMATTER: Formatter = (\n  config,\n  { path, line, level, message, context, error, scope },\n): string[] => {\n  const column = config.options?.formatter?.column;\n  const filepath = path !== undefined && line !== undefined ? chalk.grey(`${path}:${line}`) : undefined;\n\n  let instance;\n  if (scope) {\n    const prototype = Object.getPrototypeOf(scope);\n    if (prototype !== null) {\n      const id = getPrototypeSpecificInstanceId(scope);\n      instance = chalk.magentaBright(`${prototype.constructor.name}#${id}`);\n    }\n  }\n\n  const formattedTimestamp = config.options?.formatter?.timestamp ? new Date().toISOString() : undefined;\n  const formattedLevel = chalk[LEVEL_COLORS[level]](column ? shortLevelName[level] : LogLevel[level]);\n  const padding = column && filepath ? ''.padStart(column - filepath.length) : undefined;\n\n  return config.options?.formatter?.timestampFirst\n    ? [formattedTimestamp, filepath, padding, formattedLevel, instance, message, context, error]\n    : [\n        // NOTE: File path must come fist for console hyperlinks.\n        // Must not truncate for terminal output.\n        filepath,\n        padding,\n        formattedTimestamp,\n        formattedLevel,\n        instance,\n        message,\n        context,\n        error,\n      ];\n};\n\nexport const SHORT_FORMATTER: Formatter = (config, { path, level, message }) => {\n  return [\n    chalk.grey(truncate(path, 16, true)), // NOTE: Breaks terminal linking.\n    chalk[LEVEL_COLORS[level]](shortLevelName[level]),\n    message,\n  ];\n};\n\n// TODO(burdon): Config option.\nconst formatter = DEFAULT_FORMATTER;\n\nexport const CONSOLE_PROCESSOR: LogProcessor = (config, entry) => {\n  const { level, message, meta, error } = entry;\n  if (!shouldLog(entry, config.filters)) {\n    return;\n  }\n\n  const { filename, line: lineNumber } = entry.computedMeta;\n  const parts: FormatParts = {\n    level,\n    message,\n    error,\n    path: filename,\n    line: lineNumber,\n    scope: meta?.S,\n    context: undefined,\n  };\n\n  const context = getContextFromEntry(entry);\n  if (context) {\n    // Remove undefined fields.\n    // https://nodejs.org/api/util.html#utilinspectobject-options\n    parts.context = inspect(\n      pickBy(context, (value?: unknown) => value !== undefined),\n      { depth: config.options.depth, colors: true, maxArrayLength: 8, sorted: false },\n    );\n  }\n\n  const line = formatter(config, parts).filter(Boolean).join(' ');\n  console.log(line);\n};\n"],
  "mappings": "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",
  "names": ["chalk", "inspect", "getPrototypeSpecificInstanceId", "pickBy", "LEVEL_COLORS", "LogLevel", "TRACE", "DEBUG", "VERBOSE", "INFO", "WARN", "ERROR", "truncate", "text", "length", "right", "str", "slice", "substring", "padStart", "padEnd", "DEFAULT_FORMATTER", "config", "path", "line", "level", "message", "context", "error", "scope", "column", "options", "formatter", "filepath", "undefined", "chalk", "grey", "instance", "prototype", "Object", "getPrototypeOf", "id", "getPrototypeSpecificInstanceId", "magentaBright", "name", "formattedTimestamp", "timestamp", "Date", "toISOString", "formattedLevel", "shortLevelName", "padding", "timestampFirst", "SHORT_FORMATTER", "CONSOLE_PROCESSOR", "entry", "meta", "shouldLog", "filters", "filename", "lineNumber", "computedMeta", "parts", "S", "getContextFromEntry", "inspect", "pickBy", "value", "depth", "colors", "maxArrayLength", "sorted", "filter", "Boolean", "join", "console", "log"]
}
