( logger, compilation, inputEntrypointsAndModules, chunkGroupInfoMap, blockConnections, blocksWithNestedBlocks, allCreatedChunkGroups, maskByChunk )
| 292 | * @param {MaskByChunk} maskByChunk module content mask by chunk |
| 293 | */ |
| 294 | const visitModules = ( |
| 295 | logger, |
| 296 | compilation, |
| 297 | inputEntrypointsAndModules, |
| 298 | chunkGroupInfoMap, |
| 299 | blockConnections, |
| 300 | blocksWithNestedBlocks, |
| 301 | allCreatedChunkGroups, |
| 302 | maskByChunk |
| 303 | ) => { |
| 304 | const { moduleGraph, chunkGraph, moduleMemCaches } = compilation; |
| 305 | |
| 306 | /** @type {Map<RuntimeSpec, BlockModulesMap>} */ |
| 307 | const blockModulesRuntimeMap = new Map(); |
| 308 | |
| 309 | class="cm">// map containing the first extraction per root module, |
| 310 | class="cm">// other runtimes derive their result from it |
| 311 | /** @type {Map<Module, BlockModulesMap>} */ |
| 312 | const firstBlockModulesMapByModule = new Map(); |
| 313 | |
| 314 | /** @type {Map<Module, number>} */ |
| 315 | const ordinalByModule = new Map(); |
| 316 | |
| 317 | /** |
| 318 | * Gets module ordinal. |
| 319 | * @param {Module} module The module to look up |
| 320 | * @returns {number} The ordinal of the module in masks |
| 321 | */ |
| 322 | const getModuleOrdinal = (module) => { |
| 323 | let ordinal = ordinalByModule.get(module); |
| 324 | if (ordinal === undefined) { |
| 325 | ordinal = ordinalByModule.size; |
| 326 | ordinalByModule.set(module, ordinal); |
| 327 | } |
| 328 | return ordinal; |
| 329 | }; |
| 330 | |
| 331 | for (const chunk of compilation.chunks) { |
| 332 | let mask = ZERO_BIGINT; |
| 333 | for (const m of chunkGraph.getChunkModulesIterable(chunk)) { |
| 334 | mask |= ONE_BIGINT << BigInt(getModuleOrdinal(m)); |
| 335 | } |
| 336 | maskByChunk.set(chunk, mask); |
| 337 | } |
| 338 | |
| 339 | /** |
| 340 | * Gets block modules. |
| 341 | * @param {DependenciesBlock} block block |
| 342 | * @param {RuntimeSpec} runtime runtime |
| 343 | * @returns {BlockModulesInFlattenTuples | undefined} block modules in flatten tuples |
| 344 | */ |
| 345 | const getBlockModules = (block, runtime) => { |
| 346 | let blockModulesMap = blockModulesRuntimeMap.get(runtime); |
| 347 | if (blockModulesMap === undefined) { |
| 348 | /** @type {BlockModulesMap} */ |
| 349 | blockModulesMap = new Map(); |
| 350 | blockModulesRuntimeMap.set(runtime, blockModulesMap); |
| 351 | } |
no test coverage detected