| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const OptionsApply = require("./OptionsApply");const AssetModulesPlugin = require("./asset/AssetModulesPlugin");const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");const JsonModulesPlugin = require("./json/JsonModulesPlugin");const ChunkPrefetchPreloadPlugin = require("./prefetch/ChunkPrefetchPreloadPlugin");const EntryOptionPlugin = require("./EntryOptionPlugin");const RecordIdsPlugin = require("./RecordIdsPlugin");const RuntimePlugin = require("./RuntimePlugin");const APIPlugin = require("./APIPlugin");const CompatibilityPlugin = require("./CompatibilityPlugin");const ConstPlugin = require("./ConstPlugin");const ExportsInfoApiPlugin = require("./ExportsInfoApiPlugin");const WebpackIsIncludedPlugin = require("./WebpackIsIncludedPlugin");const TemplatedPathPlugin = require("./TemplatedPathPlugin");const UseStrictPlugin = require("./UseStrictPlugin");const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin");const DataUriPlugin = require("./schemes/DataUriPlugin");const FileUriPlugin = require("./schemes/FileUriPlugin");const ResolverCachePlugin = require("./cache/ResolverCachePlugin");const CommonJsPlugin = require("./dependencies/CommonJsPlugin");const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin");const ImportMetaContextPlugin = require("./dependencies/ImportMetaContextPlugin");const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");const ImportPlugin = require("./dependencies/ImportPlugin");const LoaderPlugin = require("./dependencies/LoaderPlugin");const RequireContextPlugin = require("./dependencies/RequireContextPlugin");const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin");const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin");const SystemPlugin = require("./dependencies/SystemPlugin");const URLPlugin = require("./dependencies/URLPlugin");const WorkerPlugin = require("./dependencies/WorkerPlugin");const InferAsyncModulesPlugin = require("./async-modules/InferAsyncModulesPlugin");const JavascriptMetaInfoPlugin = require("./JavascriptMetaInfoPlugin");const DefaultStatsFactoryPlugin = require("./stats/DefaultStatsFactoryPlugin");const DefaultStatsPresetPlugin = require("./stats/DefaultStatsPresetPlugin");const DefaultStatsPrinterPlugin = require("./stats/DefaultStatsPrinterPlugin");const { cleverMerge } = require("./util/cleverMerge");/** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions *//** @typedef {import("./Compiler")} Compiler */class WebpackOptionsApply extends OptionsApply {	constructor() {		super();	}	/**	 * @param {WebpackOptions} options options object	 * @param {Compiler} compiler compiler object	 * @returns {WebpackOptions} options object	 */	process(options, compiler) {		compiler.outputPath = options.output.path;		compiler.recordsInputPath = options.recordsInputPath || null;		compiler.recordsOutputPath = options.recordsOutputPath || null;		compiler.name = options.name;		if (options.externals) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ExternalsPlugin = require("./ExternalsPlugin");			new ExternalsPlugin(options.externalsType, options.externals).apply(				compiler			);		}		if (options.externalsPresets.node) {			const NodeTargetPlugin = require("./node/NodeTargetPlugin");			new NodeTargetPlugin().apply(compiler);		}		if (options.externalsPresets.electronMain) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");			new ElectronTargetPlugin("main").apply(compiler);		}		if (options.externalsPresets.electronPreload) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");			new ElectronTargetPlugin("preload").apply(compiler);		}		if (options.externalsPresets.electronRenderer) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");			new ElectronTargetPlugin("renderer").apply(compiler);		}		if (			options.externalsPresets.electron &&			!options.externalsPresets.electronMain &&			!options.externalsPresets.electronPreload &&			!options.externalsPresets.electronRenderer		) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");			new ElectronTargetPlugin().apply(compiler);		}		if (options.externalsPresets.nwjs) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ExternalsPlugin = require("./ExternalsPlugin");			new ExternalsPlugin("node-commonjs", "nw.gui").apply(compiler);		}		if (options.externalsPresets.webAsync) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ExternalsPlugin = require("./ExternalsPlugin");			new ExternalsPlugin(				"import",				options.experiments.css					? ({ request, dependencyType }, callback) => {							if (dependencyType === "url") {								if (/^(\/\/|https?:\/\/)/.test(request))									return callback(null, `asset ${request}`);							} else if (dependencyType === "css-import") {								if (/^(\/\/|https?:\/\/)/.test(request))									return callback(null, `css-import ${request}`);							} else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {								if (/^\.css(\?|$)/.test(request))									return callback(null, `css-import ${request}`);								return callback(null, `import ${request}`);							}							callback();					  }					: /^(\/\/|https?:\/\/|std:)/			).apply(compiler);		} else if (options.externalsPresets.web) {			//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697			const ExternalsPlugin = require("./ExternalsPlugin");			new ExternalsPlugin(				"module",				options.experiments.css					? ({ request, dependencyType }, callback) => {							if (dependencyType === "url") {								if (/^(\/\/|https?:\/\/)/.test(request))									return callback(null, `asset ${request}`);							} else if (dependencyType === "css-import") {								if (/^(\/\/|https?:\/\/)/.test(request))									return callback(null, `css-import ${request}`);							} else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {								if (/^\.css(\?|$)/.test(request))									return callback(null, `css-import ${request}`);								return callback(null, `module ${request}`);							}							callback();					  }					: /^(\/\/|https?:\/\/|std:)/			).apply(compiler);		} else if (options.externalsPresets.node) {			if (options.experiments.css) {				//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697				const ExternalsPlugin = require("./ExternalsPlugin");				new ExternalsPlugin(					"module",					({ request, dependencyType }, callback) => {						if (dependencyType === "url") {							if (/^(\/\/|https?:\/\/)/.test(request))								return callback(null, `asset ${request}`);						} else if (dependencyType === "css-import") {							if (/^(\/\/|https?:\/\/)/.test(request))								return callback(null, `css-import ${request}`);						} else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {							if (/^\.css(\?|$)/.test(request))								return callback(null, `css-import ${request}`);							return callback(null, `module ${request}`);						}						callback();					}				).apply(compiler);			}		}		new ChunkPrefetchPreloadPlugin().apply(compiler);		if (typeof options.output.chunkFormat === "string") {			switch (options.output.chunkFormat) {				case "array-push": {					const ArrayPushCallbackChunkFormatPlugin = require("./javascript/ArrayPushCallbackChunkFormatPlugin");					new ArrayPushCallbackChunkFormatPlugin().apply(compiler);					break;				}				case "commonjs": {					const CommonJsChunkFormatPlugin = require("./javascript/CommonJsChunkFormatPlugin");					new CommonJsChunkFormatPlugin().apply(compiler);					break;				}				case "module": {					const ModuleChunkFormatPlugin = require("./esm/ModuleChunkFormatPlugin");					new ModuleChunkFormatPlugin().apply(compiler);					break;				}				default:					throw new Error(						"Unsupported chunk format '" + options.output.chunkFormat + "'."					);			}		}		if (options.output.enabledChunkLoadingTypes.length > 0) {			for (const type of options.output.enabledChunkLoadingTypes) {				const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");				new EnableChunkLoadingPlugin(type).apply(compiler);			}		}		if (options.output.enabledWasmLoadingTypes.length > 0) {			for (const type of options.output.enabledWasmLoadingTypes) {				const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");				new EnableWasmLoadingPlugin(type).apply(compiler);			}		}		if (options.output.enabledLibraryTypes.length > 0) {			for (const type of options.output.enabledLibraryTypes) {				const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");				new EnableLibraryPlugin(type).apply(compiler);			}		}		if (options.output.pathinfo) {			const ModuleInfoHeaderPlugin = require("./ModuleInfoHeaderPlugin");			new ModuleInfoHeaderPlugin(options.output.pathinfo !== true).apply(				compiler			);		}		if (options.output.clean) {			const CleanPlugin = require("./CleanPlugin");			new CleanPlugin(				options.output.clean === true ? {} : options.output.clean			).apply(compiler);		}		if (options.devtool) {			if (options.devtool.includes("source-map")) {				const hidden = options.devtool.includes("hidden");				const inline = options.devtool.includes("inline");				const evalWrapped = options.devtool.includes("eval");				const cheap = options.devtool.includes("cheap");				const moduleMaps = options.devtool.includes("module");				const noSources = options.devtool.includes("nosources");				const Plugin = evalWrapped					? require("./EvalSourceMapDevToolPlugin")					: require("./SourceMapDevToolPlugin");				new Plugin({					filename: inline ? null : options.output.sourceMapFilename,					moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,					fallbackModuleFilenameTemplate:						options.output.devtoolFallbackModuleFilenameTemplate,					append: hidden ? false : undefined,					module: moduleMaps ? true : cheap ? false : true,					columns: cheap ? false : true,					noSources: noSources,					namespace: options.output.devtoolNamespace				}).apply(compiler);			} else if (options.devtool.includes("eval")) {				const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");				new EvalDevToolModulePlugin({					moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,					namespace: options.output.devtoolNamespace				}).apply(compiler);			}		}		new JavascriptModulesPlugin().apply(compiler);		new JsonModulesPlugin().apply(compiler);		new AssetModulesPlugin().apply(compiler);		if (!options.experiments.outputModule) {			if (options.output.module) {				throw new Error(					"'output.module: true' is only allowed when 'experiments.outputModule' is enabled"				);			}			if (options.output.enabledLibraryTypes.includes("module")) {				throw new Error(					"library type \"module\" is only allowed when 'experiments.outputModule' is enabled"				);			}			if (options.externalsType === "module") {				throw new Error(					"'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"				);			}		}		if (options.experiments.syncWebAssembly) {			const WebAssemblyModulesPlugin = require("./wasm-sync/WebAssemblyModulesPlugin");			new WebAssemblyModulesPlugin({				mangleImports: options.optimization.mangleWasmImports			}).apply(compiler);		}		if (options.experiments.asyncWebAssembly) {			const AsyncWebAssemblyModulesPlugin = require("./wasm-async/AsyncWebAssemblyModulesPlugin");			new AsyncWebAssemblyModulesPlugin({				mangleImports: options.optimization.mangleWasmImports			}).apply(compiler);		}		if (options.experiments.css) {			const CssModulesPlugin = require("./css/CssModulesPlugin");			new CssModulesPlugin(options.experiments.css).apply(compiler);		}		if (options.experiments.lazyCompilation) {			const LazyCompilationPlugin = require("./hmr/LazyCompilationPlugin");			const lazyOptions =				typeof options.experiments.lazyCompilation === "object"					? options.experiments.lazyCompilation					: null;			new LazyCompilationPlugin({				backend:					typeof lazyOptions.backend === "function"						? lazyOptions.backend						: require("./hmr/lazyCompilationBackend")({								...lazyOptions.backend,								client:									(lazyOptions.backend && lazyOptions.backend.client) ||									require.resolve(										`../hot/lazy-compilation-${											options.externalsPresets.node ? "node" : "web"										}.js`									)						  }),				entries: !lazyOptions || lazyOptions.entries !== false,				imports: !lazyOptions || lazyOptions.imports !== false,				test: (lazyOptions && lazyOptions.test) || undefined			}).apply(compiler);		}		if (options.experiments.buildHttp) {			const HttpUriPlugin = require("./schemes/HttpUriPlugin");			const httpOptions = options.experiments.buildHttp;			new HttpUriPlugin(httpOptions).apply(compiler);		}		new EntryOptionPlugin().apply(compiler);		compiler.hooks.entryOption.call(options.context, options.entry);		new RuntimePlugin().apply(compiler);		new InferAsyncModulesPlugin().apply(compiler);		new DataUriPlugin().apply(compiler);		new FileUriPlugin().apply(compiler);		new CompatibilityPlugin().apply(compiler);		new HarmonyModulesPlugin({			topLevelAwait: options.experiments.topLevelAwait		}).apply(compiler);		if (options.amd !== false) {			const AMDPlugin = require("./dependencies/AMDPlugin");			const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");			new AMDPlugin(options.amd || {}).apply(compiler);			new RequireJsStuffPlugin().apply(compiler);		}		new CommonJsPlugin().apply(compiler);		new LoaderPlugin({}).apply(compiler);		if (options.node !== false) {			const NodeStuffPlugin = require("./NodeStuffPlugin");			new NodeStuffPlugin(options.node).apply(compiler);		}		new APIPlugin().apply(compiler);		new ExportsInfoApiPlugin().apply(compiler);		new WebpackIsIncludedPlugin().apply(compiler);		new ConstPlugin().apply(compiler);		new UseStrictPlugin().apply(compiler);		new RequireIncludePlugin().apply(compiler);		new RequireEnsurePlugin().apply(compiler);		new RequireContextPlugin().apply(compiler);		new ImportPlugin().apply(compiler);		new ImportMetaContextPlugin().apply(compiler);		new SystemPlugin().apply(compiler);		new ImportMetaPlugin().apply(compiler);		new URLPlugin().apply(compiler);		new WorkerPlugin(			options.output.workerChunkLoading,			options.output.workerWasmLoading,			options.output.module		).apply(compiler);		new DefaultStatsFactoryPlugin().apply(compiler);		new DefaultStatsPresetPlugin().apply(compiler);		new DefaultStatsPrinterPlugin().apply(compiler);		new JavascriptMetaInfoPlugin().apply(compiler);		if (typeof options.mode !== "string") {			const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");			new WarnNoModeSetPlugin().apply(compiler);		}		const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");		new EnsureChunkConditionsPlugin().apply(compiler);		if (options.optimization.removeAvailableModules) {			const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");			new RemoveParentModulesPlugin().apply(compiler);		}		if (options.optimization.removeEmptyChunks) {			const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");			new RemoveEmptyChunksPlugin().apply(compiler);		}		if (options.optimization.mergeDuplicateChunks) {			const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");			new MergeDuplicateChunksPlugin().apply(compiler);		}		if (options.optimization.flagIncludedChunks) {			const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");			new FlagIncludedChunksPlugin().apply(compiler);		}		if (options.optimization.sideEffects) {			const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");			new SideEffectsFlagPlugin(				options.optimization.sideEffects === true			).apply(compiler);		}		if (options.optimization.providedExports) {			const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");			new FlagDependencyExportsPlugin().apply(compiler);		}		if (options.optimization.usedExports) {			const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");			new FlagDependencyUsagePlugin(				options.optimization.usedExports === "global"			).apply(compiler);		}		if (options.optimization.innerGraph) {			const InnerGraphPlugin = require("./optimize/InnerGraphPlugin");			new InnerGraphPlugin().apply(compiler);		}		if (options.optimization.mangleExports) {			const MangleExportsPlugin = require("./optimize/MangleExportsPlugin");			new MangleExportsPlugin(				options.optimization.mangleExports !== "size"			).apply(compiler);		}		if (options.optimization.concatenateModules) {			const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");			new ModuleConcatenationPlugin().apply(compiler);		}		if (options.optimization.splitChunks) {			const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");			new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler);		}		if (options.optimization.runtimeChunk) {			const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");			new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler);		}		if (!options.optimization.emitOnErrors) {			const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");			new NoEmitOnErrorsPlugin().apply(compiler);		}		if (options.optimization.realContentHash) {			const RealContentHashPlugin = require("./optimize/RealContentHashPlugin");			new RealContentHashPlugin({				hashFunction: options.output.hashFunction,				hashDigest: options.output.hashDigest			}).apply(compiler);		}		if (options.optimization.checkWasmTypes) {			const WasmFinalizeExportsPlugin = require("./wasm-sync/WasmFinalizeExportsPlugin");			new WasmFinalizeExportsPlugin().apply(compiler);		}		const moduleIds = options.optimization.moduleIds;		if (moduleIds) {			switch (moduleIds) {				case "natural": {					const NaturalModuleIdsPlugin = require("./ids/NaturalModuleIdsPlugin");					new NaturalModuleIdsPlugin().apply(compiler);					break;				}				case "named": {					const NamedModuleIdsPlugin = require("./ids/NamedModuleIdsPlugin");					new NamedModuleIdsPlugin().apply(compiler);					break;				}				case "hashed": {					const WarnDeprecatedOptionPlugin = require("./WarnDeprecatedOptionPlugin");					const HashedModuleIdsPlugin = require("./ids/HashedModuleIdsPlugin");					new WarnDeprecatedOptionPlugin(						"optimization.moduleIds",						"hashed",						"deterministic"					).apply(compiler);					new HashedModuleIdsPlugin({						hashFunction: options.output.hashFunction					}).apply(compiler);					break;				}				case "deterministic": {					const DeterministicModuleIdsPlugin = require("./ids/DeterministicModuleIdsPlugin");					new DeterministicModuleIdsPlugin().apply(compiler);					break;				}				case "size": {					const OccurrenceModuleIdsPlugin = require("./ids/OccurrenceModuleIdsPlugin");					new OccurrenceModuleIdsPlugin({						prioritiseInitial: true					}).apply(compiler);					break;				}				default:					throw new Error(						`webpack bug: moduleIds: ${moduleIds} is not implemented`					);			}		}		const chunkIds = options.optimization.chunkIds;		if (chunkIds) {			switch (chunkIds) {				case "natural": {					const NaturalChunkIdsPlugin = require("./ids/NaturalChunkIdsPlugin");					new NaturalChunkIdsPlugin().apply(compiler);					break;				}				case "named": {					const NamedChunkIdsPlugin = require("./ids/NamedChunkIdsPlugin");					new NamedChunkIdsPlugin().apply(compiler);					break;				}				case "deterministic": {					const DeterministicChunkIdsPlugin = require("./ids/DeterministicChunkIdsPlugin");					new DeterministicChunkIdsPlugin().apply(compiler);					break;				}				case "size": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");					new OccurrenceChunkIdsPlugin({						prioritiseInitial: true					}).apply(compiler);					break;				}				case "total-size": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");					new OccurrenceChunkIdsPlugin({						prioritiseInitial: false					}).apply(compiler);					break;				}				default:					throw new Error(						`webpack bug: chunkIds: ${chunkIds} is not implemented`					);			}		}		if (options.optimization.nodeEnv) {			const DefinePlugin = require("./DefinePlugin");			new DefinePlugin({				"process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv)			}).apply(compiler);		}		if (options.optimization.minimize) {			for (const minimizer of options.optimization.minimizer) {				if (typeof minimizer === "function") {					minimizer.call(compiler, compiler);				} else if (minimizer !== "...") {					minimizer.apply(compiler);				}			}		}		if (options.performance) {			const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");			new SizeLimitsPlugin(options.performance).apply(compiler);		}		new TemplatedPathPlugin().apply(compiler);		new RecordIdsPlugin({			portableIds: options.optimization.portableRecords		}).apply(compiler);		new WarnCaseSensitiveModulesPlugin().apply(compiler);		const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");		new AddManagedPathsPlugin(			options.snapshot.managedPaths,			options.snapshot.immutablePaths		).apply(compiler);		if (options.cache && typeof options.cache === "object") {			const cacheOptions = options.cache;			switch (cacheOptions.type) {				case "memory": {					if (isFinite(cacheOptions.maxGenerations)) {						//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697						const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");						new MemoryWithGcCachePlugin({							maxGenerations: cacheOptions.maxGenerations						}).apply(compiler);					} else {						//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697						const MemoryCachePlugin = require("./cache/MemoryCachePlugin");						new MemoryCachePlugin().apply(compiler);					}					if (cacheOptions.cacheUnaffected) {						if (!options.experiments.cacheUnaffected) {							throw new Error(								"'cache.cacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"							);						}						compiler.moduleMemCaches = new Map();					}					break;				}				case "filesystem": {					const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");					for (const key in cacheOptions.buildDependencies) {						const list = cacheOptions.buildDependencies[key];						new AddBuildDependenciesPlugin(list).apply(compiler);					}					if (!isFinite(cacheOptions.maxMemoryGenerations)) {						//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697						const MemoryCachePlugin = require("./cache/MemoryCachePlugin");						new MemoryCachePlugin().apply(compiler);					} else if (cacheOptions.maxMemoryGenerations !== 0) {						//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697						const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");						new MemoryWithGcCachePlugin({							maxGenerations: cacheOptions.maxMemoryGenerations						}).apply(compiler);					}					if (cacheOptions.memoryCacheUnaffected) {						if (!options.experiments.cacheUnaffected) {							throw new Error(								"'cache.memoryCacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"							);						}						compiler.moduleMemCaches = new Map();					}					switch (cacheOptions.store) {						case "pack": {							const IdleFileCachePlugin = require("./cache/IdleFileCachePlugin");							const PackFileCacheStrategy = require("./cache/PackFileCacheStrategy");							new IdleFileCachePlugin(								new PackFileCacheStrategy({									compiler,									fs: compiler.intermediateFileSystem,									context: options.context,									cacheLocation: cacheOptions.cacheLocation,									version: cacheOptions.version,									logger: compiler.getInfrastructureLogger(										"webpack.cache.PackFileCacheStrategy"									),									snapshot: options.snapshot,									maxAge: cacheOptions.maxAge,									profile: cacheOptions.profile,									allowCollectingMemory: cacheOptions.allowCollectingMemory,									compression: cacheOptions.compression								}),								cacheOptions.idleTimeout,								cacheOptions.idleTimeoutForInitialStore,								cacheOptions.idleTimeoutAfterLargeChanges							).apply(compiler);							break;						}						default:							throw new Error("Unhandled value for cache.store");					}					break;				}				default:					// @ts-expect-error Property 'type' does not exist on type 'never'. ts(2339)					throw new Error(`Unknown cache type ${cacheOptions.type}`);			}		}		new ResolverCachePlugin().apply(compiler);		if (options.ignoreWarnings && options.ignoreWarnings.length > 0) {			const IgnoreWarningsPlugin = require("./IgnoreWarningsPlugin");			new IgnoreWarningsPlugin(options.ignoreWarnings).apply(compiler);		}		compiler.hooks.afterPlugins.call(compiler);		if (!compiler.inputFileSystem) {			throw new Error("No input filesystem provided");		}		compiler.resolverFactory.hooks.resolveOptions			.for("normal")			.tap("WebpackOptionsApply", resolveOptions => {				resolveOptions = cleverMerge(options.resolve, resolveOptions);				resolveOptions.fileSystem = compiler.inputFileSystem;				return resolveOptions;			});		compiler.resolverFactory.hooks.resolveOptions			.for("context")			.tap("WebpackOptionsApply", resolveOptions => {				resolveOptions = cleverMerge(options.resolve, resolveOptions);				resolveOptions.fileSystem = compiler.inputFileSystem;				resolveOptions.resolveToContext = true;				return resolveOptions;			});		compiler.resolverFactory.hooks.resolveOptions			.for("loader")			.tap("WebpackOptionsApply", resolveOptions => {				resolveOptions = cleverMerge(options.resolveLoader, resolveOptions);				resolveOptions.fileSystem = compiler.inputFileSystem;				return resolveOptions;			});		compiler.hooks.afterResolvers.call(compiler);		return options;	}}module.exports = WebpackOptionsApply;
 |