@module-federation/enhanced 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/dist/CHANGELOG.md +2357 -0
  2. package/dist/README.md +213 -0
  3. package/dist/rstestmigrate.md +140 -0
  4. package/dist/src/_virtual/_rolldown/runtime.js +47 -0
  5. package/dist/src/index.d.ts +22 -19
  6. package/dist/src/index.js +47 -43
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/src/lib/Constants.d.ts +25 -29
  9. package/dist/src/lib/Constants.js +136 -116
  10. package/dist/src/lib/Constants.js.map +1 -1
  11. package/dist/src/lib/container/AsyncBoundaryPlugin.d.ts +20 -16
  12. package/dist/src/lib/container/AsyncBoundaryPlugin.js +137 -196
  13. package/dist/src/lib/container/AsyncBoundaryPlugin.js.map +1 -1
  14. package/dist/src/lib/container/ContainerEntryDependency.d.ts +28 -23
  15. package/dist/src/lib/container/ContainerEntryDependency.js +39 -39
  16. package/dist/src/lib/container/ContainerEntryDependency.js.map +1 -1
  17. package/dist/src/lib/container/ContainerEntryModule.d.ts +93 -84
  18. package/dist/src/lib/container/ContainerEntryModule.js +219 -234
  19. package/dist/src/lib/container/ContainerEntryModule.js.map +1 -1
  20. package/dist/src/lib/container/ContainerEntryModuleFactory.d.ts +15 -10
  21. package/dist/src/lib/container/ContainerEntryModuleFactory.js +21 -25
  22. package/dist/src/lib/container/ContainerEntryModuleFactory.js.map +1 -1
  23. package/dist/src/lib/container/ContainerExposedDependency.d.ts +29 -24
  24. package/dist/src/lib/container/ContainerExposedDependency.js +47 -47
  25. package/dist/src/lib/container/ContainerExposedDependency.js.map +1 -1
  26. package/dist/src/lib/container/ContainerPlugin.d.ts +12 -8
  27. package/dist/src/lib/container/ContainerPlugin.js +147 -211
  28. package/dist/src/lib/container/ContainerPlugin.js.map +1 -1
  29. package/dist/src/lib/container/ContainerReferencePlugin.d.ts +16 -12
  30. package/dist/src/lib/container/ContainerReferencePlugin.js +74 -102
  31. package/dist/src/lib/container/ContainerReferencePlugin.js.map +1 -1
  32. package/dist/src/lib/container/FallbackDependency.d.ts +24 -19
  33. package/dist/src/lib/container/FallbackDependency.js +46 -44
  34. package/dist/src/lib/container/FallbackDependency.js.map +1 -1
  35. package/dist/src/lib/container/FallbackItemDependency.d.ts +13 -8
  36. package/dist/src/lib/container/FallbackItemDependency.js +24 -24
  37. package/dist/src/lib/container/FallbackItemDependency.js.map +1 -1
  38. package/dist/src/lib/container/FallbackModule.d.ts +82 -71
  39. package/dist/src/lib/container/FallbackModule.js +133 -145
  40. package/dist/src/lib/container/FallbackModule.js.map +1 -1
  41. package/dist/src/lib/container/FallbackModuleFactory.d.ts +15 -10
  42. package/dist/src/lib/container/FallbackModuleFactory.js +20 -24
  43. package/dist/src/lib/container/FallbackModuleFactory.js.map +1 -1
  44. package/dist/src/lib/container/HoistContainerReferencesPlugin.d.ts +11 -7
  45. package/dist/src/lib/container/HoistContainerReferencesPlugin.js +125 -188
  46. package/dist/src/lib/container/HoistContainerReferencesPlugin.js.map +1 -1
  47. package/dist/src/lib/container/ModuleFederationPlugin.d.ts +20 -16
  48. package/dist/src/lib/container/ModuleFederationPlugin.js +143 -180
  49. package/dist/src/lib/container/ModuleFederationPlugin.js.map +1 -1
  50. package/dist/src/lib/container/RemoteModule.d.ts +79 -74
  51. package/dist/src/lib/container/RemoteModule.js +143 -153
  52. package/dist/src/lib/container/RemoteModule.js.map +1 -1
  53. package/dist/src/lib/container/RemoteRuntimeModule.d.ts +12 -7
  54. package/dist/src/lib/container/RemoteRuntimeModule.js +86 -120
  55. package/dist/src/lib/container/RemoteRuntimeModule.js.map +1 -1
  56. package/dist/src/lib/container/RemoteToExternalDependency.d.ts +13 -8
  57. package/dist/src/lib/container/RemoteToExternalDependency.js +25 -23
  58. package/dist/src/lib/container/RemoteToExternalDependency.js.map +1 -1
  59. package/dist/src/lib/container/constant.d.ts +3 -0
  60. package/dist/src/lib/container/constant.js +11 -14
  61. package/dist/src/lib/container/constant.js.map +1 -1
  62. package/dist/src/lib/container/options.d.ts +7 -3
  63. package/dist/src/lib/container/options.js +51 -69
  64. package/dist/src/lib/container/options.js.map +1 -1
  65. package/dist/src/lib/container/runtime/EmbedFederationRuntimeModule.d.ts +14 -9
  66. package/dist/src/lib/container/runtime/EmbedFederationRuntimeModule.js +56 -64
  67. package/dist/src/lib/container/runtime/EmbedFederationRuntimeModule.js.map +1 -1
  68. package/dist/src/lib/container/runtime/EmbedFederationRuntimePlugin.d.ts +23 -19
  69. package/dist/src/lib/container/runtime/EmbedFederationRuntimePlugin.js +71 -101
  70. package/dist/src/lib/container/runtime/EmbedFederationRuntimePlugin.js.map +1 -1
  71. package/dist/src/lib/container/runtime/FederationModulesPlugin.d.ts +20 -16
  72. package/dist/src/lib/container/runtime/FederationModulesPlugin.js +55 -47
  73. package/dist/src/lib/container/runtime/FederationModulesPlugin.js.map +1 -1
  74. package/dist/src/lib/container/runtime/FederationRuntimeDependency.d.ts +9 -4
  75. package/dist/src/lib/container/runtime/FederationRuntimeDependency.js +16 -12
  76. package/dist/src/lib/container/runtime/FederationRuntimeDependency.js.map +1 -1
  77. package/dist/src/lib/container/runtime/FederationRuntimeModule.d.ts +16 -11
  78. package/dist/src/lib/container/runtime/FederationRuntimeModule.js +39 -46
  79. package/dist/src/lib/container/runtime/FederationRuntimeModule.js.map +1 -1
  80. package/dist/src/lib/container/runtime/FederationRuntimePlugin.d.ts +31 -18
  81. package/dist/src/lib/container/runtime/FederationRuntimePlugin.js +266 -345
  82. package/dist/src/lib/container/runtime/FederationRuntimePlugin.js.map +1 -1
  83. package/dist/src/lib/container/runtime/getFederationGlobal.d.ts +9 -4
  84. package/dist/src/lib/container/runtime/getFederationGlobal.js +43 -41
  85. package/dist/src/lib/container/runtime/getFederationGlobal.js.map +1 -1
  86. package/dist/src/lib/container/runtime/utils.d.ts +24 -13
  87. package/dist/src/lib/container/runtime/utils.js +83 -101
  88. package/dist/src/lib/container/runtime/utils.js.map +1 -1
  89. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.d.ts +15 -10
  90. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.js +27 -25
  91. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.js.map +1 -1
  92. package/dist/src/lib/sharing/ConsumeSharedModule.d.ts +77 -68
  93. package/dist/src/lib/sharing/ConsumeSharedModule.js +186 -214
  94. package/dist/src/lib/sharing/ConsumeSharedModule.js.map +1 -1
  95. package/dist/src/lib/sharing/ConsumeSharedPlugin.d.ts +13 -9
  96. package/dist/src/lib/sharing/ConsumeSharedPlugin.js +308 -475
  97. package/dist/src/lib/sharing/ConsumeSharedPlugin.js.map +1 -1
  98. package/dist/src/lib/sharing/ConsumeSharedRuntimeModule.d.ts +16 -11
  99. package/dist/src/lib/sharing/ConsumeSharedRuntimeModule.js +107 -125
  100. package/dist/src/lib/sharing/ConsumeSharedRuntimeModule.js.map +1 -1
  101. package/dist/src/lib/sharing/ProvideForSharedDependency.d.ts +14 -9
  102. package/dist/src/lib/sharing/ProvideForSharedDependency.js +25 -25
  103. package/dist/src/lib/sharing/ProvideForSharedDependency.js.map +1 -1
  104. package/dist/src/lib/sharing/ProvideSharedDependency.d.ts +44 -39
  105. package/dist/src/lib/sharing/ProvideSharedDependency.js +72 -76
  106. package/dist/src/lib/sharing/ProvideSharedDependency.js.map +1 -1
  107. package/dist/src/lib/sharing/ProvideSharedModule.d.ts +91 -82
  108. package/dist/src/lib/sharing/ProvideSharedModule.js +177 -184
  109. package/dist/src/lib/sharing/ProvideSharedModule.js.map +1 -1
  110. package/dist/src/lib/sharing/ProvideSharedModuleFactory.d.ts +14 -9
  111. package/dist/src/lib/sharing/ProvideSharedModuleFactory.js +19 -25
  112. package/dist/src/lib/sharing/ProvideSharedModuleFactory.js.map +1 -1
  113. package/dist/src/lib/sharing/ProvideSharedPlugin.d.ts +27 -21
  114. package/dist/src/lib/sharing/ProvideSharedPlugin.js +341 -550
  115. package/dist/src/lib/sharing/ProvideSharedPlugin.js.map +1 -1
  116. package/dist/src/lib/sharing/SharePlugin.d.ts +53 -49
  117. package/dist/src/lib/sharing/SharePlugin.js +86 -100
  118. package/dist/src/lib/sharing/SharePlugin.js.map +1 -1
  119. package/dist/src/lib/sharing/ShareRuntimeModule.d.ts +12 -7
  120. package/dist/src/lib/sharing/ShareRuntimeModule.js +81 -100
  121. package/dist/src/lib/sharing/ShareRuntimeModule.js.map +1 -1
  122. package/dist/src/lib/sharing/resolveMatchedConfigs.d.ts +11 -7
  123. package/dist/src/lib/sharing/resolveMatchedConfigs.js +58 -71
  124. package/dist/src/lib/sharing/resolveMatchedConfigs.js.map +1 -1
  125. package/dist/src/lib/sharing/tree-shaking/CollectSharedEntryPlugin.d.ts +18 -14
  126. package/dist/src/lib/sharing/tree-shaking/CollectSharedEntryPlugin.js +74 -128
  127. package/dist/src/lib/sharing/tree-shaking/CollectSharedEntryPlugin.js.map +1 -1
  128. package/dist/src/lib/sharing/tree-shaking/IndependentSharedPlugin.d.ts +39 -34
  129. package/dist/src/lib/sharing/tree-shaking/IndependentSharedPlugin.js +234 -322
  130. package/dist/src/lib/sharing/tree-shaking/IndependentSharedPlugin.js.map +1 -1
  131. package/dist/src/lib/sharing/tree-shaking/IndependentSharedRuntimeModule.d.ts +16 -11
  132. package/dist/src/lib/sharing/tree-shaking/IndependentSharedRuntimeModule.js +30 -28
  133. package/dist/src/lib/sharing/tree-shaking/IndependentSharedRuntimeModule.js.map +1 -1
  134. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.d.ts +28 -24
  135. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.js +91 -95
  136. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.js.map +1 -1
  137. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedDependency.d.ts +29 -24
  138. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedDependency.js +47 -43
  139. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedDependency.js.map +1 -1
  140. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryDependency.d.ts +20 -15
  141. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryDependency.js +33 -29
  142. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryDependency.js.map +1 -1
  143. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModule.d.ts +85 -77
  144. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModule.js +141 -153
  145. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModule.js.map +1 -1
  146. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModuleFactory.d.ts +15 -10
  147. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModuleFactory.js +20 -24
  148. package/dist/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedEntryModuleFactory.js.map +1 -1
  149. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerPlugin.d.ts +21 -16
  150. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerPlugin.js +157 -231
  151. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerPlugin.js.map +1 -1
  152. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerRuntimeModule.d.ts +14 -9
  153. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerRuntimeModule.js +26 -27
  154. package/dist/src/lib/sharing/tree-shaking/SharedUsedExportsOptimizerRuntimeModule.js.map +1 -1
  155. package/dist/src/lib/sharing/tree-shaking/TreeShakingSharedPlugin.d.ts +18 -13
  156. package/dist/src/lib/sharing/tree-shaking/TreeShakingSharedPlugin.js +41 -49
  157. package/dist/src/lib/sharing/tree-shaking/TreeShakingSharedPlugin.js.map +1 -1
  158. package/dist/src/lib/sharing/utils.d.ts +27 -24
  159. package/dist/src/lib/sharing/utils.js +224 -367
  160. package/dist/src/lib/sharing/utils.js.map +1 -1
  161. package/dist/src/lib/startup/MfStartupChunkDependenciesPlugin.d.ts +11 -7
  162. package/dist/src/lib/startup/MfStartupChunkDependenciesPlugin.js +56 -75
  163. package/dist/src/lib/startup/MfStartupChunkDependenciesPlugin.js.map +1 -1
  164. package/dist/src/lib/startup/StartupHelpers.d.ts +11 -6
  165. package/dist/src/lib/startup/StartupHelpers.js +128 -178
  166. package/dist/src/lib/startup/StartupHelpers.js.map +1 -1
  167. package/dist/src/prefetch.d.ts +3 -2
  168. package/dist/src/prefetch.js +17 -8
  169. package/dist/src/rspack.d.ts +3 -2
  170. package/dist/src/rspack.js +35 -11
  171. package/dist/src/runtime/AddRuntimeRequirementToPromiseExternalPlugin.d.ts +8 -4
  172. package/dist/src/runtime/AddRuntimeRequirementToPromiseExternalPlugin.js +19 -16
  173. package/dist/src/runtime/AddRuntimeRequirementToPromiseExternalPlugin.js.map +1 -1
  174. package/dist/src/runtime.d.ts +1 -1
  175. package/dist/src/runtime.js +11 -18
  176. package/dist/src/schemas/container/ContainerPlugin.check.d.ts +13 -5
  177. package/dist/src/schemas/container/ContainerPlugin.check.js +958 -1218
  178. package/dist/src/schemas/container/ContainerPlugin.check.js.map +1 -1
  179. package/dist/src/schemas/container/ContainerPlugin.d.ts +271 -268
  180. package/dist/src/schemas/container/ContainerPlugin.js +273 -361
  181. package/dist/src/schemas/container/ContainerPlugin.js.map +1 -1
  182. package/dist/src/schemas/container/ContainerReferencePlugin.check.d.ts +13 -5
  183. package/dist/src/schemas/container/ContainerReferencePlugin.check.js +335 -443
  184. package/dist/src/schemas/container/ContainerReferencePlugin.check.js.map +1 -1
  185. package/dist/src/schemas/container/ContainerReferencePlugin.d.ts +102 -99
  186. package/dist/src/schemas/container/ContainerReferencePlugin.js +122 -162
  187. package/dist/src/schemas/container/ContainerReferencePlugin.js.map +1 -1
  188. package/dist/src/schemas/container/ExternalsType.check.d.ts +13 -5
  189. package/dist/src/schemas/container/ExternalsType.check.js +36 -62
  190. package/dist/src/schemas/container/ExternalsType.check.js.map +1 -1
  191. package/dist/src/schemas/container/ExternalsType.d.ts +5 -2
  192. package/dist/src/schemas/container/ExternalsType.js +8 -11
  193. package/dist/src/schemas/container/ExternalsType.js.map +1 -1
  194. package/dist/src/schemas/container/ModuleFederationPlugin.check.js +3001 -4812
  195. package/dist/src/schemas/container/ModuleFederationPlugin.check.js.map +1 -1
  196. package/dist/src/schemas/container/ModuleFederationPlugin.d.ts +819 -814
  197. package/dist/src/schemas/container/ModuleFederationPlugin.js +780 -1053
  198. package/dist/src/schemas/container/ModuleFederationPlugin.js.map +1 -1
  199. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.d.ts +13 -5
  200. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.js +568 -768
  201. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.js.map +1 -1
  202. package/dist/src/schemas/sharing/ConsumeSharedPlugin.d.ts +197 -194
  203. package/dist/src/schemas/sharing/ConsumeSharedPlugin.js +212 -238
  204. package/dist/src/schemas/sharing/ConsumeSharedPlugin.js.map +1 -1
  205. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.d.ts +13 -5
  206. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.js +598 -804
  207. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.js.map +1 -1
  208. package/dist/src/schemas/sharing/ProvideSharedPlugin.d.ts +184 -181
  209. package/dist/src/schemas/sharing/ProvideSharedPlugin.js +196 -229
  210. package/dist/src/schemas/sharing/ProvideSharedPlugin.js.map +1 -1
  211. package/dist/src/schemas/sharing/ProviderSharedPlugin.check.d.ts +12 -4
  212. package/dist/src/schemas/sharing/ProviderSharedPlugin.check.js +285 -482
  213. package/dist/src/schemas/sharing/ProviderSharedPlugin.check.js.map +1 -1
  214. package/dist/src/schemas/sharing/ProviderSharedPlugin.d.ts +103 -100
  215. package/dist/src/schemas/sharing/ProviderSharedPlugin.js +104 -126
  216. package/dist/src/schemas/sharing/ProviderSharedPlugin.js.map +1 -1
  217. package/dist/src/schemas/sharing/SharePlugin.check.d.ts +13 -5
  218. package/dist/src/schemas/sharing/SharePlugin.check.js +749 -965
  219. package/dist/src/schemas/sharing/SharePlugin.check.js.map +1 -1
  220. package/dist/src/schemas/sharing/SharePlugin.d.ts +245 -242
  221. package/dist/src/schemas/sharing/SharePlugin.js +256 -293
  222. package/dist/src/schemas/sharing/SharePlugin.js.map +1 -1
  223. package/dist/src/utils.d.ts +3 -0
  224. package/dist/src/utils.js +35 -26
  225. package/dist/src/utils.js.map +1 -1
  226. package/dist/src/webpack.d.ts +2 -2
  227. package/dist/src/webpack.js +6 -40
  228. package/dist/src/wrapper/AsyncBoundaryPlugin.d.ts +9 -4
  229. package/dist/src/wrapper/AsyncBoundaryPlugin.js +12 -11
  230. package/dist/src/wrapper/AsyncBoundaryPlugin.js.map +1 -1
  231. package/dist/src/wrapper/BaseWrapperPlugin.d.ts +18 -13
  232. package/dist/src/wrapper/BaseWrapperPlugin.js +39 -39
  233. package/dist/src/wrapper/BaseWrapperPlugin.js.map +1 -1
  234. package/dist/src/wrapper/ConsumeSharedPlugin.d.ts +10 -4
  235. package/dist/src/wrapper/ConsumeSharedPlugin.js +12 -11
  236. package/dist/src/wrapper/ConsumeSharedPlugin.js.map +1 -1
  237. package/dist/src/wrapper/ContainerPlugin.d.ts +9 -4
  238. package/dist/src/wrapper/ContainerPlugin.js +12 -11
  239. package/dist/src/wrapper/ContainerPlugin.js.map +1 -1
  240. package/dist/src/wrapper/ContainerReferencePlugin.d.ts +9 -4
  241. package/dist/src/wrapper/ContainerReferencePlugin.js +12 -11
  242. package/dist/src/wrapper/ContainerReferencePlugin.js.map +1 -1
  243. package/dist/src/wrapper/FederationModulesPlugin.d.ts +18 -10
  244. package/dist/src/wrapper/FederationModulesPlugin.js +19 -19
  245. package/dist/src/wrapper/FederationModulesPlugin.js.map +1 -1
  246. package/dist/src/wrapper/FederationRuntimePlugin.d.ts +11 -6
  247. package/dist/src/wrapper/FederationRuntimePlugin.js +18 -17
  248. package/dist/src/wrapper/FederationRuntimePlugin.js.map +1 -1
  249. package/dist/src/wrapper/HoistContainerReferencesPlugin.d.ts +8 -3
  250. package/dist/src/wrapper/HoistContainerReferencesPlugin.js +12 -11
  251. package/dist/src/wrapper/HoistContainerReferencesPlugin.js.map +1 -1
  252. package/dist/src/wrapper/ModuleFederationPlugin.d.ts +12 -7
  253. package/dist/src/wrapper/ModuleFederationPlugin.js +73 -99
  254. package/dist/src/wrapper/ModuleFederationPlugin.js.map +1 -1
  255. package/dist/src/wrapper/ProvideSharedPlugin.d.ts +10 -4
  256. package/dist/src/wrapper/ProvideSharedPlugin.js +12 -11
  257. package/dist/src/wrapper/ProvideSharedPlugin.js.map +1 -1
  258. package/dist/src/wrapper/SharePlugin.d.ts +10 -4
  259. package/dist/src/wrapper/SharePlugin.js +12 -11
  260. package/dist/src/wrapper/SharePlugin.js.map +1 -1
  261. package/dist/src/wrapper/TreeShakingSharedPlugin.d.ts +9 -4
  262. package/dist/src/wrapper/TreeShakingSharedPlugin.js +12 -11
  263. package/dist/src/wrapper/TreeShakingSharedPlugin.js.map +1 -1
  264. package/package.json +21 -14
  265. package/dist/package.json +0 -110
  266. package/dist/src/declarations/plugins/container/AsyncDependenciesBlock.d.ts +0 -57
  267. package/dist/src/declarations/plugins/container/ModuleFactory.d.ts +0 -33
  268. package/dist/src/declarations/plugins/container/ObjectDeserializerContext.d.ts +0 -4
  269. package/dist/src/declarations/plugins/container/StaticExportsDependency.d.ts +0 -28
  270. package/dist/src/declarations/plugins/container/Template.d.ts +0 -198
  271. package/dist/src/declarations/plugins/container/WebpackError.d.ts +0 -33
  272. package/dist/src/declarations/plugins/sharing/ConsumeSharedModule.d.ts +0 -86
  273. package/dist/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts +0 -100
  274. package/dist/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts +0 -102
  275. package/dist/src/declarations/plugins/sharing/SharePlugin.d.ts +0 -116
  276. package/dist/src/lib/container/runtime/ChildCompilationRuntimePlugin.d.ts +0 -20
  277. package/dist/src/lib/container/runtime/ChildCompilationRuntimePlugin.js +0 -219
  278. package/dist/src/lib/container/runtime/ChildCompilationRuntimePlugin.js.map +0 -1
  279. package/dist/src/prefetch.js.map +0 -1
  280. package/dist/src/rspack.js.map +0 -1
  281. package/dist/src/runtime.js.map +0 -1
  282. package/dist/src/types/runtime.d.ts +0 -10
  283. package/dist/src/types/runtime.js +0 -3
  284. package/dist/src/types/runtime.js.map +0 -1
  285. package/dist/src/webpack.js.map +0 -1
@@ -1,556 +1,347 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
4
- */
5
1
  'use strict';
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const normalize_webpack_path_1 = require("@module-federation/sdk/normalize-webpack-path");
11
- const options_1 = require("../container/options");
12
- const ProvideForSharedDependency_1 = __importDefault(require("./ProvideForSharedDependency"));
13
- const ProvideSharedDependency_1 = __importDefault(require("./ProvideSharedDependency"));
14
- const ProvideSharedModuleFactory_1 = __importDefault(require("./ProvideSharedModuleFactory"));
15
- const FederationRuntimePlugin_1 = __importDefault(require("../container/runtime/FederationRuntimePlugin"));
16
- const utils_1 = require("../../utils");
17
- const { satisfy, parseRange } = require((0, normalize_webpack_path_1.normalizeWebpackPath)('webpack/lib/util/semver'));
18
- const utils_2 = require("./utils");
19
- const WebpackError = require((0, normalize_webpack_path_1.normalizeWebpackPath)('webpack/lib/WebpackError'));
20
- const validate = (0, utils_1.createSchemaValidation)(
21
- //eslint-disable-next-line
22
- require('../../schemas/sharing/ProvideSharedPlugin.check.js').validate, () => require('../../schemas/sharing/ProvideSharedPlugin').default, {
23
- name: 'Provide Shared Plugin',
24
- baseDataPath: 'options',
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+ const require_runtime = require('../../_virtual/_rolldown/runtime.js');
5
+ const require_lib_container_options = require('../container/options.js');
6
+ const require_utils = require('../../utils.js');
7
+ const require_lib_container_runtime_FederationRuntimePlugin = require('../container/runtime/FederationRuntimePlugin.js');
8
+ const require_lib_sharing_utils = require('./utils.js');
9
+ const require_lib_sharing_ProvideForSharedDependency = require('./ProvideForSharedDependency.js');
10
+ const require_lib_sharing_ProvideSharedDependency = require('./ProvideSharedDependency.js');
11
+ const require_lib_sharing_ProvideSharedModuleFactory = require('./ProvideSharedModuleFactory.js');
12
+ const require_schemas_sharing_ProvideSharedPlugin_check = require('../../schemas/sharing/ProvideSharedPlugin.check.js');
13
+ const require_schemas_sharing_ProvideSharedPlugin = require('../../schemas/sharing/ProvideSharedPlugin.js');
14
+ let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
15
+
16
+ //#region src/lib/sharing/ProvideSharedPlugin.ts
17
+ const { satisfy, parseRange } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/semver"));
18
+ const WebpackError = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/WebpackError"));
19
+ const validate = require_utils.createSchemaValidation((require_schemas_sharing_ProvideSharedPlugin_check.init_ProvideSharedPlugin_check(), require_runtime.__toCommonJS(require_schemas_sharing_ProvideSharedPlugin_check.ProvideSharedPlugin_check_exports)).validate, () => (require_schemas_sharing_ProvideSharedPlugin.init_ProvideSharedPlugin(), require_runtime.__toCommonJS(require_schemas_sharing_ProvideSharedPlugin.ProvideSharedPlugin_exports)).default, {
20
+ name: "Provide Shared Plugin",
21
+ baseDataPath: "options"
25
22
  });
26
23
  /**
27
- * @typedef {Object} ProvideOptions
28
- * @property {string} shareKey
29
- * @property {string | string[]} shareScope
30
- * @property {string | undefined | false} version
31
- * @property {boolean} eager
32
- * @property {string} [request] The actual request to use for importing the module
33
- * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [exclude] Options for excluding certain versions or requests
34
- * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [include] Options for including only certain versions or requests
35
- */
24
+ * @typedef {Object} ProvideOptions
25
+ * @property {string} shareKey
26
+ * @property {string | string[]} shareScope
27
+ * @property {string | undefined | false} version
28
+ * @property {boolean} eager
29
+ * @property {string} [request] The actual request to use for importing the module
30
+ * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [exclude] Options for excluding certain versions or requests
31
+ * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [include] Options for including only certain versions or requests
32
+ */
36
33
  /** @typedef {Map<string, { config: ProvideOptions, version: string | undefined | false }>} ResolvedProvideMap */
37
- class ProvideSharedPlugin {
38
- /**
39
- * @param {ProvideSharedPluginOptions} options options
40
- */
41
- constructor(options) {
42
- validate(options);
43
- this._provides = (0, options_1.parseOptions)(options.provides, (item) => {
44
- if (Array.isArray(item))
45
- throw new Error('Unexpected array of provides');
46
- const result = {
47
- shareKey: item,
48
- version: undefined,
49
- shareScope: options.shareScope || 'default',
50
- eager: false,
51
- requiredVersion: false,
52
- strictVersion: false,
53
- singleton: false,
54
- layer: undefined,
55
- request: item,
56
- exclude: undefined,
57
- include: undefined,
58
- allowNodeModulesSuffixMatch: false,
59
- treeShakingMode: undefined,
60
- };
61
- return result;
62
- }, (item, key) => {
63
- const request = item.request || key;
64
- return {
65
- shareScope: item.shareScope || options.shareScope || 'default',
66
- shareKey: item.shareKey || request,
67
- version: item.version,
68
- eager: !!item.eager,
69
- requiredVersion: item.requiredVersion,
70
- strictVersion: item.strictVersion,
71
- singleton: !!item.singleton,
72
- layer: item.layer,
73
- request,
74
- exclude: item.exclude,
75
- include: item.include,
76
- allowNodeModulesSuffixMatch: !!item.allowNodeModulesSuffixMatch,
77
- treeShakingMode: item.treeShakingMode,
78
- };
79
- });
80
- this._provides.sort(([a], [b]) => {
81
- if (a < b)
82
- return -1;
83
- if (b < a)
84
- return 1;
85
- return 0;
86
- });
87
- }
88
- /**
89
- * Apply the plugin
90
- * @param {Compiler} compiler the compiler instance
91
- * @returns {void}
92
- */
93
- apply(compiler) {
94
- new FederationRuntimePlugin_1.default().apply(compiler);
95
- process.env['FEDERATION_WEBPACK_PATH'] =
96
- process.env['FEDERATION_WEBPACK_PATH'] || (0, normalize_webpack_path_1.getWebpackPath)(compiler);
97
- const compilationData = new WeakMap();
98
- compiler.hooks.compilation.tap('ProvideSharedPlugin', (compilation, { normalModuleFactory }) => {
99
- const resolvedProvideMap = new Map();
100
- const matchProvides = new Map();
101
- const prefixMatchProvides = new Map();
102
- for (const [request, config] of this._provides) {
103
- const actualRequest = config.request || request;
104
- const lookupKey = (0, utils_2.createLookupKeyForSharing)(actualRequest, config.layer);
105
- if (/^(\/|[A-Za-z]:\\|\\\\|\.\.?(\/|$))/.test(actualRequest)) {
106
- // relative request - apply filtering if include/exclude are defined
107
- if (this.shouldProvideSharedModule(config)) {
108
- resolvedProvideMap.set(lookupKey, {
109
- config,
110
- version: config.version,
111
- resource: actualRequest,
112
- });
113
- }
114
- }
115
- else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(actualRequest)) {
116
- // absolute path - apply filtering if include/exclude are defined
117
- if (this.shouldProvideSharedModule(config)) {
118
- resolvedProvideMap.set(lookupKey, {
119
- config,
120
- version: config.version,
121
- resource: actualRequest,
122
- });
123
- }
124
- }
125
- else if (actualRequest.endsWith('/')) {
126
- prefixMatchProvides.set(lookupKey, config);
127
- }
128
- else {
129
- matchProvides.set(lookupKey, config);
130
- }
131
- }
132
- compilationData.set(compilation, resolvedProvideMap);
133
- normalModuleFactory.hooks.module.tap('ProvideSharedPlugin', (module, { resource, resourceResolveData }, resolveData) => {
134
- const moduleLayer = module.layer;
135
- const lookupKeyForResource = (0, utils_2.createLookupKeyForSharing)(resource || '', moduleLayer || undefined);
136
- if (resource && resolvedProvideMap.has(lookupKeyForResource)) {
137
- return module;
138
- }
139
- const { request: originalRequestString } = resolveData;
140
- // --- Stage 1a: Direct match with originalRequestString ---
141
- const originalRequestLookupKey = (0, utils_2.createLookupKeyForSharing)(originalRequestString, moduleLayer || undefined);
142
- const configFromOriginalDirect = matchProvides.get(originalRequestLookupKey);
143
- if (configFromOriginalDirect !== undefined &&
144
- resource &&
145
- !resolvedProvideMap.has(lookupKeyForResource)) {
146
- // Apply request filters if defined (from PR5's cleaner approach)
147
- if ((0, utils_2.testRequestFilters)(originalRequestString, configFromOriginalDirect.include?.request, configFromOriginalDirect.exclude?.request)) {
148
- this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configFromOriginalDirect, resource, resourceResolveData);
149
- resolveData.cacheable = false;
150
- }
151
- }
152
- // --- Stage 1b: Prefix match with originalRequestString ---
153
- if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
154
- for (const [prefixLookupKey, originalPrefixConfig,] of prefixMatchProvides) {
155
- const configuredPrefix = originalPrefixConfig.request || prefixLookupKey.split('?')[0];
156
- // Refined layer matching logic
157
- if (originalPrefixConfig.layer) {
158
- if (!moduleLayer) {
159
- continue; // Option is layered, request is not: skip
160
- }
161
- if (moduleLayer !== originalPrefixConfig.layer) {
162
- continue; // Both are layered but do not match: skip
163
- }
164
- }
165
- // If moduleLayer exists but config.layer does not, allow (non-layered option matches layered request)
166
- if (originalRequestString.startsWith(configuredPrefix)) {
167
- if (resolvedProvideMap.has(lookupKeyForResource))
168
- continue;
169
- const remainder = originalRequestString.slice(configuredPrefix.length);
170
- if (!(0, utils_2.testRequestFilters)(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) {
171
- continue;
172
- }
173
- const finalShareKey = originalPrefixConfig.shareKey
174
- ? originalPrefixConfig.shareKey + remainder
175
- : configuredPrefix + remainder;
176
- // Validate singleton usage when using include.request
177
- if (originalPrefixConfig.include?.request &&
178
- originalPrefixConfig.singleton) {
179
- (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'include', 'request', originalPrefixConfig.include.request, originalRequestString, resource);
180
- }
181
- // Validate singleton usage when using exclude.request
182
- if (originalPrefixConfig.exclude?.request &&
183
- originalPrefixConfig.singleton) {
184
- (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'exclude', 'request', originalPrefixConfig.exclude.request, originalRequestString, resource);
185
- }
186
- const configForSpecificModule = {
187
- ...originalPrefixConfig,
188
- shareKey: finalShareKey,
189
- request: originalRequestString,
190
- _originalPrefix: configuredPrefix, // Store the original prefix for filtering
191
- include: originalPrefixConfig.include
192
- ? { ...originalPrefixConfig.include }
193
- : undefined,
194
- exclude: originalPrefixConfig.exclude
195
- ? { ...originalPrefixConfig.exclude }
196
- : undefined,
197
- };
198
- this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configForSpecificModule, resource, resourceResolveData);
199
- resolveData.cacheable = false;
200
- break;
201
- }
202
- }
203
- }
204
- // --- Stage 2: Match using reconstructed node_modules path ---
205
- if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
206
- const modulePathAfterNodeModules = (0, utils_2.extractPathAfterNodeModules)(resource);
207
- if (modulePathAfterNodeModules) {
208
- // 2a. Direct match with reconstructed path
209
- const reconstructedLookupKey = (0, utils_2.createLookupKeyForSharing)(modulePathAfterNodeModules, moduleLayer || undefined);
210
- const configFromReconstructedDirect = matchProvides.get(reconstructedLookupKey);
211
- if (configFromReconstructedDirect !== undefined &&
212
- configFromReconstructedDirect.allowNodeModulesSuffixMatch &&
213
- !resolvedProvideMap.has(lookupKeyForResource)) {
214
- this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configFromReconstructedDirect, resource, resourceResolveData);
215
- resolveData.cacheable = false;
216
- }
217
- // 2b. Prefix match with reconstructed path
218
- if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
219
- for (const [prefixLookupKey, originalPrefixConfig,] of prefixMatchProvides) {
220
- if (!originalPrefixConfig.allowNodeModulesSuffixMatch) {
221
- continue;
222
- }
223
- const configuredPrefix = originalPrefixConfig.request ||
224
- prefixLookupKey.split('?')[0];
225
- // Refined layer matching logic for reconstructed path
226
- if (originalPrefixConfig.layer) {
227
- if (!moduleLayer) {
228
- continue; // Option is layered, request is not: skip
229
- }
230
- if (moduleLayer !== originalPrefixConfig.layer) {
231
- continue; // Both are layered but do not match: skip
232
- }
233
- }
234
- // If moduleLayer exists but config.layer does not, allow (non-layered option matches layered request)
235
- if (modulePathAfterNodeModules.startsWith(configuredPrefix)) {
236
- if (resolvedProvideMap.has(lookupKeyForResource))
237
- continue;
238
- const remainder = modulePathAfterNodeModules.slice(configuredPrefix.length);
239
- if (!(0, utils_2.testRequestFilters)(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) {
240
- continue;
241
- }
242
- const finalShareKey = originalPrefixConfig.shareKey
243
- ? originalPrefixConfig.shareKey + remainder
244
- : configuredPrefix + remainder;
245
- // Validate singleton usage when using include.request
246
- if (originalPrefixConfig.include?.request &&
247
- originalPrefixConfig.singleton) {
248
- (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'include', 'request', originalPrefixConfig.include.request, modulePathAfterNodeModules, resource);
249
- }
250
- // Validate singleton usage when using exclude.request
251
- if (originalPrefixConfig.exclude?.request &&
252
- originalPrefixConfig.singleton) {
253
- (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'exclude', 'request', originalPrefixConfig.exclude.request, modulePathAfterNodeModules, resource);
254
- }
255
- const configForSpecificModule = {
256
- ...originalPrefixConfig,
257
- shareKey: finalShareKey,
258
- request: modulePathAfterNodeModules,
259
- _originalPrefix: configuredPrefix, // Store the original prefix for filtering
260
- include: originalPrefixConfig.include
261
- ? {
262
- ...originalPrefixConfig.include,
263
- }
264
- : undefined,
265
- exclude: originalPrefixConfig.exclude
266
- ? {
267
- ...originalPrefixConfig.exclude,
268
- }
269
- : undefined,
270
- };
271
- this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configForSpecificModule, resource, resourceResolveData);
272
- resolveData.cacheable = false;
273
- break;
274
- }
275
- }
276
- }
277
- }
278
- }
279
- return module;
280
- });
281
- });
282
- compiler.hooks.finishMake.tapPromise('ProvideSharedPlugin', async (compilation) => {
283
- const resolvedProvideMap = compilationData.get(compilation);
284
- if (!resolvedProvideMap)
285
- return;
286
- // Filter out modules that don't pass include/exclude conditions
287
- const filteredEntries = Array.from(resolvedProvideMap).filter(([resourceKey, { config, version, resource }]) => {
288
- // Apply the same filtering logic as in provideSharedModule
289
- const actualResource = resource || resourceKey;
290
- // Check include conditions
291
- if (config.include) {
292
- let versionIncludeFailed = false;
293
- if (typeof config.include.version === 'string') {
294
- if (typeof version === 'string' && version) {
295
- if (!satisfy(parseRange(config.include.version), version)) {
296
- versionIncludeFailed = true;
297
- }
298
- }
299
- else {
300
- versionIncludeFailed = true;
301
- }
302
- }
303
- let requestIncludeFailed = false;
304
- if (config.include.request) {
305
- const includeRequestValue = config.include.request;
306
- // For prefix matches, we need to check the remainder after the prefix
307
- let testString = actualResource;
308
- // If this is a prefix match (indicated by _originalPrefix being present)
309
- // then we should test against the remainder
310
- if (config._originalPrefix &&
311
- actualResource.startsWith(config._originalPrefix)) {
312
- const remainder = actualResource.slice(config._originalPrefix.length);
313
- testString = remainder;
314
- }
315
- const requestActuallyMatches = includeRequestValue instanceof RegExp
316
- ? includeRequestValue.test(testString)
317
- : testString === includeRequestValue;
318
- if (!requestActuallyMatches) {
319
- requestIncludeFailed = true;
320
- }
321
- }
322
- // Skip if any specified include condition failed
323
- const shouldSkipVersion = typeof config.include.version === 'string' &&
324
- versionIncludeFailed;
325
- const shouldSkipRequest = config.include.request && requestIncludeFailed;
326
- if (shouldSkipVersion || shouldSkipRequest) {
327
- return false;
328
- }
329
- }
330
- // Check exclude conditions
331
- if (config.exclude) {
332
- let versionExcludeMatches = false;
333
- if (typeof config.exclude.version === 'string' &&
334
- typeof version === 'string' &&
335
- version) {
336
- if (satisfy(parseRange(config.exclude.version), version)) {
337
- versionExcludeMatches = true;
338
- }
339
- }
340
- let requestExcludeMatches = false;
341
- if (config.exclude.request) {
342
- const excludeRequestValue = config.exclude.request;
343
- // For prefix matches, we need to check the remainder after the prefix
344
- let testString = actualResource;
345
- // If this is a prefix match (indicated by _originalPrefix being present)
346
- // then we should test against the remainder
347
- if (config._originalPrefix &&
348
- actualResource.startsWith(config._originalPrefix)) {
349
- const remainder = actualResource.slice(config._originalPrefix.length);
350
- testString = remainder;
351
- }
352
- const requestActuallyMatchesExclude = excludeRequestValue instanceof RegExp
353
- ? excludeRequestValue.test(testString)
354
- : testString === excludeRequestValue;
355
- if (requestActuallyMatchesExclude) {
356
- requestExcludeMatches = true;
357
- }
358
- }
359
- // Skip if any specified exclude condition matched
360
- if (versionExcludeMatches || requestExcludeMatches) {
361
- return false;
362
- }
363
- }
364
- return true;
365
- });
366
- await Promise.all(filteredEntries.map(([resourceKey, { config, version, resource }]) => {
367
- return new Promise((resolve, reject) => {
368
- compilation.addInclude(compiler.context, new ProvideSharedDependency_1.default(config.shareScope, config.shareKey, version || false, resource || resourceKey, config.eager, config.requiredVersion, config.strictVersion, config.singleton, config.layer, config.treeShakingMode), {
369
- name: undefined,
370
- }, (err) => {
371
- if (err) {
372
- return reject(err);
373
- }
374
- resolve();
375
- });
376
- });
377
- }));
378
- });
379
- compiler.hooks.compilation.tap('ProvideSharedPlugin', (compilation, { normalModuleFactory }) => {
380
- compilation.dependencyFactories.set(ProvideForSharedDependency_1.default, normalModuleFactory);
381
- compilation.dependencyFactories.set(ProvideSharedDependency_1.default, new ProvideSharedModuleFactory_1.default());
382
- });
383
- }
384
- provideSharedModule(compilation, resolvedProvideMap, key, config, resource, resourceResolveData) {
385
- let version = config.version;
386
- if (version === undefined) {
387
- let details = '';
388
- if (!resourceResolveData) {
389
- details = `No resolve data provided from resolver.`;
390
- }
391
- else {
392
- const descriptionFileData = resourceResolveData.descriptionFileData;
393
- if (!descriptionFileData) {
394
- details =
395
- 'No description file (usually package.json) found. Add description file with name and version, or manually specify version in shared config.';
396
- }
397
- else if (!descriptionFileData.version) {
398
- // Try to get version from parent package.json dependencies (PR7 enhanced feature)
399
- if (resourceResolveData.descriptionFilePath) {
400
- try {
401
- // fs is now imported at the top of the file
402
- const path = require('path');
403
- const fs = require('fs');
404
- const parentPkgPath = path.resolve(path.dirname(resourceResolveData.descriptionFilePath), '..', 'package.json');
405
- if (fs.existsSync(parentPkgPath)) {
406
- const parentPkg = JSON.parse(fs.readFileSync(parentPkgPath, 'utf8'));
407
- const parentVersion = (0, utils_2.getRequiredVersionFromDescriptionFile)(parentPkg, key);
408
- if (parentVersion) {
409
- version = parentVersion;
410
- details = `Using version from parent package.json dependencies: ${version}`;
411
- }
412
- else {
413
- details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
414
- }
415
- }
416
- else {
417
- details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
418
- }
419
- }
420
- catch (e) {
421
- details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
422
- }
423
- }
424
- else {
425
- details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
426
- }
427
- }
428
- else {
429
- version = descriptionFileData.version;
430
- }
431
- }
432
- if (!version) {
433
- const error = new WebpackError(`No version specified and unable to automatically determine one. ${details}`);
434
- error.file = `shared module ${key} -> ${resource}`;
435
- compilation.warnings.push(error);
436
- }
437
- }
438
- // Check include/exclude conditions
439
- if (config.include) {
440
- let versionIncludeFailed = false;
441
- if (typeof config.include.version === 'string') {
442
- if (typeof version === 'string' && version) {
443
- if (!satisfy(parseRange(config.include.version), version)) {
444
- versionIncludeFailed = true;
445
- }
446
- }
447
- else {
448
- versionIncludeFailed = true;
449
- }
450
- }
451
- let requestIncludeFailed = false;
452
- if (config.include.request) {
453
- const includeRequestValue = config.include.request;
454
- const requestActuallyMatches = includeRequestValue instanceof RegExp
455
- ? includeRequestValue.test(resource)
456
- : resource === includeRequestValue;
457
- if (!requestActuallyMatches) {
458
- requestIncludeFailed = true;
459
- }
460
- }
461
- // Skip if any specified include condition failed
462
- const shouldSkipVersion = typeof config.include.version === 'string' && versionIncludeFailed;
463
- const shouldSkipRequest = config.include.request && requestIncludeFailed;
464
- if (shouldSkipVersion || shouldSkipRequest) {
465
- // Generate warning for better debugging (combining both approaches)
466
- if (shouldSkipVersion) {
467
- const error = new WebpackError(`Provided module "${key}" version "${version}" does not satisfy include filter "${config.include.version}"`);
468
- error.file = `shared module ${key} -> ${resource}`;
469
- compilation.warnings.push(error);
470
- }
471
- return;
472
- }
473
- // Validate singleton usage when using include.version
474
- if (config.include.version && config.singleton) {
475
- (0, utils_2.addSingletonFilterWarning)(compilation, config.shareKey || key, 'include', 'version', config.include.version, key, // moduleRequest
476
- resource);
477
- }
478
- }
479
- if (config.exclude) {
480
- let versionExcludeMatches = false;
481
- if (typeof config.exclude.version === 'string' &&
482
- typeof version === 'string' &&
483
- version) {
484
- if (satisfy(parseRange(config.exclude.version), version)) {
485
- versionExcludeMatches = true;
486
- }
487
- }
488
- let requestExcludeMatches = false;
489
- if (config.exclude.request) {
490
- const excludeRequestValue = config.exclude.request;
491
- const requestActuallyMatchesExclude = excludeRequestValue instanceof RegExp
492
- ? excludeRequestValue.test(resource)
493
- : resource === excludeRequestValue;
494
- if (requestActuallyMatchesExclude) {
495
- requestExcludeMatches = true;
496
- }
497
- }
498
- // Skip if any specified exclude condition matched
499
- if (versionExcludeMatches || requestExcludeMatches) {
500
- // Generate warning for better debugging (combining both approaches)
501
- if (versionExcludeMatches) {
502
- const error = new WebpackError(`Provided module "${key}" version "${version}" matches exclude filter "${config.exclude.version}"`);
503
- error.file = `shared module ${key} -> ${resource}`;
504
- compilation.warnings.push(error);
505
- }
506
- return;
507
- }
508
- // Validate singleton usage when using exclude.version
509
- if (config.exclude.version && config.singleton) {
510
- (0, utils_2.addSingletonFilterWarning)(compilation, config.shareKey || key, 'exclude', 'version', config.exclude.version, key, // moduleRequest
511
- resource);
512
- }
513
- }
514
- const lookupKey = (0, utils_2.createLookupKeyForSharing)(resource, config.layer);
515
- resolvedProvideMap.set(lookupKey, {
516
- config,
517
- version,
518
- resource,
519
- layer: config.layer,
520
- });
521
- }
522
- shouldProvideSharedModule(config) {
523
- // For static (relative/absolute path) modules, we can only check version filters
524
- // if the version is explicitly provided in the config
525
- if (!config.version) {
526
- // If no version is provided and there are version filters,
527
- // we'll defer to runtime filtering
528
- return true;
529
- }
530
- const version = config.version;
531
- if (typeof version !== 'string') {
532
- return true;
533
- }
534
- // Check include version filter
535
- if (config.include?.version) {
536
- const includeVersion = config.include.version;
537
- if (typeof includeVersion === 'string') {
538
- if (!satisfy(parseRange(includeVersion), version)) {
539
- return false; // Skip providing this module
540
- }
541
- }
542
- }
543
- // Check exclude version filter
544
- if (config.exclude?.version) {
545
- const excludeVersion = config.exclude.version;
546
- if (typeof excludeVersion === 'string') {
547
- if (satisfy(parseRange(excludeVersion), version)) {
548
- return false; // Skip providing this module
549
- }
550
- }
551
- }
552
- return true; // All filters pass
553
- }
554
- }
34
+ var ProvideSharedPlugin = class {
35
+ /**
36
+ * @param {ProvideSharedPluginOptions} options options
37
+ */
38
+ constructor(options) {
39
+ validate(options);
40
+ this._provides = require_lib_container_options.parseOptions(options.provides, (item) => {
41
+ if (Array.isArray(item)) throw new Error("Unexpected array of provides");
42
+ return {
43
+ shareKey: item,
44
+ version: void 0,
45
+ shareScope: options.shareScope || "default",
46
+ eager: false,
47
+ requiredVersion: false,
48
+ strictVersion: false,
49
+ singleton: false,
50
+ layer: void 0,
51
+ request: item,
52
+ exclude: void 0,
53
+ include: void 0,
54
+ allowNodeModulesSuffixMatch: false,
55
+ treeShakingMode: void 0
56
+ };
57
+ }, (item, key) => {
58
+ const request = item.request || key;
59
+ return {
60
+ shareScope: item.shareScope || options.shareScope || "default",
61
+ shareKey: item.shareKey || request,
62
+ version: item.version,
63
+ eager: !!item.eager,
64
+ requiredVersion: item.requiredVersion,
65
+ strictVersion: item.strictVersion,
66
+ singleton: !!item.singleton,
67
+ layer: item.layer,
68
+ request,
69
+ exclude: item.exclude,
70
+ include: item.include,
71
+ allowNodeModulesSuffixMatch: !!item.allowNodeModulesSuffixMatch,
72
+ treeShakingMode: item.treeShakingMode
73
+ };
74
+ });
75
+ this._provides.sort(([a], [b]) => {
76
+ if (a < b) return -1;
77
+ if (b < a) return 1;
78
+ return 0;
79
+ });
80
+ }
81
+ /**
82
+ * Apply the plugin
83
+ * @param {Compiler} compiler the compiler instance
84
+ * @returns {void}
85
+ */
86
+ apply(compiler) {
87
+ new require_lib_container_runtime_FederationRuntimePlugin.default().apply(compiler);
88
+ process.env["FEDERATION_WEBPACK_PATH"] = process.env["FEDERATION_WEBPACK_PATH"] || (0, _module_federation_sdk_normalize_webpack_path.getWebpackPath)(compiler);
89
+ const compilationData = /* @__PURE__ */ new WeakMap();
90
+ compiler.hooks.compilation.tap("ProvideSharedPlugin", (compilation, { normalModuleFactory }) => {
91
+ const resolvedProvideMap = /* @__PURE__ */ new Map();
92
+ const matchProvides = /* @__PURE__ */ new Map();
93
+ const prefixMatchProvides = /* @__PURE__ */ new Map();
94
+ for (const [request, config] of this._provides) {
95
+ const actualRequest = config.request || request;
96
+ const lookupKey = require_lib_sharing_utils.createLookupKeyForSharing(actualRequest, config.layer);
97
+ if (/^(\/|[A-Za-z]:\\|\\\\|\.\.?(\/|$))/.test(actualRequest)) {
98
+ if (this.shouldProvideSharedModule(config)) resolvedProvideMap.set(lookupKey, {
99
+ config,
100
+ version: config.version,
101
+ resource: actualRequest
102
+ });
103
+ } else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(actualRequest)) {
104
+ if (this.shouldProvideSharedModule(config)) resolvedProvideMap.set(lookupKey, {
105
+ config,
106
+ version: config.version,
107
+ resource: actualRequest
108
+ });
109
+ } else if (actualRequest.endsWith("/")) prefixMatchProvides.set(lookupKey, config);
110
+ else matchProvides.set(lookupKey, config);
111
+ }
112
+ compilationData.set(compilation, resolvedProvideMap);
113
+ normalModuleFactory.hooks.module.tap("ProvideSharedPlugin", (module, { resource, resourceResolveData }, resolveData) => {
114
+ const moduleLayer = module.layer;
115
+ const lookupKeyForResource = require_lib_sharing_utils.createLookupKeyForSharing(resource || "", moduleLayer || void 0);
116
+ if (resource && resolvedProvideMap.has(lookupKeyForResource)) return module;
117
+ const { request: originalRequestString } = resolveData;
118
+ const originalRequestLookupKey = require_lib_sharing_utils.createLookupKeyForSharing(originalRequestString, moduleLayer || void 0);
119
+ const configFromOriginalDirect = matchProvides.get(originalRequestLookupKey);
120
+ if (configFromOriginalDirect !== void 0 && resource && !resolvedProvideMap.has(lookupKeyForResource)) {
121
+ if (require_lib_sharing_utils.testRequestFilters(originalRequestString, configFromOriginalDirect.include?.request, configFromOriginalDirect.exclude?.request)) {
122
+ this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configFromOriginalDirect, resource, resourceResolveData);
123
+ resolveData.cacheable = false;
124
+ }
125
+ }
126
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) for (const [prefixLookupKey, originalPrefixConfig] of prefixMatchProvides) {
127
+ const configuredPrefix = originalPrefixConfig.request || prefixLookupKey.split("?")[0];
128
+ if (originalPrefixConfig.layer) {
129
+ if (!moduleLayer) continue;
130
+ if (moduleLayer !== originalPrefixConfig.layer) continue;
131
+ }
132
+ if (originalRequestString.startsWith(configuredPrefix)) {
133
+ if (resolvedProvideMap.has(lookupKeyForResource)) continue;
134
+ const remainder = originalRequestString.slice(configuredPrefix.length);
135
+ if (!require_lib_sharing_utils.testRequestFilters(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) continue;
136
+ const finalShareKey = originalPrefixConfig.shareKey ? originalPrefixConfig.shareKey + remainder : configuredPrefix + remainder;
137
+ if (originalPrefixConfig.include?.request && originalPrefixConfig.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, finalShareKey, "include", "request", originalPrefixConfig.include.request, originalRequestString, resource);
138
+ if (originalPrefixConfig.exclude?.request && originalPrefixConfig.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, finalShareKey, "exclude", "request", originalPrefixConfig.exclude.request, originalRequestString, resource);
139
+ const configForSpecificModule = {
140
+ ...originalPrefixConfig,
141
+ shareKey: finalShareKey,
142
+ request: originalRequestString,
143
+ _originalPrefix: configuredPrefix,
144
+ include: originalPrefixConfig.include ? { ...originalPrefixConfig.include } : void 0,
145
+ exclude: originalPrefixConfig.exclude ? { ...originalPrefixConfig.exclude } : void 0
146
+ };
147
+ this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configForSpecificModule, resource, resourceResolveData);
148
+ resolveData.cacheable = false;
149
+ break;
150
+ }
151
+ }
152
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
153
+ const modulePathAfterNodeModules = require_lib_sharing_utils.extractPathAfterNodeModules(resource);
154
+ if (modulePathAfterNodeModules) {
155
+ const reconstructedLookupKey = require_lib_sharing_utils.createLookupKeyForSharing(modulePathAfterNodeModules, moduleLayer || void 0);
156
+ const configFromReconstructedDirect = matchProvides.get(reconstructedLookupKey);
157
+ if (configFromReconstructedDirect !== void 0 && configFromReconstructedDirect.allowNodeModulesSuffixMatch && !resolvedProvideMap.has(lookupKeyForResource)) {
158
+ this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configFromReconstructedDirect, resource, resourceResolveData);
159
+ resolveData.cacheable = false;
160
+ }
161
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) for (const [prefixLookupKey, originalPrefixConfig] of prefixMatchProvides) {
162
+ if (!originalPrefixConfig.allowNodeModulesSuffixMatch) continue;
163
+ const configuredPrefix = originalPrefixConfig.request || prefixLookupKey.split("?")[0];
164
+ if (originalPrefixConfig.layer) {
165
+ if (!moduleLayer) continue;
166
+ if (moduleLayer !== originalPrefixConfig.layer) continue;
167
+ }
168
+ if (modulePathAfterNodeModules.startsWith(configuredPrefix)) {
169
+ if (resolvedProvideMap.has(lookupKeyForResource)) continue;
170
+ const remainder = modulePathAfterNodeModules.slice(configuredPrefix.length);
171
+ if (!require_lib_sharing_utils.testRequestFilters(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) continue;
172
+ const finalShareKey = originalPrefixConfig.shareKey ? originalPrefixConfig.shareKey + remainder : configuredPrefix + remainder;
173
+ if (originalPrefixConfig.include?.request && originalPrefixConfig.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, finalShareKey, "include", "request", originalPrefixConfig.include.request, modulePathAfterNodeModules, resource);
174
+ if (originalPrefixConfig.exclude?.request && originalPrefixConfig.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, finalShareKey, "exclude", "request", originalPrefixConfig.exclude.request, modulePathAfterNodeModules, resource);
175
+ const configForSpecificModule = {
176
+ ...originalPrefixConfig,
177
+ shareKey: finalShareKey,
178
+ request: modulePathAfterNodeModules,
179
+ _originalPrefix: configuredPrefix,
180
+ include: originalPrefixConfig.include ? { ...originalPrefixConfig.include } : void 0,
181
+ exclude: originalPrefixConfig.exclude ? { ...originalPrefixConfig.exclude } : void 0
182
+ };
183
+ this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configForSpecificModule, resource, resourceResolveData);
184
+ resolveData.cacheable = false;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ return module;
191
+ });
192
+ });
193
+ compiler.hooks.finishMake.tapPromise("ProvideSharedPlugin", async (compilation) => {
194
+ const resolvedProvideMap = compilationData.get(compilation);
195
+ if (!resolvedProvideMap) return;
196
+ const filteredEntries = Array.from(resolvedProvideMap).filter(([resourceKey, { config, version, resource }]) => {
197
+ const actualResource = resource || resourceKey;
198
+ if (config.include) {
199
+ let versionIncludeFailed = false;
200
+ if (typeof config.include.version === "string") if (typeof version === "string" && version) {
201
+ if (!satisfy(parseRange(config.include.version), version)) versionIncludeFailed = true;
202
+ } else versionIncludeFailed = true;
203
+ let requestIncludeFailed = false;
204
+ if (config.include.request) {
205
+ const includeRequestValue = config.include.request;
206
+ let testString = actualResource;
207
+ if (config._originalPrefix && actualResource.startsWith(config._originalPrefix)) testString = actualResource.slice(config._originalPrefix.length);
208
+ if (!(includeRequestValue instanceof RegExp ? includeRequestValue.test(testString) : testString === includeRequestValue)) requestIncludeFailed = true;
209
+ }
210
+ const shouldSkipVersion = typeof config.include.version === "string" && versionIncludeFailed;
211
+ const shouldSkipRequest = config.include.request && requestIncludeFailed;
212
+ if (shouldSkipVersion || shouldSkipRequest) return false;
213
+ }
214
+ if (config.exclude) {
215
+ let versionExcludeMatches = false;
216
+ if (typeof config.exclude.version === "string" && typeof version === "string" && version) {
217
+ if (satisfy(parseRange(config.exclude.version), version)) versionExcludeMatches = true;
218
+ }
219
+ let requestExcludeMatches = false;
220
+ if (config.exclude.request) {
221
+ const excludeRequestValue = config.exclude.request;
222
+ let testString = actualResource;
223
+ if (config._originalPrefix && actualResource.startsWith(config._originalPrefix)) testString = actualResource.slice(config._originalPrefix.length);
224
+ if (excludeRequestValue instanceof RegExp ? excludeRequestValue.test(testString) : testString === excludeRequestValue) requestExcludeMatches = true;
225
+ }
226
+ if (versionExcludeMatches || requestExcludeMatches) return false;
227
+ }
228
+ return true;
229
+ });
230
+ await Promise.all(filteredEntries.map(([resourceKey, { config, version, resource }]) => {
231
+ return new Promise((resolve, reject) => {
232
+ compilation.addInclude(compiler.context, new require_lib_sharing_ProvideSharedDependency.default(config.shareScope, config.shareKey, version || false, resource || resourceKey, config.eager, config.requiredVersion, config.strictVersion, config.singleton, config.layer, config.treeShakingMode), { name: void 0 }, (err) => {
233
+ if (err) return reject(err);
234
+ resolve();
235
+ });
236
+ });
237
+ }));
238
+ });
239
+ compiler.hooks.compilation.tap("ProvideSharedPlugin", (compilation, { normalModuleFactory }) => {
240
+ compilation.dependencyFactories.set(require_lib_sharing_ProvideForSharedDependency.default, normalModuleFactory);
241
+ compilation.dependencyFactories.set(require_lib_sharing_ProvideSharedDependency.default, new require_lib_sharing_ProvideSharedModuleFactory.default());
242
+ });
243
+ }
244
+ provideSharedModule(compilation, resolvedProvideMap, key, config, resource, resourceResolveData) {
245
+ let version = config.version;
246
+ if (version === void 0) {
247
+ let details = "";
248
+ if (!resourceResolveData) details = `No resolve data provided from resolver.`;
249
+ else {
250
+ const descriptionFileData = resourceResolveData.descriptionFileData;
251
+ if (!descriptionFileData) details = "No description file (usually package.json) found. Add description file with name and version, or manually specify version in shared config.";
252
+ else if (!descriptionFileData.version) if (resourceResolveData.descriptionFilePath) try {
253
+ const path = require("path");
254
+ const fs = require("fs");
255
+ const parentPkgPath = path.resolve(path.dirname(resourceResolveData.descriptionFilePath), "..", "package.json");
256
+ if (fs.existsSync(parentPkgPath)) {
257
+ const parentVersion = require_lib_sharing_utils.getRequiredVersionFromDescriptionFile(JSON.parse(fs.readFileSync(parentPkgPath, "utf8")), key);
258
+ if (parentVersion) {
259
+ version = parentVersion;
260
+ details = `Using version from parent package.json dependencies: ${version}`;
261
+ } else details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
262
+ } else details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
263
+ } catch (e) {
264
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
265
+ }
266
+ else details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
267
+ else version = descriptionFileData.version;
268
+ }
269
+ if (!version) {
270
+ const error = new WebpackError(`No version specified and unable to automatically determine one. ${details}`);
271
+ error.file = `shared module ${key} -> ${resource}`;
272
+ compilation.warnings.push(error);
273
+ }
274
+ }
275
+ if (config.include) {
276
+ let versionIncludeFailed = false;
277
+ if (typeof config.include.version === "string") if (typeof version === "string" && version) {
278
+ if (!satisfy(parseRange(config.include.version), version)) versionIncludeFailed = true;
279
+ } else versionIncludeFailed = true;
280
+ let requestIncludeFailed = false;
281
+ if (config.include.request) {
282
+ const includeRequestValue = config.include.request;
283
+ if (!(includeRequestValue instanceof RegExp ? includeRequestValue.test(resource) : resource === includeRequestValue)) requestIncludeFailed = true;
284
+ }
285
+ const shouldSkipVersion = typeof config.include.version === "string" && versionIncludeFailed;
286
+ const shouldSkipRequest = config.include.request && requestIncludeFailed;
287
+ if (shouldSkipVersion || shouldSkipRequest) {
288
+ if (shouldSkipVersion) {
289
+ const error = new WebpackError(`Provided module "${key}" version "${version}" does not satisfy include filter "${config.include.version}"`);
290
+ error.file = `shared module ${key} -> ${resource}`;
291
+ compilation.warnings.push(error);
292
+ }
293
+ return;
294
+ }
295
+ if (config.include.version && config.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, config.shareKey || key, "include", "version", config.include.version, key, resource);
296
+ }
297
+ if (config.exclude) {
298
+ let versionExcludeMatches = false;
299
+ if (typeof config.exclude.version === "string" && typeof version === "string" && version) {
300
+ if (satisfy(parseRange(config.exclude.version), version)) versionExcludeMatches = true;
301
+ }
302
+ let requestExcludeMatches = false;
303
+ if (config.exclude.request) {
304
+ const excludeRequestValue = config.exclude.request;
305
+ if (excludeRequestValue instanceof RegExp ? excludeRequestValue.test(resource) : resource === excludeRequestValue) requestExcludeMatches = true;
306
+ }
307
+ if (versionExcludeMatches || requestExcludeMatches) {
308
+ if (versionExcludeMatches) {
309
+ const error = new WebpackError(`Provided module "${key}" version "${version}" matches exclude filter "${config.exclude.version}"`);
310
+ error.file = `shared module ${key} -> ${resource}`;
311
+ compilation.warnings.push(error);
312
+ }
313
+ return;
314
+ }
315
+ if (config.exclude.version && config.singleton) require_lib_sharing_utils.addSingletonFilterWarning(compilation, config.shareKey || key, "exclude", "version", config.exclude.version, key, resource);
316
+ }
317
+ const lookupKey = require_lib_sharing_utils.createLookupKeyForSharing(resource, config.layer);
318
+ resolvedProvideMap.set(lookupKey, {
319
+ config,
320
+ version,
321
+ resource,
322
+ layer: config.layer
323
+ });
324
+ }
325
+ shouldProvideSharedModule(config) {
326
+ if (!config.version) return true;
327
+ const version = config.version;
328
+ if (typeof version !== "string") return true;
329
+ if (config.include?.version) {
330
+ const includeVersion = config.include.version;
331
+ if (typeof includeVersion === "string") {
332
+ if (!satisfy(parseRange(includeVersion), version)) return false;
333
+ }
334
+ }
335
+ if (config.exclude?.version) {
336
+ const excludeVersion = config.exclude.version;
337
+ if (typeof excludeVersion === "string") {
338
+ if (satisfy(parseRange(excludeVersion), version)) return false;
339
+ }
340
+ }
341
+ return true;
342
+ }
343
+ };
344
+
345
+ //#endregion
555
346
  exports.default = ProvideSharedPlugin;
556
347
  //# sourceMappingURL=ProvideSharedPlugin.js.map