(module, moduleGraph, runtime, blockModulesMap)
| 113 | * @param {BlockModulesMap} blockModulesMap block modules map |
| 114 | */ |
| 115 | const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => { |
| 116 | /** @type {DependenciesBlock | undefined} */ |
| 117 | let blockCache; |
| 118 | /** @type {BlockModulesInTuples | undefined} */ |
| 119 | let modules; |
| 120 | |
| 121 | /** @type {BlockModulesInTuples[]} */ |
| 122 | const arrays = []; |
| 123 | |
| 124 | /** @type {DependenciesBlock[]} */ |
| 125 | const queue = [module]; |
| 126 | while (queue.length > 0) { |
| 127 | const block = /** @type {DependenciesBlock} */ (queue.pop()); |
| 128 | /** @type {Module[]} */ |
| 129 | const arr = []; |
| 130 | arrays.push(arr); |
| 131 | blockModulesMap.set(block, arr); |
| 132 | for (const b of block.blocks) { |
| 133 | queue.push(b); |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | for (const connection of moduleGraph.getOutgoingConnections(module)) { |
| 138 | const d = connection.dependency; |
| 139 | // We skip connections without dependency |
| 140 | if (!d) continue; |
| 141 | const m = connection.module; |
| 142 | // We skip connections without Module pointer |
| 143 | if (!m) continue; |
| 144 | // We skip weak connections |
| 145 | if (connection.weak) continue; |
| 146 | |
| 147 | const block = moduleGraph.getParentBlock(d); |
| 148 | let index = moduleGraph.getParentBlockIndex(d); |
| 149 | |
| 150 | // deprecated fallback |
| 151 | if (index < 0) { |
| 152 | index = /** @type {DependenciesBlock} */ (block).dependencies.indexOf(d); |
| 153 | } |
| 154 | |
| 155 | if (blockCache !== block) { |
| 156 | modules = |
| 157 | /** @type {BlockModulesInTuples} */ |
| 158 | ( |
| 159 | blockModulesMap.get( |
| 160 | (blockCache = /** @type {DependenciesBlock} */ (block)) |
| 161 | ) |
| 162 | ); |
| 163 | } |
| 164 | |
| 165 | const i = index * 3; |
| 166 | /** @type {BlockModulesInTuples} */ |
| 167 | (modules)[i] = m; |
| 168 | /** @type {BlockModulesInTuples} */ |
| 169 | (modules)[i + 1] = connection.getActiveState(runtime); |
| 170 | /** @type {BlockModulesInTuples} */ |
| 171 | (modules)[i + 2] = connection; |
| 172 | } |
no test coverage detected