Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 101 additions & 3 deletions types/webpack-bundle-analyzer/index.d.ts
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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