* Compute affected modules. * @private * @param {Set<Module>} modules modules
(modules)
| 2835 | * @param {Set<Module>} modules modules |
| 2836 | */ |
| 2837 | _computeAffectedModules(modules) { |
| 2838 | const moduleMemCacheCache = this.compiler.moduleMemCaches; |
| 2839 | if (!moduleMemCacheCache) return; |
| 2840 | if (!this.moduleMemCaches) { |
| 2841 | this.moduleMemCaches = new Map(); |
| 2842 | this.moduleGraph.setModuleMemCaches(this.moduleMemCaches); |
| 2843 | } |
| 2844 | const { moduleGraph, moduleMemCaches } = this; |
| 2845 | /** @type {Set<Module>} */ |
| 2846 | const affectedModules = new Set(); |
| 2847 | /** @type {Set<Module>} */ |
| 2848 | const infectedModules = new Set(); |
| 2849 | let statNew = 0; |
| 2850 | let statChanged = 0; |
| 2851 | let statUnchanged = 0; |
| 2852 | let statReferencesChanged = 0; |
| 2853 | let statWithoutBuild = 0; |
| 2854 | |
| 2855 | /** |
| 2856 | * Compute references. |
| 2857 | * @param {Module} module module |
| 2858 | * @returns {WeakReferences | undefined} references |
| 2859 | */ |
| 2860 | const computeReferences = (module) => { |
| 2861 | /** @type {WeakReferences | undefined} */ |
| 2862 | let references; |
| 2863 | for (const connection of moduleGraph.getOutgoingConnections(module)) { |
| 2864 | const d = connection.dependency; |
| 2865 | const m = connection.module; |
| 2866 | if (!d || !m || unsafeCacheDependencies.has(d)) continue; |
| 2867 | if (references === undefined) references = new WeakMap(); |
| 2868 | references.set(d, m); |
| 2869 | } |
| 2870 | return references; |
| 2871 | }; |
| 2872 | |
| 2873 | /** |
| 2874 | * Compares references. |
| 2875 | * @param {Module} module the module |
| 2876 | * @param {WeakReferences | undefined} references references |
| 2877 | * @returns {boolean} true, when the references differ |
| 2878 | */ |
| 2879 | const compareReferences = (module, references) => { |
| 2880 | if (references === undefined) return true; |
| 2881 | for (const connection of moduleGraph.getOutgoingConnections(module)) { |
| 2882 | const d = connection.dependency; |
| 2883 | if (!d) continue; |
| 2884 | const entry = references.get(d); |
| 2885 | if (entry === undefined) continue; |
| 2886 | if (entry !== connection.module) return false; |
| 2887 | } |
| 2888 | return true; |
| 2889 | }; |
| 2890 | |
| 2891 | const modulesWithoutCache = new Set(modules); |
| 2892 | for (const [module, cachedMemCache] of moduleMemCacheCache) { |
| 2893 | if (modulesWithoutCache.has(module)) { |
| 2894 | const buildInfo = module.buildInfo; |
no test coverage detected