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
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
+ const { WEBPACK_MODULE_TYPE_FALLBACK } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const Template = require("../Template");
12
13
  const makeSerializable = require("../util/makeSerializable");
@@ -21,9 +22,12 @@ const FallbackItemDependency = require("./FallbackItemDependency");
21
22
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
22
23
  /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
23
24
  /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
25
+ /** @typedef {import("../Module").SourceTypes} SourceTypes */
24
26
  /** @typedef {import("../RequestShortener")} RequestShortener */
25
27
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
26
28
  /** @typedef {import("../WebpackError")} WebpackError */
29
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
30
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
31
  /** @typedef {import("../util/Hash")} Hash */
28
32
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
29
33
 
@@ -35,7 +39,7 @@ class FallbackModule extends Module {
35
39
  * @param {string[]} requests list of requests to choose one
36
40
  */
37
41
  constructor(requests) {
38
- super("fallback-module");
42
+ super(WEBPACK_MODULE_TYPE_FALLBACK);
39
43
  this.requests = requests;
40
44
  this._identifier = `fallback ${this.requests.join(" ")}`;
41
45
  }
@@ -60,9 +64,9 @@ class FallbackModule extends Module {
60
64
  * @returns {string | null} an identifier for library inclusion
61
65
  */
62
66
  libIdent(options) {
63
- return `webpack/container/fallback/${this.requests[0]}/and ${
64
- this.requests.length - 1
65
- } more`;
67
+ return `${this.layer ? `(${this.layer})/` : ""}webpack/container/fallback/${
68
+ this.requests[0]
69
+ }/and ${this.requests.length - 1} more`;
66
70
  }
67
71
 
68
72
  /**
@@ -76,7 +80,7 @@ class FallbackModule extends Module {
76
80
 
77
81
  /**
78
82
  * @param {NeedBuildContext} context context info
79
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
83
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
80
84
  * @returns {void}
81
85
  */
82
86
  needBuild(context, callback) {
@@ -113,7 +117,7 @@ class FallbackModule extends Module {
113
117
  }
114
118
 
115
119
  /**
116
- * @returns {Set<string>} types available (do not mutate)
120
+ * @returns {SourceTypes} types available (do not mutate)
117
121
  */
118
122
  getSourceTypes() {
119
123
  return TYPES;
@@ -125,7 +129,7 @@ class FallbackModule extends Module {
125
129
  */
126
130
  codeGeneration({ runtimeTemplate, moduleGraph, chunkGraph }) {
127
131
  const ids = this.dependencies.map(dep =>
128
- chunkGraph.getModuleId(moduleGraph.getModule(dep))
132
+ chunkGraph.getModuleId(/** @type {Module} */ (moduleGraph.getModule(dep)))
129
133
  );
130
134
  const code = Template.asString([
131
135
  `var ids = ${JSON.stringify(ids)};`,
@@ -133,7 +137,7 @@ class FallbackModule extends Module {
133
137
  `var loop = ${runtimeTemplate.basicFunction("next", [
134
138
  "while(i < ids.length) {",
135
139
  Template.indent([
136
- "try { next = __webpack_require__(ids[i++]); } catch(e) { return handleError(e); }",
140
+ `try { next = ${RuntimeGlobals.require}(ids[i++]); } catch(e) { return handleError(e); }`,
137
141
  "if(next) return next.then ? next.then(handleResult, handleError) : handleResult(next);"
138
142
  ]),
139
143
  "}",
@@ -154,12 +158,19 @@ class FallbackModule extends Module {
154
158
  return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS };
155
159
  }
156
160
 
161
+ /**
162
+ * @param {ObjectSerializerContext} context context
163
+ */
157
164
  serialize(context) {
158
165
  const { write } = context;
159
166
  write(this.requests);
160
167
  super.serialize(context);
161
168
  }
162
169
 
170
+ /**
171
+ * @param {ObjectDeserializerContext} context context
172
+ * @returns {FallbackModule} deserialized fallback module
173
+ */
163
174
  static deserialize(context) {
164
175
  const { read } = context;
165
176
  const obj = new FallbackModule(read());
@@ -15,7 +15,7 @@ const FallbackModule = require("./FallbackModule");
15
15
  module.exports = class FallbackModuleFactory 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({ dependencies: [dependency] }, callback) {
@@ -65,6 +65,7 @@ class ModuleFederationPlugin {
65
65
  library,
66
66
  filename: options.filename,
67
67
  runtime: options.runtime,
68
+ shareScope: options.shareScope,
68
69
  exposes: options.exposes
69
70
  }).apply(compiler);
70
71
  }
@@ -76,6 +77,7 @@ class ModuleFederationPlugin {
76
77
  ) {
77
78
  new ContainerReferencePlugin({
78
79
  remoteType,
80
+ shareScope: options.shareScope,
79
81
  remotes: options.remotes
80
82
  }).apply(compiler);
81
83
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
+ const { WEBPACK_MODULE_TYPE_REMOTE } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
  const FallbackDependency = require("./FallbackDependency");
@@ -20,9 +21,12 @@ const RemoteToExternalDependency = require("./RemoteToExternalDependency");
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 RemoteModule extends Module {
37
41
  * @param {string} shareScope the used share scope name
38
42
  */
39
43
  constructor(request, externalRequests, internalRequest, shareScope) {
40
- super("remote-module");
44
+ super(WEBPACK_MODULE_TYPE_REMOTE);
41
45
  this.request = request;
42
46
  this.externalRequests = externalRequests;
43
47
  this.internalRequest = internalRequest;
@@ -67,12 +71,14 @@ class RemoteModule extends Module {
67
71
  * @returns {string | null} an identifier for library inclusion
68
72
  */
69
73
  libIdent(options) {
70
- return `webpack/container/remote/${this.request}`;
74
+ return `${this.layer ? `(${this.layer})/` : ""}webpack/container/remote/${
75
+ this.request
76
+ }`;
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) {
@@ -114,7 +120,7 @@ class RemoteModule extends Module {
114
120
  }
115
121
 
116
122
  /**
117
- * @returns {Set<string>} types available (do not mutate)
123
+ * @returns {SourceTypes} types available (do not mutate)
118
124
  */
119
125
  getSourceTypes() {
120
126
  return TYPES;
@@ -147,6 +153,9 @@ class RemoteModule extends Module {
147
153
  return { sources, data, runtimeRequirements: RUNTIME_REQUIREMENTS };
148
154
  }
149
155
 
156
+ /**
157
+ * @param {ObjectSerializerContext} context context
158
+ */
150
159
  serialize(context) {
151
160
  const { write } = context;
152
161
  write(this.request);
@@ -156,6 +165,10 @@ class RemoteModule extends Module {
156
165
  super.serialize(context);
157
166
  }
158
167
 
168
+ /**
169
+ * @param {ObjectDeserializerContext} context context
170
+ * @returns {RemoteModule} deserialized module
171
+ */
159
172
  static deserialize(context) {
160
173
  const { read } = context;
161
174
  const obj = new RemoteModule(read(), read(), read(), read());
@@ -9,6 +9,11 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Chunk").ChunkId} ChunkId */
14
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
16
+ /** @typedef {import("../Compilation")} Compilation */
12
17
  /** @typedef {import("./RemoteModule")} RemoteModule */
13
18
 
14
19
  class RemoteRuntimeModule extends RuntimeModule {
@@ -17,29 +22,37 @@ class RemoteRuntimeModule extends RuntimeModule {
17
22
  }
18
23
 
19
24
  /**
20
- * @returns {string} runtime code
25
+ * @returns {string | null} runtime code
21
26
  */
22
27
  generate() {
23
- const { compilation, chunkGraph } = this;
28
+ const compilation = /** @type {Compilation} */ (this.compilation);
29
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
24
30
  const { runtimeTemplate, moduleGraph } = compilation;
31
+ /** @type {Record<ChunkId, (string | number)[]>} */
25
32
  const chunkToRemotesMapping = {};
33
+ /** @type {Record<ModuleId, [string, string, string | number | null]>} */
26
34
  const idToExternalAndNameMapping = {};
27
- for (const chunk of this.chunk.getAllAsyncChunks()) {
35
+ for (const chunk of /** @type {Chunk} */ (this.chunk).getAllAsyncChunks()) {
28
36
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
29
37
  chunk,
30
38
  "remote"
31
39
  );
32
40
  if (!modules) continue;
33
- const remotes = (chunkToRemotesMapping[chunk.id] = []);
41
+ /** @type {ModuleId[]} */
42
+ const remotes = (chunkToRemotesMapping[
43
+ /** @type {ChunkId} */
44
+ (chunk.id)
45
+ ] = []);
34
46
  for (const m of modules) {
35
47
  const module = /** @type {RemoteModule} */ (m);
36
48
  const name = module.internalRequest;
37
- const id = chunkGraph.getModuleId(module);
49
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
38
50
  const shareScope = module.shareScope;
39
51
  const dep = module.dependencies[0];
40
52
  const externalModule = moduleGraph.getModule(dep);
41
53
  const externalModuleId =
42
- externalModule && chunkGraph.getModuleId(externalModule);
54
+ /** @type {ModuleId} */
55
+ (externalModule && chunkGraph.getModuleId(externalModule));
43
56
  remotes.push(id);
44
57
  idToExternalAndNameMapping[id] = [shareScope, name, externalModuleId];
45
58
  }
@@ -66,16 +79,16 @@ class RemoteRuntimeModule extends RuntimeModule {
66
79
  "var data = idToExternalAndNameMapping[id];",
67
80
  "if(getScope.indexOf(data) >= 0) return;",
68
81
  "getScope.push(data);",
69
- `if(data.p) return promises.push(data.p);`,
82
+ "if(data.p) return promises.push(data.p);",
70
83
  `var onError = ${runtimeTemplate.basicFunction("error", [
71
84
  'if(!error) error = new Error("Container missing");',
72
85
  'if(typeof error.message === "string")',
73
86
  Template.indent(
74
87
  `error.message += '\\nwhile loading "' + data[1] + '" from ' + data[2];`
75
88
  ),
76
- `__webpack_modules__[id] = ${runtimeTemplate.basicFunction("", [
77
- "throw error;"
78
- ])}`,
89
+ `${
90
+ RuntimeGlobals.moduleFactories
91
+ }[id] = ${runtimeTemplate.basicFunction("", ["throw error;"])}`,
79
92
  "data.p = 0;"
80
93
  ])};`,
81
94
  `var handleFunction = ${runtimeTemplate.basicFunction(
@@ -90,7 +103,7 @@ class RemoteRuntimeModule extends RuntimeModule {
90
103
  "next(result, d)",
91
104
  "result"
92
105
  )}, onError);`,
93
- `if(first) promises.push(data.p = p); else return p;`
106
+ "if(first) promises.push(data.p = p); else return p;"
94
107
  ]),
95
108
  "} else {",
96
109
  Template.indent(["return next(promise, d, first);"]),
@@ -106,17 +119,18 @@ class RemoteRuntimeModule extends RuntimeModule {
106
119
  "external, _, first"
107
120
  )};`,
108
121
  `var onInitialized = ${runtimeTemplate.returningFunction(
109
- `handleFunction(external.get, data[1], getScope, 0, onFactory, first)`,
122
+ "handleFunction(external.get, data[1], getScope, 0, onFactory, first)",
110
123
  "_, external, first"
111
124
  )};`,
112
125
  `var onFactory = ${runtimeTemplate.basicFunction("factory", [
113
126
  "data.p = 1;",
114
- `__webpack_modules__[id] = ${runtimeTemplate.basicFunction(
115
- "module",
116
- ["module.exports = factory();"]
117
- )}`
127
+ `${
128
+ RuntimeGlobals.moduleFactories
129
+ }[id] = ${runtimeTemplate.basicFunction("module", [
130
+ "module.exports = factory();"
131
+ ])}`
118
132
  ])};`,
119
- "handleFunction(__webpack_require__, data[2], 0, 0, onExternal, 1);"
133
+ `handleFunction(${RuntimeGlobals.require}, data[2], 0, 0, onExternal, 1);`
120
134
  ])});`
121
135
  ]),
122
136
  "}"
@@ -9,6 +9,9 @@ const ModuleDependency = require("../dependencies/ModuleDependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  class RemoteToExternalDependency extends ModuleDependency {
12
+ /**
13
+ * @param {string} request request
14
+ */
12
15
  constructor(request) {
13
16
  super(request);
14
17
  }
@@ -5,7 +5,15 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @template T @typedef {(string | Record<string, string | string[] | T>)[] | Record<string, string | string[] | T>} ContainerOptionsFormat */
8
+ /**
9
+ * @template T
10
+ * @typedef {Record<string, string | string[] | T>} Item
11
+ */
12
+
13
+ /**
14
+ * @template T
15
+ * @typedef {(string | Item<T>)[] | Item<T>} ContainerOptionsFormat
16
+ */
9
17
 
10
18
  /**
11
19
  * @template T
@@ -17,6 +25,9 @@
17
25
  * @returns {void}
18
26
  */
19
27
  const process = (options, normalizeSimple, normalizeOptions, fn) => {
28
+ /**
29
+ * @param {(string | Item<T>)[]} items items
30
+ */
20
31
  const array = items => {
21
32
  for (const item of items) {
22
33
  if (typeof item === "string") {
@@ -28,6 +39,9 @@ const process = (options, normalizeSimple, normalizeOptions, fn) => {
28
39
  }
29
40
  }
30
41
  };
42
+ /**
43
+ * @param {Item<T>} obj an object
44
+ */
31
45
  const object = obj => {
32
46
  for (const [key, value] of Object.entries(obj)) {
33
47
  if (typeof value === "string" || Array.isArray(value)) {
@@ -38,7 +52,7 @@ const process = (options, normalizeSimple, normalizeOptions, fn) => {
38
52
  }
39
53
  };
40
54
  if (!options) {
41
- return;
55
+ // Do nothing
42
56
  } else if (Array.isArray(options)) {
43
57
  array(options);
44
58
  } else if (typeof options === "object") {
@@ -87,5 +101,5 @@ const scope = (scope, options) => {
87
101
  return obj;
88
102
  };
89
103
 
90
- exports.parseOptions = parseOptions;
91
- exports.scope = scope;
104
+ module.exports.parseOptions = parseOptions;
105
+ module.exports.scope = scope;
@@ -0,0 +1,203 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sergey Melyukov @smelukov
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { ReplaceSource, RawSource, ConcatSource } = require("webpack-sources");
9
+ const { UsageState } = require("../ExportsInfo");
10
+ const Generator = require("../Generator");
11
+ const RuntimeGlobals = require("../RuntimeGlobals");
12
+ const Template = require("../Template");
13
+
14
+ /** @typedef {import("webpack-sources").Source} Source */
15
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
16
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorLocalIdentName} CssGeneratorLocalIdentName */
17
+ /** @typedef {import("../Dependency")} Dependency */
18
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
19
+ /** @typedef {import("../DependencyTemplate").CssExportsData} CssExportsData */
20
+ /** @typedef {import("../Generator").GenerateContext} GenerateContext */
21
+ /** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
22
+ /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
23
+ /** @typedef {import("../NormalModule")} NormalModule */
24
+ /** @typedef {import("../util/Hash")} Hash */
25
+
26
+ /**
27
+ * @template T
28
+ * @typedef {import("../InitFragment")<T>} InitFragment
29
+ */
30
+
31
+ const TYPES = new Set(["javascript"]);
32
+
33
+ class CssExportsGenerator extends Generator {
34
+ /**
35
+ * @param {CssGeneratorExportsConvention | undefined} convention the convention of the exports name
36
+ * @param {CssGeneratorLocalIdentName | undefined} localIdentName css export local ident name
37
+ * @param {boolean} esModule whether to use ES modules syntax
38
+ */
39
+ constructor(convention, localIdentName, esModule) {
40
+ super();
41
+ /** @type {CssGeneratorExportsConvention | undefined} */
42
+ this.convention = convention;
43
+ /** @type {CssGeneratorLocalIdentName | undefined} */
44
+ this.localIdentName = localIdentName;
45
+ /** @type {boolean} */
46
+ this.esModule = esModule;
47
+ }
48
+
49
+ /**
50
+ * @param {NormalModule} module module for which the bailout reason should be determined
51
+ * @param {ConcatenationBailoutReasonContext} context context
52
+ * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
53
+ */
54
+ getConcatenationBailoutReason(module, context) {
55
+ if (!this.esModule) {
56
+ return "Module is not an ECMAScript module";
57
+ }
58
+ // TODO webpack 6: remove /\[moduleid\]/.test
59
+ if (
60
+ /\[id\]/.test(this.localIdentName) ||
61
+ /\[moduleid\]/.test(this.localIdentName)
62
+ ) {
63
+ return "The localIdentName includes moduleId ([id] or [moduleid])";
64
+ }
65
+ return undefined;
66
+ }
67
+
68
+ /**
69
+ * @param {NormalModule} module module for which the code should be generated
70
+ * @param {GenerateContext} generateContext context for generate
71
+ * @returns {Source} generated code
72
+ */
73
+ generate(module, generateContext) {
74
+ const source = new ReplaceSource(new RawSource(""));
75
+ /** @type {InitFragment<TODO>[]} */
76
+ const initFragments = [];
77
+ /** @type {CssExportsData} */
78
+ const cssExportsData = {
79
+ esModule: this.esModule,
80
+ exports: new Map()
81
+ };
82
+
83
+ generateContext.runtimeRequirements.add(RuntimeGlobals.module);
84
+
85
+ let chunkInitFragments;
86
+ const runtimeRequirements = new Set();
87
+
88
+ /** @type {DependencyTemplateContext} */
89
+ const templateContext = {
90
+ runtimeTemplate: generateContext.runtimeTemplate,
91
+ dependencyTemplates: generateContext.dependencyTemplates,
92
+ moduleGraph: generateContext.moduleGraph,
93
+ chunkGraph: generateContext.chunkGraph,
94
+ module,
95
+ runtime: generateContext.runtime,
96
+ runtimeRequirements,
97
+ concatenationScope: generateContext.concatenationScope,
98
+ codeGenerationResults: generateContext.codeGenerationResults,
99
+ initFragments,
100
+ cssExportsData,
101
+ get chunkInitFragments() {
102
+ if (!chunkInitFragments) {
103
+ const data = generateContext.getData();
104
+ chunkInitFragments = data.get("chunkInitFragments");
105
+ if (!chunkInitFragments) {
106
+ chunkInitFragments = [];
107
+ data.set("chunkInitFragments", chunkInitFragments);
108
+ }
109
+ }
110
+
111
+ return chunkInitFragments;
112
+ }
113
+ };
114
+
115
+ /**
116
+ * @param {Dependency} dependency the dependency
117
+ */
118
+ const handleDependency = dependency => {
119
+ const constructor = /** @type {new (...args: any[]) => Dependency} */ (
120
+ dependency.constructor
121
+ );
122
+ const template = generateContext.dependencyTemplates.get(constructor);
123
+ if (!template) {
124
+ throw new Error(
125
+ `No template for dependency: ${dependency.constructor.name}`
126
+ );
127
+ }
128
+
129
+ template.apply(dependency, source, templateContext);
130
+ };
131
+
132
+ for (const dependency of module.dependencies) {
133
+ handleDependency(dependency);
134
+ }
135
+
136
+ if (generateContext.concatenationScope) {
137
+ const source = new ConcatSource();
138
+ const usedIdentifiers = new Set();
139
+ for (const [name, v] of cssExportsData.exports) {
140
+ let identifier = Template.toIdentifier(name);
141
+ const i = 0;
142
+ while (usedIdentifiers.has(identifier)) {
143
+ identifier = Template.toIdentifier(name + i);
144
+ }
145
+ usedIdentifiers.add(identifier);
146
+ generateContext.concatenationScope.registerExport(name, identifier);
147
+ source.add(
148
+ `${
149
+ generateContext.runtimeTemplate.supportsConst() ? "const" : "var"
150
+ } ${identifier} = ${JSON.stringify(v)};\n`
151
+ );
152
+ }
153
+ return source;
154
+ }
155
+ const needNsObj =
156
+ this.esModule &&
157
+ generateContext.moduleGraph
158
+ .getExportsInfo(module)
159
+ .otherExportsInfo.getUsed(generateContext.runtime) !==
160
+ UsageState.Unused;
161
+ if (needNsObj) {
162
+ generateContext.runtimeRequirements.add(
163
+ RuntimeGlobals.makeNamespaceObject
164
+ );
165
+ }
166
+ const exports = [];
167
+ for (const [name, v] of cssExportsData.exports) {
168
+ exports.push(`\t${JSON.stringify(name)}: ${JSON.stringify(v)}`);
169
+ }
170
+ return new RawSource(
171
+ `${needNsObj ? `${RuntimeGlobals.makeNamespaceObject}(` : ""}${
172
+ module.moduleArgument
173
+ }.exports = {\n${exports.join(",\n")}\n}${needNsObj ? ")" : ""};`
174
+ );
175
+ }
176
+
177
+ /**
178
+ * @param {NormalModule} module fresh module
179
+ * @returns {Set<string>} available types (do not mutate)
180
+ */
181
+ getTypes(module) {
182
+ return TYPES;
183
+ }
184
+
185
+ /**
186
+ * @param {NormalModule} module the module
187
+ * @param {string=} type source type
188
+ * @returns {number} estimate size of the module
189
+ */
190
+ getSize(module, type) {
191
+ return 42;
192
+ }
193
+
194
+ /**
195
+ * @param {Hash} hash hash that will be modified
196
+ * @param {UpdateHashContext} updateHashContext context for updating hash
197
+ */
198
+ updateHash(hash, { module }) {
199
+ hash.update(this.esModule.toString());
200
+ }
201
+ }
202
+
203
+ module.exports = CssExportsGenerator;