| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const { find } = require("../util/SetHelpers");const {	compareModulesByPreOrderIndexOrIdentifier,	compareModulesByPostOrderIndexOrIdentifier} = require("../util/comparators");/** @typedef {import("../Compiler")} Compiler *//** * @typedef {object} ChunkModuleIdRangePluginOptions * @property {string} name the chunk name * @property {("index" | "index2" | "preOrderIndex" | "postOrderIndex")=} order order * @property {number=} start start id * @property {number=} end end id */class ChunkModuleIdRangePlugin {	/**	 * @param {ChunkModuleIdRangePluginOptions} options options object	 */	constructor(options) {		this.options = options;	}	/**	 * Apply the plugin	 * @param {Compiler} compiler the compiler instance	 * @returns {void}	 */	apply(compiler) {		const options = this.options;		compiler.hooks.compilation.tap("ChunkModuleIdRangePlugin", compilation => {			const moduleGraph = compilation.moduleGraph;			compilation.hooks.moduleIds.tap("ChunkModuleIdRangePlugin", modules => {				const chunkGraph = compilation.chunkGraph;				const chunk = find(					compilation.chunks,					chunk => chunk.name === options.name				);				if (!chunk) {					throw new Error(						`ChunkModuleIdRangePlugin: Chunk with name '${options.name}"' was not found`					);				}				let chunkModules;				if (options.order) {					let cmpFn;					switch (options.order) {						case "index":						case "preOrderIndex":							cmpFn = compareModulesByPreOrderIndexOrIdentifier(moduleGraph);							break;						case "index2":						case "postOrderIndex":							cmpFn = compareModulesByPostOrderIndexOrIdentifier(moduleGraph);							break;						default:							throw new Error(								"ChunkModuleIdRangePlugin: unexpected value of order"							);					}					chunkModules = chunkGraph.getOrderedChunkModules(chunk, cmpFn);				} else {					chunkModules = Array.from(modules)						.filter(m => {							return chunkGraph.isModuleInChunk(m, chunk);						})						.sort(compareModulesByPreOrderIndexOrIdentifier(moduleGraph));				}				let currentId = options.start || 0;				for (let i = 0; i < chunkModules.length; i++) {					const m = chunkModules[i];					if (m.needId && chunkGraph.getModuleId(m) === null) {						chunkGraph.setModuleId(m, currentId++);					}					if (options.end && currentId > options.end) break;				}			});		});	}}module.exports = ChunkModuleIdRangePlugin;
 |