97e4d23d75
#KT-39377 fixed
61 lines
2.1 KiB
JavaScript
61 lines
2.1 KiB
JavaScript
/*
|
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import {formatMessage, TYPED_MESSAGE} from "./src/teamcity-format";
|
|
|
|
const ModuleNotFoundError = require("webpack/lib/ModuleNotFoundError")
|
|
|
|
class TeamCityErrorPlugin {
|
|
warningsFilter(value) {
|
|
if (!Array.isArray(value)) {
|
|
value = value ? [value] : [];
|
|
}
|
|
return value.map(filter => {
|
|
if (typeof filter === "string") {
|
|
return (warning, warningString) => warningString.includes(filter);
|
|
}
|
|
if (filter instanceof RegExp) {
|
|
return (warning, warningString) => filter.test(warningString);
|
|
}
|
|
if (typeof filter === "function") {
|
|
return filter;
|
|
}
|
|
throw new Error(
|
|
`Can only filter warnings with Strings or RegExps. (Given: ${filter})`
|
|
);
|
|
});
|
|
}
|
|
|
|
apply(compiler) {
|
|
compiler.hooks.done.tap('TeamCityErrorPlugin', (stats) => {
|
|
|
|
const warningsFilters = this.warningsFilter(stats.compilation.options.stats.warningsFilter);
|
|
|
|
stats.compilation.errors.forEach(error => {
|
|
const type = 'error';
|
|
if (error instanceof ModuleNotFoundError) {
|
|
error.dependencies.forEach(dependency => {
|
|
console[type](formatMessage(TYPED_MESSAGE, `Module '${dependency.request}' not found`, type));
|
|
});
|
|
return
|
|
}
|
|
|
|
console[type](formatMessage(TYPED_MESSAGE, error.message, type));
|
|
});
|
|
|
|
stats.compilation.warnings
|
|
.filter(warning => warningsFilters.every(warningFilter => warningFilter(warning)))
|
|
.forEach(warning => {
|
|
const type = 'warn';
|
|
|
|
console[type](formatMessage(TYPED_MESSAGE, warning.message, type));
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = TeamCityErrorPlugin; |