webpack 5.59.0 → 5.94.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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -17,35 +17,45 @@ const {
17
17
 
18
18
  /** @typedef {import("webpack-sources").Source} Source */
19
19
  /** @typedef {import("../Chunk")} Chunk */
20
+ /** @typedef {import("../Chunk").ChunkId} ChunkId */
21
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
22
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
23
+ /** @typedef {import("../Compilation")} Compilation */
20
24
  /** @typedef {import("../Module")} Module */
25
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
21
26
  /** @typedef {import("./ConsumeSharedModule")} ConsumeSharedModule */
22
27
 
23
28
  class ConsumeSharedRuntimeModule extends RuntimeModule {
29
+ /**
30
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
31
+ */
24
32
  constructor(runtimeRequirements) {
25
33
  super("consumes", RuntimeModule.STAGE_ATTACH);
26
34
  this._runtimeRequirements = runtimeRequirements;
27
35
  }
28
36
 
29
37
  /**
30
- * @returns {string} runtime code
38
+ * @returns {string | null} runtime code
31
39
  */
32
40
  generate() {
33
- const { compilation, chunkGraph } = this;
41
+ const compilation = /** @type {Compilation} */ (this.compilation);
42
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
34
43
  const { runtimeTemplate, codeGenerationResults } = compilation;
44
+ /** @type {Record<ChunkId, (string | number)[]>} */
35
45
  const chunkToModuleMapping = {};
36
46
  /** @type {Map<string | number, Source>} */
37
47
  const moduleIdToSourceMapping = new Map();
48
+ /** @type {(string | number)[]} */
38
49
  const initialConsumes = [];
39
50
  /**
40
- *
41
51
  * @param {Iterable<Module>} modules modules
42
52
  * @param {Chunk} chunk the chunk
43
53
  * @param {(string | number)[]} list list of ids
44
54
  */
45
55
  const addModules = (modules, chunk, list) => {
46
56
  for (const m of modules) {
47
- const module = /** @type {ConsumeSharedModule} */ (m);
48
- const id = chunkGraph.getModuleId(module);
57
+ const module = m;
58
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
49
59
  list.push(id);
50
60
  moduleIdToSourceMapping.set(
51
61
  id,
@@ -57,15 +67,21 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
57
67
  );
58
68
  }
59
69
  };
60
- for (const chunk of this.chunk.getAllAsyncChunks()) {
70
+ for (const chunk of /** @type {Chunk} */ (this.chunk).getAllAsyncChunks()) {
61
71
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
62
72
  chunk,
63
73
  "consume-shared"
64
74
  );
65
75
  if (!modules) continue;
66
- addModules(modules, chunk, (chunkToModuleMapping[chunk.id] = []));
76
+ addModules(
77
+ modules,
78
+ chunk,
79
+ (chunkToModuleMapping[/** @type {ChunkId} */ (chunk.id)] = [])
80
+ );
67
81
  }
68
- for (const chunk of this.chunk.getAllInitialChunks()) {
82
+ for (const chunk of /** @type {Chunk} */ (
83
+ this.chunk
84
+ ).getAllInitialChunks()) {
69
85
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
70
86
  chunk,
71
87
  "consume-shared"
@@ -79,57 +95,39 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
79
95
  versionLtRuntimeCode(runtimeTemplate),
80
96
  rangeToStringRuntimeCode(runtimeTemplate),
81
97
  satisfyRuntimeCode(runtimeTemplate),
82
- `var ensureExistence = ${runtimeTemplate.basicFunction("scopeName, key", [
83
- `var scope = ${RuntimeGlobals.shareScopeMap}[scopeName];`,
84
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) throw new Error("Shared module " + key + " doesn't exist in shared scope " + scopeName);`,
85
- "return scope;"
98
+ `var exists = ${runtimeTemplate.basicFunction("scope, key", [
99
+ `return scope && ${RuntimeGlobals.hasOwnProperty}(scope, key);`
100
+ ])}`,
101
+ `var get = ${runtimeTemplate.basicFunction("entry", [
102
+ "entry.loaded = 1;",
103
+ "return entry.get()"
86
104
  ])};`,
87
- `var findVersion = ${runtimeTemplate.basicFunction("scope, key", [
88
- "var versions = scope[key];",
89
- `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
90
- "a, b",
91
- ["return !a || versionLt(a, b) ? b : a;"]
92
- )}, 0);`,
93
- "return key && versions[key]"
105
+ `var eagerOnly = ${runtimeTemplate.basicFunction("versions", [
106
+ `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
107
+ "filtered, version",
108
+ Template.indent([
109
+ "if (versions[version].eager) {",
110
+ Template.indent(["filtered[version] = versions[version];"]),
111
+ "}",
112
+ "return filtered;"
113
+ ])
114
+ )}, {});`
94
115
  ])};`,
95
- `var findSingletonVersionKey = ${runtimeTemplate.basicFunction(
96
- "scope, key",
116
+ `var findLatestVersion = ${runtimeTemplate.basicFunction(
117
+ "scope, key, eager",
97
118
  [
98
- "var versions = scope[key];",
99
- `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
119
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
120
+ `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
100
121
  "a, b",
101
- ["return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;"]
102
- )}, 0);`
103
- ]
104
- )};`,
105
- `var getInvalidSingletonVersionMessage = ${runtimeTemplate.basicFunction(
106
- "key, version, requiredVersion",
107
- [
108
- `return "Unsatisfied version " + version + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"`
109
- ]
110
- )};`,
111
- `var getSingletonVersion = ${runtimeTemplate.basicFunction(
112
- "scope, scopeName, key, requiredVersion",
113
- [
114
- "var version = findSingletonVersionKey(scope, key);",
115
- "if (!satisfy(requiredVersion, version)) " +
116
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(key, version, requiredVersion));',
117
- "return get(scope[key][version]);"
118
- ]
119
- )};`,
120
- `var getStrictSingletonVersion = ${runtimeTemplate.basicFunction(
121
- "scope, scopeName, key, requiredVersion",
122
- [
123
- "var version = findSingletonVersionKey(scope, key);",
124
- "if (!satisfy(requiredVersion, version)) " +
125
- "throw new Error(getInvalidSingletonVersionMessage(key, version, requiredVersion));",
126
- "return get(scope[key][version]);"
122
+ ["return !a || versionLt(a, b) ? b : a;"]
123
+ )}, 0);`,
124
+ "return key && versions[key];"
127
125
  ]
128
126
  )};`,
129
- `var findValidVersion = ${runtimeTemplate.basicFunction(
130
- "scope, key, requiredVersion",
127
+ `var findSatisfyingVersion = ${runtimeTemplate.basicFunction(
128
+ "scope, key, requiredVersion, eager",
131
129
  [
132
- "var versions = scope[key];",
130
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
133
131
  `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
134
132
  "a, b",
135
133
  [
@@ -140,115 +138,127 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
140
138
  "return key && versions[key]"
141
139
  ]
142
140
  )};`,
143
- `var getInvalidVersionMessage = ${runtimeTemplate.basicFunction(
144
- "scope, scopeName, key, requiredVersion",
141
+ `var findSingletonVersionKey = ${runtimeTemplate.basicFunction(
142
+ "scope, key, eager",
145
143
  [
146
- "var versions = scope[key];",
147
- 'return "No satisfying version (" + rangeToString(requiredVersion) + ") of shared module " + key + " found in shared scope " + scopeName + ".\\n" +',
148
- `\t"Available versions: " + Object.keys(versions).map(${runtimeTemplate.basicFunction(
149
- "key",
150
- ['return key + " from " + versions[key].from;']
151
- )}).join(", ");`
144
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
145
+ `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
146
+ "a, b",
147
+ ["return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;"]
148
+ )}, 0);`
152
149
  ]
153
150
  )};`,
154
- `var getValidVersion = ${runtimeTemplate.basicFunction(
155
- "scope, scopeName, key, requiredVersion",
151
+ `var getInvalidSingletonVersionMessage = ${runtimeTemplate.basicFunction(
152
+ "scope, key, version, requiredVersion",
156
153
  [
157
- "var entry = findValidVersion(scope, key, requiredVersion);",
158
- "if(entry) return get(entry);",
159
- "throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
154
+ 'return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"'
160
155
  ]
161
156
  )};`,
162
- `var warnInvalidVersion = ${runtimeTemplate.basicFunction(
163
- "scope, scopeName, key, requiredVersion",
157
+ `var getInvalidVersionMessage = ${runtimeTemplate.basicFunction(
158
+ "scope, scopeName, key, requiredVersion, eager",
164
159
  [
165
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));'
160
+ "var versions = scope[key];",
161
+ 'return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\\n" +',
162
+ `\t"Available versions: " + Object.keys(versions).map(${runtimeTemplate.basicFunction(
163
+ "key",
164
+ ['return key + " from " + versions[key].from;']
165
+ )}).join(", ");`
166
166
  ]
167
167
  )};`,
168
- `var get = ${runtimeTemplate.basicFunction("entry", [
169
- "entry.loaded = 1;",
170
- "return entry.get()"
171
- ])};`,
168
+ `var fail = ${runtimeTemplate.basicFunction("msg", [
169
+ "throw new Error(msg);"
170
+ ])}`,
171
+ `var failAsNotExist = ${runtimeTemplate.basicFunction("scopeName, key", [
172
+ 'return fail("Shared module " + key + " doesn\'t exist in shared scope " + scopeName);'
173
+ ])}`,
174
+ `var warn = /*#__PURE__*/ ${
175
+ compilation.outputOptions.ignoreBrowserWarnings
176
+ ? runtimeTemplate.basicFunction("", "")
177
+ : runtimeTemplate.basicFunction("msg", [
178
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
179
+ ])
180
+ };`,
172
181
  `var init = ${runtimeTemplate.returningFunction(
173
182
  Template.asString([
174
- "function(scopeName, a, b, c) {",
183
+ "function(scopeName, key, eager, c, d) {",
175
184
  Template.indent([
176
185
  `var promise = ${RuntimeGlobals.initializeSharing}(scopeName);`,
177
- `if (promise && promise.then) return promise.then(fn.bind(fn, scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], a, b, c));`,
178
- `return fn(scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], a, b, c);`
186
+ // if we require eager shared, we expect it to be already loaded before it requested, no need to wait the whole scope loaded.
187
+ "if (promise && promise.then && !eager) { ",
188
+ Template.indent([
189
+ `return promise.then(fn.bind(fn, scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], key, false, c, d));`
190
+ ]),
191
+ "}",
192
+ `return fn(scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], key, eager, c, d);`
179
193
  ]),
180
194
  "}"
181
195
  ]),
182
196
  "fn"
183
197
  )};`,
184
198
  "",
199
+ `var useFallback = ${runtimeTemplate.basicFunction(
200
+ "scopeName, key, fallback",
201
+ ["return fallback ? fallback() : failAsNotExist(scopeName, key);"]
202
+ )}`,
185
203
  `var load = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
186
- "scopeName, scope, key",
187
- [
188
- "ensureExistence(scopeName, key);",
189
- "return get(findVersion(scope, key));"
190
- ]
191
- )});`,
192
- `var loadFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
193
- "scopeName, scope, key, fallback",
204
+ "scopeName, scope, key, eager, fallback",
194
205
  [
195
- `return scope && ${RuntimeGlobals.hasOwnProperty}(scope, key) ? get(findVersion(scope, key)) : fallback();`
206
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
207
+ "return get(findLatestVersion(scope, key, eager));"
196
208
  ]
197
209
  )});`,
198
- `var loadVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
199
- "scopeName, scope, key, version",
210
+ `var loadVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
211
+ "scopeName, scope, key, eager, requiredVersion, fallback",
200
212
  [
201
- "ensureExistence(scopeName, key);",
202
- "return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key));"
213
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
214
+ "var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);",
215
+ "if (satisfyingVersion) return get(satisfyingVersion);",
216
+ "warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))",
217
+ "return get(findLatestVersion(scope, key, eager));"
203
218
  ]
204
219
  )});`,
205
- `var loadSingletonVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
206
- "scopeName, scope, key, version",
220
+ `var loadStrictVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
221
+ "scopeName, scope, key, eager, requiredVersion, fallback",
207
222
  [
208
- "ensureExistence(scopeName, key);",
209
- "return getSingletonVersion(scope, scopeName, key, version);"
223
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
224
+ "var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);",
225
+ "if (satisfyingVersion) return get(satisfyingVersion);",
226
+ "if (fallback) return fallback();",
227
+ "fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));"
210
228
  ]
211
229
  )});`,
212
- `var loadStrictVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
213
- "scopeName, scope, key, version",
230
+ `var loadSingleton = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
231
+ "scopeName, scope, key, eager, fallback",
214
232
  [
215
- "ensureExistence(scopeName, key);",
216
- "return getValidVersion(scope, scopeName, key, version);"
217
- ]
218
- )});`,
219
- `var loadStrictSingletonVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
220
- "scopeName, scope, key, version",
221
- [
222
- "ensureExistence(scopeName, key);",
223
- "return getStrictSingletonVersion(scope, scopeName, key, version);"
224
- ]
225
- )});`,
226
- `var loadVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
227
- "scopeName, scope, key, version, fallback",
228
- [
229
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
230
- "return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key));"
231
- ]
232
- )});`,
233
- `var loadSingletonVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
234
- "scopeName, scope, key, version, fallback",
235
- [
236
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
237
- "return getSingletonVersion(scope, scopeName, key, version);"
233
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
234
+ "var version = findSingletonVersionKey(scope, key, eager);",
235
+ "return get(scope[key][version]);"
238
236
  ]
239
237
  )});`,
240
- `var loadStrictVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
241
- "scopeName, scope, key, version, fallback",
238
+ `var loadSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
239
+ "scopeName, scope, key, eager, requiredVersion, fallback",
242
240
  [
243
- `var entry = scope && ${RuntimeGlobals.hasOwnProperty}(scope, key) && findValidVersion(scope, key, version);`,
244
- `return entry ? get(entry) : fallback();`
241
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
242
+ "var version = findSingletonVersionKey(scope, key, eager);",
243
+ "if (!satisfy(requiredVersion, version)) {",
244
+ Template.indent([
245
+ "warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
246
+ ]),
247
+ "}",
248
+ "return get(scope[key][version]);"
245
249
  ]
246
250
  )});`,
247
- `var loadStrictSingletonVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
248
- "scopeName, scope, key, version, fallback",
251
+ `var loadStrictSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
252
+ "scopeName, scope, key, eager, requiredVersion, fallback",
249
253
  [
250
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
251
- "return getStrictSingletonVersion(scope, scopeName, key, version);"
254
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
255
+ "var version = findSingletonVersionKey(scope, key, eager);",
256
+ "if (!satisfy(requiredVersion, version)) {",
257
+ Template.indent([
258
+ "fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
259
+ ]),
260
+ "}",
261
+ "return get(scope[key][version]);"
252
262
  ]
253
263
  )});`,
254
264
  "var installedModules = {};",
@@ -273,10 +283,10 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
273
283
  `delete ${RuntimeGlobals.moduleCache}[id];`,
274
284
  "var factory = moduleToHandlerMapping[id]();",
275
285
  'if(typeof factory !== "function") throw new Error("Shared module is not available for eager consumption: " + id);',
276
- `module.exports = factory();`
286
+ "module.exports = factory();"
277
287
  ])}`
278
288
  ])});`
279
- ])
289
+ ])
280
290
  : "// no consumes in initial chunks",
281
291
  this._runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)
282
292
  ? Template.asString([
@@ -285,6 +295,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
285
295
  null,
286
296
  "\t"
287
297
  )};`,
298
+ "var startedInstallModules = {};",
288
299
  `${
289
300
  RuntimeGlobals.ensureChunkHandlers
290
301
  }.consumes = ${runtimeTemplate.basicFunction("chunkId, promises", [
@@ -294,6 +305,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
294
305
  "id",
295
306
  [
296
307
  `if(${RuntimeGlobals.hasOwnProperty}(installedModules, id)) return promises.push(installedModules[id]);`,
308
+ "if(!startedInstallModules[id]) {",
297
309
  `var onFactory = ${runtimeTemplate.basicFunction(
298
310
  "factory",
299
311
  [
@@ -306,6 +318,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
306
318
  ])}`
307
319
  ]
308
320
  )};`,
321
+ "startedInstallModules[id] = true;",
309
322
  `var onError = ${runtimeTemplate.basicFunction("error", [
310
323
  "delete installedModules[id];",
311
324
  `${
@@ -320,17 +333,18 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
320
333
  "var promise = moduleToHandlerMapping[id]();",
321
334
  "if(promise.then) {",
322
335
  Template.indent(
323
- `promises.push(installedModules[id] = promise.then(onFactory).catch(onError));`
336
+ "promises.push(installedModules[id] = promise.then(onFactory)['catch'](onError));"
324
337
  ),
325
338
  "} else onFactory(promise);"
326
339
  ]),
327
- "} catch(e) { onError(e); }"
340
+ "} catch(e) { onError(e); }",
341
+ "}"
328
342
  ]
329
343
  )});`
330
344
  ]),
331
345
  "}"
332
346
  ])}`
333
- ])
347
+ ])
334
348
  : "// no chunk loading of consumes"
335
349
  ]);
336
350
  }
@@ -10,7 +10,6 @@ const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  class ProvideForSharedDependency extends ModuleDependency {
12
12
  /**
13
- *
14
13
  * @param {string} request request string
15
14
  */
16
15
  constructor(request) {
@@ -8,7 +8,17 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  class ProvideSharedDependency extends Dependency {
15
+ /**
16
+ * @param {string} shareScope share scope
17
+ * @param {string} name module name
18
+ * @param {string | false} version version
19
+ * @param {string} request request
20
+ * @param {boolean} eager true, if this is an eager dependency
21
+ */
12
22
  constructor(shareScope, name, version, request, eager) {
13
23
  super();
14
24
  this.shareScope = shareScope;
@@ -31,6 +41,9 @@ class ProvideSharedDependency extends Dependency {
31
41
  } @ ${this.version}${this.eager ? " (eager)" : ""}`;
32
42
  }
33
43
 
44
+ /**
45
+ * @param {ObjectSerializerContext} context context
46
+ */
34
47
  serialize(context) {
35
48
  context.write(this.shareScope);
36
49
  context.write(this.name);
@@ -40,6 +53,10 @@ class ProvideSharedDependency extends Dependency {
40
53
  super.serialize(context);
41
54
  }
42
55
 
56
+ /**
57
+ * @param {ObjectDeserializerContext} context context
58
+ * @returns {ProvideSharedDependency} deserialize fallback dependency
59
+ */
43
60
  static deserialize(context) {
44
61
  const { read } = context;
45
62
  const obj = new ProvideSharedDependency(
@@ -7,6 +7,7 @@
7
7
 
8
8
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
9
9
  const Module = require("../Module");
10
+ const { WEBPACK_MODULE_TYPE_PROVIDE } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
  const ProvideForSharedDependency = require("./ProvideForSharedDependency");
@@ -20,9 +21,12 @@ const ProvideForSharedDependency = require("./ProvideForSharedDependency");
20
21
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
21
22
  /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
22
23
  /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
24
+ /** @typedef {import("../Module").SourceTypes} SourceTypes */
23
25
  /** @typedef {import("../RequestShortener")} RequestShortener */
24
26
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
25
27
  /** @typedef {import("../WebpackError")} WebpackError */
28
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
29
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
26
30
  /** @typedef {import("../util/Hash")} Hash */
27
31
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
28
32
 
@@ -37,7 +41,7 @@ class ProvideSharedModule extends Module {
37
41
  * @param {boolean} eager include the module in sync way
38
42
  */
39
43
  constructor(shareScope, name, version, request, eager) {
40
- super("provide-module");
44
+ super(WEBPACK_MODULE_TYPE_PROVIDE);
41
45
  this._shareScope = shareScope;
42
46
  this._name = name;
43
47
  this._version = version;
@@ -67,12 +71,14 @@ class ProvideSharedModule extends Module {
67
71
  * @returns {string | null} an identifier for library inclusion
68
72
  */
69
73
  libIdent(options) {
70
- return `webpack/sharing/provide/${this._shareScope}/${this._name}`;
74
+ return `${this.layer ? `(${this.layer})/` : ""}webpack/sharing/provide/${
75
+ this._shareScope
76
+ }/${this._name}`;
71
77
  }
72
78
 
73
79
  /**
74
80
  * @param {NeedBuildContext} context context info
75
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
81
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
76
82
  * @returns {void}
77
83
  */
78
84
  needBuild(context, callback) {
@@ -115,7 +121,7 @@ class ProvideSharedModule extends Module {
115
121
  }
116
122
 
117
123
  /**
118
- * @returns {Set<string>} types available (do not mutate)
124
+ * @returns {SourceTypes} types available (do not mutate)
119
125
  */
120
126
  getSourceTypes() {
121
127
  return TYPES;
@@ -136,13 +142,13 @@ class ProvideSharedModule extends Module {
136
142
  chunkGraph,
137
143
  request: this._request,
138
144
  runtimeRequirements
139
- })
145
+ })
140
146
  : runtimeTemplate.asyncModuleFactory({
141
147
  block: this.blocks[0],
142
148
  chunkGraph,
143
149
  request: this._request,
144
150
  runtimeRequirements
145
- })
151
+ })
146
152
  }${this._eager ? ", 1" : ""});`;
147
153
  const sources = new Map();
148
154
  const data = new Map();
@@ -156,6 +162,9 @@ class ProvideSharedModule extends Module {
156
162
  return { sources, data, runtimeRequirements };
157
163
  }
158
164
 
165
+ /**
166
+ * @param {ObjectSerializerContext} context context
167
+ */
159
168
  serialize(context) {
160
169
  const { write } = context;
161
170
  write(this._shareScope);
@@ -166,6 +175,10 @@ class ProvideSharedModule extends Module {
166
175
  super.serialize(context);
167
176
  }
168
177
 
178
+ /**
179
+ * @param {ObjectDeserializerContext} context context
180
+ * @returns {ProvideSharedModule} deserialize fallback dependency
181
+ */
169
182
  static deserialize(context) {
170
183
  const { read } = context;
171
184
  const obj = new ProvideSharedModule(read(), read(), read(), read(), read());
@@ -15,7 +15,7 @@ const ProvideSharedModule = require("./ProvideSharedModule");
15
15
  class ProvideSharedModuleFactory extends ModuleFactory {
16
16
  /**
17
17
  * @param {ModuleFactoryCreateData} data data object
18
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
18
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
19
19
  * @returns {void}
20
20
  */
21
21
  create(data, callback) {