mirror of https://github.com/webpack/webpack.git
				
				
				
			add backward-compat layer for ModuleGraph and ChunkGraph
This commit is contained in:
		
							parent
							
								
									42167db4af
								
							
						
					
					
						commit
						5a78e96dc9
					
				
							
								
								
									
										165
									
								
								lib/Chunk.js
								
								
								
								
							
							
						
						
									
										165
									
								
								lib/Chunk.js
								
								
								
								
							|  | @ -5,13 +5,13 @@ | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | const ChunkGraph = require("./ChunkGraph"); | ||||||
| const Entrypoint = require("./Entrypoint"); | const Entrypoint = require("./Entrypoint"); | ||||||
| const { intersect } = require("./util/SetHelpers"); | const { intersect } = require("./util/SetHelpers"); | ||||||
| const SortableSet = require("./util/SortableSet"); | const SortableSet = require("./util/SortableSet"); | ||||||
| const { compareModulesById } = require("./util/comparators"); | const { compareModulesById } = require("./util/comparators"); | ||||||
| 
 | 
 | ||||||
| /** @typedef {import("webpack-sources").Source} Source */ | /** @typedef {import("webpack-sources").Source} Source */ | ||||||
| /** @typedef {import("./ChunkGraph")} ChunkGraph */ |  | ||||||
| /** @typedef {import("./ChunkGroup")} ChunkGroup */ | /** @typedef {import("./ChunkGroup")} ChunkGroup */ | ||||||
| /** @typedef {import("./Compilation")} Compilation */ | /** @typedef {import("./Compilation")} Compilation */ | ||||||
| /** @typedef {import("./Module")} Module */ | /** @typedef {import("./Module")} Module */ | ||||||
|  | @ -89,6 +89,169 @@ class Chunk { | ||||||
| 		this.removedModules = undefined; | 		this.removedModules = undefined; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	// BACKWARD-COMPAT START
 | ||||||
|  | 	get entryModule() { | ||||||
|  | 		const entryModules = Array.from( | ||||||
|  | 			ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 				this, | ||||||
|  | 				"Chunk.entryModule" | ||||||
|  | 			).getChunkEntryModulesIterable(this) | ||||||
|  | 		); | ||||||
|  | 		if (entryModules.length === 0) { | ||||||
|  | 			return undefined; | ||||||
|  | 		} else if (entryModules.length === 1) { | ||||||
|  | 			return entryModules[0]; | ||||||
|  | 		} else { | ||||||
|  | 			throw new Error( | ||||||
|  | 				"Module.entryModule: Multiple entry modules are not supported by the deprecated API (Use the new ChunkGroup API)" | ||||||
|  | 			); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	hasEntryModule() { | ||||||
|  | 		return ( | ||||||
|  | 			ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 				this, | ||||||
|  | 				"Chunk.hasEntryModule" | ||||||
|  | 			).getNumberOfEntryModules(this) > 0 | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	addModule(module) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.addModule" | ||||||
|  | 		).connectChunkAndModule(this, module); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	removeModule(module) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.removeModule" | ||||||
|  | 		).disconnectChunkAndModule(this, module); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	getNumberOfModules() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.getNumberOfModules" | ||||||
|  | 		).getNumberOfChunkModules(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get modulesIterable() { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.modulesIterable" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.getOrderedChunkModulesIterable( | ||||||
|  | 			this, | ||||||
|  | 			compareModulesById(chunkGraph._moduleGraph) | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	compareTo(otherChunk) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.compareTo" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.compareChunks(chunkGraph._moduleGraph, this, otherChunk); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	containsModule(module) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.containsModule" | ||||||
|  | 		).isModuleInChunk(module, this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	getModules() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.getModules" | ||||||
|  | 		).getChunkModules(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	remove() { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk(this, "Chunk.remove"); | ||||||
|  | 		chunkGraph.disconnectChunk(this); | ||||||
|  | 		this.disconnectFromGroups(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	moveModule(module, otherChunk) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.moveModule" | ||||||
|  | 		); | ||||||
|  | 		chunkGraph.disconnectChunkAndModule(this, module); | ||||||
|  | 		chunkGraph.connectChunkAndModule(otherChunk, module); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	integrate(otherChunk) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.integrate" | ||||||
|  | 		); | ||||||
|  | 		if (!chunkGraph.canChunksBeIntegrated(this, otherChunk)) return false; | ||||||
|  | 		chunkGraph.integrateChunks(this, otherChunk); | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	canBeIntegrated(otherChunk) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.canBeIntegrated" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.canChunksBeIntegrated(this, otherChunk); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	isEmpty() { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk(this, "Chunk.isEmpty"); | ||||||
|  | 		return chunkGraph.getNumberOfChunkModules(this) === 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	modulesSize() { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.modulesSize" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.getChunkModulesSize(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	size(options) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk(this, "Chunk.size"); | ||||||
|  | 		return chunkGraph.getChunkSize(this, options); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	integratedSize(otherChunk, options) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.integratedSize" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.getIntegratedChunksSize(this, otherChunk, options); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	getChunkModuleMaps(filterFn) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.getChunkModuleMaps" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.getChunkModuleMaps( | ||||||
|  | 			chunkGraph._moduleGraph, | ||||||
|  | 			this, | ||||||
|  | 			filterFn | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	hasModuleInGraph(filterFn, filterChunkFn) { | ||||||
|  | 		const chunkGraph = ChunkGraph.getChunkGraphForChunk( | ||||||
|  | 			this, | ||||||
|  | 			"Chunk.hasModuleInGraph" | ||||||
|  | 		); | ||||||
|  | 		return chunkGraph.hasModuleInGraph(this, filterFn, filterChunkFn); | ||||||
|  | 	} | ||||||
|  | 	// BACKWARD-COMPAT END
 | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @returns {boolean} whether or not the Chunk will have a runtime | 	 * @returns {boolean} whether or not the Chunk will have a runtime | ||||||
| 	 */ | 	 */ | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | const util = require("util"); | ||||||
| const SortableSet = require("./util/SortableSet"); | const SortableSet = require("./util/SortableSet"); | ||||||
| const { compareModulesById } = require("./util/comparators"); | const { compareModulesById } = require("./util/comparators"); | ||||||
| 
 | 
 | ||||||
|  | @ -86,11 +87,16 @@ class ChunkGraphChunk { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| class ChunkGraph { | class ChunkGraph { | ||||||
| 	constructor() { | 	/** | ||||||
|  | 	 * @param {ModuleGraph} moduleGraph the module graph | ||||||
|  | 	 */ | ||||||
|  | 	constructor(moduleGraph) { | ||||||
| 		/** @private @type {WeakMap<Module, ChunkGraphModule>} */ | 		/** @private @type {WeakMap<Module, ChunkGraphModule>} */ | ||||||
| 		this._modules = new WeakMap(); | 		this._modules = new WeakMap(); | ||||||
| 		/** @private @type {WeakMap<Chunk, ChunkGraphChunk>} */ | 		/** @private @type {WeakMap<Chunk, ChunkGraphChunk>} */ | ||||||
| 		this._chunks = new WeakMap(); | 		this._chunks = new WeakMap(); | ||||||
|  | 		/** @private @type {ModuleGraph} */ | ||||||
|  | 		this._moduleGraph = moduleGraph; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
|  | @ -669,6 +675,100 @@ class ChunkGraph { | ||||||
| 		const cgc = this._getChunkGraphChunk(chunk); | 		const cgc = this._getChunkGraphChunk(chunk); | ||||||
| 		return cgc.entryModules; | 		return cgc.entryModules; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Module} module the module | ||||||
|  | 	 * @param {string} deprecateMessage message for the deprecation message | ||||||
|  | 	 * @returns {ChunkGraph} the chunk graph | ||||||
|  | 	 */ | ||||||
|  | 	static getChunkGraphForModule(module, deprecateMessage) { | ||||||
|  | 		const fn = deprecateGetChunkGraphForModuleMap.get(deprecateMessage); | ||||||
|  | 		if (fn) return fn(module); | ||||||
|  | 		const newFn = util.deprecate( | ||||||
|  | 			/** | ||||||
|  | 			 * @param {Module} module the module | ||||||
|  | 			 * @returns {ChunkGraph} the chunk graph | ||||||
|  | 			 */ | ||||||
|  | 			module => { | ||||||
|  | 				const chunkGraph = chunkGraphForModuleMap.get(module); | ||||||
|  | 				if (!chunkGraph) | ||||||
|  | 					throw new Error( | ||||||
|  | 						deprecateMessage + | ||||||
|  | 							": There was no ChunkGraph assigned to the Module for backward-compat (Use the new API)" | ||||||
|  | 					); | ||||||
|  | 				return chunkGraph; | ||||||
|  | 			}, | ||||||
|  | 			deprecateMessage + ": Use new ChunkGraph API" | ||||||
|  | 		); | ||||||
|  | 		deprecateGetChunkGraphForModuleMap.set(deprecateMessage, newFn); | ||||||
|  | 		return newFn(module); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Module} module the module | ||||||
|  | 	 * @param {ChunkGraph} chunkGraph the chunk graph | ||||||
|  | 	 * @returns {void} | ||||||
|  | 	 */ | ||||||
|  | 	static setChunkGraphForModule(module, chunkGraph) { | ||||||
|  | 		chunkGraphForModuleMap.set(module, chunkGraph); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Chunk} chunk the chunk | ||||||
|  | 	 * @param {string} deprecateMessage message for the deprecation message | ||||||
|  | 	 * @returns {ChunkGraph} the chunk graph | ||||||
|  | 	 */ | ||||||
|  | 	static getChunkGraphForChunk(chunk, deprecateMessage) { | ||||||
|  | 		const fn = deprecateGetChunkGraphForChunkMap.get(deprecateMessage); | ||||||
|  | 		if (fn) return fn(chunk); | ||||||
|  | 		const newFn = util.deprecate( | ||||||
|  | 			/** | ||||||
|  | 			 * @param {Chunk} chunk the chunk | ||||||
|  | 			 * @returns {ChunkGraph} the chunk graph | ||||||
|  | 			 */ | ||||||
|  | 			chunk => { | ||||||
|  | 				const chunkGraph = chunkGraphForChunkMap.get(chunk); | ||||||
|  | 				if (!chunkGraph) | ||||||
|  | 					throw new Error( | ||||||
|  | 						deprecateMessage + | ||||||
|  | 							"There was no ChunkGraph assigned to the Chunk for backward-compat (Use the new API)" | ||||||
|  | 					); | ||||||
|  | 				return chunkGraph; | ||||||
|  | 			}, | ||||||
|  | 			deprecateMessage + ": Use new ChunkGraph API" | ||||||
|  | 		); | ||||||
|  | 		deprecateGetChunkGraphForChunkMap.set(deprecateMessage, newFn); | ||||||
|  | 		return newFn(chunk); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Chunk} chunk the chunk | ||||||
|  | 	 * @param {ChunkGraph} chunkGraph the chunk graph | ||||||
|  | 	 * @returns {void} | ||||||
|  | 	 */ | ||||||
|  | 	static setChunkGraphForChunk(chunk, chunkGraph) { | ||||||
|  | 		chunkGraphForChunkMap.set(chunk, chunkGraph); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {WeakMap<Module, ChunkGraph>} */ | ||||||
|  | const chunkGraphForModuleMap = new WeakMap(); | ||||||
|  | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {WeakMap<Chunk, ChunkGraph>} */ | ||||||
|  | const chunkGraphForChunkMap = new WeakMap(); | ||||||
|  | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {Map<string, (module: Module) => ChunkGraph>} */ | ||||||
|  | const deprecateGetChunkGraphForModuleMap = new Map(); | ||||||
|  | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {Map<string, (chunk: Chunk) => ChunkGraph>} */ | ||||||
|  | const deprecateGetChunkGraphForChunkMap = new Map(); | ||||||
|  | 
 | ||||||
| module.exports = ChunkGraph; | module.exports = ChunkGraph; | ||||||
|  |  | ||||||
|  | @ -1064,9 +1064,13 @@ class Compilation { | ||||||
| 	 * @returns {void} | 	 * @returns {void} | ||||||
| 	 */ | 	 */ | ||||||
| 	seal(callback) { | 	seal(callback) { | ||||||
| 		const chunkGraph = new ChunkGraph(); | 		const chunkGraph = new ChunkGraph(this.moduleGraph); | ||||||
| 		this.chunkGraph = chunkGraph; | 		this.chunkGraph = chunkGraph; | ||||||
| 
 | 
 | ||||||
|  | 		for (const module of this.modules) { | ||||||
|  | 			ChunkGraph.setChunkGraphForModule(module, chunkGraph); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		this.hooks.seal.call(); | 		this.hooks.seal.call(); | ||||||
| 
 | 
 | ||||||
| 		while (this.hooks.optimizeDependencies.call(this.modules)) { | 		while (this.hooks.optimizeDependencies.call(this.modules)) { | ||||||
|  | @ -1295,6 +1299,7 @@ class Compilation { | ||||||
| 		} | 		} | ||||||
| 		const chunk = new Chunk(name); | 		const chunk = new Chunk(name); | ||||||
| 		this.chunks.push(chunk); | 		this.chunks.push(chunk); | ||||||
|  | 		ChunkGraph.setChunkGraphForChunk(chunk, this.chunkGraph); | ||||||
| 		if (name) { | 		if (name) { | ||||||
| 			this.namedChunks.set(name, chunk); | 			this.namedChunks.set(name, chunk); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										121
									
								
								lib/Module.js
								
								
								
								
							
							
						
						
									
										121
									
								
								lib/Module.js
								
								
								
								
							|  | @ -5,17 +5,18 @@ | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | const ChunkGraph = require("./ChunkGraph"); | ||||||
| const DependenciesBlock = require("./DependenciesBlock"); | const DependenciesBlock = require("./DependenciesBlock"); | ||||||
|  | const ModuleGraph = require("./ModuleGraph"); | ||||||
| const Template = require("./Template"); | const Template = require("./Template"); | ||||||
|  | const { compareChunksById } = require("./util/comparators"); | ||||||
| 
 | 
 | ||||||
| /** @typedef {import("webpack-sources").Source} Source */ | /** @typedef {import("webpack-sources").Source} Source */ | ||||||
| /** @typedef {import("./Chunk")} Chunk */ | /** @typedef {import("./Chunk")} Chunk */ | ||||||
| /** @typedef {import("./ChunkGraph")} ChunkGraph */ |  | ||||||
| /** @typedef {import("./ChunkGroup")} ChunkGroup */ | /** @typedef {import("./ChunkGroup")} ChunkGroup */ | ||||||
| /** @typedef {import("./Compilation")} Compilation */ | /** @typedef {import("./Compilation")} Compilation */ | ||||||
| /** @typedef {import("./Dependency")} Dependency */ | /** @typedef {import("./Dependency")} Dependency */ | ||||||
| /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ | /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ | ||||||
| /** @typedef {import("./ModuleGraph")} ModuleGraph */ |  | ||||||
| /** @typedef {import("./RequestShortener")} RequestShortener */ | /** @typedef {import("./RequestShortener")} RequestShortener */ | ||||||
| /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ | /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ | ||||||
| /** @typedef {import("./WebpackError")} WebpackError */ | /** @typedef {import("./WebpackError")} WebpackError */ | ||||||
|  | @ -115,14 +116,126 @@ class Module extends DependenciesBlock { | ||||||
| 		this.useSourceMap = false; | 		this.useSourceMap = false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	// BACKWARD-COMPAT START
 | ||||||
| 	get index() { | 	get index() { | ||||||
| 		throw new Error(); | 		return ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.index" | ||||||
|  | 		).getPreOrderIndex(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	set index(value) { | ||||||
|  | 		ModuleGraph.getModuleGraphForModule(this, "Module.index").setPreOrderIndex( | ||||||
|  | 			this, | ||||||
|  | 			value | ||||||
|  | 		); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	get index2() { | 	get index2() { | ||||||
| 		throw new Error(); | 		return ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.index2" | ||||||
|  | 		).getPostOrderIndex(this); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	set index2(value) { | ||||||
|  | 		ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.index2" | ||||||
|  | 		).setPostOrderIndex(this, value); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get issuer() { | ||||||
|  | 		return ModuleGraph.getModuleGraphForModule(this, "Module.issuer").getIssuer( | ||||||
|  | 			this | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	set issuer(value) { | ||||||
|  | 		ModuleGraph.getModuleGraphForModule(this, "Module.issuer").setIssuer( | ||||||
|  | 			this, | ||||||
|  | 			value | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get usedExports() { | ||||||
|  | 		return ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.usedExports" | ||||||
|  | 		).getUsedExports(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	set usedExports(value) { | ||||||
|  | 		ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.usedExports" | ||||||
|  | 		).setUsedExports(this, value); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get optimizationBailout() { | ||||||
|  | 		return ModuleGraph.getModuleGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.optimizationBailout" | ||||||
|  | 		).getOptimizationBailout(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get optional() { | ||||||
|  | 		return this.isOptional( | ||||||
|  | 			ModuleGraph.getModuleGraphForModule(this, "Module.optional") | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	addChunk(chunk) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.addChunk" | ||||||
|  | 		).connectChunkAndModule(chunk, this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	removeChunk(chunk) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.removeChunk" | ||||||
|  | 		).disconnectChunkAndModule(chunk, this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	isInChunk(chunk) { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.isInChunk" | ||||||
|  | 		).isModuleInChunk(this, chunk); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	isEntryModule() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.isEntryModule" | ||||||
|  | 		).isEntryModule(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	getChunks() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.getChunks" | ||||||
|  | 		).getModuleChunks(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	getNumberOfChunks() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.getNumberOfChunks" | ||||||
|  | 		).getNumberOfModuleChunks(this); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	get chunksIterable() { | ||||||
|  | 		return ChunkGraph.getChunkGraphForModule( | ||||||
|  | 			this, | ||||||
|  | 			"Module.chunksIterable" | ||||||
|  | 		).getOrderedModuleChunksIterable(this, compareChunksById); | ||||||
|  | 	} | ||||||
|  | 	// BACKWARD-COMPAT END
 | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @deprecated moved to .buildInfo.exportsArgument | 	 * @deprecated moved to .buildInfo.exportsArgument | ||||||
| 	 * @returns {string} name of the exports argument | 	 * @returns {string} name of the exports argument | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | const util = require("util"); | ||||||
| const ModuleGraphConnection = require("./ModuleGraphConnection"); | const ModuleGraphConnection = require("./ModuleGraphConnection"); | ||||||
| 
 | 
 | ||||||
| /** @typedef {import("./DependenciesBlock")} DependenciesBlock */ | /** @typedef {import("./DependenciesBlock")} DependenciesBlock */ | ||||||
|  | @ -428,7 +429,54 @@ class ModuleGraph { | ||||||
| 		} | 		} | ||||||
| 		return meta; | 		return meta; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Module} module the module | ||||||
|  | 	 * @param {string} deprecateMessage message for the deprecation message | ||||||
|  | 	 * @returns {ModuleGraph} the module graph | ||||||
|  | 	 */ | ||||||
|  | 	static getModuleGraphForModule(module, deprecateMessage) { | ||||||
|  | 		const fn = deprecateMap.get(deprecateMessage); | ||||||
|  | 		if (fn) return fn(module); | ||||||
|  | 		const newFn = util.deprecate( | ||||||
|  | 			/** | ||||||
|  | 			 * @param {Module} module the module | ||||||
|  | 			 * @returns {ModuleGraph} the module graph | ||||||
|  | 			 */ | ||||||
|  | 			module => { | ||||||
|  | 				const moduleGraph = moduleGraphForModuleMap.get(module); | ||||||
|  | 				if (!moduleGraph) | ||||||
|  | 					throw new Error( | ||||||
|  | 						deprecateMessage + | ||||||
|  | 							"There was no ModuleGraph assigned to the Module for backward-compat (Use the new API)" | ||||||
|  | 					); | ||||||
|  | 				return moduleGraph; | ||||||
|  | 			}, | ||||||
|  | 			deprecateMessage + ": Use new ModuleGraph API" | ||||||
|  | 		); | ||||||
|  | 		deprecateMap.set(deprecateMessage, newFn); | ||||||
|  | 		return newFn(module); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// TODO remove in webpack 6
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param {Module} module the module | ||||||
|  | 	 * @param {ModuleGraph} moduleGraph the module graph | ||||||
|  | 	 * @returns {void} | ||||||
|  | 	 */ | ||||||
|  | 	static setModuleGraphForModule(module, moduleGraph) { | ||||||
|  | 		moduleGraphForModuleMap.set(module, moduleGraph); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {WeakMap<Module, ModuleGraph>} */ | ||||||
|  | const moduleGraphForModuleMap = new WeakMap(); | ||||||
|  | 
 | ||||||
|  | // TODO remove in webpack 6
 | ||||||
|  | /** @type {Map<string, (module: Module) => ModuleGraph>} */ | ||||||
|  | const deprecateMap = new Map(); | ||||||
|  | 
 | ||||||
| module.exports = ModuleGraph; | module.exports = ModuleGraph; | ||||||
| module.exports.ModuleGraphConnection = ModuleGraphConnection; | module.exports.ModuleGraphConnection = ModuleGraphConnection; | ||||||
|  |  | ||||||
|  | @ -5,6 +5,8 @@ | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | const ChunkGraph = require("../ChunkGraph"); | ||||||
|  | const ModuleGraph = require("../ModuleGraph"); | ||||||
| const { STAGE_DEFAULT } = require("../OptimizationStages"); | const { STAGE_DEFAULT } = require("../OptimizationStages"); | ||||||
| const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibilityDependency"); | const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibilityDependency"); | ||||||
| const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency"); | const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency"); | ||||||
|  | @ -331,6 +333,8 @@ class ModuleConcatenationPlugin { | ||||||
| 								modules, | 								modules, | ||||||
| 								compilation | 								compilation | ||||||
| 							); | 							); | ||||||
|  | 							ChunkGraph.setChunkGraphForModule(newModule, chunkGraph); | ||||||
|  | 							ModuleGraph.setModuleGraphForModule(newModule, moduleGraph); | ||||||
| 							for (const warning of concatConfiguration.getWarningsSorted()) { | 							for (const warning of concatConfiguration.getWarningsSorted()) { | ||||||
| 								moduleGraph | 								moduleGraph | ||||||
| 									.getOptimizationBailout(newModule) | 									.getOptimizationBailout(newModule) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue