@@ -10,6 +10,7 @@ import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-p
1010import type { RuntimeSpec } from 'webpack/lib/util/runtime' ;
1111import type ExportsInfo from 'webpack/lib/ExportsInfo' ;
1212import ContainerEntryModule from './ContainerEntryModule' ;
13+ import { moduleFederationPlugin } from '@module-federation/sdk' ;
1314
1415const { NormalModule, AsyncDependenciesBlock } = require (
1516 normalizeWebpackPath ( 'webpack' ) ,
@@ -29,15 +30,18 @@ export class HoistContainerReferences implements WebpackPluginInstance {
2930 private readonly entryFilePath ?: string ;
3031 private readonly bundlerRuntimeDep ?: string ;
3132 private readonly explanation : string ;
33+ private readonly experiments : moduleFederationPlugin . ModuleFederationPluginOptions [ 'experiments' ] ;
3234
3335 constructor (
3436 name ?: string ,
3537 entryFilePath ?: string ,
3638 bundlerRuntimeDep ?: string ,
39+ experiments ?: moduleFederationPlugin . ModuleFederationPluginOptions [ 'experiments' ] ,
3740 ) {
3841 this . containerName = name || 'no known chunk name' ;
3942 this . entryFilePath = entryFilePath ;
4043 this . bundlerRuntimeDep = bundlerRuntimeDep ;
44+ this . experiments = experiments ;
4145 this . explanation =
4246 'Bundler runtime path module is required for proper functioning' ;
4347 }
@@ -92,7 +96,7 @@ export class HoistContainerReferences implements WebpackPluginInstance {
9296 module instanceof NormalModule &&
9397 module . resource === this . bundlerRuntimeDep
9498 ) {
95- const allRefs = this . getAllReferencedModules (
99+ const allRefs = getAllReferencedModules (
96100 compilation ,
97101 module ,
98102 'initial' ,
@@ -119,40 +123,6 @@ export class HoistContainerReferences implements WebpackPluginInstance {
119123 ) ;
120124 }
121125
122- // Helper method to collect all referenced modules recursively
123- private getAllReferencedModules (
124- compilation : Compilation ,
125- module : Module ,
126- type ?: 'all' | 'initial' ,
127- ) : Set < Module > {
128- const collectedModules = new Set < Module > ( [ module ] ) ;
129- const stack = [ module ] ;
130-
131- while ( stack . length > 0 ) {
132- const currentModule = stack . pop ( ) ;
133- if ( ! currentModule ) continue ;
134- const mgm = compilation . moduleGraph . _getModuleGraphModule ( currentModule ) ;
135- if ( mgm && mgm . outgoingConnections ) {
136- for ( const connection of mgm . outgoingConnections ) {
137- if ( type === 'initial' ) {
138- const parentBlock = compilation . moduleGraph . getParentBlock (
139- connection . dependency ,
140- ) ;
141- if ( parentBlock instanceof AsyncDependenciesBlock ) {
142- continue ;
143- }
144- }
145- if ( connection . module && ! collectedModules . has ( connection . module ) ) {
146- collectedModules . add ( connection . module ) ;
147- stack . push ( connection . module ) ;
148- }
149- }
150- }
151- }
152-
153- return collectedModules ;
154- }
155-
156126 // Helper method to find a specific module in a chunk
157127 private findModule (
158128 compilation : Compilation ,
@@ -226,7 +196,7 @@ export class HoistContainerReferences implements WebpackPluginInstance {
226196 return ;
227197 }
228198
229- const allReferencedModules = this . getAllReferencedModules (
199+ const allReferencedModules = getAllReferencedModules (
230200 compilation ,
231201 runtimeModule ,
232202 'initial' ,
@@ -291,4 +261,38 @@ export class HoistContainerReferences implements WebpackPluginInstance {
291261 }
292262}
293263
264+ // Helper method to collect all referenced modules recursively
265+ export function getAllReferencedModules (
266+ compilation : Compilation ,
267+ module : Module ,
268+ type ?: 'all' | 'initial' ,
269+ ) : Set < Module > {
270+ const collectedModules = new Set < Module > ( [ module ] ) ;
271+ const stack = [ module ] ;
272+
273+ while ( stack . length > 0 ) {
274+ const currentModule = stack . pop ( ) ;
275+ if ( ! currentModule ) continue ;
276+ const mgm = compilation . moduleGraph . _getModuleGraphModule ( currentModule ) ;
277+ if ( mgm && mgm . outgoingConnections ) {
278+ for ( const connection of mgm . outgoingConnections ) {
279+ if ( type === 'initial' ) {
280+ const parentBlock = compilation . moduleGraph . getParentBlock (
281+ connection . dependency ,
282+ ) ;
283+ if ( parentBlock instanceof AsyncDependenciesBlock ) {
284+ continue ;
285+ }
286+ }
287+ if ( connection . module && ! collectedModules . has ( connection . module ) ) {
288+ collectedModules . add ( connection . module ) ;
289+ stack . push ( connection . module ) ;
290+ }
291+ }
292+ }
293+ }
294+
295+ return collectedModules ;
296+ }
297+
294298export default HoistContainerReferences ;
0 commit comments