| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| "use strict"; |
| |
| const sortByIndex = (a, b) => { |
| return a.index - b.index; |
| }; |
| |
| const sortByIndex2 = (a, b) => { |
| return a.index2 - b.index2; |
| }; |
| |
| class ChunkModuleIdRangePlugin { |
| constructor(options) { |
| this.options = options; |
| } |
| |
| apply(compiler) { |
| const options = this.options; |
| compiler.hooks.compilation.tap("ChunkModuleIdRangePlugin", compilation => { |
| compilation.hooks.moduleIds.tap("ChunkModuleIdRangePlugin", modules => { |
| const chunk = compilation.chunks.find( |
| chunk => chunk.name === options.name |
| ); |
| if (!chunk) { |
| throw new Error( |
| `ChunkModuleIdRangePlugin: Chunk with name '${options.name}"' was not found` |
| ); |
| } |
| |
| let chunkModules; |
| if (options.order) { |
| chunkModules = Array.from(chunk.modulesIterable); |
| switch (options.order) { |
| case "index": |
| chunkModules.sort(sortByIndex); |
| break; |
| case "index2": |
| chunkModules.sort(sortByIndex2); |
| break; |
| default: |
| throw new Error( |
| "ChunkModuleIdRangePlugin: unexpected value of order" |
| ); |
| } |
| } else { |
| chunkModules = modules.filter(m => { |
| return m.chunksIterable.has(chunk); |
| }); |
| } |
| |
| let currentId = options.start || 0; |
| for (let i = 0; i < chunkModules.length; i++) { |
| const m = chunkModules[i]; |
| if (m.id === null) { |
| m.id = currentId++; |
| } |
| if (options.end && currentId > options.end) break; |
| } |
| }); |
| }); |
| } |
| } |
| module.exports = ChunkModuleIdRangePlugin; |