Skip to content

Commit dd9a396

Browse files
clydinalan-agius4
authored andcommitted
refactor(@angular-devkit/build-angular): add webpack diagnostic helpers
1 parent 8450e07 commit dd9a396

File tree

6 files changed

+54
-10
lines changed

6 files changed

+54
-10
lines changed

packages/angular_devkit/build_angular/src/angular-cli-files/plugins/any-component-style-budget-checker.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import * as path from 'path';
1010
import { Compiler } from 'webpack';
1111
import { Budget, Type } from '../../../src/browser/schema';
12+
import { addError, addWarning } from '../../utils/webpack-diagnostics';
1213
import { ThresholdSeverity, calculateThresholds, checkThresholds } from '../utilities/bundle-calculator';
1314

1415
const PLUGIN_NAME = 'AnyComponentStyleBudgetChecker';
@@ -53,10 +54,10 @@ export class AnyComponentStyleBudgetChecker {
5354
for (const { severity, message } of checkThresholds(thresholds[Symbol.iterator](), size, label)) {
5455
switch (severity) {
5556
case ThresholdSeverity.Warning:
56-
compilation.warnings.push(message);
57+
addWarning(compilation, message);
5758
break;
5859
case ThresholdSeverity.Error:
59-
compilation.errors.push(message);
60+
addError(compilation, message);
6061
break;
6162
default:
6263
assertNever(severity);

packages/angular_devkit/build_angular/src/angular-cli-files/plugins/bundle-budget.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import { Compiler } from 'webpack';
99
import { Budget } from '../../browser/schema';
1010
import { ProcessBundleResult } from '../../utils/process-bundle';
11+
import { addError, addWarning } from '../../utils/webpack-diagnostics';
1112
import { ThresholdSeverity, checkBudgets } from '../utilities/bundle-calculator';
1213

1314
export interface BundleBudgetPluginOptions {
@@ -33,10 +34,10 @@ export class BundleBudgetPlugin {
3334
for (const { severity, message } of checkBudgets(budgets, stats, processResults)) {
3435
switch (severity) {
3536
case ThresholdSeverity.Warning:
36-
compilation.warnings.push(`budgets: ${message}`);
37+
addWarning(compilation, `budgets: ${message}`);
3738
break;
3839
case ThresholdSeverity.Error:
39-
compilation.errors.push(`budgets: ${message}`);
40+
addError(compilation, `budgets: ${message}`);
4041
break;
4142
}
4243
}

packages/angular_devkit/build_angular/src/angular-cli-files/plugins/common-js-usage-warn-plugin.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import { isAbsolute } from 'path';
1111
import { Compiler, compilation } from 'webpack';
12+
import { addWarning } from '../../utils/webpack-diagnostics';
1213

1314
// Webpack doesn't export these so the deep imports can potentially break.
1415
const CommonJsRequireDependency = require('webpack/lib/dependencies/CommonJsRequireDependency');
@@ -93,7 +94,7 @@ export class CommonJsUsageWarnPlugin {
9394

9495
// Avoid showing the same warning multiple times when in 'watch' mode.
9596
if (!this.shownWarnings.has(warning)) {
96-
compilation.warnings.push(warning);
97+
addWarning(compilation, warning);
9798
this.shownWarnings.add(warning);
9899
}
99100
}

packages/angular_devkit/build_angular/src/angular-cli-files/plugins/optimize-css-webpack-plugin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import * as cssNano from 'cssnano';
99
import { ProcessOptions, Result } from 'postcss';
1010
import { Compiler, compilation } from 'webpack';
1111
import { RawSource, Source, SourceMapSource } from 'webpack-sources';
12+
import { addWarning } from '../../utils/webpack-diagnostics';
1213

1314
export interface OptimizeCssWebpackPluginOptions {
1415
sourceMap: boolean;
@@ -99,9 +100,8 @@ export class OptimizeCssWebpackPlugin {
99100
.catch(reject);
100101
});
101102

102-
const warnings = output.warnings();
103-
if (warnings.length) {
104-
compilation.warnings.push(...warnings.map(({ text }) => text));
103+
for (const { text } of output.warnings()) {
104+
addWarning(compilation, text);
105105
}
106106

107107
let newSource;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { I18nOptions } from '../utils/i18n-options';
3636
import { createI18nPlugins } from '../utils/process-bundle';
3737
import { assertCompatibleAngularVersion } from '../utils/version';
3838
import { getIndexInputFile, getIndexOutputFile } from '../utils/webpack-browser-config';
39+
import { addError, addWarning } from '../utils/webpack-diagnostics';
3940
import { Schema } from './schema';
4041
const open = require('open');
4142

@@ -354,9 +355,9 @@ async function setupLocalize(
354355
}
355356
for (const diagnostic of diagnostics.messages) {
356357
if (diagnostic.type === 'error') {
357-
compilation.errors.push(diagnostic.message);
358+
addError(compilation, diagnostic.message);
358359
} else {
359-
compilation.warnings.push(diagnostic.message);
360+
addWarning(compilation, diagnostic.message);
360361
}
361362
}
362363
diagnostics.messages.length = 0;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* @license
3+
* Copyright Google Inc. All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
import * as webpack from 'webpack';
9+
10+
const WebpackError = require('webpack/lib/WebpackError');
11+
const isWebpackFiveOrHigher = (() => {
12+
if (typeof webpack.version === 'string') {
13+
const versionParts = webpack.version.split('.');
14+
if (versionParts[0] && Number(versionParts[0]) >= 5) {
15+
return true;
16+
}
17+
}
18+
19+
return false;
20+
})();
21+
22+
export function addWarning(compilation: webpack.compilation.Compilation, message: string): void {
23+
if (isWebpackFiveOrHigher) {
24+
compilation.warnings.push(new WebpackError(message));
25+
} else {
26+
// Allows building with either Webpack 4 or 5+ types
27+
// tslint:disable-next-line: no-any
28+
compilation.warnings.push(message as any);
29+
}
30+
}
31+
32+
export function addError(compilation: webpack.compilation.Compilation, message: string): void {
33+
if (isWebpackFiveOrHigher) {
34+
compilation.errors.push(new WebpackError(message));
35+
} else {
36+
// Allows building with either Webpack 4 or 5+ types
37+
// tslint:disable-next-line: no-any
38+
compilation.errors.push(new Error(message) as any);
39+
}
40+
}

0 commit comments

Comments
 (0)