| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const GraphHelpers = require("../GraphHelpers");class EnsureChunkConditionsPlugin {	apply(compiler) {		compiler.hooks.compilation.tap(			"EnsureChunkConditionsPlugin",			compilation => {				const handler = chunks => {					let changed = false;					for (const module of compilation.modules) {						if (!module.chunkCondition) continue;						const sourceChunks = new Set();						const chunkGroups = new Set();						for (const chunk of module.chunksIterable) {							if (!module.chunkCondition(chunk)) {								sourceChunks.add(chunk);								for (const group of chunk.groupsIterable) {									chunkGroups.add(group);								}							}						}						if (sourceChunks.size === 0) continue;						const targetChunks = new Set();						chunkGroupLoop: for (const chunkGroup of chunkGroups) {							// Can module be placed in a chunk of this group?							for (const chunk of chunkGroup.chunks) {								if (module.chunkCondition(chunk)) {									targetChunks.add(chunk);									continue chunkGroupLoop;								}							}							// We reached the entrypoint: fail							if (chunkGroup.isInitial()) {								throw new Error(									"Cannot fullfil chunk condition of " + module.identifier()								);							}							// Try placing in all parents							for (const group of chunkGroup.parentsIterable) {								chunkGroups.add(group);							}						}						for (const sourceChunk of sourceChunks) {							GraphHelpers.disconnectChunkAndModule(sourceChunk, module);						}						for (const targetChunk of targetChunks) {							GraphHelpers.connectChunkAndModule(targetChunk, module);						}					}					if (changed) return true;				};				compilation.hooks.optimizeChunksBasic.tap(					"EnsureChunkConditionsPlugin",					handler				);				compilation.hooks.optimizeExtractedChunksBasic.tap(					"EnsureChunkConditionsPlugin",					handler				);			}		);	}}module.exports = EnsureChunkConditionsPlugin;
 |