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
@@ -35,6 +35,7 @@ const ResolverCachePlugin = require("./cache/ResolverCachePlugin");
35
35
 
36
36
  const CommonJsPlugin = require("./dependencies/CommonJsPlugin");
37
37
  const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin");
38
+ const ImportMetaContextPlugin = require("./dependencies/ImportMetaContextPlugin");
38
39
  const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");
39
40
  const ImportPlugin = require("./dependencies/ImportPlugin");
40
41
  const LoaderPlugin = require("./dependencies/LoaderPlugin");
@@ -56,6 +57,8 @@ const { cleverMerge } = require("./util/cleverMerge");
56
57
 
57
58
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
58
59
  /** @typedef {import("./Compiler")} Compiler */
60
+ /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
61
+ /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
59
62
 
60
63
  class WebpackOptionsApply extends OptionsApply {
61
64
  constructor() {
@@ -68,13 +71,13 @@ class WebpackOptionsApply extends OptionsApply {
68
71
  * @returns {WebpackOptions} options object
69
72
  */
70
73
  process(options, compiler) {
71
- compiler.outputPath = options.output.path;
74
+ compiler.outputPath = /** @type {string} */ (options.output.path);
72
75
  compiler.recordsInputPath = options.recordsInputPath || null;
73
76
  compiler.recordsOutputPath = options.recordsOutputPath || null;
74
77
  compiler.name = options.name;
75
78
 
76
79
  if (options.externals) {
77
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
80
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
78
81
  const ExternalsPlugin = require("./ExternalsPlugin");
79
82
  new ExternalsPlugin(options.externalsType, options.externals).apply(
80
83
  compiler
@@ -86,17 +89,17 @@ class WebpackOptionsApply extends OptionsApply {
86
89
  new NodeTargetPlugin().apply(compiler);
87
90
  }
88
91
  if (options.externalsPresets.electronMain) {
89
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
92
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
90
93
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
91
94
  new ElectronTargetPlugin("main").apply(compiler);
92
95
  }
93
96
  if (options.externalsPresets.electronPreload) {
94
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
97
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
95
98
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
96
99
  new ElectronTargetPlugin("preload").apply(compiler);
97
100
  }
98
101
  if (options.externalsPresets.electronRenderer) {
99
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
102
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
100
103
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
101
104
  new ElectronTargetPlugin("renderer").apply(compiler);
102
105
  }
@@ -106,23 +109,69 @@ class WebpackOptionsApply extends OptionsApply {
106
109
  !options.externalsPresets.electronPreload &&
107
110
  !options.externalsPresets.electronRenderer
108
111
  ) {
109
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
112
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
110
113
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
111
114
  new ElectronTargetPlugin().apply(compiler);
112
115
  }
113
116
  if (options.externalsPresets.nwjs) {
114
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
117
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
115
118
  const ExternalsPlugin = require("./ExternalsPlugin");
116
119
  new ExternalsPlugin("node-commonjs", "nw.gui").apply(compiler);
117
120
  }
118
121
  if (options.externalsPresets.webAsync) {
119
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
122
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
120
123
  const ExternalsPlugin = require("./ExternalsPlugin");
121
- new ExternalsPlugin("import", /^(https?:\/\/|std:)/).apply(compiler);
124
+ new ExternalsPlugin("import", ({ request, dependencyType }, callback) => {
125
+ if (dependencyType === "url") {
126
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
127
+ return callback(null, `asset ${request}`);
128
+ } else if (options.experiments.css && dependencyType === "css-import") {
129
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
130
+ return callback(null, `css-import ${request}`);
131
+ } else if (
132
+ options.experiments.css &&
133
+ /^(\/\/|https?:\/\/|std:)/.test(request)
134
+ ) {
135
+ if (/^\.css(\?|$)/.test(request))
136
+ return callback(null, `css-import ${request}`);
137
+ return callback(null, `import ${request}`);
138
+ }
139
+ callback();
140
+ }).apply(compiler);
122
141
  } else if (options.externalsPresets.web) {
123
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
142
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
143
+ const ExternalsPlugin = require("./ExternalsPlugin");
144
+ new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
145
+ if (dependencyType === "url") {
146
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
147
+ return callback(null, `asset ${request}`);
148
+ } else if (options.experiments.css && dependencyType === "css-import") {
149
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
150
+ return callback(null, `css-import ${request}`);
151
+ } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
152
+ if (options.experiments.css && /^\.css((\?)|$)/.test(request))
153
+ return callback(null, `css-import ${request}`);
154
+ return callback(null, `module ${request}`);
155
+ }
156
+ callback();
157
+ }).apply(compiler);
158
+ } else if (options.externalsPresets.node && options.experiments.css) {
159
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
124
160
  const ExternalsPlugin = require("./ExternalsPlugin");
125
- new ExternalsPlugin("module", /^(https?:\/\/|std:)/).apply(compiler);
161
+ new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
162
+ if (dependencyType === "url") {
163
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
164
+ return callback(null, `asset ${request}`);
165
+ } else if (dependencyType === "css-import") {
166
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
167
+ return callback(null, `css-import ${request}`);
168
+ } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
169
+ if (/^\.css(\?|$)/.test(request))
170
+ return callback(null, `css-import ${request}`);
171
+ return callback(null, `module ${request}`);
172
+ }
173
+ callback();
174
+ }).apply(compiler);
126
175
  }
127
176
 
128
177
  new ChunkPrefetchPreloadPlugin().apply(compiler);
@@ -146,27 +195,39 @@ class WebpackOptionsApply extends OptionsApply {
146
195
  }
147
196
  default:
148
197
  throw new Error(
149
- "Unsupported chunk format '" + options.output.chunkFormat + "'."
198
+ `Unsupported chunk format '${options.output.chunkFormat}'.`
150
199
  );
151
200
  }
152
201
  }
153
202
 
154
- if (options.output.enabledChunkLoadingTypes.length > 0) {
155
- for (const type of options.output.enabledChunkLoadingTypes) {
203
+ const enabledChunkLoadingTypes =
204
+ /** @type {NonNullable<WebpackOptions["output"]["enabledChunkLoadingTypes"]>} */
205
+ (options.output.enabledChunkLoadingTypes);
206
+
207
+ if (enabledChunkLoadingTypes.length > 0) {
208
+ for (const type of enabledChunkLoadingTypes) {
156
209
  const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
157
210
  new EnableChunkLoadingPlugin(type).apply(compiler);
158
211
  }
159
212
  }
160
213
 
161
- if (options.output.enabledWasmLoadingTypes.length > 0) {
162
- for (const type of options.output.enabledWasmLoadingTypes) {
214
+ const enabledWasmLoadingTypes =
215
+ /** @type {NonNullable<WebpackOptions["output"]["enabledWasmLoadingTypes"]>} */
216
+ (options.output.enabledWasmLoadingTypes);
217
+
218
+ if (enabledWasmLoadingTypes.length > 0) {
219
+ for (const type of enabledWasmLoadingTypes) {
163
220
  const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
164
221
  new EnableWasmLoadingPlugin(type).apply(compiler);
165
222
  }
166
223
  }
167
224
 
168
- if (options.output.enabledLibraryTypes.length > 0) {
169
- for (const type of options.output.enabledLibraryTypes) {
225
+ const enabledLibraryTypes =
226
+ /** @type {NonNullable<WebpackOptions["output"]["enabledLibraryTypes"]>} */
227
+ (options.output.enabledLibraryTypes);
228
+
229
+ if (enabledLibraryTypes.length > 0) {
230
+ for (const type of enabledLibraryTypes) {
170
231
  const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
171
232
  new EnableLibraryPlugin(type).apply(compiler);
172
233
  }
@@ -203,9 +264,9 @@ class WebpackOptionsApply extends OptionsApply {
203
264
  fallbackModuleFilenameTemplate:
204
265
  options.output.devtoolFallbackModuleFilenameTemplate,
205
266
  append: hidden ? false : undefined,
206
- module: moduleMaps ? true : cheap ? false : true,
207
- columns: cheap ? false : true,
208
- noSources: noSources,
267
+ module: moduleMaps ? true : !cheap,
268
+ columns: !cheap,
269
+ noSources,
209
270
  namespace: options.output.devtoolNamespace
210
271
  }).apply(compiler);
211
272
  } else if (options.devtool.includes("eval")) {
@@ -232,7 +293,15 @@ class WebpackOptionsApply extends OptionsApply {
232
293
  "library type \"module\" is only allowed when 'experiments.outputModule' is enabled"
233
294
  );
234
295
  }
235
- if (options.externalsType === "module") {
296
+ if (options.output.enabledLibraryTypes.includes("modern-module")) {
297
+ throw new Error(
298
+ "library type \"modern-module\" is only allowed when 'experiments.outputModule' is enabled"
299
+ );
300
+ }
301
+ if (
302
+ options.externalsType === "module" ||
303
+ options.externalsType === "module-import"
304
+ ) {
236
305
  throw new Error(
237
306
  "'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"
238
307
  );
@@ -253,23 +322,31 @@ class WebpackOptionsApply extends OptionsApply {
253
322
  }).apply(compiler);
254
323
  }
255
324
 
325
+ if (options.experiments.css) {
326
+ const CssModulesPlugin = require("./css/CssModulesPlugin");
327
+ new CssModulesPlugin().apply(compiler);
328
+ }
329
+
256
330
  if (options.experiments.lazyCompilation) {
257
331
  const LazyCompilationPlugin = require("./hmr/LazyCompilationPlugin");
258
332
  const lazyOptions =
259
333
  typeof options.experiments.lazyCompilation === "object"
260
334
  ? options.experiments.lazyCompilation
261
- : null;
335
+ : {};
262
336
  new LazyCompilationPlugin({
263
337
  backend:
264
- (lazyOptions && lazyOptions.backend) ||
265
- require("./hmr/lazyCompilationBackend"),
266
- client:
267
- (lazyOptions && lazyOptions.client) ||
268
- require.resolve(
269
- `../hot/lazy-compilation-${
270
- options.externalsPresets.node ? "node" : "web"
271
- }.js`
272
- ),
338
+ typeof lazyOptions.backend === "function"
339
+ ? lazyOptions.backend
340
+ : require("./hmr/lazyCompilationBackend")({
341
+ ...lazyOptions.backend,
342
+ client:
343
+ (lazyOptions.backend && lazyOptions.backend.client) ||
344
+ require.resolve(
345
+ `../hot/lazy-compilation-${
346
+ options.externalsPresets.node ? "node" : "web"
347
+ }.js`
348
+ )
349
+ }),
273
350
  entries: !lazyOptions || lazyOptions.entries !== false,
274
351
  imports: !lazyOptions || lazyOptions.imports !== false,
275
352
  test: (lazyOptions && lazyOptions.test) || undefined
@@ -283,7 +360,11 @@ class WebpackOptionsApply extends OptionsApply {
283
360
  }
284
361
 
285
362
  new EntryOptionPlugin().apply(compiler);
286
- compiler.hooks.entryOption.call(options.context, options.entry);
363
+ compiler.hooks.entryOption.call(
364
+ /** @type {string} */
365
+ (options.context),
366
+ options.entry
367
+ );
287
368
 
288
369
  new RuntimePlugin().apply(compiler);
289
370
 
@@ -308,7 +389,9 @@ class WebpackOptionsApply extends OptionsApply {
308
389
  const NodeStuffPlugin = require("./NodeStuffPlugin");
309
390
  new NodeStuffPlugin(options.node).apply(compiler);
310
391
  }
311
- new APIPlugin().apply(compiler);
392
+ new APIPlugin({
393
+ module: options.output.module
394
+ }).apply(compiler);
312
395
  new ExportsInfoApiPlugin().apply(compiler);
313
396
  new WebpackIsIncludedPlugin().apply(compiler);
314
397
  new ConstPlugin().apply(compiler);
@@ -317,13 +400,15 @@ class WebpackOptionsApply extends OptionsApply {
317
400
  new RequireEnsurePlugin().apply(compiler);
318
401
  new RequireContextPlugin().apply(compiler);
319
402
  new ImportPlugin().apply(compiler);
403
+ new ImportMetaContextPlugin().apply(compiler);
320
404
  new SystemPlugin().apply(compiler);
321
405
  new ImportMetaPlugin().apply(compiler);
322
406
  new URLPlugin().apply(compiler);
323
407
  new WorkerPlugin(
324
408
  options.output.workerChunkLoading,
325
409
  options.output.workerWasmLoading,
326
- options.output.module
410
+ options.output.module,
411
+ options.output.workerPublicPath
327
412
  ).apply(compiler);
328
413
 
329
414
  new DefaultStatsFactoryPlugin().apply(compiler);
@@ -391,7 +476,10 @@ class WebpackOptionsApply extends OptionsApply {
391
476
  }
392
477
  if (options.optimization.runtimeChunk) {
393
478
  const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
394
- new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler);
479
+ new RuntimeChunkPlugin(
480
+ /** @type {{ name?: (entrypoint: { name: string }) => string }} */
481
+ (options.optimization.runtimeChunk)
482
+ ).apply(compiler);
395
483
  }
396
484
  if (!options.optimization.emitOnErrors) {
397
485
  const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
@@ -471,7 +559,7 @@ class WebpackOptionsApply extends OptionsApply {
471
559
  break;
472
560
  }
473
561
  case "size": {
474
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
562
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
475
563
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
476
564
  new OccurrenceChunkIdsPlugin({
477
565
  prioritiseInitial: true
@@ -479,7 +567,7 @@ class WebpackOptionsApply extends OptionsApply {
479
567
  break;
480
568
  }
481
569
  case "total-size": {
482
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
570
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
483
571
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
484
572
  new OccurrenceChunkIdsPlugin({
485
573
  prioritiseInitial: false
@@ -502,7 +590,7 @@ class WebpackOptionsApply extends OptionsApply {
502
590
  for (const minimizer of options.optimization.minimizer) {
503
591
  if (typeof minimizer === "function") {
504
592
  minimizer.call(compiler, compiler);
505
- } else if (minimizer !== "...") {
593
+ } else if (minimizer !== "..." && minimizer) {
506
594
  minimizer.apply(compiler);
507
595
  }
508
596
  }
@@ -523,22 +611,28 @@ class WebpackOptionsApply extends OptionsApply {
523
611
 
524
612
  const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");
525
613
  new AddManagedPathsPlugin(
526
- options.snapshot.managedPaths,
527
- options.snapshot.immutablePaths
614
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
615
+ (options.snapshot.managedPaths),
616
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
617
+ (options.snapshot.immutablePaths),
618
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
619
+ (options.snapshot.unmanagedPaths)
528
620
  ).apply(compiler);
529
621
 
530
622
  if (options.cache && typeof options.cache === "object") {
531
623
  const cacheOptions = options.cache;
532
624
  switch (cacheOptions.type) {
533
625
  case "memory": {
534
- if (isFinite(cacheOptions.maxGenerations)) {
535
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
626
+ if (Number.isFinite(cacheOptions.maxGenerations)) {
627
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
536
628
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
537
629
  new MemoryWithGcCachePlugin({
538
- maxGenerations: cacheOptions.maxGenerations
630
+ maxGenerations:
631
+ /** @type {number} */
632
+ (cacheOptions.maxGenerations)
539
633
  }).apply(compiler);
540
634
  } else {
541
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
635
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
542
636
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
543
637
  new MemoryCachePlugin().apply(compiler);
544
638
  }
@@ -554,16 +648,17 @@ class WebpackOptionsApply extends OptionsApply {
554
648
  }
555
649
  case "filesystem": {
556
650
  const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");
651
+ // eslint-disable-next-line guard-for-in
557
652
  for (const key in cacheOptions.buildDependencies) {
558
653
  const list = cacheOptions.buildDependencies[key];
559
654
  new AddBuildDependenciesPlugin(list).apply(compiler);
560
655
  }
561
- if (!isFinite(cacheOptions.maxMemoryGenerations)) {
562
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
656
+ if (!Number.isFinite(cacheOptions.maxMemoryGenerations)) {
657
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
563
658
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
564
659
  new MemoryCachePlugin().apply(compiler);
565
660
  } else if (cacheOptions.maxMemoryGenerations !== 0) {
566
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
661
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
567
662
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
568
663
  new MemoryWithGcCachePlugin({
569
664
  maxGenerations: cacheOptions.maxMemoryGenerations
@@ -584,18 +679,23 @@ class WebpackOptionsApply extends OptionsApply {
584
679
  new IdleFileCachePlugin(
585
680
  new PackFileCacheStrategy({
586
681
  compiler,
587
- fs: compiler.intermediateFileSystem,
588
- context: options.context,
589
- cacheLocation: cacheOptions.cacheLocation,
682
+ fs:
683
+ /** @type {IntermediateFileSystem} */
684
+ (compiler.intermediateFileSystem),
685
+ context: /** @type {string} */ (options.context),
686
+ cacheLocation:
687
+ /** @type {string} */
688
+ (cacheOptions.cacheLocation),
590
689
  version: cacheOptions.version,
591
690
  logger: compiler.getInfrastructureLogger(
592
691
  "webpack.cache.PackFileCacheStrategy"
593
692
  ),
594
693
  snapshot: options.snapshot,
595
- maxAge: cacheOptions.maxAge,
694
+ maxAge: /** @type {number} */ (cacheOptions.maxAge),
596
695
  profile: cacheOptions.profile,
597
696
  allowCollectingMemory: cacheOptions.allowCollectingMemory,
598
- compression: cacheOptions.compression
697
+ compression: cacheOptions.compression,
698
+ readonly: cacheOptions.readonly
599
699
  }),
600
700
  cacheOptions.idleTimeout,
601
701
  cacheOptions.idleTimeoutForInitialStore,
@@ -628,14 +728,18 @@ class WebpackOptionsApply extends OptionsApply {
628
728
  .for("normal")
629
729
  .tap("WebpackOptionsApply", resolveOptions => {
630
730
  resolveOptions = cleverMerge(options.resolve, resolveOptions);
631
- resolveOptions.fileSystem = compiler.inputFileSystem;
731
+ resolveOptions.fileSystem =
732
+ /** @type {InputFileSystem} */
733
+ (compiler.inputFileSystem);
632
734
  return resolveOptions;
633
735
  });
634
736
  compiler.resolverFactory.hooks.resolveOptions
635
737
  .for("context")
636
738
  .tap("WebpackOptionsApply", resolveOptions => {
637
739
  resolveOptions = cleverMerge(options.resolve, resolveOptions);
638
- resolveOptions.fileSystem = compiler.inputFileSystem;
740
+ resolveOptions.fileSystem =
741
+ /** @type {InputFileSystem} */
742
+ (compiler.inputFileSystem);
639
743
  resolveOptions.resolveToContext = true;
640
744
  return resolveOptions;
641
745
  });
@@ -643,7 +747,9 @@ class WebpackOptionsApply extends OptionsApply {
643
747
  .for("loader")
644
748
  .tap("WebpackOptionsApply", resolveOptions => {
645
749
  resolveOptions = cleverMerge(options.resolveLoader, resolveOptions);
646
- resolveOptions.fileSystem = compiler.inputFileSystem;
750
+ resolveOptions.fileSystem =
751
+ /** @type {InputFileSystem} */
752
+ (compiler.inputFileSystem);
647
753
  return resolveOptions;
648
754
  });
649
755
  compiler.hooks.afterResolvers.call(compiler);
@@ -8,11 +8,18 @@
8
8
  const { applyWebpackOptionsDefaults } = require("./config/defaults");
9
9
  const { getNormalizedWebpackOptions } = require("./config/normalization");
10
10
 
11
+ /** @typedef {import("./config/normalization").WebpackOptions} WebpackOptions */
12
+ /** @typedef {import("./config/normalization").WebpackOptionsNormalized} WebpackOptionsNormalized */
13
+
11
14
  class WebpackOptionsDefaulter {
15
+ /**
16
+ * @param {WebpackOptions} options webpack options
17
+ * @returns {WebpackOptionsNormalized} normalized webpack options
18
+ */
12
19
  process(options) {
13
- options = getNormalizedWebpackOptions(options);
14
- applyWebpackOptionsDefaults(options);
15
- return options;
20
+ const normalizedOptions = getNormalizedWebpackOptions(options);
21
+ applyWebpackOptionsDefaults(normalizedOptions);
22
+ return normalizedOptions;
16
23
  }
17
24
  }
18
25