"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

function _chalk() {
  const data = _interopRequireDefault(require("chalk"));

  _chalk = function () {
    return data;
  };

  return data;
}

function _commander() {
  const data = _interopRequireDefault(require("commander"));

  _commander = function () {
    return data;
  };

  return data;
}

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

let _bundleProgressBar;

let _oraSpinner;

let _printNewLineBeforeNextLog = false;
let _isLastLineNewLine = false;

function _updateIsLastLineNewLine(args) {
  if (args.length === 0) {
    _isLastLineNewLine = true;
  } else {
    let lastArg = args[args.length - 1];

    if (typeof lastArg === 'string' && (lastArg === '' || lastArg.match(/[\r\n]$/))) {
      _isLastLineNewLine = true;
    } else {
      _isLastLineNewLine = false;
    }
  }
}

function _maybePrintNewLine() {
  if (_printNewLineBeforeNextLog) {
    _printNewLineBeforeNextLog = false;
    console.log();
  }
}

function consoleLog(...args) {
  _maybePrintNewLine();

  _updateIsLastLineNewLine(args);

  console.log(...args);
}

function consoleWarn(...args) {
  _maybePrintNewLine();

  _updateIsLastLineNewLine(args);

  console.warn(...args);
}

function consoleError(...args) {
  _maybePrintNewLine();

  _updateIsLastLineNewLine(args);

  console.error(...args);
}

function respectProgressBars(commitLogs) {
  if (_bundleProgressBar) {
    _bundleProgressBar.terminate();

    _bundleProgressBar.lastDraw = '';
  }

  if (_oraSpinner) {
    _oraSpinner.stop();
  }

  commitLogs();

  if (_bundleProgressBar) {
    _bundleProgressBar.render();
  }

  if (_oraSpinner) {
    _oraSpinner.start();
  }
}

function getPrefix(chalkColor) {
  return chalkColor(`[${new Date().toTimeString().slice(0, 8)}]`);
}

function withPrefixAndTextColor(args, chalkColor = _chalk().default.gray) {
  if (_commander().default.nonInteractive) {
    return [getPrefix(chalkColor), ...args.map(arg => chalkColor(arg))];
  } else {
    return args.map(arg => chalkColor(arg));
  }
}

function withPrefix(args, chalkColor = _chalk().default.gray) {
  if (_commander().default.nonInteractive) {
    return [getPrefix(chalkColor), ...args];
  } else {
    return args;
  }
}

function log(...args) {
  if (log.config.raw) {
    return;
  }

  respectProgressBars(() => {
    consoleLog(...withPrefix(args));
  });
}

log.nested = function (message) {
  respectProgressBars(() => {
    consoleLog(message);
  });
};

log.newLine = function newLine() {
  respectProgressBars(() => {
    consoleLog();
  });
};

log.addNewLineIfNone = function addNewLineIfNone() {
  if (!_isLastLineNewLine && !_printNewLineBeforeNextLog) {
    log.newLine();
  }
};

log.printNewLineBeforeNextLog = function printNewLineBeforeNextLog() {
  _printNewLineBeforeNextLog = true;
};

log.setBundleProgressBar = function setBundleProgressBar(bar) {
  _bundleProgressBar = bar;
};

log.setSpinner = function setSpinner(oraSpinner) {
  _oraSpinner = oraSpinner;
};

log.error = function error(...args) {
  if (log.config.raw) {
    return;
  }

  respectProgressBars(() => {
    consoleError(...withPrefixAndTextColor(args, _chalk().default.red));
  });
};

log.nestedError = function (message) {
  respectProgressBars(() => {
    consoleError(_chalk().default.red(message));
  });
};

log.warn = function warn(...args) {
  if (log.config.raw) {
    return;
  }

  respectProgressBars(() => {
    consoleWarn(...withPrefixAndTextColor(args, _chalk().default.yellow));
  });
};

log.nestedWarn = function (message) {
  respectProgressBars(() => {
    consoleWarn(_chalk().default.yellow(message));
  });
};

log.gray = function (...args) {
  if (log.config.raw) {
    return;
  }

  respectProgressBars(() => {
    consoleLog(...withPrefixAndTextColor(args));
  });
};

log.raw = function (...args) {
  if (!log.config.raw) {
    return;
  }

  respectProgressBars(() => {
    consoleLog(...args);
  });
};

log.chalk = _chalk().default;
log.config = {
  raw: false
};
var _default = log;
exports.default = _default;
//# sourceMappingURL=__sourcemaps__/log.js.map