* Process runtime requirements. * @param {object} options options * @param {ChunkGraph=} options.chunkGraph the chunk graph * @param {Iterable<Module>=} options.modules modules * @param {Iterable<Chunk>=} options.chunks chunks * @param {CodeGenerationResults=} options.codeGenerationResults
({
chunkGraph = this.chunkGraph,
modules = this.modules,
chunks = this.chunks,
codeGenerationResults = /** @type {CodeGenerationResults} */ (
this.codeGenerationResults
),
chunkGraphEntries = this._getChunkGraphEntries()
} = {})
| 4179 | * @returns {void} |
| 4180 | */ |
| 4181 | processRuntimeRequirements({ |
| 4182 | chunkGraph = this.chunkGraph, |
| 4183 | modules = this.modules, |
| 4184 | chunks = this.chunks, |
| 4185 | codeGenerationResults = /** @type {CodeGenerationResults} */ ( |
| 4186 | this.codeGenerationResults |
| 4187 | ), |
| 4188 | chunkGraphEntries = this._getChunkGraphEntries() |
| 4189 | } = {}) { |
| 4190 | const context = { chunkGraph, codeGenerationResults }; |
| 4191 | const { moduleMemCaches2 } = this; |
| 4192 | this.logger.time("runtime requirements.modules"); |
| 4193 | const additionalModuleRuntimeRequirements = |
| 4194 | this.hooks.additionalModuleRuntimeRequirements; |
| 4195 | const runtimeRequirementInModule = this.hooks.runtimeRequirementInModule; |
| 4196 | for (const module of modules) { |
| 4197 | if (chunkGraph.getNumberOfModuleChunks(module) > 0) { |
| 4198 | const memCache = moduleMemCaches2 && moduleMemCaches2.get(module); |
| 4199 | for (const runtime of chunkGraph.getModuleRuntimes(module)) { |
| 4200 | if (memCache) { |
| 4201 | const cached = memCache.get( |
| 4202 | `moduleRuntimeRequirements-${getRuntimeKey(runtime)}` |
| 4203 | ); |
| 4204 | if (cached !== undefined) { |
| 4205 | if (cached !== null) { |
| 4206 | chunkGraph.addModuleRuntimeRequirements( |
| 4207 | module, |
| 4208 | runtime, |
| 4209 | /** @type {RuntimeRequirements} */ |
| 4210 | (cached), |
| 4211 | false |
| 4212 | ); |
| 4213 | } |
| 4214 | continue; |
| 4215 | } |
| 4216 | } |
| 4217 | /** @type {RuntimeRequirements} */ |
| 4218 | let set; |
| 4219 | const runtimeRequirements = |
| 4220 | codeGenerationResults.getRuntimeRequirements(module, runtime); |
| 4221 | if (runtimeRequirements && runtimeRequirements.size > 0) { |
| 4222 | set = new Set(runtimeRequirements); |
| 4223 | } else if (additionalModuleRuntimeRequirements.isUsed()) { |
| 4224 | set = new Set(); |
| 4225 | } else { |
| 4226 | if (memCache) { |
| 4227 | memCache.set( |
| 4228 | `moduleRuntimeRequirements-${getRuntimeKey(runtime)}`, |
| 4229 | null |
| 4230 | ); |
| 4231 | } |
| 4232 | continue; |
| 4233 | } |
| 4234 | additionalModuleRuntimeRequirements.call(module, set, context); |
| 4235 | |
| 4236 | for (const r of set) { |
| 4237 | const hook = runtimeRequirementInModule.get(r); |
| 4238 | if (hook !== undefined) hook.call(module, set, context); |
no test coverage detected