| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const RequestShortener = require("../RequestShortener");/** @typedef {import("../../declarations/WebpackOptions").StatsOptions} StatsOptions *//** @typedef {import("../Compilation")} Compilation *//** @typedef {import("../Compilation").CreateStatsOptionsContext} CreateStatsOptionsContext *//** @typedef {import("../Compiler")} Compiler */const applyDefaults = (options, defaults) => {	for (const key of Object.keys(defaults)) {		if (typeof options[key] === "undefined") {			options[key] = defaults[key];		}	}};const NAMED_PRESETS = {	verbose: {		hash: true,		builtAt: true,		relatedAssets: true,		entrypoints: true,		chunkGroups: true,		ids: true,		modules: false,		chunks: true,		chunkRelations: true,		chunkModules: true,		dependentModules: true,		chunkOrigins: true,		depth: true,		env: true,		reasons: true,		usedExports: true,		providedExports: true,		optimizationBailout: true,		errorDetails: true,		errorStack: true,		publicPath: true,		logging: "verbose",		orphanModules: true,		runtimeModules: true,		exclude: false,		modulesSpace: Infinity,		chunkModulesSpace: Infinity,		assetsSpace: Infinity,		reasonsSpace: Infinity,		children: true	},	detailed: {		hash: true,		builtAt: true,		relatedAssets: true,		entrypoints: true,		chunkGroups: true,		ids: true,		chunks: true,		chunkRelations: true,		chunkModules: false,		chunkOrigins: true,		depth: true,		usedExports: true,		providedExports: true,		optimizationBailout: true,		errorDetails: true,		publicPath: true,		logging: true,		runtimeModules: true,		exclude: false,		modulesSpace: 1000,		assetsSpace: 1000,		reasonsSpace: 1000	},	minimal: {		all: false,		version: true,		timings: true,		modules: true,		modulesSpace: 0,		assets: true,		assetsSpace: 0,		errors: true,		errorsCount: true,		warnings: true,		warningsCount: true,		logging: "warn"	},	"errors-only": {		all: false,		errors: true,		errorsCount: true,		moduleTrace: true,		logging: "error"	},	"errors-warnings": {		all: false,		errors: true,		errorsCount: true,		warnings: true,		warningsCount: true,		logging: "warn"	},	summary: {		all: false,		version: true,		errorsCount: true,		warningsCount: true	},	none: {		all: false	}};const NORMAL_ON = ({ all }) => all !== false;const NORMAL_OFF = ({ all }) => all === true;const ON_FOR_TO_STRING = ({ all }, { forToString }) =>	forToString ? all !== false : all === true;const OFF_FOR_TO_STRING = ({ all }, { forToString }) =>	forToString ? all === true : all !== false;const AUTO_FOR_TO_STRING = ({ all }, { forToString }) => {	if (all === false) return false;	if (all === true) return true;	if (forToString) return "auto";	return true;};/** @type {Record<string, (options: StatsOptions, context: CreateStatsOptionsContext, compilation: Compilation) => any>} */const DEFAULTS = {	context: (options, context, compilation) => compilation.compiler.context,	requestShortener: (options, context, compilation) =>		compilation.compiler.context === options.context			? compilation.requestShortener			: new RequestShortener(options.context, compilation.compiler.root),	performance: NORMAL_ON,	hash: OFF_FOR_TO_STRING,	env: NORMAL_OFF,	version: NORMAL_ON,	timings: NORMAL_ON,	builtAt: OFF_FOR_TO_STRING,	assets: NORMAL_ON,	entrypoints: AUTO_FOR_TO_STRING,	chunkGroups: OFF_FOR_TO_STRING,	chunkGroupAuxiliary: OFF_FOR_TO_STRING,	chunkGroupChildren: OFF_FOR_TO_STRING,	chunkGroupMaxAssets: (o, { forToString }) => (forToString ? 5 : Infinity),	chunks: OFF_FOR_TO_STRING,	chunkRelations: OFF_FOR_TO_STRING,	chunkModules: ({ all, modules }) => {		if (all === false) return false;		if (all === true) return true;		if (modules) return false;		return true;	},	dependentModules: OFF_FOR_TO_STRING,	chunkOrigins: OFF_FOR_TO_STRING,	ids: OFF_FOR_TO_STRING,	modules: ({ all, chunks, chunkModules }, { forToString }) => {		if (all === false) return false;		if (all === true) return true;		if (forToString && chunks && chunkModules) return false;		return true;	},	nestedModules: OFF_FOR_TO_STRING,	groupModulesByType: ON_FOR_TO_STRING,	groupModulesByCacheStatus: ON_FOR_TO_STRING,	groupModulesByLayer: ON_FOR_TO_STRING,	groupModulesByAttributes: ON_FOR_TO_STRING,	groupModulesByPath: ON_FOR_TO_STRING,	groupModulesByExtension: ON_FOR_TO_STRING,	modulesSpace: (o, { forToString }) => (forToString ? 15 : Infinity),	chunkModulesSpace: (o, { forToString }) => (forToString ? 10 : Infinity),	nestedModulesSpace: (o, { forToString }) => (forToString ? 10 : Infinity),	relatedAssets: OFF_FOR_TO_STRING,	groupAssetsByEmitStatus: ON_FOR_TO_STRING,	groupAssetsByInfo: ON_FOR_TO_STRING,	groupAssetsByPath: ON_FOR_TO_STRING,	groupAssetsByExtension: ON_FOR_TO_STRING,	groupAssetsByChunk: ON_FOR_TO_STRING,	assetsSpace: (o, { forToString }) => (forToString ? 15 : Infinity),	orphanModules: OFF_FOR_TO_STRING,	runtimeModules: ({ all, runtime }, { forToString }) =>		runtime !== undefined			? runtime			: forToString			? all === true			: all !== false,	cachedModules: ({ all, cached }, { forToString }) =>		cached !== undefined ? cached : forToString ? all === true : all !== false,	moduleAssets: OFF_FOR_TO_STRING,	depth: OFF_FOR_TO_STRING,	cachedAssets: OFF_FOR_TO_STRING,	reasons: OFF_FOR_TO_STRING,	reasonsSpace: (o, { forToString }) => (forToString ? 15 : Infinity),	groupReasonsByOrigin: ON_FOR_TO_STRING,	usedExports: OFF_FOR_TO_STRING,	providedExports: OFF_FOR_TO_STRING,	optimizationBailout: OFF_FOR_TO_STRING,	children: OFF_FOR_TO_STRING,	source: NORMAL_OFF,	moduleTrace: NORMAL_ON,	errors: NORMAL_ON,	errorsCount: NORMAL_ON,	errorDetails: AUTO_FOR_TO_STRING,	errorStack: OFF_FOR_TO_STRING,	warnings: NORMAL_ON,	warningsCount: NORMAL_ON,	publicPath: OFF_FOR_TO_STRING,	logging: ({ all }, { forToString }) =>		forToString && all !== false ? "info" : false,	loggingDebug: () => [],	loggingTrace: OFF_FOR_TO_STRING,	excludeModules: () => [],	excludeAssets: () => [],	modulesSort: () => "depth",	chunkModulesSort: () => "name",	nestedModulesSort: () => false,	chunksSort: () => false,	assetsSort: () => "!size",	outputPath: OFF_FOR_TO_STRING,	colors: () => false};const normalizeFilter = item => {	if (typeof item === "string") {		const regExp = new RegExp(			`[\\\\/]${item.replace(				// eslint-disable-next-line no-useless-escape				/[-[\]{}()*+?.\\^$|]/g,				"\\$&"			)}([\\\\/]|$|!|\\?)`		);		return ident => regExp.test(ident);	}	if (item && typeof item === "object" && typeof item.test === "function") {		return ident => item.test(ident);	}	if (typeof item === "function") {		return item;	}	if (typeof item === "boolean") {		return () => item;	}};const NORMALIZER = {	excludeModules: value => {		if (!Array.isArray(value)) {			value = value ? [value] : [];		}		return value.map(normalizeFilter);	},	excludeAssets: value => {		if (!Array.isArray(value)) {			value = value ? [value] : [];		}		return value.map(normalizeFilter);	},	warningsFilter: value => {		if (!Array.isArray(value)) {			value = value ? [value] : [];		}		return value.map(filter => {			if (typeof filter === "string") {				return (warning, warningString) => warningString.includes(filter);			}			if (filter instanceof RegExp) {				return (warning, warningString) => filter.test(warningString);			}			if (typeof filter === "function") {				return filter;			}			throw new Error(				`Can only filter warnings with Strings or RegExps. (Given: ${filter})`			);		});	},	logging: value => {		if (value === true) value = "log";		return value;	},	loggingDebug: value => {		if (!Array.isArray(value)) {			value = value ? [value] : [];		}		return value.map(normalizeFilter);	}};class DefaultStatsPresetPlugin {	/**	 * Apply the plugin	 * @param {Compiler} compiler the compiler instance	 * @returns {void}	 */	apply(compiler) {		compiler.hooks.compilation.tap("DefaultStatsPresetPlugin", compilation => {			for (const key of Object.keys(NAMED_PRESETS)) {				const defaults = NAMED_PRESETS[key];				compilation.hooks.statsPreset					.for(key)					.tap("DefaultStatsPresetPlugin", (options, context) => {						applyDefaults(options, defaults);					});			}			compilation.hooks.statsNormalize.tap(				"DefaultStatsPresetPlugin",				(options, context) => {					for (const key of Object.keys(DEFAULTS)) {						if (options[key] === undefined)							options[key] = DEFAULTS[key](options, context, compilation);					}					for (const key of Object.keys(NORMALIZER)) {						options[key] = NORMALIZER[key](options[key]);					}				}			);		});	}}module.exports = DefaultStatsPresetPlugin;
 |