mirror of https://github.com/webpack/webpack.git
				
				
				
			remove unused methods, improve code coverage
This commit is contained in:
		
							parent
							
								
									216ab35823
								
							
						
					
					
						commit
						77cdce7393
					
				
							
								
								
									
										43
									
								
								lib/Chunk.js
								
								
								
								
							
							
						
						
									
										43
									
								
								lib/Chunk.js
								
								
								
								
							|  | @ -11,14 +11,14 @@ const { intersect } = require("./util/SetHelpers"); | |||
| const SortableSet = require("./util/SortableSet"); | ||||
| const { | ||||
| 	compareModulesByIdentifier, | ||||
| 	compareChunkGroupsByIndex | ||||
| 	compareChunkGroupsByIndex, | ||||
| 	compareModulesById | ||||
| } = require("./util/comparators"); | ||||
| const { createArrayToSetDeprecationSet } = require("./util/deprecation"); | ||||
| const { mergeRuntime } = require("./util/runtime"); | ||||
| 
 | ||||
| /** @typedef {import("webpack-sources").Source} Source */ | ||||
| /** @typedef {import("./ChunkGraph").ChunkFilterPredicate} ChunkFilterPredicate */ | ||||
| /** @typedef {import("./ChunkGraph").ChunkModuleMaps} ChunkModuleMaps */ | ||||
| /** @typedef {import("./ChunkGraph").ChunkSizeOptions} ChunkSizeOptions */ | ||||
| /** @typedef {import("./ChunkGraph").ModuleFilterPredicate} ModuleFilterPredicate */ | ||||
| /** @typedef {import("./ChunkGroup")} ChunkGroup */ | ||||
|  | @ -45,6 +45,13 @@ const ChunkFilesSet = createArrayToSetDeprecationSet("chunk.files"); | |||
|  * @property {Record<string|number, string>} name | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * @deprecated | ||||
|  * @typedef {Object} ChunkModuleMaps | ||||
|  * @property {Record<string|number, (string|number)[]>} id | ||||
|  * @property {Record<string|number, string>} hash | ||||
|  */ | ||||
| 
 | ||||
| let debugId = 1000; | ||||
| 
 | ||||
| /** | ||||
|  | @ -332,7 +339,37 @@ class Chunk { | |||
| 			"Chunk.getChunkModuleMaps", | ||||
| 			"DEP_WEBPACK_CHUNK_GET_CHUNK_MODULE_MAPS" | ||||
| 		); | ||||
| 		return chunkGraph.getChunkModuleMaps(this, filterFn); | ||||
| 		/** @type {Record<string|number, (string|number)[]>} */ | ||||
| 		const chunkModuleIdMap = Object.create(null); | ||||
| 		/** @type {Record<string|number, string>} */ | ||||
| 		const chunkModuleHashMap = Object.create(null); | ||||
| 
 | ||||
| 		for (const asyncChunk of this.getAllAsyncChunks()) { | ||||
| 			/** @type {(string|number)[]} */ | ||||
| 			let array; | ||||
| 			for (const module of chunkGraph.getOrderedChunkModulesIterable( | ||||
| 				asyncChunk, | ||||
| 				compareModulesById(chunkGraph) | ||||
| 			)) { | ||||
| 				if (filterFn(module)) { | ||||
| 					if (array === undefined) { | ||||
| 						array = []; | ||||
| 						chunkModuleIdMap[asyncChunk.id] = array; | ||||
| 					} | ||||
| 					const moduleId = chunkGraph.getModuleId(module); | ||||
| 					array.push(moduleId); | ||||
| 					chunkModuleHashMap[moduleId] = chunkGraph.getRenderedModuleHash( | ||||
| 						module, | ||||
| 						undefined | ||||
| 					); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return { | ||||
| 			id: chunkModuleIdMap, | ||||
| 			hash: chunkModuleHashMap | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -46,12 +46,6 @@ const compareModuleIterables = compareIterables(compareModulesByIdentifier); | |||
|  * @property {number=} entryChunkMultiplicator multiplicator for initial chunks | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * @typedef {Object} ChunkModuleMaps | ||||
|  * @property {Record<string|number, (string|number)[]>} id | ||||
|  * @property {Record<string|number, string>} hash | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * @typedef {Object} ModuleHashInfo | ||||
|  * @property {string} hash | ||||
|  | @ -584,48 +578,6 @@ class ChunkGraph { | |||
| 		return cgc.modules.getFromUnorderedCache(arrayFunction); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Chunk} chunk the chunk | ||||
| 	 * @param {ModuleFilterPredicate} filterFn function used to filter modules | ||||
| 	 * @param {boolean} includeAllChunks all chunks or only async chunks | ||||
| 	 * @returns {ChunkModuleMaps} module map information | ||||
| 	 */ | ||||
| 	getChunkModuleMaps(chunk, filterFn, includeAllChunks = false) { | ||||
| 		/** @type {Record<string|number, (string|number)[]>} */ | ||||
| 		const chunkModuleIdMap = Object.create(null); | ||||
| 		/** @type {Record<string|number, string>} */ | ||||
| 		const chunkModuleHashMap = Object.create(null); | ||||
| 
 | ||||
| 		for (const asyncChunk of includeAllChunks | ||||
| 			? chunk.getAllReferencedChunks() | ||||
| 			: chunk.getAllAsyncChunks()) { | ||||
| 			/** @type {(string|number)[]} */ | ||||
| 			let array; | ||||
| 			for (const module of this.getOrderedChunkModulesIterable( | ||||
| 				asyncChunk, | ||||
| 				compareModulesById(this) | ||||
| 			)) { | ||||
| 				if (filterFn(module)) { | ||||
| 					if (array === undefined) { | ||||
| 						array = []; | ||||
| 						chunkModuleIdMap[asyncChunk.id] = array; | ||||
| 					} | ||||
| 					const moduleId = this.getModuleId(module); | ||||
| 					array.push(moduleId); | ||||
| 					chunkModuleHashMap[moduleId] = this.getRenderedModuleHash( | ||||
| 						module, | ||||
| 						undefined | ||||
| 					); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return { | ||||
| 			id: chunkModuleIdMap, | ||||
| 			hash: chunkModuleHashMap | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Chunk} chunk the chunk | ||||
| 	 * @param {ModuleFilterPredicate} filterFn function used to filter modules | ||||
|  | @ -715,20 +667,6 @@ class ChunkGraph { | |||
| 		return map; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Chunk} chunk the chunk | ||||
| 	 * @param {ModuleFilterPredicate} filterFn function used to filter modules | ||||
| 	 * @returns {boolean} true, if the chunk contains at least one module matching the filter | ||||
| 	 */ | ||||
| 	hasModuleInChunk(chunk, filterFn) { | ||||
| 		for (const module of this.getChunkModulesIterable(chunk)) { | ||||
| 			if (filterFn(module)) { | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {Chunk} chunk the chunk | ||||
| 	 * @param {ModuleFilterPredicate} filterFn predicate function used to filter modules | ||||
|  |  | |||
|  | @ -1318,6 +1318,7 @@ class FileSystemInfo { | |||
| 				const cache = this._snapshotCache.get(child); | ||||
| 				if (cache !== undefined) { | ||||
| 					if (cache !== undefined) { | ||||
| 						/* istanbul ignore else */ | ||||
| 						if (typeof cache === "boolean") { | ||||
| 							if (cache === false) { | ||||
| 								invalid(); | ||||
|  |  | |||
|  | @ -815,18 +815,6 @@ class NormalModule extends Module { | |||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param {ChunkGraph} chunkGraph the chunk graph | ||||
| 	 * @param {DependencyTemplates} dependencyTemplates dependency templates | ||||
| 	 * @param {RuntimeSpec} runtime the runtime | ||||
| 	 * @returns {string} hash | ||||
| 	 */ | ||||
| 	_getHashDigest(chunkGraph, dependencyTemplates, runtime) { | ||||
| 		const hash = chunkGraph.getModuleHash(this, runtime); | ||||
| 		const dtHash = dependencyTemplates.getHash(); | ||||
| 		return `${hash}-${dtHash}`; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @returns {Set<string>} types available (do not mutate) | ||||
| 	 */ | ||||
|  |  | |||
|  | @ -163,6 +163,7 @@ class AsyncQueue { | |||
| 	 */ | ||||
| 	increaseParallelism() { | ||||
| 		this._parallelism++; | ||||
| 		/* istanbul ignore next */ | ||||
| 		if (this._willEnsureProcessing === false && this._queued.length > 0) { | ||||
| 			this._willEnsureProcessing = true; | ||||
| 			setImmediate(this._ensureProcessing); | ||||
|  |  | |||
|  | @ -2,6 +2,6 @@ import png from "../_images/file.png"; | |||
| import svg from "../_images/file.svg"; | ||||
| 
 | ||||
| it("should change filenames", () => { | ||||
| 	expect(png).toEqual("images/success-png.png"); | ||||
| 	expect(png).toEqual("images/[ext]/success-png.png"); | ||||
| 	expect(svg).toEqual("images/success-svg.svg"); | ||||
| }); | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ module.exports = { | |||
| 	output: { | ||||
| 		assetModuleFilename: ({ filename }) => { | ||||
| 			if (/.png$/.test(filename)) { | ||||
| 				return "images/success-png[ext]"; | ||||
| 				return "images/[\\ext\\]/success-png[ext]"; | ||||
| 			} | ||||
| 			if (/.svg$/.test(filename)) { | ||||
| 				return "images/success-svg[ext]"; | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ module.exports = [ | |||
| 	{ code: /DEP_WEBPACK_CHUNK_ADD_MODULE/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_CONTAINS_MODULE/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_ENTRY_MODULE/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_GET_CHUNK_MODULE_MAPS/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_GET_MODULES/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_GET_NUMBER_OF_MODULES/ }, | ||||
| 	{ code: /DEP_WEBPACK_CHUNK_HAS_ENTRY_MODULE/ }, | ||||
|  | @ -27,5 +28,6 @@ module.exports = [ | |||
| 	{ code: /DEP_WEBPACK_MODULE_PROFILE/ }, | ||||
| 	{ code: /DEP_WEBPACK_MODULE_REMOVE_CHUNK/ }, | ||||
| 	{ code: /DEP_WEBPACK_MODULE_RENDERED_HASH/ }, | ||||
| 	{ code: /DEP_WEBPACK_MODULE_SOURCE/ }, | ||||
| 	{ code: /DEP_WEBPACK_MODULE_USED_EXPORTS/ } | ||||
| ]; | ||||
|  |  | |||
|  | @ -27,8 +27,20 @@ module.exports = { | |||
| 					expect(chunk.isEmpty()).toBe(false); | ||||
| 					expect(chunk.modulesSize()).toBeTypeOf("number"); | ||||
| 					expect(chunk.size()).toBe(chunk.modulesSize() * 10 + 10000); | ||||
| 					expect(chunk.getChunkModuleMaps(m => true)).toEqual({ | ||||
| 						id: {}, | ||||
| 						hash: {} | ||||
| 					}); | ||||
| 
 | ||||
| 					const m = chunk.entryModule; | ||||
| 					expect( | ||||
| 						m | ||||
| 							.source( | ||||
| 								compilation.dependencyTemplates, | ||||
| 								compilation.runtimeTemplate | ||||
| 							) | ||||
| 							.source() | ||||
| 					).toMatch(/should compile with deprecations/); | ||||
| 					expect(m.hash).toMatch(/^[0-9a-f]{32}$/); | ||||
| 					expect(m.renderedHash).toMatch(/^[0-9a-f]{20}$/); | ||||
| 					expect(m.profile).toBe(undefined); | ||||
|  |  | |||
|  | @ -0,0 +1,3 @@ | |||
| module.exports = [ | ||||
| 	{ code: /DEP_WEBPACK_CONFIGURATION_OPTIMIZATION_NO_EMIT_ON_ERRORS/ } | ||||
| ]; | ||||
|  | @ -0,0 +1 @@ | |||
| it("should compile with deprecations", () => {}); | ||||
|  | @ -0,0 +1,6 @@ | |||
| /** @type {import("../../../../").Configuration} */ | ||||
| module.exports = { | ||||
| 	optimization: { | ||||
| 		noEmitOnErrors: true | ||||
| 	} | ||||
| }; | ||||
|  | @ -0,0 +1,3 @@ | |||
| import { a } from "./module"; | ||||
| 
 | ||||
| console.log(a); | ||||
|  | @ -0,0 +1,3 @@ | |||
| import { b } from "./module"; | ||||
| 
 | ||||
| console.log(b); | ||||
|  | @ -0,0 +1 @@ | |||
| module.exports = [{ code: /DEP_WEBPACK_MODULE_HASH/ }]; | ||||
|  | @ -0,0 +1 @@ | |||
| it("should compile fine", () => {}); | ||||
|  | @ -0,0 +1,2 @@ | |||
| export const a = 1; | ||||
| export const b = 2; | ||||
|  | @ -0,0 +1,33 @@ | |||
| /** @type {import("../../../../").Configuration} */ | ||||
| module.exports = { | ||||
| 	entry: { | ||||
| 		bundle0: "./index", | ||||
| 		a: "./a", | ||||
| 		b: "./b" | ||||
| 	}, | ||||
| 	output: { | ||||
| 		filename: "[name].js" | ||||
| 	}, | ||||
| 	optimization: { | ||||
| 		usedExports: true, | ||||
| 		concatenateModules: false | ||||
| 	}, | ||||
| 	plugins: [ | ||||
| 		compiler => { | ||||
| 			compiler.hooks.compilation.tap("Test", compilation => { | ||||
| 				compilation.hooks.afterModuleHash.tap("Test", () => { | ||||
| 					const hashes = []; | ||||
| 					expect(() => { | ||||
| 						for (const module of compilation.chunkGraph.getChunkModulesIterable( | ||||
| 							compilation.namedChunks.get("a") | ||||
| 						)) { | ||||
| 							hashes.push(module.hash); | ||||
| 						} | ||||
| 					}).toThrowError( | ||||
| 						/No unique hash info entry for unspecified runtime .+ \(existing runtimes: a, b\)\.\n.+opt-out via optimization\.usedExports: "global"/ | ||||
| 					); | ||||
| 				}); | ||||
| 			}); | ||||
| 		} | ||||
| 	] | ||||
| }; | ||||
|  | @ -14,6 +14,9 @@ module.exports = { | |||
| 			} | ||||
| 		] | ||||
| 	}, | ||||
| 	output: { | ||||
| 		webassemblyModuleFilename: "[id].[hash].wasm" | ||||
| 	}, | ||||
| 	experiments: { | ||||
| 		asyncWebAssembly: true, | ||||
| 		importAwait: true | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| /** @type {import("../../../../").Configuration} */ | ||||
| module.exports = { | ||||
| 	entry: "./index", | ||||
| 	output: { | ||||
| 		webassemblyModuleFilename: "[id].[hash:3].wasm" | ||||
| 	}, | ||||
| 	module: { | ||||
| 		rules: [ | ||||
| 			{ | ||||
|  |  | |||
|  | @ -633,11 +633,6 @@ declare class ChunkGraph { | |||
| 		chunk: Chunk, | ||||
| 		comparator: (arg0: Module, arg1: Module) => 0 | 1 | -1 | ||||
| 	): Module[]; | ||||
| 	getChunkModuleMaps( | ||||
| 		chunk: Chunk, | ||||
| 		filterFn: (m: Module) => boolean, | ||||
| 		includeAllChunks?: boolean | ||||
| 	): ChunkModuleMaps; | ||||
| 	getChunkModuleIdMap( | ||||
| 		chunk: Chunk, | ||||
| 		filterFn: (m: Module) => boolean, | ||||
|  | @ -653,7 +648,6 @@ declare class ChunkGraph { | |||
| 		chunk: Chunk, | ||||
| 		filterFn: (c: Chunk, chunkGraph: ChunkGraph) => boolean | ||||
| 	): Record<string | number, boolean>; | ||||
| 	hasModuleInChunk(chunk: Chunk, filterFn: (m: Module) => boolean): boolean; | ||||
| 	hasModuleInGraph( | ||||
| 		chunk: Chunk, | ||||
| 		filterFn: (m: Module) => boolean, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue