ui/formatter_factory.js

import { ConsoleFormatter } from './console_formatter.js';
import { TapFormatter } from './tap_formatter.js';
import { JsonFormatter } from './json_formatter.js';

/**
 * I build the right {@link Formatter} for a configured output format, defaulting to the
 * human-readable {@link ConsoleFormatter} when the format is unknown.
 */
export class FormatterFactory {
  static for(output, console, i18n) {
    const formatters = {
      console: ConsoleFormatter,
      tap: TapFormatter,
      json: JsonFormatter,
    };
    const FormatterClass = formatters[output] || ConsoleFormatter;
    return new FormatterClass(console, i18n);
  }
}