Skip to content

Commit

Permalink
🤖 Merge PR #48857 [webpack-bundle-analyzer] webpack@5 compatibility by …
Browse files Browse the repository at this point in the history
…@kryops

* [webpack] Add WebpackPluginInstance interface for compatibility with webpack@5's own types

* [webpack-bundle-analyzer] Add reportTitle option for 3.9

* [webpack-bundle-analyzer] webpack@5 compatibility

Fixes #48807

* Fix lint error
  • Loading branch information
kryops committed Oct 20, 2020
1 parent 8e62db7 commit b41d491
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 3 deletions.
104 changes: 101 additions & 3 deletions types/webpack-bundle-analyzer/index.d.ts
@@ -1,14 +1,106 @@
// Type definitions for webpack-bundle-analyzer 3.8
// Type definitions for webpack-bundle-analyzer 3.9
// Project: https://github.com/webpack-contrib/webpack-bundle-analyzer
// Definitions by: Michael Strobel <https://github.com/kryops>
// Vladimir Grenaderov <https://github.com/VladimirGrenaderov>
// Max Boguslavskiy <https://github.com/maxbogus>
// Piotr Błażejewicz <https://github.com/peterblazejewicz>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

import { Plugin, Compiler, Stats } from 'webpack';
import { WebpackPluginInstance, Compiler } from 'webpack';

export namespace BundleAnalyzerPlugin {
// Copied from @types/webpack@4 as webpack@5 only has `any` defined at the moment.
// See https://github.com/webpack/webpack/issues/11630
namespace Stats {
type Preset
= boolean
| 'errors-only'
| 'errors-warnings'
| 'minimal'
| 'none'
| 'normal'
| 'verbose';

interface ToJsonOptionsObject {
/** fallback value for stats options when an option is not defined (has precedence over local webpack defaults) */
all?: boolean;
/** Add asset Information */
assets?: boolean;
/** Sort assets by a field */
assetsSort?: string;
/** Add built at time information */
builtAt?: boolean;
/** Add information about cached (not built) modules */
cached?: boolean;
/** Show cached assets (setting this to `false` only shows emitted files) */
cachedAssets?: boolean;
/** Add children information */
children?: boolean;
/** Add information about the `namedChunkGroups` */
chunkGroups?: boolean;
/** Add built modules information to chunk information */
chunkModules?: boolean;
/** Add the origins of chunks and chunk merging info */
chunkOrigins?: boolean;
/** Add chunk information (setting this to `false` allows for a less verbose output) */
chunks?: boolean;
/** Sort the chunks by a field */
chunksSort?: string;
/** Context directory for request shortening */
context?: string;
/** Display the distance from the entry point for each module */
depth?: boolean;
/** Display the entry points with the corresponding bundles */
entrypoints?: boolean;
/** Add --env information */
env?: boolean;
/** Add errors */
errors?: boolean;
/** Add details to errors (like resolving log) */
errorDetails?: boolean;
/** Exclude assets from being displayed in stats */
excludeAssets?: StatsExcludeFilter;
/** Exclude modules from being displayed in stats */
excludeModules?: StatsExcludeFilter;
/** See excludeModules */
exclude?: StatsExcludeFilter;
/** Add the hash of the compilation */
hash?: boolean;
/** Set the maximum number of modules to be shown */
maxModules?: number;
/** Add built modules information */
modules?: boolean;
/** Sort the modules by a field */
modulesSort?: string;
/** Show dependencies and origin of warnings/errors */
moduleTrace?: boolean;
/** Add public path information */
publicPath?: boolean;
/** Add information about the reasons why modules are included */
reasons?: boolean;
/** Add the source code of modules */
source?: boolean;
/** Add timing information */
timings?: boolean;
/** Add webpack version information */
version?: boolean;
/** Add warnings */
warnings?: boolean;
/** Show which exports of a module are used */
usedExports?: boolean;
/** Filter warnings to be shown */
warningsFilter?: string | RegExp | Array<string | RegExp> | ((warning: string) => boolean);
/** Show performance hint when file size exceeds `performance.maxAssetSize` */
performance?: boolean;
/** Show the exports of the modules */
providedExports?: boolean;
}

type ToJsonOptions = Preset | ToJsonOptionsObject;

type StatsExcludeFilter = string | string[] | RegExp | RegExp[] | ((assetName: string) => boolean) | Array<(assetName: string) => boolean>;
}

type ExcludeAssetsPatternFn = (assetName: string) => boolean;
type ExcludeAssetsPattern = string | RegExp | ExcludeAssetsPatternFn;

Expand Down Expand Up @@ -42,6 +134,12 @@ export namespace BundleAnalyzerPlugin {
*/
reportFilename?: string;

/**
* Content of the HTML title element; or a function of the form () => string that provides the content.
* @default function that returns pretty printed current date and time.
*/
reportTitle?: string | (() => string);

/**
* Module sizes to show in report by default.
* Should be one of "stat", "parsed" or "gzip".
Expand Down Expand Up @@ -93,7 +191,7 @@ export namespace BundleAnalyzerPlugin {
}
}

export class BundleAnalyzerPlugin extends Plugin {
export class BundleAnalyzerPlugin implements WebpackPluginInstance {
constructor(options?: BundleAnalyzerPlugin.Options);

apply(compiler: Compiler): void;
Expand Down
Expand Up @@ -10,12 +10,14 @@ const config: webpack.Configuration = {
new BundleAnalyzerPlugin({
analyzerMode: 'json',
analyzerPort: 'auto',
reportTitle: () => 'title',
}),
new BundleAnalyzerPlugin({
analyzerMode: 'server',
analyzerHost: '127.0.0.1',
analyzerPort: 8888,
reportFilename: 'report.html',
reportTitle: 'title',
defaultSizes: 'parsed',
openAnalyzer: true,
generateStatsFile: true,
Expand Down
5 changes: 5 additions & 0 deletions types/webpack/index.d.ts
Expand Up @@ -1447,6 +1447,11 @@ declare namespace webpack {
apply(compiler: Compiler): void;
}

// Compatibility with webpack@5's own types
// See https://github.com/webpack/webpack/issues/11630
// tslint:disable-next-line no-empty-interface
interface WebpackPluginInstance extends Plugin {}

abstract class ResolvePlugin implements Tapable.Plugin {
apply(resolver: any /* EnhancedResolve.Resolver */): void;
}
Expand Down

0 comments on commit b41d491

Please sign in to comment.