{"version":3,"file":"formatter.mjs","names":[],"sources":["../../src/output/formatter.ts"],"sourcesContent":["import { camelToKebab } from '../util/shell-utils.ts';\nimport type { ColorConfig, ColorTheme } from './colorizer.ts';\nimport {\n  createAnsiStyler,\n  createConsoleStyler,\n  createHtmlLayout,\n  createHtmlStyler,\n  createMarkdownLayout,\n  createMarkdownStyler,\n  createTextLayout,\n  createTextStyler,\n  DEFAULT_TERMINAL_WIDTH,\n  type LayoutConfig,\n  type Styler,\n  shouldUseAnsi,\n  wrapText,\n} from './styling.ts';\n\nexport type HelpFormat = 'text' | 'ansi' | 'console' | 'markdown' | 'html' | 'json';\nexport type HelpDetail = 'minimal' | 'standard' | 'full';\n\n// ============================================================================\n// Help Info Types (shared with help.ts)\n// ============================================================================\n\n/**\n * Information about a single positional argument.\n */\nexport type HelpPositionalInfo = {\n  name: string;\n  description?: string;\n  optional: boolean;\n  default?: unknown;\n  type?: string;\n  enum?: string[];\n};\n\n/**\n * Information about a single argument/flag.\n */\nexport type HelpArgumentInfo = {\n  name: string;\n  description?: string;\n  optional: boolean;\n  default?: unknown;\n  type?: string;\n  enum?: string[];\n  /** Single-character short flags (shown as `-v`) */\n  flags?: string[];\n  /** Multi-character alternative long names (shown as `--dry-run`) */\n  aliases?: string[];\n  deprecated?: boolean | string;\n  hidden?: boolean;\n  examples?: unknown[];\n  /** Environment variable(s) this arg can be set from */\n  env?: string | string[];\n  /** Whether this arg is an array type (shown as <type...>) */\n  variadic?: boolean;\n  /** Whether this arg is a boolean (shown as --[no-]arg) */\n  negatable?: boolean;\n  /** Custom negative keyword(s) that set this arg to false (e.g. `['remote']` for `--remote`) */\n  negative?: string[];\n  /** Config file key that maps to this arg */\n  configKey?: string;\n  /** Group name for organizing this option under a labeled section in help output */\n  group?: string;\n};\n\n/**\n * Information about a subcommand (minimal info for listing).\n */\nexport type HelpSubcommandInfo = {\n  name: string;\n  title?: string;\n  description?: string;\n  aliases?: string[];\n  deprecated?: boolean | string;\n  hidden?: boolean;\n  hasSubcommands?: boolean;\n  /** Group name for organizing this command under a labeled section in help output */\n  group?: string;\n};\n\n/**\n * Information about a built-in command/flag entry.\n */\nexport type HelpBuiltinInfo = {\n  name: string;\n  description?: string;\n  sub?: { name: string; description?: string }[];\n};\n\n/**\n * Comprehensive JSON structure for help information.\n * This is the single source of truth that all formatters use.\n */\nexport type HelpInfo = {\n  /** The full command name (e.g., \"cli serve\" or \"<root>\") */\n  name: string;\n  /** Short title for the command */\n  title?: string;\n  /** Command description */\n  description?: string;\n  /** Alternative names/aliases for this command */\n  aliases?: string[];\n  /** Whether the command is deprecated */\n  deprecated?: boolean | string;\n  /** Whether the command is hidden */\n  hidden?: boolean;\n  /** Usage string parts for flexible formatting */\n  usage: {\n    command: string;\n    hasSubcommands: boolean;\n    hasPositionals: boolean;\n    hasArguments: boolean;\n    /** The name of the field that reads from stdin, if any. Shown as `[stdin > field]` in usage. */\n    stdinField?: string;\n  };\n  /** List of subcommands */\n  subcommands?: HelpSubcommandInfo[];\n  /** Positional arguments */\n  positionals?: HelpPositionalInfo[];\n  /** Arguments/flags (only visible ones, hidden filtered out) */\n  arguments?: HelpArgumentInfo[];\n  /** Built-in commands and flags (shown only for root command) */\n  builtins?: HelpBuiltinInfo[];\n  /** Command-level usage examples (shown in help output) */\n  examples?: string[];\n  /** Full help info for nested commands (used in 'full' detail mode) */\n  nestedCommands?: HelpInfo[];\n};\n\n// ============================================================================\n// Formatter Interface\n// ============================================================================\n\n/**\n * A formatter that takes the entire HelpInfo structure and produces formatted output.\n */\nexport type Formatter = {\n  /** Format the entire help info structure into a string */\n  format: (info: HelpInfo) => string;\n};\n\n// ============================================================================\n// Generic Formatter Implementation\n// ============================================================================\n\n/**\n * Creates a formatter that uses the given styler and layout configuration.\n */\nfunction createGenericFormatter(styler: Styler, layout: LayoutConfig, showAllBuiltins?: boolean, terminalWidth?: number): Formatter {\n  const { newline, indent, join, wrapDocument } = layout;\n\n  function formatUsageSection(info: HelpInfo): string[] {\n    const usageParts: string[] = [styler.command(info.usage.command), info.usage.hasSubcommands ? styler.meta('[command]') : ''];\n    // Show actual positional argument names in usage line\n    if (info.positionals && info.positionals.length > 0) {\n      for (const arg of info.positionals) {\n        const name = arg.name.startsWith('...') ? `${arg.name}` : arg.name;\n        usageParts.push(styler.meta(arg.optional ? `[${name}]` : `<${name}>`));\n      }\n    }\n    if (info.usage.hasArguments) usageParts.push(styler.meta('[options]'));\n    return [`${styler.label('Usage:')} ${join(usageParts)}`];\n  }\n\n  function formatSubcommandsSection(info: HelpInfo): string[] {\n    const lines: string[] = [];\n    const subcommands = info.subcommands!;\n\n    const subcommandSuffix = (c: HelpSubcommandInfo) => (c.hasSubcommands ? ' <subcommand>' : '');\n    const formatAliasParts = (c: HelpSubcommandInfo) => {\n      if (!c.aliases?.length) return { plain: '', styled: '' };\n      const realAliases = c.aliases.filter((a) => a !== '[default]');\n      const hasDefault = c.aliases.some((a) => a === '[default]');\n      const parts: string[] = [];\n      const styledParts: string[] = [];\n      if (realAliases.length) {\n        parts.push(`(${realAliases.join(', ')})`);\n        styledParts.push(`(${realAliases.join(', ')})`);\n      }\n      if (hasDefault) {\n        parts.push('[default]');\n        styledParts.push(styler.meta('[default]'));\n      }\n      return { plain: parts.length ? ` ${parts.join(' ')}` : '', styled: styledParts.length ? ` ${styledParts.join(' ')}` : '' };\n    };\n    // Column width is computed across all subcommands for consistent alignment\n    const maxNameLength = Math.max(\n      ...subcommands.map((c) => {\n        return (c.name + subcommandSuffix(c) + formatAliasParts(c).plain).length;\n      }),\n    );\n\n    const grouped = Object.groupBy(subcommands, (c) => c.group ?? '');\n\n    const renderSubcommands = (cmds: HelpSubcommandInfo[]) => {\n      for (const subCmd of cmds) {\n        const aliasParts = formatAliasParts(subCmd);\n        const suffix = subcommandSuffix(subCmd);\n        const commandDisplay = subCmd.name + suffix + aliasParts.plain;\n        const padding = ' '.repeat(Math.max(0, maxNameLength - commandDisplay.length + 2));\n        const isDeprecated = !!subCmd.deprecated;\n        const isDefaultEntry = subCmd.name === '[default]';\n        const commandName = isDeprecated\n          ? styler.deprecated(commandDisplay)\n          : (isDefaultEntry ? styler.meta(subCmd.name) : styler.command(subCmd.name)) +\n            (suffix ? styler.meta(suffix) : '') +\n            aliasParts.styled;\n        const lineParts: string[] = [commandName, padding];\n\n        // Use title if available, otherwise use description\n        const displayText = subCmd.title ?? subCmd.description;\n        if (displayText) {\n          lineParts.push(isDeprecated ? styler.deprecated(displayText) : styler.description(displayText));\n        }\n        if (isDeprecated) {\n          const deprecatedMeta =\n            typeof subCmd.deprecated === 'string' ? styler.meta(` (deprecated: ${subCmd.deprecated})`) : styler.meta(' (deprecated)');\n          lineParts.push(deprecatedMeta);\n        }\n        lines.push(indent(1) + lineParts.join(''));\n      }\n    };\n\n    for (const [key, items] of Object.entries(grouped)) {\n      if (lines.length > 0) lines.push('');\n      lines.push(styler.section(key ? `${key}:` : 'Commands:'));\n      renderSubcommands(items!);\n    }\n\n    // Skip hint when builtins are present — the builtins section shows a combined hint\n    if (!info.builtins?.length) {\n      lines.push('');\n      lines.push(styler.meta(`Run \"${info.name} [command] --help\" for more information on a command.`));\n    }\n\n    return lines;\n  }\n\n  function formatPositionalsSection(info: HelpInfo): string[] {\n    const lines: string[] = [];\n    const args = info.positionals!;\n\n    lines.push(styler.section('Arguments:'));\n\n    const maxNameLength = Math.min(32, Math.max(...args.map((a) => a.name.length)));\n    const descCol = 2 + maxNameLength + 2;\n    const posAvailWidth = terminalWidth ? terminalWidth - descCol : undefined;\n    const descColPad = ' '.repeat(descCol);\n\n    for (const arg of args) {\n      const padding = ' '.repeat(Math.max(2, maxNameLength - arg.name.length + 2));\n      const prefix = indent(1) + styler.arg(arg.name) + padding;\n\n      const descPlain = arg.description ?? '';\n      const styledDesc = descPlain ? styler.description(descPlain) : '';\n\n      const metaParts: string[] = [];\n      const styledMetaParts: string[] = [];\n      if (info.usage.stdinField === arg.name) {\n        metaParts.push('(stdin)');\n        styledMetaParts.push(styler.meta('(stdin)'));\n      }\n      if (arg.enum) {\n        const text = `(choices: ${arg.enum.join(', ')})`;\n        metaParts.push(text);\n        styledMetaParts.push(styler.meta(text));\n      }\n      if (arg.default !== undefined) {\n        const text = `(default: ${String(arg.default)})`;\n        metaParts.push(text);\n        styledMetaParts.push(styler.meta(text));\n      }\n\n      const metaStyled = join(styledMetaParts);\n\n      if (posAvailWidth && posAvailWidth > 0) {\n        const metaPlain = metaParts.join(' ');\n        const fullPlain = [descPlain, metaPlain].filter(Boolean).join(' ');\n        if (fullPlain.length <= posAvailWidth) {\n          lines.push(prefix + [styledDesc, metaStyled].filter(Boolean).join(' '));\n        } else if (!descPlain || descPlain.length <= posAvailWidth) {\n          lines.push(prefix + styledDesc);\n          if (metaStyled) lines.push(descColPad + metaStyled);\n        } else {\n          const wrapped = wrapText(descPlain, posAvailWidth);\n          lines.push(prefix + styler.description(wrapped[0]!));\n          for (const wline of wrapped.slice(1)) lines.push(descColPad + styler.description(wline));\n          if (metaStyled) lines.push(descColPad + metaStyled);\n        }\n      } else {\n        lines.push(prefix + join([styledDesc, metaStyled]));\n      }\n    }\n\n    return lines;\n  }\n\n  function formatArgumentsSection(info: HelpInfo): string[] {\n    const lines: string[] = [];\n    const argList = info.arguments || [];\n\n    // Helper to check if a default value is meaningful (not empty string/array)\n    const hasDefault = (value: unknown): boolean => {\n      if (value === undefined) return false;\n      if (value === '') return false;\n      if (Array.isArray(value) && value.length === 0) return false;\n      return true;\n    };\n\n    // Build columns: flags | names | type | description\n    const argColumns = argList.map((arg) => {\n      // Promote kebab-case alias to primary display name if it exists\n      const kebab = camelToKebab(arg.name);\n      const primaryName = kebab && arg.aliases?.includes(kebab) ? kebab : arg.name;\n      const remainingAliases = arg.aliases?.filter((a) => a !== primaryName);\n\n      const flagsPlain = arg.flags?.length ? arg.flags.map((f) => `-${f}`).join(', ') : '';\n      const negPlain = arg.negative?.length ? arg.negative.map((n) => `--${n}`).join(', ') : '';\n      const namesPlain = [`--${primaryName}`, ...(remainingAliases?.map((a) => `--${a}`) || []), ...(negPlain ? [negPlain] : [])].join(\n        ', ',\n      );\n      const typePlain = arg.type && arg.type !== 'boolean' ? (arg.optional ? `[${arg.type}]` : `<${arg.type}>`) : '';\n\n      const isDeprecated = !!arg.deprecated;\n\n      return { flagsPlain, namesPlain, typePlain, isDeprecated, arg };\n    });\n\n    // Column widths are computed across all args (regardless of group) for consistent alignment\n    const maxFlagsWidth = Math.min(12, Math.max(0, ...argColumns.map((c) => c.flagsPlain.length)));\n    const maxNamesWidth = Math.min(32, Math.max(0, ...argColumns.map((c) => c.namesPlain.length)));\n    const maxTypeWidth = Math.min(16, Math.max(0, ...argColumns.map((c) => c.typePlain.length)));\n    const hasAnyFlags = maxFlagsWidth > 0;\n    const descCol = 2 + (hasAnyFlags ? maxFlagsWidth + 2 : 0) + maxNamesWidth + 2 + (maxTypeWidth > 0 ? maxTypeWidth + 2 : 0);\n    const argAvailWidth = terminalWidth ? terminalWidth - descCol : undefined;\n    const descColPad = ' '.repeat(descCol);\n\n    // Split into ordered groups: ungrouped first as \"Options:\", then each group in first-seen order\n    const grouped = Object.groupBy(argColumns, (c) => c.arg.group ?? '');\n\n    const renderArgColumns = (columns: typeof argColumns) => {\n      for (const { flagsPlain, namesPlain, typePlain, isDeprecated, arg } of columns) {\n        const parts: string[] = [];\n\n        // Flags column\n        if (hasAnyFlags) {\n          const styledFlags = isDeprecated ? (flagsPlain ? styler.deprecated(flagsPlain) : '') : flagsPlain ? styler.arg(flagsPlain) : '';\n          const flagsPadding = ' '.repeat(Math.max(0, maxFlagsWidth - flagsPlain.length));\n          const separator = flagsPlain ? ', ' : '  ';\n          parts.push(styledFlags + flagsPadding + separator);\n        }\n\n        // Names column\n        const styledNames = isDeprecated ? styler.deprecated(namesPlain) : styler.arg(namesPlain);\n        const namesPadding = ' '.repeat(Math.max(2, maxNamesWidth - namesPlain.length + 2));\n        parts.push(styledNames + namesPadding);\n\n        // Type column\n        if (maxTypeWidth > 0) {\n          const styledType = typePlain ? styler.type(typePlain) : '';\n          const typePadding = ' '.repeat(Math.max(2, maxTypeWidth - typePlain.length + 2));\n          parts.push(styledType + typePadding);\n        }\n\n        const prefix = indent(1) + parts.join('');\n        const contPad = argAvailWidth ? descColPad : indent(3);\n\n        // Build inline meta (deprecated no-reason, default, choices)\n        const inlineMeta: string[] = [];\n        const styledInlineMeta: string[] = [];\n        if (isDeprecated && typeof arg.deprecated !== 'string') {\n          inlineMeta.push('(deprecated)');\n          styledInlineMeta.push(styler.meta('(deprecated)'));\n        }\n        if (hasDefault(arg.default)) {\n          const text = `(default: ${String(arg.default)})`;\n          inlineMeta.push(text);\n          styledInlineMeta.push(styler.meta(text));\n        }\n        if (arg.enum) {\n          const text = `(choices: ${arg.enum.join(', ')})`;\n          inlineMeta.push(text);\n          styledInlineMeta.push(styler.meta(text));\n        }\n\n        const descPlain = arg.description ?? '';\n        const styledDesc = descPlain ? (isDeprecated ? styler.deprecated(descPlain) : styler.description(descPlain)) : '';\n        const metaStyled = join(styledInlineMeta);\n\n        if (argAvailWidth && argAvailWidth > 0) {\n          // Terminal-width-aware: try to fit description + meta on one line\n          const metaPlain = inlineMeta.join(' ');\n          const fullPlain = [descPlain, metaPlain].filter(Boolean).join(' ');\n          if (fullPlain.length <= argAvailWidth) {\n            lines.push(prefix + [styledDesc, metaStyled].filter(Boolean).join(' '));\n          } else if (!descPlain || descPlain.length <= argAvailWidth) {\n            lines.push(prefix + styledDesc);\n            if (metaStyled) lines.push(descColPad + metaStyled);\n          } else {\n            const wrapped = wrapText(descPlain, argAvailWidth);\n            const styleFn = isDeprecated ? styler.deprecated : styler.description;\n            lines.push(prefix + styleFn(wrapped[0]!));\n            for (const wline of wrapped.slice(1)) lines.push(descColPad + styleFn(wline));\n            if (metaStyled) lines.push(descColPad + metaStyled);\n          }\n        } else {\n          // No terminal width (markdown/html): description on line 1, meta on line 2\n          const descParts: string[] = [];\n          if (styledDesc) descParts.push(styledDesc);\n          lines.push(prefix + join(descParts));\n          if (styledInlineMeta.length > 0) lines.push(indent(3) + metaStyled);\n        }\n\n        // Deprecated (with reason), examples — always on separate line\n        const line3Parts: string[] = [];\n        if (isDeprecated && typeof arg.deprecated === 'string') line3Parts.push(styler.meta(`(deprecated: ${arg.deprecated})`));\n        if (arg.examples && arg.examples.length > 0) {\n          const exampleValues = arg.examples.map((example) => (typeof example === 'string' ? example : JSON.stringify(example))).join(', ');\n          line3Parts.push(styler.example('Example:'), styler.exampleValue(exampleValues));\n        }\n        if (line3Parts.length > 0) lines.push(contPad + join(line3Parts));\n\n        // stdin, env, config — always on separate line\n        const line4Parts: string[] = [];\n        if (info.usage.stdinField === arg.name) line4Parts.push(styler.meta('(stdin)'));\n        if (arg.env) {\n          const envVars = typeof arg.env === 'string' ? [arg.env] : arg.env;\n          line4Parts.push(styler.example('Env:'), styler.exampleValue(envVars.join(', ')));\n        }\n        if (arg.configKey) {\n          line4Parts.push(styler.example('Config:'), styler.exampleValue(arg.configKey));\n        }\n        if (line4Parts.length > 0) lines.push(contPad + join(line4Parts));\n      }\n    };\n\n    for (const [key, items] of Object.entries(grouped)) {\n      if (lines.length > 0) lines.push('');\n      lines.push(styler.section(key ? `${key}:` : 'Options:'));\n      renderArgColumns(items!);\n    }\n\n    return lines;\n  }\n\n  function formatBuiltinsSection(info: HelpInfo): string[] {\n    const lines: string[] = [];\n    const builtins = info.builtins!;\n\n    if (!showAllBuiltins) {\n      // Collapsed summary: show selected builtins on a single line with a combined hint\n      const highlights = ['help [command]', 'version', '[command] --repl'];\n      lines.push(`${styler.label('Global:')} ${styler.meta(highlights.join(', '))}`);\n      const hint = info.usage.hasSubcommands\n        ? `Run \"${info.name} [command] --help\" for more information. Use \"--all\" for all global commands.`\n        : `Use \"${info.name} help --all\" for more information on global commands.`;\n      lines.push(styler.meta(hint));\n      return lines;\n    }\n\n    lines.push(styler.section('Global:'));\n\n    // Compute max effective name length for alignment across main and sub entries\n    const allLengths: number[] = [];\n    for (const entry of builtins) {\n      allLengths.push(entry.name.length);\n      if (entry.sub) {\n        for (const sub of entry.sub) {\n          // Sub entries get extra indent(2) - indent(1) = 2 chars\n          allLengths.push(sub.name.length + 2);\n        }\n      }\n    }\n    const maxLen = Math.max(...allLengths);\n\n    for (const entry of builtins) {\n      const padding = ' '.repeat(Math.max(2, maxLen - entry.name.length + 2));\n      const parts: string[] = [styler.command(entry.name)];\n      if (entry.description) parts.push(padding + styler.description(entry.description));\n      lines.push(indent(1) + parts.join(''));\n\n      if (entry.sub) {\n        for (const sub of entry.sub) {\n          const subPadding = ' '.repeat(Math.max(2, maxLen - sub.name.length));\n          const subParts: string[] = [styler.arg(sub.name)];\n          if (sub.description) subParts.push(subPadding + styler.description(sub.description));\n          lines.push(indent(2) + subParts.join(''));\n        }\n      }\n    }\n\n    return lines;\n  }\n\n  return {\n    format(info: HelpInfo): string {\n      const lines: string[] = [];\n\n      // Show deprecation warning at the top if command is deprecated\n      if (info.deprecated) {\n        const deprecationMessage =\n          typeof info.deprecated === 'string' ? `⚠️  This command is deprecated: ${info.deprecated}` : '⚠️  This command is deprecated';\n        lines.push(styler.deprecated(deprecationMessage));\n        lines.push('');\n      }\n\n      // Usage section\n      lines.push(...formatUsageSection(info));\n      lines.push('');\n\n      // Title section (if present, shows a short summary line)\n      if (info.title) {\n        lines.push(styler.label(info.title));\n        lines.push('');\n      }\n\n      // Aliases section (if present)\n      if (info.aliases && info.aliases.length > 0) {\n        lines.push(styler.meta(`Aliases: ${info.aliases.join(', ')}`));\n        lines.push('');\n      }\n\n      // Description section (if present)\n      if (info.description) {\n        lines.push(styler.description(info.description));\n        lines.push('');\n      }\n\n      // Examples section (if present)\n      if (info.examples && info.examples.length > 0) {\n        lines.push(styler.section('Examples:'));\n        for (const ex of info.examples) {\n          lines.push(indent(1) + styler.meta('$ ') + styler.exampleValue(ex));\n        }\n        lines.push('');\n      }\n\n      // Subcommands section\n      if (info.subcommands && info.subcommands.length > 0) {\n        lines.push(...formatSubcommandsSection(info));\n        lines.push('');\n      }\n\n      if (info.positionals && info.positionals.length > 0) {\n        lines.push(...formatPositionalsSection(info));\n        lines.push('');\n      }\n\n      if (info.arguments && info.arguments.length > 0) {\n        lines.push(...formatArgumentsSection(info));\n        lines.push('');\n      }\n\n      if (info.builtins && info.builtins.length > 0) {\n        lines.push(...formatBuiltinsSection(info));\n        lines.push('');\n      }\n\n      // Show --no- hint when there are negatable boolean options defaulting to true\n      if (info.arguments?.some((arg) => arg.negatable && arg.default === true)) {\n        lines.push(styler.meta('Boolean options can be negated with --no-<option>.'));\n        lines.push('');\n      }\n\n      // Nested commands section (full detail mode)\n      if (info.nestedCommands?.length) {\n        lines.push(styler.section('Subcommand Details:'));\n        lines.push('');\n        for (const nestedCmd of info.nestedCommands) {\n          lines.push(styler.meta('─'.repeat(60)));\n          lines.push(this.format(nestedCmd));\n        }\n      }\n\n      const result = lines.join(newline);\n      return wrapDocument ? wrapDocument(result) : result;\n    },\n  };\n}\n\n// ============================================================================\n// JSON Formatter\n// ============================================================================\n\nfunction createJsonFormatter(): Formatter {\n  return {\n    format(info: HelpInfo): string {\n      return JSON.stringify(info, null, 2);\n    },\n  };\n}\n\n// ============================================================================\n// Minimal Formatter\n// ============================================================================\n\n/**\n * Creates a minimal formatter that outputs just a single-line usage string.\n */\nfunction createMinimalFormatter(): Formatter {\n  return {\n    format(info: HelpInfo): string {\n      const parts: string[] = [info.usage.command];\n      if (info.usage.hasSubcommands) parts.push('[command]');\n      if (info.positionals && info.positionals.length > 0) {\n        for (const arg of info.positionals) {\n          const name = arg.name.startsWith('...') ? `${arg.name}` : arg.name;\n          parts.push(arg.optional ? `[${name}]` : `<${name}>`);\n        }\n      }\n      if (info.usage.hasArguments) parts.push('[options]');\n      return parts.join(' ');\n    },\n  };\n}\n\nexport function createFormatter(\n  format: HelpFormat | 'auto',\n  detail: HelpDetail = 'standard',\n  theme?: ColorTheme | ColorConfig,\n  all?: boolean,\n  width?: number,\n  terminal?: { columns?: number; isTTY?: boolean },\n  env?: Record<string, string | undefined>,\n): Formatter {\n  if (detail === 'minimal') return createMinimalFormatter();\n  if (format === 'json') return createJsonFormatter();\n  const tw = format === 'markdown' || format === 'html' ? undefined : (width ?? terminal?.columns ?? DEFAULT_TERMINAL_WIDTH);\n  if (format === 'ansi' || (format === 'auto' && shouldUseAnsi(env, terminal?.isTTY)))\n    return createGenericFormatter(createAnsiStyler(theme), createTextLayout(), all, tw);\n  if (format === 'console') return createGenericFormatter(createConsoleStyler(theme), createTextLayout(), all, tw);\n  if (format === 'markdown') return createGenericFormatter(createMarkdownStyler(), createMarkdownLayout(), all);\n  if (format === 'html') return createGenericFormatter(createHtmlStyler(), createHtmlLayout(), all);\n  return createGenericFormatter(createTextStyler(), createTextLayout(), all, tw);\n}\n"],"mappings":"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"}