File: //proc/1526/task/1923/cwd/zaklada/html/node_modules/gulp-jshint/src/reporters/index.js
var PluginError = require('plugin-error');
var stream = require('../stream');
var defaults = require('lodash/defaults');
exports.failReporter = require('./fail');
exports.loadReporter = function (reporter) {
  // we want the function
  if (typeof reporter === 'function') return reporter;
  // object reporters
  if (typeof reporter === 'object' && typeof reporter.reporter === 'function') return reporter.reporter;
  // load jshint built-in reporters
  if (typeof reporter === 'string') {
    try {
      return exports.loadReporter(require('jshint/src/reporters/' + reporter));
    } catch (err) {}
  }
  // load full-path or module reporters
  if (typeof reporter === 'string') {
    try {
      return exports.loadReporter(require(reporter));
    } catch (err) {}
  }
};
exports.reporter = function (reporter, reporterCfg) {
  reporterCfg = reporterCfg || {};
  if (reporter === 'fail') {
    return exports.failReporter(reporterCfg);
  }
  var rpt = exports.loadReporter(reporter || 'default');
  if (typeof rpt !== 'function') {
    throw new PluginError('gulp-jshint', 'Invalid reporter');
  }
  // return stream that reports stuff
  return stream(function (file, cb) {
    if (file.jshint && !file.jshint.success && !file.jshint.ignored) {
      // merge the reporter config into this files config
      var opt = defaults({}, reporterCfg, file.jshint.opt);
      rpt(file.jshint.results, file.jshint.data, opt);
    }
    cb(null, file);
  });
};