const utils = require('./utils') const uniqueBy = utils.uniqueBy class WebpackErrorsPlugin { constructor (options) { options = options || {} this.sourceRoot = options.sourceRoot this.onErrors = options.onErrors this.onWarnings = options.onWarnings } apply (compiler) { const doneFn = stats => { const hasErrors = stats.hasErrors() const hasWarnings = stats.hasWarnings() if (hasErrors && this.onErrors) { this.onErrors(extractErrorsFromStats(stats, 'errors')) return } if (hasWarnings && this.onWarnings) { this.onWarnings(extractErrorsFromStats(stats, 'warnings')) } } if (compiler.hooks) { const plugin = { name: 'UniAppErrorsWebpackPlugin' } compiler.hooks.done.tap(plugin, doneFn) } else { compiler.plugin('done', doneFn) } } } function extractErrorsFromStats (stats, type) { if (isMultiStats(stats)) { const errors = stats.stats .reduce((errors, stats) => errors.concat(extractErrorsFromStats(stats, type)), []) // Dedupe to avoid showing the same error many times when multiple // compilers depend on the same module. return uniqueBy(errors, error => error.message) } return stats.compilation[type] } function isMultiStats (stats) { return stats.stats } module.exports = WebpackErrorsPlugin