{"version":3,"file":"index.cjs","names":["moonlight: SimplePrettyTerminalTheme","sunlight: SimplePrettyTerminalTheme","neon: SimplePrettyTerminalTheme","nature: SimplePrettyTerminalTheme","pastel: SimplePrettyTerminalTheme","Utils.indent","Utils.getMaxIndexLength","formattedTime: string","pairs: string[]","prettyjson\n            .render","LoggerlessTransport"],"sources":["../src/themes.ts","../src/vendor/utils.js","../src/vendor/prettyjson.js","../src/views/utils.ts","../src/views/SimpleView.ts","../src/SimplePrettyTerminalTransport.ts","../src/index.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport type { SimplePrettyTerminalTheme } from \"./types.js\";\n\n/**\n * Moonlight - A dark theme with cool blue tones\n * Inspired by moonlit nights and modern IDEs\n *\n * Color Palette:\n * - Primary: Cool blues and soft greens\n * - Accents: Warm yellows and soft reds\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - Night-time coding sessions\n * - Environments where eye strain is a concern\n */\nexport const moonlight: SimplePrettyTerminalTheme = {\n  colors: {\n    trace: chalk.rgb(114, 135, 153), // Muted blue-grey for less important info\n    debug: chalk.rgb(130, 170, 255), // Soft blue that pops but doesn't strain\n    info: chalk.rgb(195, 232, 141), // Sage green for good readability\n    warn: chalk.rgb(255, 203, 107), // Warm yellow, less harsh than pure yellow\n    error: chalk.rgb(247, 118, 142), // Soft red that stands out without being aggressive\n    fatal: chalk.bgRgb(247, 118, 142).white, // Inverted soft red for maximum visibility\n  },\n  logIdColor: chalk.rgb(84, 98, 117), // Darker blue-grey for secondary information\n  dataValueColor: chalk.rgb(209, 219, 231), // Light grey-blue for primary content\n  dataKeyColor: chalk.rgb(130, 170, 255), // Matching debug blue for consistency\n};\n\n/**\n * Sunlight - A light theme with warm tones\n * Inspired by daylight reading and paper documentation\n *\n * Color Palette:\n * - Primary: Deep, rich colors that contrast well with white\n * - Accents: Earth tones and deep jewel tones\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Daytime coding sessions\n * - High-glare environments\n * - Printed documentation\n */\nexport const sunlight: SimplePrettyTerminalTheme = {\n  colors: {\n    trace: chalk.rgb(110, 110, 110), // Dark grey for subtle information\n    debug: chalk.rgb(32, 96, 159), // Deep blue for strong contrast on white\n    info: chalk.rgb(35, 134, 54), // Forest green, easier on the eyes than bright green\n    warn: chalk.rgb(176, 95, 0), // Brown-orange for natural warning color\n    error: chalk.rgb(191, 0, 0), // Deep red for clear visibility on light backgrounds\n    fatal: chalk.bgRgb(191, 0, 0).white, // White on deep red for critical issues\n  },\n  logIdColor: chalk.rgb(110, 110, 110),\n  dataValueColor: chalk.rgb(0, 0, 0),\n  dataKeyColor: chalk.rgb(32, 96, 159),\n};\n\n/**\n * Neon - A dark theme with vibrant cyberpunk colors\n * Inspired by neon-lit cityscapes and retro-futuristic aesthetics\n *\n * Color Palette:\n * - Primary: Electric blues and hot pinks\n * - Accents: Bright purples and cyber greens\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - High-contrast preferences\n * - Modern, tech-focused applications\n */\nexport const neon: SimplePrettyTerminalTheme = {\n  colors: {\n    trace: chalk.rgb(108, 108, 255), // Electric blue\n    debug: chalk.rgb(255, 82, 246), // Hot pink\n    info: chalk.rgb(0, 255, 163), // Cyber green\n    warn: chalk.rgb(255, 231, 46), // Electric yellow\n    error: chalk.rgb(255, 53, 91), // Neon red\n    fatal: chalk.bgRgb(255, 53, 91).rgb(0, 255, 163), // Neon red bg with cyber green text\n  },\n  logIdColor: chalk.rgb(187, 134, 252), // Bright purple\n  dataValueColor: chalk.rgb(255, 255, 255), // Pure white\n  dataKeyColor: chalk.rgb(0, 255, 240), // Cyan\n};\n\n/**\n * Nature - A light theme with organic, earthy colors\n * Inspired by forest landscapes and natural elements\n *\n * Color Palette:\n * - Primary: Deep forest greens and rich browns\n * - Accents: Autumn reds and golden yellows\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Nature-inspired interfaces\n * - Applications focusing on readability\n */\nexport const nature: SimplePrettyTerminalTheme = {\n  colors: {\n    trace: chalk.rgb(101, 115, 126), // Slate grey\n    debug: chalk.rgb(34, 139, 34), // Forest green\n    info: chalk.rgb(46, 139, 87), // Sea green\n    warn: chalk.rgb(218, 165, 32), // Golden rod\n    error: chalk.rgb(139, 69, 19), // Saddle brown\n    fatal: chalk.bgRgb(139, 69, 19).white, // Brown background with white text\n  },\n  logIdColor: chalk.rgb(101, 115, 126),\n  dataValueColor: chalk.rgb(0, 0, 0),\n  dataKeyColor: chalk.rgb(34, 139, 34),\n};\n\n/**\n * Pastel - A soft, calming theme with gentle colors\n * Inspired by watercolor paintings and soft aesthetics\n *\n * Color Palette:\n * - Primary: Soft pastels and muted tones\n * - Accents: Gentle pinks and light blues\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Long coding sessions\n * - Reduced visual stress\n */\nexport const pastel: SimplePrettyTerminalTheme = {\n  colors: {\n    trace: chalk.rgb(200, 200, 200), // Light grey\n    debug: chalk.rgb(173, 216, 230), // Light blue\n    info: chalk.rgb(144, 238, 144), // Light green\n    warn: chalk.rgb(255, 218, 185), // Peach\n    error: chalk.rgb(255, 182, 193), // Light pink\n    fatal: chalk.bgRgb(255, 182, 193).rgb(105, 105, 105), // Light pink bg with dim grey text\n  },\n  logIdColor: chalk.rgb(200, 200, 200),\n  dataValueColor: chalk.rgb(105, 105, 105),\n  dataKeyColor: chalk.rgb(173, 216, 230),\n};\n","/**\n * Creates a string with the same length as `numSpaces` parameter\n **/\nexport function indent(numSpaces) {\n  return new Array(numSpaces + 1).join(\" \");\n}\n\n/**\n * Gets the string length of the longer index in a hash\n **/\nexport function getMaxIndexLength(input) {\n  var maxWidth = 0;\n\n  Object.getOwnPropertyNames(input).forEach((key) => {\n    // Skip undefined values.\n    if (input[key] === undefined) {\n      return;\n    }\n\n    maxWidth = Math.max(maxWidth, key.length);\n  });\n  return maxWidth;\n}\n\nexport function isIsoStringDate(isoString) {\n  if (typeof isoString !== \"string\") {\n    return false;\n  }\n  // More flexible regex that handles:\n  // - Optional milliseconds\n  // - Optional timezone offset or Z\n  // - Optional T separator (space also valid)\n  if (!/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$/.test(isoString)) {\n    return false;\n  }\n  const testDate = new Date(isoString);\n  return !Number.isNaN(testDate.getTime());\n}\n","// @ts-nocheck\nimport chalk from \"chalk\";\nimport * as Utils from \"./utils.js\";\nimport { isIsoStringDate } from \"./utils.js\";\n\nconst conflictChars = /[^\\w\\s\\n\\r\\v\\t.,]/i;\n\n// Helper function to detect if an object should be printed or ignored\nconst isPrintable = (input, options) => input !== undefined || options.renderUndefined;\n\n// Helper function to detect if an object can be directly serializable\nconst isSerializable = (input, onlyPrimitives, options) => {\n  if (\n    typeof input === \"boolean\" ||\n    typeof input === \"number\" ||\n    typeof input === \"function\" ||\n    input === null ||\n    input === undefined ||\n    input instanceof Date\n  ) {\n    return true;\n  }\n  if (typeof input === \"string\" && input.indexOf(\"\\n\") === -1) {\n    return true;\n  }\n\n  if (options.inlineArrays && !onlyPrimitives) {\n    if (Array.isArray(input) && isSerializable(input[0], true, options)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * @param {Function} colorFn\n * @param {PrettyJSONOptions} options\n */\nconst getColorRenderer = (colorFn, options) => {\n  if (options.noColor) {\n    return (text) => text;\n  }\n\n  if (typeof colorFn !== \"function\") {\n    return (text) => text;\n  }\n\n  return colorFn;\n};\n\nconst addColorToData = (input, options) => {\n  if (options.noColor) {\n    return input;\n  }\n\n  if (input instanceof Date) {\n    return getColorRenderer(options.dateColor, options)(input.toISOString());\n  }\n  if (typeof input === \"string\") {\n    if (isIsoStringDate(input)) {\n      return getColorRenderer(options.dateColor, options)(input);\n    }\n    // Print strings in regular terminal color\n    return getColorRenderer(options.stringColor, options)(input);\n  }\n\n  const sInput = `${input}`;\n\n  if (typeof input === \"boolean\") {\n    return getColorRenderer(options.booleanColor, options)(sInput);\n  }\n  if (input === null || input === undefined) {\n    return getColorRenderer(options.nullUndefinedColor, options)(sInput);\n  }\n  if (typeof input === \"number\") {\n    if (input >= 0) {\n      return getColorRenderer(options.positiveNumberColor, options)(sInput);\n    }\n    return getColorRenderer(options.negativeNumberColor, options)(sInput);\n  }\n  if (typeof input === \"function\") {\n    return \"function() {}\";\n  }\n\n  if (Array.isArray(input)) {\n    return input.join(\", \");\n  }\n\n  return sInput;\n};\n\nconst colorMultilineString = (options, line) => getColorRenderer(options.multilineStringColor, options)(line);\n\nconst indentLines = (string, spaces, options) => {\n  let lines = string.split(\"\\n\");\n  lines = lines.map((line) => Utils.indent(spaces) + colorMultilineString(options, line));\n  return lines.join(\"\\n\");\n};\n\nconst renderToArray = (data, options, indentation) => {\n  if (typeof data === \"string\" && data.match(conflictChars) && options.escape) {\n    data = JSON.stringify(data);\n  }\n\n  if (!isPrintable(data, options)) {\n    return [];\n  }\n\n  if (isSerializable(data, false, options)) {\n    return [Utils.indent(indentation) + addColorToData(data, options)];\n  }\n\n  // Unserializable string means it's multiline\n  if (typeof data === \"string\") {\n    return [\n      Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n      indentLines(data, indentation + options.defaultIndentation, options),\n      Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n    ];\n  }\n\n  if (Array.isArray(data)) {\n    // If the array is empty, render the `emptyArrayMsg`\n    if (data.length === 0) {\n      return [Utils.indent(indentation) + options.emptyArrayMsg];\n    }\n\n    // If arrays should be collapsed and there's data, show [...]\n    if (options.collapseArrays && data.length > 0) {\n      return [`${Utils.indent(indentation)}[... ${data.length} items]`];\n    }\n\n    const outputArray = [];\n\n    data.forEach((element) => {\n      if (!isPrintable(element, options)) {\n        return;\n      }\n\n      // Prepend the dash at the beginning of each array's element line\n      let line = \"- \";\n      line = getColorRenderer(options.dashColor, options)(line);\n      line = Utils.indent(indentation) + line;\n\n      // If the element of the array is a string, bool, number, or null\n      // render it in the same line\n      if (isSerializable(element, false, options)) {\n        line += renderToArray(element, options, 0)[0];\n        outputArray.push(line);\n\n        // If the element is an array or object, render it in next line\n      } else {\n        outputArray.push(line);\n        outputArray.push.apply(outputArray, renderToArray(element, options, indentation + options.defaultIndentation));\n      }\n    });\n\n    return outputArray;\n  }\n\n  if (data instanceof Error) {\n    return renderToArray(\n      {\n        message: data.message,\n        stack: data.stack.split(\"\\n\"),\n      },\n      options,\n      indentation,\n    );\n  }\n\n  // If values alignment is enabled, get the size of the longest index\n  // to align all the values\n  const maxIndexLength = options.noAlign ? 0 : Utils.getMaxIndexLength(data);\n  let key;\n  const output = [];\n\n  Object.getOwnPropertyNames(data).forEach((i) => {\n    if (!isPrintable(data[i], options)) {\n      return;\n    }\n\n    // Prepend the index at the beginning of the line\n    key = `${i}: `;\n    key = getColorRenderer(options.keysColor, options)(key);\n    key = Utils.indent(indentation) + key;\n\n    // If the value is serializable, render it in the same line\n    if (isSerializable(data[i], false, options)) {\n      const nextIndentation = options.noAlign ? 0 : maxIndexLength - i.length;\n      key += renderToArray(data[i], options, nextIndentation)[0];\n      output.push(key);\n\n      // If the index is an array or object, render it in next line\n    } else {\n      output.push(key);\n      output.push.apply(output, renderToArray(data[i], options, indentation + options.defaultIndentation));\n    }\n  });\n  return output;\n};\n/**\n * @typedef {Object} PrettyJSONOptions\n * @property {Function} [stringColor=null] Chalk color function for strings\n * @property {Function} [multilineStringColor=null] Chalk color function for multiline strings\n * @property {Function} [keysColor=chalk.green] Chalk color function for keys in hashes\n * @property {Function} [dashColor=chalk.green] Chalk color function for dashes in arrays\n * @property {Function} [numberColor=chalk.blue] Default Chalk color function for numbers\n * @property {Function} [positiveNumberColor=numberColor] Chalk color function for positive numbers\n * @property {Function} [negativeNumberColor=numberColor] Chalk color function for negative numbers\n * @property {Function} [booleanColor=chalk.cyan] Chalk color function for boolean values\n * @property {Function} [nullUndefinedColor=chalk.grey] Chalk color function for null || undefined\n * @property {Function} [dateColor=chalk.magenta] Chalk color function for Date objects\n * @property {number} [defaultIndentation=2] Indentation spaces per object level\n * @property {string} [emptyArrayMsg=\"(empty array)\"] Replace empty strings with\n * @property {boolean} [noColor] Flag to disable colors\n * @property {boolean} [noAlign] Flag to disable alignment\n * @property {boolean} [escape] Flag to escape printed content\n * @property {boolean} [collapseArrays] Flag to collapse arrays\n */\n/**\n * Mutating function that ensures we have a valid options object\n * @param {PrettyJSONOptions} options\n * @returns PrettyJSONOptions\n */\nconst validateOptionsAndSetDefaults = (options) => {\n  options = options || {};\n  options.emptyArrayMsg = options.emptyArrayMsg || \"(empty array)\";\n  options.keysColor = options.keysColor || chalk.green;\n  options.dashColor = options.dashColor || chalk.green;\n  options.booleanColor = options.booleanColor || chalk.cyan;\n  options.nullUndefinedColor = options.nullUndefinedColor || chalk.grey;\n  options.numberColor = options.numberColor || chalk.blue;\n  options.positiveNumberColor = options.positiveNumberColor || options.numberColor;\n  options.negativeNumberColor = options.negativeNumberColor || options.numberColor;\n  options.dateColor = options.dateColor || chalk.magenta;\n  options.defaultIndentation = options.defaultIndentation || 2;\n  options.noColor = !!options.noColor;\n  options.noAlign = !!options.noAlign;\n  options.escape = !!options.escape;\n  options.renderUndefined = !!options.renderUndefined;\n  options.collapseArrays = !!options.collapseArrays;\n\n  options.stringColor = options.stringColor || null;\n  options.multilineStringColor = options.multilineStringColor || options.stringColor || null;\n\n  return options;\n};\n/**\n * ### Render function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n *     {\n *       emptyArrayMsg: '(empty)',    // Rendered message on empty strings\n *       keysColor: 'blue',           // Color for keys in hashes\n *       dashColor: 'red',            // Color for the dashes in arrays\n *       stringColor: 'grey',         // Color for strings\n *       multilineStringColor: 'cyan' // Color for multiline strings\n *       defaultIndentation: 2        // Indentation on nested objects\n *     }\n * @returns string with the rendered data\n */\nexport function render(data, options, indentation) {\n  // Default values\n  indentation = indentation || 0;\n  options = validateOptionsAndSetDefaults(options);\n\n  return renderToArray(data, options, indentation).join(\"\\n\");\n}\n\n/**\n * ### Render from string function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n *     {\n *       emptyArrayMsg: '(empty)', // Rendered message on empty strings\n *       keysColor: 'blue',        // Color for keys in hashes\n *       dashColor: 'red',         // Color for the dashes in arrays\n *       defaultIndentation: 2     // Indentation on nested objects\n *     }\n */\nexport function renderString(data, options, indentation) {\n  let output = \"\";\n  let parsedData;\n  // If the input is not a string or if it's empty, just return an empty string\n  if (typeof data !== \"string\" || data === \"\") {\n    return \"\";\n  }\n\n  // Remove non-JSON characters from the beginning string\n  if (data[0] !== \"{\" && data[0] !== \"[\") {\n    let beginingOfJson;\n    if (data.indexOf(\"{\") === -1) {\n      beginingOfJson = data.indexOf(\"[\");\n    } else if (data.indexOf(\"[\") === -1) {\n      beginingOfJson = data.indexOf(\"{\");\n    } else if (data.indexOf(\"{\") < data.indexOf(\"[\")) {\n      beginingOfJson = data.indexOf(\"{\");\n    } else {\n      beginingOfJson = data.indexOf(\"[\");\n    }\n    output += `${data.substr(0, beginingOfJson)}\\n`;\n    data = data.substr(beginingOfJson);\n  }\n\n  try {\n    parsedData = JSON.parse(data);\n  } catch (_e) {\n    // Return an error in case of an invalid JSON\n    return `${chalk.red(\"Error:\")} Not valid JSON!`;\n  }\n\n  // Call the real render() method\n  output += exports.render(parsedData, options, indentation);\n  return output;\n}\n","import chalk from \"chalk\";\nimport { format } from \"date-fns\";\nimport type { ColorConfig, ViewConfig } from \"../types.js\";\n\n/**\n * Formats a timestamp into a readable string.\n *\n * @param timestamp - Unix timestamp in milliseconds\n * @param colorFn - Chalk function to color the timestamp\n * @param timestampFormat - Custom format string (date-fns) or function. Defaults to \"HH:mm:ss.SSS\"\n * @returns Formatted timestamp string\n */\nexport function formatTimestamp(\n  timestamp: number,\n  colorFn: typeof chalk.white,\n  timestampFormat: string | ((timestamp: number) => string) = \"HH:mm:ss.SSS\",\n): string {\n  let formattedTime: string;\n\n  if (typeof timestampFormat === \"function\") {\n    formattedTime = timestampFormat(timestamp);\n  } else {\n    const date = new Date(timestamp);\n    formattedTime = format(date, timestampFormat);\n  }\n\n  return colorFn(`[${formattedTime}]`);\n}\n\n/**\n * Gets the appropriate color function for a log level.\n *\n * @param level - Log level string\n * @param colors - Color configuration object\n * @returns Chalk function for the log level\n */\nexport function getLevelColor(level: string, colors: ColorConfig): typeof chalk.white {\n  const levelLower = level.toLowerCase();\n\n  switch (levelLower) {\n    case \"trace\":\n      return colors.trace || chalk.white;\n    case \"debug\":\n      return colors.debug || chalk.white;\n    case \"info\":\n      return colors.info || chalk.white;\n    case \"warn\":\n      return colors.warn || chalk.white;\n    case \"error\":\n      return colors.error || chalk.white;\n    case \"fatal\":\n      return colors.fatal || chalk.white;\n    default:\n      return colors.info || chalk.white;\n  }\n}\n\n/**\n * Formats a value for display.\n */\nexport function formatValue(value: any, expanded = false, collapseArrays = true): string {\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\" || typeof value === \"boolean\") return value.toString();\n  if (value === null) return \"null\";\n  if (value === undefined) return \"undefined\";\n  if (Array.isArray(value)) return expanded ? JSON.stringify(value) : collapseArrays ? \"[...]\" : value.toString();\n  if (typeof value === \"object\") return expanded ? JSON.stringify(value) : \"{...}\";\n  return value.toString();\n}\n\n/**\n * Formats structured data for inline display with depth limiting.\n *\n * @param data - The data to format\n * @param config - View configuration for colors\n * @param maxDepth - Maximum depth for nested objects\n * @param expanded - Whether to show full depth (for inline view mode)\n * @param collapseArrays - Whether to collapse arrays to summary format\n * @returns Formatted data string\n */\nexport function formatInlineData(\n  data: any,\n  config: Required<ViewConfig>,\n  maxDepth: number,\n  expanded = false,\n  collapseArrays = true,\n): string {\n  if (!data) return \"\";\n\n  const pairs: string[] = [];\n  const traverse = (obj: any, prefix = \"\", depth = 0) => {\n    if (!expanded && depth >= maxDepth) return;\n\n    for (const [key, value] of Object.entries(obj)) {\n      const fullKey = prefix ? `${prefix}.${key}` : key;\n\n      if (value && typeof value === \"object\" && !Array.isArray(value)) {\n        if (expanded) {\n          pairs.push(`${config.dataKeyColor(fullKey)}=${config.dataValueColor(JSON.stringify(value))}`);\n        } else {\n          traverse(value, fullKey, depth + 1);\n        }\n      } else {\n        pairs.push(\n          `${config.dataKeyColor(fullKey)}=${config.dataValueColor(formatValue(value, expanded, collapseArrays))}`,\n        );\n      }\n    }\n  };\n\n  traverse(data);\n  const result = pairs.join(\" \");\n  // Remove truncation - inline view should show complete data without truncation\n  return result;\n}\n","import type { LogEntry, PrettyTerminalViewMode, Runtime, SimpleViewConfig } from \"../types.js\";\nimport * as prettyjson from \"../vendor/prettyjson.js\";\nimport { formatInlineData, formatTimestamp, getLevelColor } from \"./utils.js\";\n\n/**\n * Handles rendering of the simple view mode.\n * Supports three display modes:\n * - Message-only: Shows timestamp, level and message\n * - Inline: Shows all details with complete data inline\n * - Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimpleView {\n  private config: SimpleViewConfig;\n  private viewMode: PrettyTerminalViewMode;\n  private maxInlineDepth: number;\n  private showLogId: boolean;\n  private timestampFormat: string | ((timestamp: number) => string);\n  private collapseArrays: boolean;\n  private flattenNestedObjects: boolean;\n  private runtime: Runtime;\n  private includeDataInBrowserConsole: boolean;\n\n  constructor(config: SimpleViewConfig) {\n    this.config = config;\n    this.viewMode = config.viewMode;\n    this.maxInlineDepth = config.maxInlineDepth;\n    this.showLogId = config.showLogId;\n    this.timestampFormat = config.timestampFormat;\n    this.collapseArrays = config.collapseArrays !== false;\n    this.flattenNestedObjects = config.flattenNestedObjects !== false;\n    this.runtime = config.runtime;\n    this.includeDataInBrowserConsole = config.includeDataInBrowserConsole || false;\n  }\n\n  public getConfig(): SimpleViewConfig {\n    return this.config;\n  }\n\n  public getViewMode(): PrettyTerminalViewMode {\n    return this.viewMode;\n  }\n\n  /**\n   * Writes a message to the appropriate output based on runtime\n   */\n  private writeMessage(message: string, level?: string, data?: any): void {\n    if (this.runtime === \"node\") {\n      // Use process.stdout.write for Node.js\n      process?.stdout?.write?.(`${message}\\n`);\n    } else {\n      // Use appropriate console method based on log level for browser\n      const shouldIncludeData = this.includeDataInBrowserConsole && data !== undefined;\n\n      switch (level) {\n        case \"trace\":\n          if (shouldIncludeData) {\n            console.debug(message, data);\n          } else {\n            console.debug(message);\n          }\n          break;\n        case \"debug\":\n          if (shouldIncludeData) {\n            console.debug(message, data);\n          } else {\n            console.debug(message);\n          }\n          break;\n        case \"info\":\n          if (shouldIncludeData) {\n            console.info(message, data);\n          } else {\n            console.info(message);\n          }\n          break;\n        case \"warn\":\n          if (shouldIncludeData) {\n            console.warn(message, data);\n          } else {\n            console.warn(message);\n          }\n          break;\n        case \"error\":\n        case \"fatal\":\n          if (shouldIncludeData) {\n            console.error(message, data);\n          } else {\n            console.error(message);\n          }\n          break;\n        default:\n          if (shouldIncludeData) {\n            console.log(message, data);\n          } else {\n            console.log(message);\n          }\n          break;\n      }\n    }\n  }\n\n  /**\n   * Renders a single log entry based on the current view mode\n   */\n  public renderLogLine(entry: LogEntry): void {\n    const levelColor = getLevelColor(entry.level, this.config.config.colors);\n    const chevron = levelColor(`▶ ${entry.level.toUpperCase()} `);\n    const message = entry.message || \"(no message)\";\n    const timestamp = formatTimestamp(entry.timestamp, this.config.config.logIdColor, this.timestampFormat);\n\n    // Parse data for browser console inclusion\n    const parsedData = entry.data ? JSON.parse(entry.data) : undefined;\n\n    switch (this.viewMode) {\n      case \"message-only\": {\n        // Message-only view shows timestamp, level and message\n        const condensedLine = `${timestamp} ${chevron}${message}`;\n        this.writeMessage(condensedLine, entry.level, parsedData);\n        break;\n      }\n\n      case \"inline\": {\n        // Inline view shows all details with complete data inline\n        const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n        const fullData = entry.data\n          ? formatInlineData(\n              JSON.parse(entry.data),\n              this.config.config,\n              this.maxInlineDepth,\n              !this.flattenNestedObjects,\n              this.collapseArrays,\n            )\n          : \"\";\n        const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n        // Don't wrap inline mode to preserve full content\n        this.writeMessage(expandedLine, entry.level, parsedData);\n        break;\n      }\n\n      case \"expanded\": {\n        // Expanded view shows timestamp, level, and message on first line, with data on indented separate lines\n        const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n        const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}`;\n        this.writeMessage(firstLine, entry.level, parsedData);\n\n        if (entry.data) {\n          const jsonLines = prettyjson\n            .render(JSON.parse(entry.data), {\n              defaultIndentation: 2,\n              keysColor: this.config.config.dataKeyColor,\n              dashColor: this.config.config.dataKeyColor,\n              numberColor: this.config.config.dataValueColor,\n              stringColor: this.config.config.dataValueColor,\n              multilineStringColor: this.config.config.dataValueColor,\n              positiveNumberColor: this.config.config.dataValueColor,\n              negativeNumberColor: this.config.config.dataValueColor,\n              booleanColor: this.config.config.dataValueColor,\n              nullUndefinedColor: this.config.config.dataValueColor,\n              dateColor: this.config.config.dataValueColor,\n              collapseArrays: this.collapseArrays,\n            })\n            .split(\"\\n\");\n\n          // Add each line with proper indentation (2 spaces at the beginning)\n          for (const line of jsonLines) {\n            if (line.trim() !== \"\") {\n              this.writeMessage(`  ${line}`, entry.level);\n            }\n          }\n        }\n        break;\n      }\n\n      default: {\n        // Default to full view for any unexpected view modes\n        const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n        const fullData = entry.data\n          ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays)\n          : \"\";\n        const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n        this.writeMessage(expandedLine, entry.level, parsedData);\n        break;\n      }\n    }\n  }\n}\n","/**\n * A transport for LogLayer that provides simple pretty terminal output.\n * This transport displays logs with theming and formatting but without interactive features.\n *\n * Features:\n * - Real-time log display with color-coded levels\n * - Configurable themes and colors\n * - Three view modes: inline, message-only, expanded\n * - JSON data pretty printing\n * - No interactive features (no keyboard navigation, no input)\n * - Browser and Node.js runtime support\n *\n * Usage:\n * ```typescript\n * const transport = new SimplePrettyTerminalTransport({\n *   maxInlineDepth: 4,\n *   maxInlineLength: 120,\n *   theme: customTheme,\n *   viewMode: \"inline\",\n *   runtime: \"node\" // or \"browser\"\n * });\n * ```\n */\n\nimport type { LogLayerTransportParams } from \"@loglayer/transport\";\nimport { LoggerlessTransport } from \"@loglayer/transport\";\nimport chalk from \"chalk\";\nimport { moonlight } from \"./themes.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig } from \"./types.js\";\nimport { SimpleView } from \"./views/SimpleView.js\";\n\n/**\n * Main transport class that handles simple pretty terminal output.\n * This class provides the display functionality of PrettyTerminal without interactive features.\n *\n * The transport supports three view modes:\n * 1. Inline: Shows all information with complete data structures inline (no truncation)\n * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)\n * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimplePrettyTerminalTransport extends LoggerlessTransport {\n  /** Handles rendering and formatting of logs */\n  private renderer: SimpleView;\n\n  /** Configuration options */\n  private config: SimplePrettyTerminalConfig;\n\n  /**\n   * Creates a new SimplePrettyTerminalTransport instance.\n   *\n   * @param config - Configuration options for the transport\n   */\n  constructor(config: SimplePrettyTerminalConfig) {\n    super(config);\n\n    // Store configuration\n    this.config = config;\n\n    // If transport is disabled, don't initialize anything\n    if (config.enabled === false) {\n      return;\n    }\n\n    // Initialize configuration with defaults\n    const maxInlineDepth = config.maxInlineDepth || 4;\n    const theme = config.theme || moonlight;\n    const viewMode = config.viewMode || \"inline\";\n    const showLogId = config.showLogId || false;\n    const timestampFormat = config.timestampFormat || \"HH:mm:ss.SSS\";\n    const collapseArrays = config.collapseArrays !== false; // Default to true\n    const flattenNestedObjects = config.flattenNestedObjects !== false; // Default to true\n    const runtime = config.runtime;\n    const includeDataInBrowserConsole = config.includeDataInBrowserConsole || false;\n\n    // Initialize view configuration with defaults\n    const viewConfig = {\n      colors: {\n        trace: chalk.gray, // Lowest level, used for verbose output\n        debug: chalk.blue, // Debug information\n        info: chalk.green, // Normal operation\n        warn: chalk.yellow, // Warning conditions\n        error: chalk.red, // Error conditions\n        fatal: chalk.bgRed.white, // Critical errors\n        ...theme.colors,\n      },\n      logIdColor: theme.logIdColor || chalk.dim,\n      dataValueColor: theme.dataValueColor || chalk.white,\n      dataKeyColor: theme.dataKeyColor || chalk.dim,\n    };\n\n    // Initialize the renderer\n    this.renderer = new SimpleView({\n      viewMode,\n      maxInlineDepth,\n      showLogId,\n      timestampFormat,\n      collapseArrays,\n      flattenNestedObjects,\n      runtime,\n      includeDataInBrowserConsole,\n      config: viewConfig,\n    });\n  }\n\n  /**\n   * Generates a random ID for each log entry.\n   * Uses base36 encoding for compact, readable IDs.\n   *\n   * @returns A 6-character string ID\n   * @example\n   * \"a1b2c3\" // Example generated ID\n   */\n  private generateId(): string {\n    return Math.random().toString(36).substring(2, 8);\n  }\n\n  /**\n   * Main transport method that receives logs from LogLayer.\n   * This method is called for each log event and handles:\n   * - Generating a unique ID for the log\n   * - Converting the log data to a storable format\n   * - Rendering the log using the SimpleView renderer\n   *\n   * @param logLevel - The severity level of the log\n   * @param messages - Array of message strings to be joined\n   * @param data - Additional structured data to be logged\n   * @param hasData - Whether the log includes additional data\n   * @returns The original messages array\n   */\n  shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[] {\n    // If transport is disabled, return messages without processing\n    if (this.config.enabled === false) {\n      return messages;\n    }\n\n    const entry = {\n      id: this.generateId(),\n      timestamp: Date.now(),\n      level: logLevel,\n      message: messages.join(\" \"),\n      data: hasData ? JSON.stringify(data) : null,\n    };\n\n    this.renderer.renderLogLine(entry);\n    return messages;\n  }\n\n  /**\n   * Changes the view mode for log display.\n   *\n   * @param viewMode - The new view mode to use\n   */\n  setViewMode(viewMode: PrettyTerminalViewMode): void {\n    if (this.config.enabled === false) {\n      return;\n    }\n\n    // Rebuild the viewConfig as in the constructor\n    const theme = this.config.theme || moonlight;\n    const runtime = this.config.runtime;\n    const viewConfig = {\n      colors: {\n        trace: chalk.gray,\n        debug: chalk.blue,\n        info: chalk.green,\n        warn: chalk.yellow,\n        error: chalk.red,\n        fatal: chalk.bgRed.white,\n        ...theme.colors,\n      },\n      logIdColor: theme.logIdColor || chalk.dim,\n      dataValueColor: theme.dataValueColor || chalk.white,\n      dataKeyColor: theme.dataKeyColor || chalk.dim,\n    };\n\n    this.renderer = new SimpleView({\n      viewMode,\n      maxInlineDepth: this.config.maxInlineDepth || 4,\n      showLogId: this.config.showLogId || false,\n      timestampFormat: this.config.timestampFormat || \"HH:mm:ss.SSS\",\n      collapseArrays: this.config.collapseArrays !== false,\n      flattenNestedObjects: this.config.flattenNestedObjects !== false,\n      runtime,\n      includeDataInBrowserConsole: this.config.includeDataInBrowserConsole || false,\n      config: viewConfig,\n    });\n  }\n\n  /**\n   * Gets the current view mode.\n   *\n   * @returns The current view mode\n   */\n  getViewMode(): PrettyTerminalViewMode {\n    return this.renderer.getViewMode();\n  }\n}\n","import { SimplePrettyTerminalTransport } from \"./SimplePrettyTerminalTransport.js\";\nimport type {\n  PrettyTerminalViewMode,\n  Runtime,\n  SimplePrettyTerminalConfig,\n  SimplePrettyTerminalTheme,\n} from \"./types.js\";\n\n// Export chalk for custom theme creation\nexport * from \"chalk\";\n\n// Export the main transport class (for advanced usage)\nexport { SimplePrettyTerminalTransport };\n\n// Export all built-in themes\nexport * from \"./themes.js\";\n\n// Export essential types for configuration and custom themes\nexport type { SimplePrettyTerminalConfig, SimplePrettyTerminalTheme, PrettyTerminalViewMode, Runtime };\n\n// Main convenience function for creating the transport\nexport function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig) {\n  return new SimplePrettyTerminalTransport(config);\n}\n"],"mappings":"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"}