diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/stats.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/stats.ts index 07b3a7db36fb..807794033e47 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/stats.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/stats.ts @@ -87,10 +87,11 @@ export function statsToString(json: any, statsConfig: any) { } // TODO(#16193): Don't emit this warning in the first place rather than just suppressing it. -const ERRONEOUS_WARNINGS = [ +const ERRONEOUS_WARNINGS_FILTER = (warning: string) => ![ /multiple assets emit different content.*3rdpartylicenses\.txt/i, -]; -export function statsWarningsToString(json: any, statsConfig: any) { +].some(msg => msg.test(warning)); + +export function statsWarningsToString(json: any, statsConfig: any): string { const colors = statsConfig.colors; const rs = (x: string) => colors ? reset(x) : x; const y = (x: string) => colors ? bold(yellow(x)) : x; @@ -104,12 +105,12 @@ export function statsWarningsToString(json: any, statsConfig: any) { return rs('\n' + warnings .map((warning: any) => `${warning}`) - .filter((warning: string) => !ERRONEOUS_WARNINGS.some((erroneous) => erroneous.test(warning))) + .filter(ERRONEOUS_WARNINGS_FILTER) .map((warning: string) => y(`WARNING in ${warning}`)) .join('\n\n')); } -export function statsErrorsToString(json: any, statsConfig: any) { +export function statsErrorsToString(json: any, statsConfig: any): string { const colors = statsConfig.colors; const rs = (x: string) => colors ? reset(x) : x; const r = (x: string) => colors ? bold(red(x)) : x; @@ -120,6 +121,7 @@ export function statsErrorsToString(json: any, statsConfig: any) { .reduce((a: string[], b: string[]) => [...a, ...b], []) ); } + return rs('\n' + errors .map((error: any) => r(`ERROR in ${error}`)) .join('\n\n') @@ -127,9 +129,10 @@ export function statsErrorsToString(json: any, statsConfig: any) { } export function statsHasErrors(json: any): boolean { - return json.errors.length > 0 || !!json.children?.some((c: any) => c.errors.length); + return json.errors.length || !!json.children?.some((c: any) => c.errors.length); } export function statsHasWarnings(json: any): boolean { - return json.warnings.length > 0 || !!json.children?.some((c: any) => c.warnings.length); + return json.warnings.filter(ERRONEOUS_WARNINGS_FILTER).length || + !!json.children?.some((c: any) => c.warnings.filter(ERRONEOUS_WARNINGS_FILTER).length); } diff --git a/packages/angular_devkit/build_angular/src/browser/index.ts b/packages/angular_devkit/build_angular/src/browser/index.ts index 6652c083d9f7..752cb6b285bf 100644 --- a/packages/angular_devkit/build_angular/src/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/browser/index.ts @@ -101,10 +101,10 @@ export function createBrowserLoggingCallback( logger.info(statsToString(json, config.stats)); } - if (stats.hasWarnings()) { + if (statsHasWarnings(json)) { logger.warn(statsWarningsToString(json, config.stats)); } - if (stats.hasErrors()) { + if (statsHasErrors(json)) { logger.error(statsErrorsToString(json, config.stats)); } }; diff --git a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts index 402043528381..7aac6b129ece 100644 --- a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts +++ b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts @@ -20,7 +20,7 @@ import { getStatsConfig, getStylesConfig, } from '../angular-cli-files/models/webpack-configs'; -import { statsErrorsToString, statsWarningsToString } from '../angular-cli-files/utilities/stats'; +import { statsErrorsToString, statsHasErrors, statsHasWarnings, statsWarningsToString } from '../angular-cli-files/utilities/stats'; import { Schema as BrowserBuilderOptions } from '../browser/schema'; import { createI18nOptions } from '../utils/i18n-options'; import { assertCompatibleAngularVersion } from '../utils/version'; @@ -127,11 +127,11 @@ export async function execute( const logging: WebpackLoggingCallback = (stats, config) => { const json = stats.toJson({ errors: true, warnings: true }); - if (stats.hasWarnings()) { + if (statsHasWarnings(json)) { context.logger.warn(statsWarningsToString(json, config.stats)); } - if (stats.hasErrors()) { + if (statsHasErrors(json)) { context.logger.error(statsErrorsToString(json, config.stats)); } };