11import Chunk from 'webpack/lib/Chunk'
2+ import ChunkGraph from 'webpack/lib/ChunkGraph'
23import Module from 'webpack/lib/Module'
4+ import ModuleGraph from 'webpack/lib/ModuleGraph'
35
46type ModuleMap = {
57 [ key : string ] : Module
@@ -12,6 +14,7 @@ const isBuilt = (module: Module): boolean => module.built
1214const getId = ( module : any ) : number | string => module . id
1315
1416const affectedModules = (
17+ chunkGraph : ChunkGraph ,
1518 map : ModuleMap ,
1619 usageMap : ModuleUsageMap ,
1720 affected : ModuleMap ,
@@ -23,13 +26,13 @@ const affectedModules = (
2326 }
2427 // module is identified as affected by this function call
2528 const module = map [ moduleId ]
26- affected [ module . id ] = module // eslint-disable-line no-param-reassign
29+ affected [ moduleId ] = module // eslint-disable-line no-param-reassign
2730
2831 // next we need to mark all usages aka parents also as affected
29- const usages = usageMap [ module . id ]
32+ const usages = usageMap [ moduleId ]
3033 if ( typeof usages !== 'undefined' ) {
3134 const ids = Object . keys ( usages )
32- ids . forEach ( ( id : string ) => affectedModules ( map , usageMap , affected , id ) )
35+ ids . forEach ( ( id : string ) => affectedModules ( chunkGraph , map , usageMap , affected , id ) )
3336 }
3437}
3538
@@ -39,9 +42,9 @@ const affectedModules = (
3942 * [moduleId]: Module
4043 * }
4144 */
42- const buildModuleMap = ( modules : Set < Module > ) : ModuleMap => {
45+ const buildModuleMap = ( chunkGraph : ChunkGraph , modules : Set < Module > ) : ModuleMap => {
4346 const moduleMap = Array . from ( modules ) . reduce (
44- ( memo , module : Module ) => ( { ...memo , [ module . id ] : module } ) ,
47+ ( memo , module : Module ) => ( { ...memo , [ chunkGraph . getModuleId ( module ) ] : module } ) ,
4548 { }
4649 )
4750 return moduleMap
@@ -62,7 +65,9 @@ const buildModuleMap = (modules: Set<Module>): ModuleMap => {
6265 */
6366const buildModuleUsageMap = (
6467 chunks : Set < Chunk > ,
65- modules : Set < Module >
68+ chunkGraph : ChunkGraph ,
69+ modules : Set < Module > ,
70+ moduleGraph : ModuleGraph
6671) : ModuleUsageMap => {
6772 // build a map of all modules with their parent
6873 // {
@@ -74,15 +79,17 @@ const buildModuleUsageMap = (
7479 const moduleUsageMap : ModuleUsageMap = Array . from ( modules ) . reduce (
7580 ( memo , module : Module ) => {
7681 module . dependencies . forEach ( dependency => {
77- const dependentModule = dependency . module
82+ const dependentModule = moduleGraph . getModule ( dependency )
7883
7984 if ( ! dependentModule ) {
8085 return
8186 }
82- if ( typeof memo [ dependentModule . id ] === 'undefined' ) {
83- memo [ dependentModule . id ] = { } // eslint-disable-line no-param-reassign
87+ const dependentModuleId = chunkGraph . getModuleId ( dependentModule )
88+ if ( typeof memo [ dependentModuleId ] === 'undefined' ) {
89+ memo [ dependentModuleId ] = { } // eslint-disable-line no-param-reassign
8490 }
85- memo [ dependentModule . id ] [ module . id ] = module // eslint-disable-line no-param-reassign
91+ const moduleId = chunkGraph . getModuleId ( module )
92+ memo [ dependentModuleId ] [ moduleId ] = module // eslint-disable-line no-param-reassign
8693 } )
8794 return memo
8895 } ,
@@ -101,8 +108,9 @@ const buildModuleUsageMap = (
101108 return memo
102109 } , { } )
103110 Array . from ( modules ) . reduce ( ( memo , module : Module ) => {
104- module . getChunks ( ) . forEach ( ( chunk : Chunk ) => {
105- memo [ chunk . id ] [ module . id ] = module // eslint-disable-line no-param-reassign
111+ chunkGraph . getModuleChunksIterable ( module ) . forEach ( ( chunk : Chunk ) => {
112+ const moduleId = chunkGraph . getModuleId ( module )
113+ memo [ chunk . id ] [ moduleId ] = module // eslint-disable-line no-param-reassign
106114 } )
107115 return memo
108116 } , chunkModuleMap )
@@ -117,10 +125,12 @@ const buildModuleUsageMap = (
117125 // and mark all modules of this chunk as a direct dependency of the original module
118126 Object . values ( chunkModuleMap [ chunkId ] as ModuleMap ) . forEach (
119127 ( childModule : any ) => {
120- if ( typeof moduleUsageMap [ childModule . id ] === 'undefined' ) {
121- moduleUsageMap [ childModule . id ] = { }
128+ const childModuleId = chunkGraph . getModuleId ( childModule )
129+ if ( typeof moduleUsageMap [ childModuleId ] === 'undefined' ) {
130+ moduleUsageMap [ childModuleId ] = { }
122131 }
123- moduleUsageMap [ childModule . id ] [ module . id ] = module
132+ const moduleId = chunkGraph . getModuleId ( module )
133+ moduleUsageMap [ childModuleId ] [ moduleId ] = module
124134 }
125135 )
126136 } )
@@ -141,16 +151,19 @@ const buildModuleUsageMap = (
141151 */
142152export default function getAffectedModuleIds (
143153 chunks : Set < Chunk > ,
144- modules : Set < Module >
154+ chunkGraph : ChunkGraph ,
155+ modules : Set < Module > ,
156+ moduleGraph : ModuleGraph
145157) : Array < number | string > {
146- const moduleMap : ModuleMap = buildModuleMap ( modules )
147- const moduleUsageMap : ModuleUsageMap = buildModuleUsageMap ( chunks , modules )
158+ const moduleMap : ModuleMap = buildModuleMap ( chunkGraph , modules )
159+ const moduleUsageMap : ModuleUsageMap = buildModuleUsageMap ( chunks , chunkGraph , modules , moduleGraph )
148160
149161 const builtModules = Array . from ( modules ) . filter ( isBuilt )
150162 const affectedMap : ModuleMap = { }
163+ const moduleId : string = chunkGraph . getModuleId ( module )
151164 builtModules . forEach ( ( module : Module ) =>
152- affectedModules ( moduleMap , moduleUsageMap , affectedMap , module . id )
165+ affectedModules ( chunkGraph , moduleMap , moduleUsageMap , affectedMap , moduleId )
153166 )
154167
155- return Object . values ( affectedMap ) . map ( getId )
168+ return Object . values ( affectedMap ) . map ( chunkGraph . getModuleId )
156169}
0 commit comments