From bd5eaab52fb1741627758d08824e50c612c6141f Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Oct 2023 21:09:46 -0400 Subject: [PATCH] refactor(@angular-devkit/build-angular): format post-bundle diagnostic messages for esbuild builders Any errors or warnings generated from post-bundling steps of the build will now be formatted and displayed in a similar manner to the bundling errors and warnings. This should be most noticeable with bundle budgets. --- .../src/builders/application/execute-build.ts | 31 ++++++++++--------- .../extract-i18n/application-extraction.ts | 1 + .../legacy-cli/e2e/tests/i18n/extract-ivy.ts | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts b/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts index 4f5c87161b47..587055844874 100644 --- a/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts +++ b/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts @@ -206,12 +206,15 @@ export async function executeBuild( if (options.budgets) { const compatStats = generateBudgetStats(metafile, initialFiles); budgetFailures = [...checkBudgets(options.budgets, compatStats, true)]; - for (const { severity, message } of budgetFailures) { - if (severity === 'error') { - context.logger.error(message); - } else { - context.logger.warn(message); - } + if (budgetFailures.length > 0) { + await logMessages(context, { + errors: budgetFailures + .filter((failure) => failure.severity === 'error') + .map((failure) => ({ text: failure.message, location: null })), + warnings: budgetFailures + .filter((failure) => failure.severity !== 'error') + .map((failure) => ({ text: failure.message, location: null })), + }); } } @@ -255,7 +258,7 @@ export async function executeBuild( ); } - printWarningsAndErrorsToConsole(context, warnings, errors); + await printWarningsAndErrorsToConsole(context, warnings, errors); const changedFiles = rebuildState && executionResult.findChangedFiles(rebuildState.previousOutputHashes); logBuildStats( @@ -279,15 +282,13 @@ export async function executeBuild( return executionResult; } -function printWarningsAndErrorsToConsole( +async function printWarningsAndErrorsToConsole( context: BuilderContext, warnings: string[], errors: string[], -): void { - for (const error of errors) { - context.logger.error(error); - } - for (const warning of warnings) { - context.logger.warn(warning); - } +): Promise { + await logMessages(context, { + errors: errors.map((text) => ({ text, location: null })), + warnings: warnings.map((text) => ({ text, location: null })), + }); } diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts index 6fee28118c3e..060552392559 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts @@ -37,6 +37,7 @@ export async function extractMessages( buildOptions.optimization = false; buildOptions.sourceMap = { scripts: true, vendor: true }; buildOptions.localize = false; + buildOptions.budgets = undefined; let build; if (builderName === '@angular-devkit/build-angular:application') { diff --git a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts index 6ffcd32dd7ef..c9c555866ba5 100644 --- a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts +++ b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts @@ -43,7 +43,7 @@ export default async function () { // Should not show any warnings when extracting const { stderr: message5 } = await ng('extract-i18n'); if (message5.includes('WARNING')) { - throw new Error('Expected no warnings to be shown'); + throw new Error('Expected no warnings to be shown. STDERR:\n' + message5); } await expectFileToMatch('messages.xlf', 'Hello world');