mirror of https://github.com/webpack/webpack.git
				
				
				
			refactor(types): Improve module type strictness and refactor module type string usages in module subclasses
This commit is contained in:
		
							parent
							
								
									1018ca80b3
								
							
						
					
					
						commit
						e958ac552b
					
				|  | @ -49,6 +49,7 @@ const ModuleProfile = require("./ModuleProfile"); | |||
| const ModuleRestoreError = require("./ModuleRestoreError"); | ||||
| const ModuleStoreError = require("./ModuleStoreError"); | ||||
| const ModuleTemplate = require("./ModuleTemplate"); | ||||
| const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("./RuntimeGlobals"); | ||||
| const RuntimeTemplate = require("./RuntimeTemplate"); | ||||
| const Stats = require("./Stats"); | ||||
|  | @ -5121,7 +5122,7 @@ This prevents using hashes of each other and should be avoided.`); | |||
| 		const usedIds = new Set(); | ||||
| 
 | ||||
| 		for (const module of this.modules) { | ||||
| 			if (module.type === "runtime") continue; | ||||
| 			if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) continue; | ||||
| 			const moduleId = chunkGraph.getModuleId(module); | ||||
| 			if (moduleId === null) continue; | ||||
| 			if (usedIds.has(moduleId)) { | ||||
|  |  | |||
|  | @ -18,6 +18,14 @@ const makeSerializable = require("./util/makeSerializable"); | |||
| 
 | ||||
| /** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */ | ||||
| 
 | ||||
| /** | ||||
|  * DependenciesBlock is the base class for all Module classes in webpack. It describes a | ||||
|  * "block" of dependencies which are pointers to other DependenciesBlock instances. For example | ||||
|  * when a Module has a CommonJs require statement, the DependencyBlock for the CommonJs module | ||||
|  * would be added as a dependency to the Module. DependenciesBlock is inherited by two types of classes: | ||||
|  * Module subclasses and AsyncDependenciesBlock subclasses. The only difference between the two is that | ||||
|  * AsyncDependenciesBlock subclasses are used for code-splitting (async boundary) and Module subclasses are not. | ||||
|  */ | ||||
| class DependenciesBlock { | ||||
| 	constructor() { | ||||
| 		/** @type {Dependency[]} */ | ||||
|  |  | |||
|  | @ -38,7 +38,8 @@ const { | |||
| const { | ||||
| 	JAVASCRIPT_MODULE_TYPE_AUTO, | ||||
| 	JAVASCRIPT_MODULE_TYPE_DYNAMIC, | ||||
| 	JAVASCRIPT_MODULE_TYPE_ESM | ||||
| 	JAVASCRIPT_MODULE_TYPE_ESM, | ||||
| 	WEBPACK_MODULE_TYPE_RUNTIME | ||||
| } = require("./ModuleTypeConstants"); | ||||
| 
 | ||||
| /** @typedef {import("./Chunk")} Chunk */ | ||||
|  | @ -564,7 +565,7 @@ class HotModuleReplacementPlugin { | |||
| 													newRuntime | ||||
| 											  ); | ||||
| 										if (hash !== oldHash) { | ||||
| 											if (module.type === "runtime") { | ||||
| 											if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) { | ||||
| 												newRuntimeModules = newRuntimeModules || []; | ||||
| 												newRuntimeModules.push( | ||||
| 													/** @type {RuntimeModule} */ (module) | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ const makeSerializable = require("./util/makeSerializable"); | |||
| /** @typedef {import("./ExportsInfo").UsageStateType} UsageStateType */ | ||||
| /** @typedef {import("./FileSystemInfo")} FileSystemInfo */ | ||||
| /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */ | ||||
| /** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */ | ||||
| /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */ | ||||
| /** @typedef {import("./RequestShortener")} RequestShortener */ | ||||
| /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */ | ||||
|  | @ -129,14 +130,14 @@ const deprecatedNeedRebuild = util.deprecate( | |||
| 
 | ||||
| class Module extends DependenciesBlock { | ||||
| 	/** | ||||
| 	 * @param {string} type the module type | ||||
| 	 * @param {ModuleTypes | ""} type the module type, when deserializing the type is not known and is an empty string | ||||
| 	 * @param {string=} context an optional context | ||||
| 	 * @param {string=} layer an optional layer in which the module is | ||||
| 	 */ | ||||
| 	constructor(type, context = null, layer = null) { | ||||
| 		super(); | ||||
| 
 | ||||
| 		/** @type {string} */ | ||||
| 		/** @type {ModuleTypes | ""} */ | ||||
| 		this.type = type; | ||||
| 		/** @type {string | null} */ | ||||
| 		this.context = context; | ||||
|  |  | |||
|  | @ -60,6 +60,88 @@ const CSS_MODULE_TYPE_GLOBAL = "css/global"; | |||
|  */ | ||||
| const CSS_MODULE_TYPE_MODULE = "css/module"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"asset">} | ||||
|  * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096). | ||||
|  */ | ||||
| const ASSET_MODULE_TYPE = "asset"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"asset/inline">} | ||||
|  * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`. | ||||
|  */ | ||||
| const ASSET_MODULE_TYPE_INLINE = "asset/inline"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"asset/resource">} | ||||
|  * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`. | ||||
|  */ | ||||
| const ASSET_MODULE_TYPE_RESOURCE = "asset/resource"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"asset/source">} | ||||
|  * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`. | ||||
|  */ | ||||
| const ASSET_MODULE_TYPE_SOURCE = "asset/source"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"asset/raw-data-url">} | ||||
|  * TODO: Document what this asset type is for. See css-loader tests for its usage. | ||||
|  */ | ||||
| const ASSET_MODULE_TYPE_RAW_DATA_URL = "asset/raw-data-url"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"runtime">} | ||||
|  * This is the module type used for the webpack runtime abstractions. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_RUNTIME = "runtime"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"fallback-module">} | ||||
|  * This is the module type used for the ModuleFederation feature's FallbackModule class. | ||||
|  * TODO: Document this better. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_FALLBACK = "fallback-module"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"remote-module">} | ||||
|  * This is the module type used for the ModuleFederation feature's RemoteModule class. | ||||
|  * TODO: Document this better. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_REMOTE = "remote-module"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"provide-module">} | ||||
|  * This is the module type used for the ModuleFederation feature's ProvideModule class. | ||||
|  * TODO: Document this better. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_PROVIDE = "provide-module"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"consume-shared-module">} | ||||
|  * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = "consume-shared-module"; | ||||
| 
 | ||||
| /** | ||||
|  * @type {Readonly<"lazy-compilation-proxy">} | ||||
|  * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information. | ||||
|  */ | ||||
| const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = "lazy-compilation-proxy"; | ||||
| 
 | ||||
| /** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */ | ||||
| /** @typedef {"json"} JSONModuleType */ | ||||
| /** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */ | ||||
| /** @typedef {"css" | "css/global" | "css/module"} CSSModuleTypes */ | ||||
| /** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */ | ||||
| /** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */ | ||||
| /** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes} ModuleTypes */ | ||||
| 
 | ||||
| exports.ASSET_MODULE_TYPE = ASSET_MODULE_TYPE; | ||||
| exports.ASSET_MODULE_TYPE_RAW_DATA_URL = ASSET_MODULE_TYPE_RAW_DATA_URL; | ||||
| exports.ASSET_MODULE_TYPE_SOURCE = ASSET_MODULE_TYPE_SOURCE; | ||||
| exports.ASSET_MODULE_TYPE_RESOURCE = ASSET_MODULE_TYPE_RESOURCE; | ||||
| exports.ASSET_MODULE_TYPE_INLINE = ASSET_MODULE_TYPE_INLINE; | ||||
| exports.JAVASCRIPT_MODULE_TYPE_AUTO = JAVASCRIPT_MODULE_TYPE_AUTO; | ||||
| exports.JAVASCRIPT_MODULE_TYPE_DYNAMIC = JAVASCRIPT_MODULE_TYPE_DYNAMIC; | ||||
| exports.JAVASCRIPT_MODULE_TYPE_ESM = JAVASCRIPT_MODULE_TYPE_ESM; | ||||
|  | @ -69,3 +151,11 @@ exports.WEBASSEMBLY_MODULE_TYPE_SYNC = WEBASSEMBLY_MODULE_TYPE_SYNC; | |||
| exports.CSS_MODULE_TYPE = CSS_MODULE_TYPE; | ||||
| exports.CSS_MODULE_TYPE_GLOBAL = CSS_MODULE_TYPE_GLOBAL; | ||||
| exports.CSS_MODULE_TYPE_MODULE = CSS_MODULE_TYPE_MODULE; | ||||
| exports.WEBPACK_MODULE_TYPE_RUNTIME = WEBPACK_MODULE_TYPE_RUNTIME; | ||||
| exports.WEBPACK_MODULE_TYPE_FALLBACK = WEBPACK_MODULE_TYPE_FALLBACK; | ||||
| exports.WEBPACK_MODULE_TYPE_REMOTE = WEBPACK_MODULE_TYPE_REMOTE; | ||||
| exports.WEBPACK_MODULE_TYPE_PROVIDE = WEBPACK_MODULE_TYPE_PROVIDE; | ||||
| exports.WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = | ||||
| 	WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE; | ||||
| exports.WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = | ||||
| 	WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY; | ||||
|  |  | |||
|  | @ -65,6 +65,7 @@ const memoize = require("./util/memoize"); | |||
| /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */ | ||||
| /** @typedef {import("./ModuleGraph")} ModuleGraph */ | ||||
| /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */ | ||||
| /** @typedef {import("./ModuleTypeConstants").JavaScriptModuleTypes} JavaScriptModuleTypes */ | ||||
| /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */ | ||||
| /** @typedef {import("./Parser")} Parser */ | ||||
| /** @typedef {import("./RequestShortener")} RequestShortener */ | ||||
|  | @ -201,7 +202,7 @@ makeSerializable( | |||
| /** | ||||
|  * @typedef {Object} NormalModuleCreateData | ||||
|  * @property {string=} layer an optional layer in which the module is | ||||
|  * @property {string} type module type | ||||
|  * @property {JavaScriptModuleTypes | ""} type module type | ||||
|  * @property {string} request request string | ||||
|  * @property {string} userRequest request intended by user (without loaders from config) | ||||
|  * @property {string} rawRequest request without resolving | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ | |||
| const { RawSource } = require("webpack-sources"); | ||||
| const OriginalSource = require("webpack-sources").OriginalSource; | ||||
| const Module = require("./Module"); | ||||
| const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); | ||||
| 
 | ||||
| /** @typedef {import("webpack-sources").Source} Source */ | ||||
| /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */ | ||||
|  | @ -24,7 +25,7 @@ const Module = require("./Module"); | |||
| /** @typedef {import("./util/Hash")} Hash */ | ||||
| /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */ | ||||
| 
 | ||||
| const TYPES = new Set(["runtime"]); | ||||
| const TYPES = new Set([WEBPACK_MODULE_TYPE_RUNTIME]); | ||||
| 
 | ||||
| class RuntimeModule extends Module { | ||||
| 	/** | ||||
|  | @ -32,7 +33,7 @@ class RuntimeModule extends Module { | |||
| 	 * @param {number=} stage an optional stage | ||||
| 	 */ | ||||
| 	constructor(name, stage = 0) { | ||||
| 		super("runtime"); | ||||
| 		super(WEBPACK_MODULE_TYPE_RUNTIME); | ||||
| 		this.name = name; | ||||
| 		this.stage = stage; | ||||
| 		this.buildMeta = {}; | ||||
|  | @ -137,7 +138,7 @@ class RuntimeModule extends Module { | |||
| 		const generatedCode = this.getGeneratedCode(); | ||||
| 		if (generatedCode) { | ||||
| 			sources.set( | ||||
| 				"runtime", | ||||
| 				WEBPACK_MODULE_TYPE_RUNTIME, | ||||
| 				this.useSourceMap || this.useSimpleSourceMap | ||||
| 					? new OriginalSource(generatedCode, this.identifier()) | ||||
| 					: new RawSource(generatedCode) | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| "use strict"; | ||||
| 
 | ||||
| const { ConcatSource, PrefixSource } = require("webpack-sources"); | ||||
| const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); | ||||
| 
 | ||||
| /** @typedef {import("webpack-sources").Source} Source */ | ||||
| /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */ | ||||
|  | @ -362,7 +363,7 @@ class Template { | |||
| 				runtimeSource = codeGenerationResults.getSource( | ||||
| 					module, | ||||
| 					renderContext.chunk.runtime, | ||||
| 					"runtime" | ||||
| 					WEBPACK_MODULE_TYPE_RUNTIME | ||||
| 				); | ||||
| 			} else { | ||||
| 				const codeGenResult = module.codeGeneration({ | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ const path = require("path"); | |||
| const { RawSource } = require("webpack-sources"); | ||||
| const ConcatenationScope = require("../ConcatenationScope"); | ||||
| const Generator = require("../Generator"); | ||||
| const { ASSET_MODULE_TYPE } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const createHash = require("../util/createHash"); | ||||
| const { makePathsRelative } = require("../util/identifier"); | ||||
|  | @ -122,7 +123,7 @@ const decodeDataUriContent = (encoding, content) => { | |||
| }; | ||||
| 
 | ||||
| const JS_TYPES = new Set(["javascript"]); | ||||
| const JS_AND_ASSET_TYPES = new Set(["javascript", "asset"]); | ||||
| const JS_AND_ASSET_TYPES = new Set(["javascript", ASSET_MODULE_TYPE]); | ||||
| const DEFAULT_ENCODING = "base64"; | ||||
| 
 | ||||
| class AssetGenerator extends Generator { | ||||
|  | @ -228,7 +229,7 @@ class AssetGenerator extends Generator { | |||
| 		} | ||||
| 	) { | ||||
| 		switch (type) { | ||||
| 			case "asset": | ||||
| 			case ASSET_MODULE_TYPE: | ||||
| 				return module.originalSource(); | ||||
| 			default: { | ||||
| 				let content; | ||||
|  | @ -406,7 +407,7 @@ class AssetGenerator extends Generator { | |||
| 	 */ | ||||
| 	getSize(module, type) { | ||||
| 		switch (type) { | ||||
| 			case "asset": { | ||||
| 			case ASSET_MODULE_TYPE: { | ||||
| 				const originalSource = module.originalSource(); | ||||
| 
 | ||||
| 				if (!originalSource) { | ||||
|  |  | |||
|  | @ -5,6 +5,12 @@ | |||
| 
 | ||||
| "use strict"; | ||||
| 
 | ||||
| const { | ||||
| 	ASSET_MODULE_TYPE_RESOURCE, | ||||
| 	ASSET_MODULE_TYPE_INLINE, | ||||
| 	ASSET_MODULE_TYPE, | ||||
| 	ASSET_MODULE_TYPE_SOURCE | ||||
| } = require("../ModuleTypeConstants"); | ||||
| const { cleverMerge } = require("../util/cleverMerge"); | ||||
| const { compareModulesByIdentifier } = require("../util/comparators"); | ||||
| const createSchemaValidation = require("../util/create-schema-validation"); | ||||
|  | @ -61,7 +67,7 @@ const getAssetSourceGenerator = memoize(() => | |||
| 	require("./AssetSourceGenerator") | ||||
| ); | ||||
| 
 | ||||
| const type = "asset"; | ||||
| const type = ASSET_MODULE_TYPE; | ||||
| const plugin = "AssetModulesPlugin"; | ||||
| 
 | ||||
| class AssetModulesPlugin { | ||||
|  | @ -75,7 +81,7 @@ class AssetModulesPlugin { | |||
| 			plugin, | ||||
| 			(compilation, { normalModuleFactory }) => { | ||||
| 				normalModuleFactory.hooks.createParser | ||||
| 					.for("asset") | ||||
| 					.for(ASSET_MODULE_TYPE) | ||||
| 					.tap(plugin, parserOptions => { | ||||
| 						validateParserOptions(parserOptions); | ||||
| 						parserOptions = cleverMerge( | ||||
|  | @ -96,35 +102,39 @@ class AssetModulesPlugin { | |||
| 						return new AssetParser(dataUrlCondition); | ||||
| 					}); | ||||
| 				normalModuleFactory.hooks.createParser | ||||
| 					.for("asset/inline") | ||||
| 					.for(ASSET_MODULE_TYPE_INLINE) | ||||
| 					.tap(plugin, parserOptions => { | ||||
| 						const AssetParser = getAssetParser(); | ||||
| 
 | ||||
| 						return new AssetParser(true); | ||||
| 					}); | ||||
| 				normalModuleFactory.hooks.createParser | ||||
| 					.for("asset/resource") | ||||
| 					.for(ASSET_MODULE_TYPE_RESOURCE) | ||||
| 					.tap(plugin, parserOptions => { | ||||
| 						const AssetParser = getAssetParser(); | ||||
| 
 | ||||
| 						return new AssetParser(false); | ||||
| 					}); | ||||
| 				normalModuleFactory.hooks.createParser | ||||
| 					.for("asset/source") | ||||
| 					.for(ASSET_MODULE_TYPE_SOURCE) | ||||
| 					.tap(plugin, parserOptions => { | ||||
| 						const AssetSourceParser = getAssetSourceParser(); | ||||
| 
 | ||||
| 						return new AssetSourceParser(); | ||||
| 					}); | ||||
| 
 | ||||
| 				for (const type of ["asset", "asset/inline", "asset/resource"]) { | ||||
| 				for (const type of [ | ||||
| 					ASSET_MODULE_TYPE, | ||||
| 					ASSET_MODULE_TYPE_INLINE, | ||||
| 					ASSET_MODULE_TYPE_RESOURCE | ||||
| 				]) { | ||||
| 					normalModuleFactory.hooks.createGenerator | ||||
| 						.for(type) | ||||
| 						.tap(plugin, generatorOptions => { | ||||
| 							validateGeneratorOptions[type](generatorOptions); | ||||
| 
 | ||||
| 							let dataUrl = undefined; | ||||
| 							if (type !== "asset/resource") { | ||||
| 							if (type !== ASSET_MODULE_TYPE_RESOURCE) { | ||||
| 								dataUrl = generatorOptions.dataUrl; | ||||
| 								if (!dataUrl || typeof dataUrl === "object") { | ||||
| 									dataUrl = { | ||||
|  | @ -138,7 +148,7 @@ class AssetModulesPlugin { | |||
| 							let filename = undefined; | ||||
| 							let publicPath = undefined; | ||||
| 							let outputPath = undefined; | ||||
| 							if (type !== "asset/inline") { | ||||
| 							if (type !== ASSET_MODULE_TYPE_INLINE) { | ||||
| 								filename = generatorOptions.filename; | ||||
| 								publicPath = generatorOptions.publicPath; | ||||
| 								outputPath = generatorOptions.outputPath; | ||||
|  | @ -156,7 +166,7 @@ class AssetModulesPlugin { | |||
| 						}); | ||||
| 				} | ||||
| 				normalModuleFactory.hooks.createGenerator | ||||
| 					.for("asset/source") | ||||
| 					.for(ASSET_MODULE_TYPE_SOURCE) | ||||
| 					.tap(plugin, () => { | ||||
| 						const AssetSourceGenerator = getAssetSourceGenerator(); | ||||
| 
 | ||||
|  | @ -169,7 +179,7 @@ class AssetModulesPlugin { | |||
| 
 | ||||
| 					const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType( | ||||
| 						chunk, | ||||
| 						"asset", | ||||
| 						ASSET_MODULE_TYPE, | ||||
| 						compareModulesByIdentifier | ||||
| 					); | ||||
| 					if (modules) { | ||||
|  | @ -207,7 +217,7 @@ class AssetModulesPlugin { | |||
| 					"AssetModulesPlugin", | ||||
| 					(options, context) => { | ||||
| 						const { codeGenerationResult } = options; | ||||
| 						const source = codeGenerationResult.sources.get("asset"); | ||||
| 						const source = codeGenerationResult.sources.get(ASSET_MODULE_TYPE); | ||||
| 						if (source === undefined) return; | ||||
| 						context.assets.set(codeGenerationResult.data.get("filename"), { | ||||
| 							source, | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| const { RawSource } = require("webpack-sources"); | ||||
| const Module = require("../Module"); | ||||
| const { ASSET_MODULE_TYPE_RAW_DATA_URL } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const makeSerializable = require("../util/makeSerializable"); | ||||
| 
 | ||||
|  | @ -33,7 +34,7 @@ class RawDataUrlModule extends Module { | |||
| 	 * @param {string=} readableIdentifier readable identifier | ||||
| 	 */ | ||||
| 	constructor(url, identifier, readableIdentifier) { | ||||
| 		super("asset/raw-data-url", null); | ||||
| 		super(ASSET_MODULE_TYPE_RAW_DATA_URL, null); | ||||
| 		this.url = url; | ||||
| 		this.urlBuffer = url ? Buffer.from(url) : undefined; | ||||
| 		this.identifierStr = identifier || this.url; | ||||
|  |  | |||
|  | @ -13,7 +13,8 @@ const { | |||
| 	WEBASSEMBLY_MODULE_TYPE_ASYNC, | ||||
| 	JAVASCRIPT_MODULE_TYPE_ESM, | ||||
| 	JAVASCRIPT_MODULE_TYPE_DYNAMIC, | ||||
| 	WEBASSEMBLY_MODULE_TYPE_SYNC | ||||
| 	WEBASSEMBLY_MODULE_TYPE_SYNC, | ||||
| 	ASSET_MODULE_TYPE | ||||
| } = require("../ModuleTypeConstants"); | ||||
| const Template = require("../Template"); | ||||
| const { cleverMerge } = require("../util/cleverMerge"); | ||||
|  | @ -511,7 +512,7 @@ const applyModuleDefaults = ( | |||
| 		D(module, "unsafeCache", false); | ||||
| 	} | ||||
| 
 | ||||
| 	F(module.parser, "asset", () => ({})); | ||||
| 	F(module.parser, ASSET_MODULE_TYPE, () => ({})); | ||||
| 	F(module.parser.asset, "dataUrlCondition", () => ({})); | ||||
| 	if (typeof module.parser.asset.dataUrlCondition === "object") { | ||||
| 		D(module.parser.asset.dataUrlCondition, "maxSize", 8096); | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| const { RawSource } = require("webpack-sources"); | ||||
| const Module = require("../Module"); | ||||
| const { WEBPACK_MODULE_TYPE_FALLBACK } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const Template = require("../Template"); | ||||
| const makeSerializable = require("../util/makeSerializable"); | ||||
|  | @ -37,7 +38,7 @@ class FallbackModule extends Module { | |||
| 	 * @param {string[]} requests list of requests to choose one | ||||
| 	 */ | ||||
| 	constructor(requests) { | ||||
| 		super("fallback-module"); | ||||
| 		super(WEBPACK_MODULE_TYPE_FALLBACK); | ||||
| 		this.requests = requests; | ||||
| 		this._identifier = `fallback ${this.requests.join(" ")}`; | ||||
| 	} | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| const { RawSource } = require("webpack-sources"); | ||||
| const Module = require("../Module"); | ||||
| const { WEBPACK_MODULE_TYPE_REMOTE } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const makeSerializable = require("../util/makeSerializable"); | ||||
| const FallbackDependency = require("./FallbackDependency"); | ||||
|  | @ -39,7 +40,7 @@ class RemoteModule extends Module { | |||
| 	 * @param {string} shareScope the used share scope name | ||||
| 	 */ | ||||
| 	constructor(request, externalRequests, internalRequest, shareScope) { | ||||
| 		super("remote-module"); | ||||
| 		super(WEBPACK_MODULE_TYPE_REMOTE); | ||||
| 		this.request = request; | ||||
| 		this.externalRequests = externalRequests; | ||||
| 		this.internalRequest = internalRequest; | ||||
|  |  | |||
|  | @ -10,6 +10,9 @@ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); | |||
| const Dependency = require("../Dependency"); | ||||
| const Module = require("../Module"); | ||||
| const ModuleFactory = require("../ModuleFactory"); | ||||
| const { | ||||
| 	WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY | ||||
| } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const Template = require("../Template"); | ||||
| const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDependency"); | ||||
|  | @ -95,7 +98,11 @@ registerNotSerializable(LazyCompilationDependency); | |||
| 
 | ||||
| class LazyCompilationProxyModule extends Module { | ||||
| 	constructor(context, originalModule, request, client, data, active) { | ||||
| 		super("lazy-compilation-proxy", context, originalModule.layer); | ||||
| 		super( | ||||
| 			WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY, | ||||
| 			context, | ||||
| 			originalModule.layer | ||||
| 		); | ||||
| 		this.originalModule = originalModule; | ||||
| 		this.request = request; | ||||
| 		this.client = client; | ||||
|  | @ -107,7 +114,7 @@ class LazyCompilationProxyModule extends Module { | |||
| 	 * @returns {string} a unique identifier of the module | ||||
| 	 */ | ||||
| 	identifier() { | ||||
| 		return `lazy-compilation-proxy|${this.originalModule.identifier()}`; | ||||
| 		return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}|${this.originalModule.identifier()}`; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  | @ -115,7 +122,7 @@ class LazyCompilationProxyModule extends Module { | |||
| 	 * @returns {string} a user readable identifier of the module | ||||
| 	 */ | ||||
| 	readableIdentifier(requestShortener) { | ||||
| 		return `lazy-compilation-proxy ${this.originalModule.readableIdentifier( | ||||
| 		return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY} ${this.originalModule.readableIdentifier( | ||||
| 			requestShortener | ||||
| 		)}`;
 | ||||
| 	} | ||||
|  | @ -142,7 +149,9 @@ class LazyCompilationProxyModule extends Module { | |||
| 	 * @returns {string | null} an identifier for library inclusion | ||||
| 	 */ | ||||
| 	libIdent(options) { | ||||
| 		return `${this.originalModule.libIdent(options)}!lazy-compilation-proxy`; | ||||
| 		return `${this.originalModule.libIdent( | ||||
| 			options | ||||
| 		)}!${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}`;
 | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -21,7 +21,8 @@ const InitFragment = require("../InitFragment"); | |||
| const { | ||||
| 	JAVASCRIPT_MODULE_TYPE_AUTO, | ||||
| 	JAVASCRIPT_MODULE_TYPE_DYNAMIC, | ||||
| 	JAVASCRIPT_MODULE_TYPE_ESM | ||||
| 	JAVASCRIPT_MODULE_TYPE_ESM, | ||||
| 	WEBPACK_MODULE_TYPE_RUNTIME | ||||
| } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const Template = require("../Template"); | ||||
|  | @ -394,7 +395,7 @@ class JavascriptModulesPlugin { | |||
| 					} | ||||
| 					const runtimeModules = chunkGraph.getChunkModulesIterableBySourceType( | ||||
| 						chunk, | ||||
| 						"runtime" | ||||
| 						WEBPACK_MODULE_TYPE_RUNTIME | ||||
| 					); | ||||
| 					if (runtimeModules) { | ||||
| 						const xor = new StringXor(); | ||||
|  |  | |||
|  | @ -8,6 +8,9 @@ | |||
| const { RawSource } = require("webpack-sources"); | ||||
| const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); | ||||
| const Module = require("../Module"); | ||||
| const { | ||||
| 	WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE | ||||
| } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const makeSerializable = require("../util/makeSerializable"); | ||||
| const { rangeToString, stringifyHoley } = require("../util/semver"); | ||||
|  | @ -52,7 +55,7 @@ class ConsumeSharedModule extends Module { | |||
| 	 * @param {ConsumeOptions} options consume options | ||||
| 	 */ | ||||
| 	constructor(context, options) { | ||||
| 		super("consume-shared-module", context); | ||||
| 		super(WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE, context); | ||||
| 		this.options = options; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -69,7 +72,7 @@ class ConsumeSharedModule extends Module { | |||
| 			singleton, | ||||
| 			eager | ||||
| 		} = this.options; | ||||
| 		return `consume-shared-module|${shareScope}|${shareKey}|${ | ||||
| 		return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE}|${shareScope}|${shareKey}|${ | ||||
| 			requiredVersion && rangeToString(requiredVersion) | ||||
| 		}|${strictVersion}|${importResolved}|${singleton}|${eager}`;
 | ||||
| 	} | ||||
|  | @ -88,7 +91,7 @@ class ConsumeSharedModule extends Module { | |||
| 			singleton, | ||||
| 			eager | ||||
| 		} = this.options; | ||||
| 		return `consume shared module (${shareScope}) ${shareKey}@${ | ||||
| 		return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE} (${shareScope}) ${shareKey}@${ | ||||
| 			requiredVersion ? rangeToString(requiredVersion) : "*" | ||||
| 		}${strictVersion ? " (strict)" : ""}${singleton ? " (singleton)" : ""}${ | ||||
| 			importResolved | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); | ||||
| const Module = require("../Module"); | ||||
| const { WEBPACK_MODULE_TYPE_PROVIDE } = require("../ModuleTypeConstants"); | ||||
| const RuntimeGlobals = require("../RuntimeGlobals"); | ||||
| const makeSerializable = require("../util/makeSerializable"); | ||||
| const ProvideForSharedDependency = require("./ProvideForSharedDependency"); | ||||
|  | @ -39,7 +40,7 @@ class ProvideSharedModule extends Module { | |||
| 	 * @param {boolean} eager include the module in sync way | ||||
| 	 */ | ||||
| 	constructor(shareScope, name, version, request, eager) { | ||||
| 		super("provide-module"); | ||||
| 		super(WEBPACK_MODULE_TYPE_PROVIDE); | ||||
| 		this._shareScope = shareScope; | ||||
| 		this._name = name; | ||||
| 		this._version = version; | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| "use strict"; | ||||
| 
 | ||||
| const util = require("util"); | ||||
| const { WEBPACK_MODULE_TYPE_RUNTIME } = require("../ModuleTypeConstants"); | ||||
| const ModuleDependency = require("../dependencies/ModuleDependency"); | ||||
| const formatLocation = require("../formatLocation"); | ||||
| const { LogType } = require("../logging/Logger"); | ||||
|  | @ -2093,19 +2094,21 @@ const MODULES_GROUPERS = type => ({ | |||
| 					if (!module.moduleType) return; | ||||
| 					if (groupModulesByType) { | ||||
| 						return [module.moduleType.split("/", 1)[0]]; | ||||
| 					} else if (module.moduleType === "runtime") { | ||||
| 						return ["runtime"]; | ||||
| 					} else if (module.moduleType === WEBPACK_MODULE_TYPE_RUNTIME) { | ||||
| 						return [WEBPACK_MODULE_TYPE_RUNTIME]; | ||||
| 					} | ||||
| 				}, | ||||
| 				getOptions: key => { | ||||
| 					const exclude = key === "runtime" && !options.runtimeModules; | ||||
| 					const exclude = | ||||
| 						key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules; | ||||
| 					return { | ||||
| 						groupChildren: !exclude, | ||||
| 						force: exclude | ||||
| 					}; | ||||
| 				}, | ||||
| 				createGroup: (key, children, modules) => { | ||||
| 					const exclude = key === "runtime" && !options.runtimeModules; | ||||
| 					const exclude = | ||||
| 						key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules; | ||||
| 					return { | ||||
| 						type: `${key} modules`, | ||||
| 						moduleType: key, | ||||
|  |  | |||
|  | @ -6871,8 +6871,54 @@ declare interface MinChunkSizePluginOptions { | |||
| 	minChunkSize: number; | ||||
| } | ||||
| declare class Module extends DependenciesBlock { | ||||
| 	constructor(type: string, context?: string, layer?: string); | ||||
| 	type: string; | ||||
| 	constructor( | ||||
| 		type: | ||||
| 			| "" | ||||
| 			| "runtime" | ||||
| 			| "javascript/auto" | ||||
| 			| "javascript/dynamic" | ||||
| 			| "javascript/esm" | ||||
| 			| "json" | ||||
| 			| "webassembly/async" | ||||
| 			| "webassembly/sync" | ||||
| 			| "css" | ||||
| 			| "css/global" | ||||
| 			| "css/module" | ||||
| 			| "asset" | ||||
| 			| "asset/inline" | ||||
| 			| "asset/resource" | ||||
| 			| "asset/source" | ||||
| 			| "asset/raw-data-url" | ||||
| 			| "fallback-module" | ||||
| 			| "remote-module" | ||||
| 			| "provide-module" | ||||
| 			| "consume-shared-module" | ||||
| 			| "lazy-compilation-proxy", | ||||
| 		context?: string, | ||||
| 		layer?: string | ||||
| 	); | ||||
| 	type: | ||||
| 		| "" | ||||
| 		| "runtime" | ||||
| 		| "javascript/auto" | ||||
| 		| "javascript/dynamic" | ||||
| 		| "javascript/esm" | ||||
| 		| "json" | ||||
| 		| "webassembly/async" | ||||
| 		| "webassembly/sync" | ||||
| 		| "css" | ||||
| 		| "css/global" | ||||
| 		| "css/module" | ||||
| 		| "asset" | ||||
| 		| "asset/inline" | ||||
| 		| "asset/resource" | ||||
| 		| "asset/source" | ||||
| 		| "asset/raw-data-url" | ||||
| 		| "fallback-module" | ||||
| 		| "remote-module" | ||||
| 		| "provide-module" | ||||
| 		| "consume-shared-module" | ||||
| 		| "lazy-compilation-proxy"; | ||||
| 	context: null | string; | ||||
| 	layer: null | string; | ||||
| 	needId: boolean; | ||||
|  | @ -7833,7 +7879,7 @@ declare interface NormalModuleCreateData { | |||
| 	/** | ||||
| 	 * module type | ||||
| 	 */ | ||||
| 	type: string; | ||||
| 	type: "" | "javascript/auto" | "javascript/dynamic" | "javascript/esm"; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * request string | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue