Skip to content

Commit 9144cf8

Browse files
committed
refactor(@angular-devkit/build-angular): support Webpack 5 errors/warnings
Webpack 5 uses an object to represent errors and warnings unlike Webpack 4 which used a string. This change provides support for both scenarios.
1 parent 8303681 commit 9144cf8

File tree

1 file changed

+71
-13
lines changed
  • packages/angular_devkit/build_angular/src/angular-cli-files/utilities

1 file changed

+71
-13
lines changed

packages/angular_devkit/build_angular/src/angular-cli-files/utilities/stats.ts

Lines changed: 71 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,19 @@ const ERRONEOUS_WARNINGS_FILTER = (warning: string) => ![
9393
/System.import\(\) is deprecated and will be removed soon/i,
9494
].some(msg => msg.test(warning));
9595

96+
interface WebpackDiagnostic {
97+
message: string;
98+
file?: string;
99+
moduleName?: string;
100+
loc?: string;
101+
}
102+
96103
export function statsWarningsToString(json: any, statsConfig: any): string {
97104
const colors = statsConfig.colors;
98-
const rs = (x: string) => colors ? ansiColors.reset(x) : x;
99-
const y = (x: string) => colors ? ansiColors.bold.yellow(x) : x;
105+
const c = (x: string) => colors ? ansiColors.reset.cyan(x) : x;
106+
const y = (x: string) => colors ? ansiColors.reset.yellow(x) : x;
107+
const yb = (x: string) => colors ? ansiColors.reset.yellowBright(x) : x;
108+
100109
const warnings = [...json.warnings];
101110
if (json.children) {
102111
warnings.push(...json.children
@@ -105,17 +114,45 @@ export function statsWarningsToString(json: any, statsConfig: any): string {
105114
);
106115
}
107116

108-
return rs('\n' + warnings
109-
.map((warning: any) => `${warning}`)
110-
.filter(ERRONEOUS_WARNINGS_FILTER)
111-
.map((warning: string) => y(`WARNING in ${warning}`))
112-
.join('\n\n'));
117+
let output = '';
118+
for (const warning of warnings as (string | WebpackDiagnostic)[]) {
119+
if (typeof warning === 'string') {
120+
if (!ERRONEOUS_WARNINGS_FILTER(warning)) {
121+
continue;
122+
}
123+
output += yb(`WARNING in ${warning}\n\n`);
124+
} else {
125+
if (!ERRONEOUS_WARNINGS_FILTER(warning.message)) {
126+
continue;
127+
}
128+
const file = warning.file || warning.moduleName;
129+
if (file) {
130+
output += c(file);
131+
if (warning.loc) {
132+
output += ':' + yb(warning.loc);
133+
}
134+
output += ' - ';
135+
}
136+
if (!/^warning/i.test(warning.message)) {
137+
output += y('Warning: ');
138+
}
139+
output += `${warning.message}\n\n`;
140+
}
141+
}
142+
143+
if (output) {
144+
return '\n' + output;
145+
}
146+
147+
return '';
113148
}
114149

115150
export function statsErrorsToString(json: any, statsConfig: any): string {
116151
const colors = statsConfig.colors;
117-
const rs = (x: string) => colors ? ansiColors.reset(x) : x;
118-
const r = (x: string) => colors ? ansiColors.bold.red(x) : x;
152+
const c = (x: string) => colors ? ansiColors.reset.cyan(x) : x;
153+
const yb = (x: string) => colors ? ansiColors.reset.yellowBright(x) : x;
154+
const r = (x: string) => colors ? ansiColors.reset.redBright(x) : x;
155+
119156
const errors = [...json.errors];
120157
if (json.children) {
121158
errors.push(...json.children
@@ -124,10 +161,31 @@ export function statsErrorsToString(json: any, statsConfig: any): string {
124161
);
125162
}
126163

127-
return rs('\n' + errors
128-
.map((error: any) => r(`ERROR in ${error}`))
129-
.join('\n\n')
130-
);
164+
let output = '';
165+
for (const error of errors as (string | WebpackDiagnostic)[]) {
166+
if (typeof error === 'string') {
167+
output += r(`ERROR in ${error}\n\n`);
168+
} else {
169+
const file = error.file || error.moduleName;
170+
if (file) {
171+
output += c(file);
172+
if (error.loc) {
173+
output += ':' + yb(error.loc);
174+
}
175+
output += ' - ';
176+
}
177+
if (!/^error/i.test(error.message)) {
178+
output += r('Error: ');
179+
}
180+
output += `${error.message}\n\n`;
181+
}
182+
}
183+
184+
if (output) {
185+
return '\n' + output;
186+
}
187+
188+
return '';
131189
}
132190

133191
export function statsHasErrors(json: any): boolean {

0 commit comments

Comments
 (0)