123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- /*
- 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,
- errorsSpace: Infinity,
- warningsSpace: Infinity,
- 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,
- errorsSpace: 1000,
- warningsSpace: 1000,
- modulesSpace: 1000,
- assetsSpace: 1000,
- reasonsSpace: 1000
- },
- minimal: {
- all: false,
- version: true,
- timings: true,
- modules: true,
- errorsSpace: 0,
- warningsSpace: 0,
- modulesSpace: 0,
- assets: true,
- assetsSpace: 0,
- errors: true,
- errorsCount: true,
- warnings: true,
- warningsCount: true,
- logging: "warn"
- },
- "errors-only": {
- all: false,
- errors: true,
- errorsCount: true,
- errorsSpace: Infinity,
- moduleTrace: true,
- logging: "error"
- },
- "errors-warnings": {
- all: false,
- errors: true,
- errorsCount: true,
- errorsSpace: Infinity,
- warnings: true,
- warningsCount: true,
- warningsSpace: Infinity,
- 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(/[-[\]{}()*+?.\\^$|]/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;
|