+++ /dev/null
-var chalk = require('chalk');
-var _ = require('lodash');
-var defaultFormatter = require('./formatter');
-var util = require('./util');
-
-module.exports = function(opts) {
- var options = opts || {};
-
- var formatter = options.formatter || defaultFormatter({
- sortByPosition: (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true,
- positionless: options.positionless || 'first',
- noIcon: options.noIcon,
- noPlugin: options.noPlugin,
- });
-
- var pluginFilter;
- if (!options.plugins) {
- // Every plugin
- pluginFilter = function() { return true; };
- } else if (options.plugins.every(function(plugin) { return plugin[0] === '!'; })) {
- // Blacklist
- pluginFilter = function(message) {
- return options.plugins.indexOf('!' + message.plugin) === -1;
- };
- } else {
- // Whitelist
- pluginFilter = function(message) {
- return options.plugins.indexOf(message.plugin) !== -1;
- };
- }
-
- var messageFilter = options.filter || function(message) { return (message.type === 'warning'); };
-
- return function(css, result) {
- var messagesToLog = result.messages
- .filter(pluginFilter)
- .filter(messageFilter);
-
- var resultSource = (!result.root.source) ? ''
- : result.root.source.input.file || result.root.source.input.id
-
- var sourceGroupedMessages = _.groupBy(messagesToLog, function(message) {
- return util.getLocation(message).file || resultSource;
- });
-
- var report = '';
- _.forOwn(sourceGroupedMessages, function(messages, source) {
- report += formatter({
- messages: messages,
- source: source,
- });
- });
-
- if (options.clearReportedMessages) {
- result.messages = _.difference(result.messages, messagesToLog);
- }
-
- if (options.clearAllMessages) {
- var messagesToClear = result.messages.filter(pluginFilter);
- result.messages = _.difference(result.messages, messagesToClear);
- }
-
-
- if (!report) return;
-
- console.log(report);
-
- if (options.throwError && shouldThrowError()) {
- throw new Error(chalk.red.bold('\n** postcss-reporter: warnings or errors were found **'));
- }
-
- function shouldThrowError() {
- return (
- messagesToLog.length
- && messagesToLog.some(function(message) {
- return message.type === 'warning' || message.type === 'error';
- })
- );
- }
- };
-};