Skip to content

Commit 1ebd7e6

Browse files
committed
refactor(@angular-devkit/build-angular): use common logging function for webpack stats
With this change we align all builders to have the same output structure.
1 parent c34cf58 commit 1ebd7e6

File tree

5 files changed

+35
-43
lines changed

5 files changed

+35
-43
lines changed

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
*/
88
// tslint:disable
99
// TODO: cleanup this file, it's copied as is from Angular CLI.
10-
import { tags, terminal } from '@angular-devkit/core';
10+
import { logging, tags, terminal } from '@angular-devkit/core';
11+
import { WebpackLoggingCallback } from '@angular-devkit/build-webpack';
1112
import * as path from 'path';
1213

1314

@@ -139,3 +140,25 @@ export function statsHasWarnings(json: any): boolean {
139140
return json.warnings.filter(ERRONEOUS_WARNINGS_FILTER).length ||
140141
!!json.children?.some((c: any) => c.warnings.filter(ERRONEOUS_WARNINGS_FILTER).length);
141142
}
143+
144+
export function createWebpackLoggingCallback(
145+
verbose: boolean,
146+
logger: logging.LoggerApi,
147+
): WebpackLoggingCallback {
148+
return (stats, config) => {
149+
// config.stats contains our own stats settings, added during buildWebpackConfig().
150+
const json = stats.toJson(config.stats);
151+
if (verbose) {
152+
logger.info(stats.toString(config.stats));
153+
} else {
154+
logger.info(statsToString(json, config.stats));
155+
}
156+
157+
if (statsHasWarnings(json)) {
158+
logger.warn(statsWarningsToString(json, config.stats));
159+
}
160+
if (statsHasErrors(json)) {
161+
logger.error(statsErrorsToString(json, config.stats));
162+
}
163+
};
164+
}

packages/angular_devkit/build_angular/src/browser/index.ts

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88
import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect';
99
import { EmittedFiles, WebpackLoggingCallback, runWebpack } from '@angular-devkit/build-webpack';
10-
import { join, json, logging, normalize, tags, virtualFs } from '@angular-devkit/core';
10+
import { join, json, normalize, tags, virtualFs } from '@angular-devkit/core';
1111
import { NodeJsSyncHost } from '@angular-devkit/core/node';
1212
import * as fs from 'fs';
1313
import * as path from 'path';
@@ -36,12 +36,12 @@ import {
3636
import { readTsconfig } from '../angular-cli-files/utilities/read-tsconfig';
3737
import { augmentAppWithServiceWorker } from '../angular-cli-files/utilities/service-worker';
3838
import {
39+
createWebpackLoggingCallback,
3940
generateBuildStats,
4041
generateBundleStats,
4142
statsErrorsToString,
4243
statsHasErrors,
4344
statsHasWarnings,
44-
statsToString,
4545
statsWarningsToString,
4646
} from '../angular-cli-files/utilities/stats';
4747
import { ExecutionTransformer } from '../transforms';
@@ -88,28 +88,6 @@ export type BrowserBuilderOutput = json.JsonObject &
8888
outputPath: string;
8989
};
9090

91-
export function createBrowserLoggingCallback(
92-
verbose: boolean,
93-
logger: logging.LoggerApi,
94-
): WebpackLoggingCallback {
95-
return (stats, config) => {
96-
// config.stats contains our own stats settings, added during buildWebpackConfig().
97-
const json = stats.toJson(config.stats);
98-
if (verbose) {
99-
logger.info(stats.toString(config.stats));
100-
} else {
101-
logger.info(statsToString(json, config.stats));
102-
}
103-
104-
if (statsHasWarnings(json)) {
105-
logger.warn(statsWarningsToString(json, config.stats));
106-
}
107-
if (statsHasErrors(json)) {
108-
logger.error(statsErrorsToString(json, config.stats));
109-
}
110-
};
111-
}
112-
11391
// todo: the below should be cleaned once dev-server support the new i18n
11492
interface ConfigFromContextReturn {
11593
config: webpack.Configuration;
@@ -284,7 +262,7 @@ export function buildWebpackBrowser(
284262
transforms.logging ||
285263
(useBundleDownleveling
286264
? () => {}
287-
: createBrowserLoggingCallback(!!options.verbose, context.logger)),
265+
: createWebpackLoggingCallback(!!options.verbose, context.logger)),
288266
}).pipe(
289267
// tslint:disable-next-line: no-big-function
290268
concatMap(async buildEvent => {

packages/angular_devkit/build_angular/src/dev-server/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import { checkPort } from '../angular-cli-files/utilities/check-port';
2828
import { IndexHtmlTransform } from '../angular-cli-files/utilities/index-file/write-index-html';
2929
import { generateEntryPoints } from '../angular-cli-files/utilities/package-chunk-sort';
3030
import { readTsconfig } from '../angular-cli-files/utilities/read-tsconfig';
31-
import { buildBrowserWebpackConfigFromContext, createBrowserLoggingCallback } from '../browser';
31+
import { createWebpackLoggingCallback } from '../angular-cli-files/utilities/stats';
32+
import { buildBrowserWebpackConfigFromContext } from '../browser';
3233
import { Schema as BrowserBuilderSchema } from '../browser/schema';
3334
import { ExecutionTransformer } from '../transforms';
3435
import { BuildBrowserFeatures, normalizeOptimization } from '../utils';
@@ -87,7 +88,7 @@ export function serveWebpackBrowser(
8788
const host = new NodeJsSyncHost();
8889

8990
const loggingFn =
90-
transforms.logging || createBrowserLoggingCallback(!!options.verbose, context.logger);
91+
transforms.logging || createWebpackLoggingCallback(!!options.verbose, context.logger);
9192

9293
async function setup(): Promise<{
9394
browserOptions: json.JsonObject & BrowserBuilderSchema;

packages/angular_devkit/build_angular/src/extract-i18n/index.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
createBuilder,
1111
targetFromTargetString,
1212
} from '@angular-devkit/architect';
13-
import { BuildResult, WebpackLoggingCallback, runWebpack } from '@angular-devkit/build-webpack';
13+
import { BuildResult, runWebpack } from '@angular-devkit/build-webpack';
1414
import { JsonObject } from '@angular-devkit/core';
1515
import type { ɵParsedMessage as LocalizeMessage } from '@angular/localize';
1616
import * as fs from 'fs';
@@ -23,7 +23,7 @@ import {
2323
getStatsConfig,
2424
getStylesConfig,
2525
} from '../angular-cli-files/models/webpack-configs';
26-
import { statsErrorsToString, statsHasErrors, statsHasWarnings, statsWarningsToString } from '../angular-cli-files/utilities/stats';
26+
import { createWebpackLoggingCallback } from '../angular-cli-files/utilities/stats';
2727
import { Schema as BrowserBuilderOptions } from '../browser/schema';
2828
import { ExecutionTransformer } from '../transforms';
2929
import { createI18nOptions } from '../utils/i18n-options';
@@ -218,23 +218,11 @@ export async function execute(
218218
}
219219
}
220220

221-
const logging: WebpackLoggingCallback = (stats, config) => {
222-
const json = stats.toJson({ errors: true, warnings: true });
223-
224-
if (statsHasWarnings(json)) {
225-
context.logger.warn(statsWarningsToString(json, config.stats));
226-
}
227-
228-
if (statsHasErrors(json)) {
229-
context.logger.error(statsErrorsToString(json, config.stats));
230-
}
231-
};
232-
233221
const webpackResult = await runWebpack(
234222
(await transforms?.webpackConfiguration?.(config)) || config,
235223
context,
236224
{
237-
logging,
225+
logging: createWebpackLoggingCallback(false, context.logger),
238226
webpackFactory: await import('webpack'),
239227
},
240228
).toPromise();

packages/angular_devkit/build_angular/src/server/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
getStylesConfig,
2222
} from '../angular-cli-files/models/webpack-configs';
2323
import { readTsconfig } from '../angular-cli-files/utilities/read-tsconfig';
24+
import { createWebpackLoggingCallback } from '../angular-cli-files/utilities/stats';
2425
import { ExecutionTransformer } from '../transforms';
2526
import { NormalizedBrowserBuilderSchema, deleteOutputDir } from '../utils';
2627
import { i18nInlineEmittedFiles } from '../utils/i18n-inlining';
@@ -84,6 +85,7 @@ export function execute(
8485
concatMap(({ config, i18n }) => {
8586
return runWebpack(config, context, {
8687
webpackFactory: require('webpack') as typeof webpack,
88+
logging: createWebpackLoggingCallback(!!options.verbose, context.logger),
8789
}).pipe(
8890
concatMap(async output => {
8991
const { emittedFiles = [], webpackStats } = output;

0 commit comments

Comments
 (0)