From d720d3db738d2cefe1a5537629f94c9689300f9b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 16 Feb 2021 10:38:57 -0500 Subject: [PATCH] refactor(@angular-devkit/build-optimizer): improve transitional Webpack 5 compatibility This change provides both Webpack 4 and 5 compatible types for the the build optimizer Webpack plugin. --- .../build_optimizer/src/_golden-api.d.ts | 2 +- .../angular_devkit/build_optimizer/package.json | 4 ++++ .../src/build-optimizer/webpack-plugin.ts | 6 +++--- .../build_optimizer/src/webpack.d.ts | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 packages/angular_devkit/build_optimizer/src/webpack.d.ts diff --git a/etc/api/angular_devkit/build_optimizer/src/_golden-api.d.ts b/etc/api/angular_devkit/build_optimizer/src/_golden-api.d.ts index 5482d25058..d366778a02 100644 --- a/etc/api/angular_devkit/build_optimizer/src/_golden-api.d.ts +++ b/etc/api/angular_devkit/build_optimizer/src/_golden-api.d.ts @@ -3,7 +3,7 @@ export declare function buildOptimizer(options: BuildOptimizerOptions): Transfor export declare const buildOptimizerLoaderPath: string; export declare class BuildOptimizerWebpackPlugin { - apply(compiler: Compiler): void; + apply(compiler: Compiler | WebpackFourCompiler): void; } export default function buildOptimizerLoader(this: { diff --git a/packages/angular_devkit/build_optimizer/package.json b/packages/angular_devkit/build_optimizer/package.json index a3c57413da..19031a1ddf 100644 --- a/packages/angular_devkit/build_optimizer/package.json +++ b/packages/angular_devkit/build_optimizer/package.json @@ -22,5 +22,9 @@ "webpack": { "optional": true } + }, + "devDependencies": { + "@types/webpack": "^4.41.22", + "webpack": "5.21.2" } } diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-plugin.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-plugin.ts index 94d8a9f009..55a67c6e77 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-plugin.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-plugin.ts @@ -5,15 +5,15 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { Compiler } from 'webpack'; +import { Compiler, WebpackFourCompiler } from 'webpack'; interface ModuleData { resourceResolveData: { descriptionFileData?: { typings?: string } }; } export class BuildOptimizerWebpackPlugin { - apply(compiler: Compiler) { - compiler.hooks.normalModuleFactory.tap('BuildOptimizerWebpackPlugin', nmf => { + apply(compiler: Compiler | WebpackFourCompiler) { + (compiler as Compiler).hooks.normalModuleFactory.tap('BuildOptimizerWebpackPlugin', nmf => { // tslint:disable-next-line: no-any nmf.hooks.module.tap('BuildOptimizerWebpackPlugin', (module, data) => { const { descriptionFileData } = (data as ModuleData).resourceResolveData; diff --git a/packages/angular_devkit/build_optimizer/src/webpack.d.ts b/packages/angular_devkit/build_optimizer/src/webpack.d.ts new file mode 100644 index 0000000000..c9ac20d20d --- /dev/null +++ b/packages/angular_devkit/build_optimizer/src/webpack.d.ts @@ -0,0 +1,14 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import * as webpack from 'webpack'; +import { Compiler as webpack4Compiler } from '@types/webpack'; + +// Webpack 5 transition support types +declare module 'webpack' { + export type WebpackFourCompiler = webpack4Compiler; +}