text: 'use strict';
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = createStatsFormatter;
  
  var _os = require('os');
  
  var _chalk = require('chalk');
  
  var _chalk2 = _interopRequireDefault(_chalk);
  
  var _RequestShortener = require('webpack/lib/RequestShortener');
  
  var _RequestShortener2 = _interopRequireDefault(_RequestShortener);
  
  var _formatUtil = require('./formatUtil');
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  var createGetFile = function createGetFile(requestShortener) {
    return function (e) {
      /* istanbul ignore if */
      if (e.file) {
        // webpack does this also, so there must be case when this happens
        return e.file;
      } else if (e.module && e.module.readableIdentifier && typeof e.module.readableIdentifier === 'function') {
        // if we got a module, build a file path to the module without loader information
        return (0, _formatUtil.stripLoaderFromPath)(e.module.readableIdentifier(requestShortener));
      }
      /* istanbul ignore next */
      return null;
    };
  };
  
  // helper to transform strings in errors
  var ensureWebpackErrors = function ensureWebpackErrors(errors) {
    return errors.map(function (e) {
      /* istanbul ignore if */
      if (typeof e === 'string') {
        // webpack does this also, so there must be case when this happens
        return {
          message: e
        };
      }
      return e;
    });
  };
  
  var prependWarning = function prependWarning(message) {
    return _chalk2.default.yellow('Warning') + ' ' + message;
  };
  var prependError = function prependError(message) {
    return _chalk2.default.red('Error') + ' ' + message;
  };
  
  function createStatsFormatter(rootPath) {
    var requestShortener = new _RequestShortener2.default(rootPath);
    var getFile = createGetFile(requestShortener);
  
    var formatError = function formatError(err) {
      var lines = [];
  
      var file = getFile(err);
  
      /* istanbul ignore else */
      if (file != null) {
        lines.push('in ' + _chalk2.default.underline(file));
        lines.push('');
      } else {
        // got no file, that happens only for more generic errors like the following from node-sass
        //    Missing binding /mocha-webpack-example/node_modules/node-sass/vendor/linux-x64-48/binding.node
        //    Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 6.x
        //    ...
        // just print 2 lines like file
        lines.push('');
        lines.push('');
      }
  
      lines.push((0, _formatUtil.formatErrorMessage)(err.message));
  
      return lines.join(_os.EOL);
    };
  
    return function statsFormatter(stats) {
      var compilation = stats.compilation;
  
      return {
        errors: ensureWebpackErrors(compilation.errors).map(formatError).map(prependError),
        warnings: ensureWebpackErrors(compilation.warnings).map(formatError).map(prependWarning)
      };
    };
  }