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,22 +35,43 @@ const {
35
35
  intersectRuntime
36
36
  } = require("./util/runtime");
37
37
 
38
+ const {
39
+ JAVASCRIPT_MODULE_TYPE_AUTO,
40
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
41
+ JAVASCRIPT_MODULE_TYPE_ESM,
42
+ WEBPACK_MODULE_TYPE_RUNTIME
43
+ } = require("./ModuleTypeConstants");
44
+
45
+ /** @typedef {import("estree").CallExpression} CallExpression */
46
+ /** @typedef {import("estree").Expression} Expression */
47
+ /** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputNormalized */
38
48
  /** @typedef {import("./Chunk")} Chunk */
49
+ /** @typedef {import("./Chunk").ChunkId} ChunkId */
50
+ /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
39
51
  /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
40
52
  /** @typedef {import("./Compiler")} Compiler */
53
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
41
54
  /** @typedef {import("./Module")} Module */
55
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
42
56
  /** @typedef {import("./RuntimeModule")} RuntimeModule */
57
+ /** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
58
+ /** @typedef {import("./javascript/JavascriptParserHelpers").Range} Range */
43
59
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
44
60
 
45
61
  /**
46
- * @typedef {Object} HMRJavascriptParserHooks
62
+ * @typedef {object} HMRJavascriptParserHooks
47
63
  * @property {SyncBailHook<[TODO, string[]], void>} hotAcceptCallback
48
64
  * @property {SyncBailHook<[TODO, string[]], void>} hotAcceptWithoutCallback
49
65
  */
50
66
 
67
+ /** @typedef {{ updatedChunkIds: Set<ChunkId>, removedChunkIds: Set<ChunkId>, removedModules: Set<Module>, filename: string, assetInfo: AssetInfo }} HotUpdateMainContentByRuntimeItem */
68
+ /** @typedef {Map<string, HotUpdateMainContentByRuntimeItem>} HotUpdateMainContentByRuntime */
69
+
51
70
  /** @type {WeakMap<JavascriptParser, HMRJavascriptParserHooks>} */
52
71
  const parserHooksMap = new WeakMap();
53
72
 
73
+ const PLUGIN_NAME = "HotModuleReplacementPlugin";
74
+
54
75
  class HotModuleReplacementPlugin {
55
76
  /**
56
77
  * @param {JavascriptParser} parser the parser
@@ -73,6 +94,9 @@ class HotModuleReplacementPlugin {
73
94
  return hooks;
74
95
  }
75
96
 
97
+ /**
98
+ * @param {object=} options options
99
+ */
76
100
  constructor(options) {
77
101
  this.options = options || {};
78
102
  }
@@ -83,10 +107,16 @@ class HotModuleReplacementPlugin {
83
107
  * @returns {void}
84
108
  */
85
109
  apply(compiler) {
110
+ const { _backCompat: backCompat } = compiler;
86
111
  if (compiler.options.output.strictModuleErrorHandling === undefined)
87
112
  compiler.options.output.strictModuleErrorHandling = true;
88
113
  const runtimeRequirements = [RuntimeGlobals.module];
89
114
 
115
+ /**
116
+ * @param {JavascriptParser} parser the parser
117
+ * @param {typeof ModuleHotAcceptDependency} ParamDependency dependency
118
+ * @returns {(expr: CallExpression) => boolean | undefined} callback
119
+ */
90
120
  const createAcceptHandler = (parser, ParamDependency) => {
91
121
  const { hotAcceptCallback, hotAcceptWithoutCallback } =
92
122
  HotModuleReplacementPlugin.getParserHooks(parser);
@@ -95,41 +125,53 @@ class HotModuleReplacementPlugin {
95
125
  const module = parser.state.module;
96
126
  const dep = new ConstDependency(
97
127
  `${module.moduleArgument}.hot.accept`,
98
- expr.callee.range,
128
+ /** @type {Range} */ (expr.callee.range),
99
129
  runtimeRequirements
100
130
  );
101
- dep.loc = expr.loc;
131
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
102
132
  module.addPresentationalDependency(dep);
103
- module.buildInfo.moduleConcatenationBailout = "Hot Module Replacement";
133
+ /** @type {BuildInfo} */
134
+ (module.buildInfo).moduleConcatenationBailout =
135
+ "Hot Module Replacement";
104
136
  if (expr.arguments.length >= 1) {
105
- const arg = parser.evaluateExpression(expr.arguments[0]);
137
+ const arg = parser.evaluateExpression(
138
+ /** @type {Expression} */ (expr.arguments[0])
139
+ );
140
+ /** @type {BasicEvaluatedExpression[]} */
106
141
  let params = [];
107
- let requests = [];
108
142
  if (arg.isString()) {
109
143
  params = [arg];
110
144
  } else if (arg.isArray()) {
111
- params = arg.items.filter(param => param.isString());
145
+ params =
146
+ /** @type {BasicEvaluatedExpression[]} */
147
+ (arg.items).filter(param => param.isString());
112
148
  }
149
+ /** @type {string[]} */
150
+ const requests = [];
113
151
  if (params.length > 0) {
114
- params.forEach((param, idx) => {
115
- const request = param.string;
116
- const dep = new ParamDependency(request, param.range);
152
+ for (const [idx, param] of params.entries()) {
153
+ const request = /** @type {string} */ (param.string);
154
+ const dep = new ParamDependency(
155
+ request,
156
+ /** @type {Range} */ (param.range)
157
+ );
117
158
  dep.optional = true;
118
- dep.loc = Object.create(expr.loc);
159
+ dep.loc = Object.create(
160
+ /** @type {DependencyLocation} */ (expr.loc)
161
+ );
119
162
  dep.loc.index = idx;
120
163
  module.addDependency(dep);
121
164
  requests.push(request);
122
- });
165
+ }
123
166
  if (expr.arguments.length > 1) {
124
167
  hotAcceptCallback.call(expr.arguments[1], requests);
125
168
  for (let i = 1; i < expr.arguments.length; i++) {
126
169
  parser.walkExpression(expr.arguments[i]);
127
170
  }
128
171
  return true;
129
- } else {
130
- hotAcceptWithoutCallback.call(expr, requests);
131
- return true;
132
172
  }
173
+ hotAcceptWithoutCallback.call(expr, requests);
174
+ return true;
133
175
  }
134
176
  }
135
177
  parser.walkExpressions(expr.arguments);
@@ -137,116 +179,140 @@ class HotModuleReplacementPlugin {
137
179
  };
138
180
  };
139
181
 
182
+ /**
183
+ * @param {JavascriptParser} parser the parser
184
+ * @param {typeof ModuleHotDeclineDependency} ParamDependency dependency
185
+ * @returns {(expr: CallExpression) => boolean | undefined} callback
186
+ */
140
187
  const createDeclineHandler = (parser, ParamDependency) => expr => {
141
188
  const module = parser.state.module;
142
189
  const dep = new ConstDependency(
143
190
  `${module.moduleArgument}.hot.decline`,
144
- expr.callee.range,
191
+ /** @type {Range} */ (expr.callee.range),
145
192
  runtimeRequirements
146
193
  );
147
- dep.loc = expr.loc;
194
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
148
195
  module.addPresentationalDependency(dep);
149
- module.buildInfo.moduleConcatenationBailout = "Hot Module Replacement";
196
+ /** @type {BuildInfo} */
197
+ (module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
150
198
  if (expr.arguments.length === 1) {
151
199
  const arg = parser.evaluateExpression(expr.arguments[0]);
200
+ /** @type {BasicEvaluatedExpression[]} */
152
201
  let params = [];
153
202
  if (arg.isString()) {
154
203
  params = [arg];
155
204
  } else if (arg.isArray()) {
156
- params = arg.items.filter(param => param.isString());
205
+ params =
206
+ /** @type {BasicEvaluatedExpression[]} */
207
+ (arg.items).filter(param => param.isString());
157
208
  }
158
- params.forEach((param, idx) => {
159
- const dep = new ParamDependency(param.string, param.range);
209
+ for (const [idx, param] of params.entries()) {
210
+ const dep = new ParamDependency(
211
+ /** @type {string} */ (param.string),
212
+ /** @type {Range} */ (param.range)
213
+ );
160
214
  dep.optional = true;
161
- dep.loc = Object.create(expr.loc);
215
+ dep.loc = Object.create(/** @type {DependencyLocation} */ (expr.loc));
162
216
  dep.loc.index = idx;
163
217
  module.addDependency(dep);
164
- });
218
+ }
165
219
  }
166
220
  return true;
167
221
  };
168
222
 
223
+ /**
224
+ * @param {JavascriptParser} parser the parser
225
+ * @returns {(expr: Expression) => boolean | undefined} callback
226
+ */
169
227
  const createHMRExpressionHandler = parser => expr => {
170
228
  const module = parser.state.module;
171
229
  const dep = new ConstDependency(
172
230
  `${module.moduleArgument}.hot`,
173
- expr.range,
231
+ /** @type {Range} */ (expr.range),
174
232
  runtimeRequirements
175
233
  );
176
- dep.loc = expr.loc;
234
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
177
235
  module.addPresentationalDependency(dep);
178
- module.buildInfo.moduleConcatenationBailout = "Hot Module Replacement";
236
+ /** @type {BuildInfo} */
237
+ (module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
179
238
  return true;
180
239
  };
181
240
 
241
+ /**
242
+ * @param {JavascriptParser} parser the parser
243
+ * @returns {void}
244
+ */
182
245
  const applyModuleHot = parser => {
183
246
  parser.hooks.evaluateIdentifier.for("module.hot").tap(
184
247
  {
185
- name: "HotModuleReplacementPlugin",
248
+ name: PLUGIN_NAME,
186
249
  before: "NodeStuffPlugin"
187
250
  },
188
- expr => {
189
- return evaluateToIdentifier(
251
+ expr =>
252
+ evaluateToIdentifier(
190
253
  "module.hot",
191
254
  "module",
192
255
  () => ["hot"],
193
256
  true
194
- )(expr);
195
- }
257
+ )(expr)
196
258
  );
197
259
  parser.hooks.call
198
260
  .for("module.hot.accept")
199
261
  .tap(
200
- "HotModuleReplacementPlugin",
262
+ PLUGIN_NAME,
201
263
  createAcceptHandler(parser, ModuleHotAcceptDependency)
202
264
  );
203
265
  parser.hooks.call
204
266
  .for("module.hot.decline")
205
267
  .tap(
206
- "HotModuleReplacementPlugin",
268
+ PLUGIN_NAME,
207
269
  createDeclineHandler(parser, ModuleHotDeclineDependency)
208
270
  );
209
271
  parser.hooks.expression
210
272
  .for("module.hot")
211
- .tap("HotModuleReplacementPlugin", createHMRExpressionHandler(parser));
273
+ .tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
212
274
  };
213
275
 
276
+ /**
277
+ * @param {JavascriptParser} parser the parser
278
+ * @returns {void}
279
+ */
214
280
  const applyImportMetaHot = parser => {
215
281
  parser.hooks.evaluateIdentifier
216
282
  .for("import.meta.webpackHot")
217
- .tap("HotModuleReplacementPlugin", expr => {
218
- return evaluateToIdentifier(
283
+ .tap(PLUGIN_NAME, expr =>
284
+ evaluateToIdentifier(
219
285
  "import.meta.webpackHot",
220
286
  "import.meta",
221
287
  () => ["webpackHot"],
222
288
  true
223
- )(expr);
224
- });
289
+ )(expr)
290
+ );
225
291
  parser.hooks.call
226
292
  .for("import.meta.webpackHot.accept")
227
293
  .tap(
228
- "HotModuleReplacementPlugin",
294
+ PLUGIN_NAME,
229
295
  createAcceptHandler(parser, ImportMetaHotAcceptDependency)
230
296
  );
231
297
  parser.hooks.call
232
298
  .for("import.meta.webpackHot.decline")
233
299
  .tap(
234
- "HotModuleReplacementPlugin",
300
+ PLUGIN_NAME,
235
301
  createDeclineHandler(parser, ImportMetaHotDeclineDependency)
236
302
  );
237
303
  parser.hooks.expression
238
304
  .for("import.meta.webpackHot")
239
- .tap("HotModuleReplacementPlugin", createHMRExpressionHandler(parser));
305
+ .tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
240
306
  };
241
307
 
242
308
  compiler.hooks.compilation.tap(
243
- "HotModuleReplacementPlugin",
309
+ PLUGIN_NAME,
244
310
  (compilation, { normalModuleFactory }) => {
245
311
  // This applies the HMR plugin only to the targeted compiler
246
312
  // It should not affect child compilations
247
313
  if (compilation.compiler !== compiler) return;
248
314
 
249
- //#region module.hot.* API
315
+ // #region module.hot.* API
250
316
  compilation.dependencyFactories.set(
251
317
  ModuleHotAcceptDependency,
252
318
  normalModuleFactory
@@ -263,9 +329,9 @@ class HotModuleReplacementPlugin {
263
329
  ModuleHotDeclineDependency,
264
330
  new ModuleHotDeclineDependency.Template()
265
331
  );
266
- //#endregion
332
+ // #endregion
267
333
 
268
- //#region import.meta.webpackHot.* API
334
+ // #region import.meta.webpackHot.* API
269
335
  compilation.dependencyFactories.set(
270
336
  ImportMetaHotAcceptDependency,
271
337
  normalModuleFactory
@@ -282,49 +348,54 @@ class HotModuleReplacementPlugin {
282
348
  ImportMetaHotDeclineDependency,
283
349
  new ImportMetaHotDeclineDependency.Template()
284
350
  );
285
- //#endregion
351
+ // #endregion
286
352
 
287
353
  let hotIndex = 0;
354
+ /** @type {Record<string, string>} */
288
355
  const fullHashChunkModuleHashes = {};
356
+ /** @type {Record<string, string>} */
289
357
  const chunkModuleHashes = {};
290
358
 
291
- compilation.hooks.record.tap(
292
- "HotModuleReplacementPlugin",
293
- (compilation, records) => {
294
- if (records.hash === compilation.hash) return;
295
- const chunkGraph = compilation.chunkGraph;
296
- records.hash = compilation.hash;
297
- records.hotIndex = hotIndex;
298
- records.fullHashChunkModuleHashes = fullHashChunkModuleHashes;
299
- records.chunkModuleHashes = chunkModuleHashes;
300
- records.chunkHashes = {};
301
- records.chunkRuntime = {};
302
- for (const chunk of compilation.chunks) {
303
- records.chunkHashes[chunk.id] = chunk.hash;
304
- records.chunkRuntime[chunk.id] = getRuntimeKey(chunk.runtime);
305
- }
306
- records.chunkModuleIds = {};
307
- for (const chunk of compilation.chunks) {
308
- records.chunkModuleIds[chunk.id] = Array.from(
359
+ compilation.hooks.record.tap(PLUGIN_NAME, (compilation, records) => {
360
+ if (records.hash === compilation.hash) return;
361
+ const chunkGraph = compilation.chunkGraph;
362
+ records.hash = compilation.hash;
363
+ records.hotIndex = hotIndex;
364
+ records.fullHashChunkModuleHashes = fullHashChunkModuleHashes;
365
+ records.chunkModuleHashes = chunkModuleHashes;
366
+ records.chunkHashes = {};
367
+ records.chunkRuntime = {};
368
+ for (const chunk of compilation.chunks) {
369
+ const chunkId = /** @type {ChunkId} */ (chunk.id);
370
+ records.chunkHashes[chunkId] = chunk.hash;
371
+ records.chunkRuntime[chunkId] = getRuntimeKey(chunk.runtime);
372
+ }
373
+ records.chunkModuleIds = {};
374
+ for (const chunk of compilation.chunks) {
375
+ records.chunkModuleIds[/** @type {ChunkId} */ (chunk.id)] =
376
+ Array.from(
309
377
  chunkGraph.getOrderedChunkModulesIterable(
310
378
  chunk,
311
379
  compareModulesById(chunkGraph)
312
380
  ),
313
381
  m => chunkGraph.getModuleId(m)
314
382
  );
315
- }
316
383
  }
317
- );
384
+ });
318
385
  /** @type {TupleSet<[Module, Chunk]>} */
319
386
  const updatedModules = new TupleSet();
320
387
  /** @type {TupleSet<[Module, Chunk]>} */
321
388
  const fullHashModules = new TupleSet();
322
389
  /** @type {TupleSet<[Module, RuntimeSpec]>} */
323
390
  const nonCodeGeneratedModules = new TupleSet();
324
- compilation.hooks.fullHash.tap("HotModuleReplacementPlugin", hash => {
391
+ compilation.hooks.fullHash.tap(PLUGIN_NAME, hash => {
325
392
  const chunkGraph = compilation.chunkGraph;
326
393
  const records = compilation.records;
327
394
  for (const chunk of compilation.chunks) {
395
+ /**
396
+ * @param {Module} module module
397
+ * @returns {string} module hash
398
+ */
328
399
  const getModuleHash = module => {
329
400
  if (
330
401
  compilation.codeGenerationResults.has(module, chunk.runtime)
@@ -333,10 +404,9 @@ class HotModuleReplacementPlugin {
333
404
  module,
334
405
  chunk.runtime
335
406
  );
336
- } else {
337
- nonCodeGeneratedModules.add(module, chunk.runtime);
338
- return chunkGraph.getModuleHash(module, chunk.runtime);
339
407
  }
408
+ nonCodeGeneratedModules.add(module, chunk.runtime);
409
+ return chunkGraph.getModuleHash(module, chunk.runtime);
340
410
  };
341
411
  const fullHashModulesInThisChunk =
342
412
  chunkGraph.getChunkFullHashModulesSet(chunk);
@@ -378,28 +448,26 @@ class HotModuleReplacementPlugin {
378
448
  chunkModuleHashes[key] = hash;
379
449
  }
380
450
  }
381
- } else {
382
- if (fullHashModulesInThisChunk !== undefined) {
383
- for (const module of modules) {
384
- const key = `${chunk.id}|${module.identifier()}`;
385
- const hash = getModuleHash(module);
386
- if (
387
- fullHashModulesInThisChunk.has(
388
- /** @type {RuntimeModule} */ (module)
389
- )
390
- ) {
391
- fullHashChunkModuleHashes[key] = hash;
392
- } else {
393
- chunkModuleHashes[key] = hash;
394
- }
395
- }
396
- } else {
397
- for (const module of modules) {
398
- const key = `${chunk.id}|${module.identifier()}`;
399
- const hash = getModuleHash(module);
451
+ } else if (fullHashModulesInThisChunk !== undefined) {
452
+ for (const module of modules) {
453
+ const key = `${chunk.id}|${module.identifier()}`;
454
+ const hash = getModuleHash(module);
455
+ if (
456
+ fullHashModulesInThisChunk.has(
457
+ /** @type {RuntimeModule} */ (module)
458
+ )
459
+ ) {
460
+ fullHashChunkModuleHashes[key] = hash;
461
+ } else {
400
462
  chunkModuleHashes[key] = hash;
401
463
  }
402
464
  }
465
+ } else {
466
+ for (const module of modules) {
467
+ const key = `${chunk.id}|${module.identifier()}`;
468
+ const hash = getModuleHash(module);
469
+ chunkModuleHashes[key] = hash;
470
+ }
403
471
  }
404
472
  }
405
473
  }
@@ -411,7 +479,7 @@ class HotModuleReplacementPlugin {
411
479
  });
412
480
  compilation.hooks.processAssets.tap(
413
481
  {
414
- name: "HotModuleReplacementPlugin",
482
+ name: PLUGIN_NAME,
415
483
  stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
416
484
  },
417
485
  () => {
@@ -432,14 +500,14 @@ class HotModuleReplacementPlugin {
432
500
  : compilation.codeGenerationResults.getHash(
433
501
  module,
434
502
  chunk.runtime
435
- );
503
+ );
436
504
  if (records.chunkModuleHashes[key] !== hash) {
437
505
  updatedModules.add(module, chunk);
438
506
  }
439
507
  chunkModuleHashes[key] = hash;
440
508
  }
441
509
 
442
- /** @type {Map<string, { updatedChunkIds: Set<string|number>, removedChunkIds: Set<string|number>, removedModules: Set<Module>, filename: string, assetInfo: AssetInfo }>} */
510
+ /** @type {HotUpdateMainContentByRuntime} */
443
511
  const hotUpdateMainContentByRuntime = new Map();
444
512
  let allOldRuntime;
445
513
  for (const key of Object.keys(records.chunkRuntime)) {
@@ -449,19 +517,23 @@ class HotModuleReplacementPlugin {
449
517
  forEachRuntime(allOldRuntime, runtime => {
450
518
  const { path: filename, info: assetInfo } =
451
519
  compilation.getPathWithInfo(
452
- compilation.outputOptions.hotUpdateMainFilename,
520
+ /** @type {NonNullable<OutputNormalized["hotUpdateMainFilename"]>} */
521
+ (compilation.outputOptions.hotUpdateMainFilename),
453
522
  {
454
523
  hash: records.hash,
455
524
  runtime
456
525
  }
457
526
  );
458
- hotUpdateMainContentByRuntime.set(runtime, {
459
- updatedChunkIds: new Set(),
460
- removedChunkIds: new Set(),
461
- removedModules: new Set(),
462
- filename,
463
- assetInfo
464
- });
527
+ hotUpdateMainContentByRuntime.set(
528
+ /** @type {string} */ (runtime),
529
+ {
530
+ updatedChunkIds: new Set(),
531
+ removedChunkIds: new Set(),
532
+ removedModules: new Set(),
533
+ filename,
534
+ assetInfo
535
+ }
536
+ );
465
537
  });
466
538
  if (hotUpdateMainContentByRuntime.size === 0) return;
467
539
 
@@ -469,7 +541,9 @@ class HotModuleReplacementPlugin {
469
541
  /** @type {Map<number|string, Module>} */
470
542
  const allModules = new Map();
471
543
  for (const module of compilation.modules) {
472
- const id = chunkGraph.getModuleId(module);
544
+ const id =
545
+ /** @type {ModuleId} */
546
+ (chunkGraph.getModuleId(module));
473
547
  allModules.set(id, module);
474
548
  }
475
549
 
@@ -491,6 +565,7 @@ class HotModuleReplacementPlugin {
491
565
  }
492
566
  }
493
567
 
568
+ /** @type {ChunkId | null} */
494
569
  let chunkId;
495
570
  let newModules;
496
571
  let newRuntimeModules;
@@ -532,16 +607,21 @@ class HotModuleReplacementPlugin {
532
607
  removedFromRuntime = subtractRuntime(oldRuntime, newRuntime);
533
608
  } else {
534
609
  // chunk has completely removed
535
- chunkId = `${+key}` === key ? +key : key;
610
+ chunkId = `${Number(key)}` === key ? Number(key) : key;
536
611
  removedFromRuntime = oldRuntime;
537
612
  newRuntime = oldRuntime;
538
613
  }
539
614
  if (removedFromRuntime) {
540
615
  // chunk was removed from some runtimes
541
616
  forEachRuntime(removedFromRuntime, runtime => {
542
- hotUpdateMainContentByRuntime
543
- .get(runtime)
544
- .removedChunkIds.add(chunkId);
617
+ const item =
618
+ /** @type {HotUpdateMainContentByRuntimeItem} */
619
+ (
620
+ hotUpdateMainContentByRuntime.get(
621
+ /** @type {string} */ (runtime)
622
+ )
623
+ );
624
+ item.removedChunkIds.add(/** @type {ChunkId} */ (chunkId));
545
625
  });
546
626
  // dispose modules from the chunk in these runtimes
547
627
  // where they are no longer in this runtime
@@ -556,9 +636,9 @@ class HotModuleReplacementPlugin {
556
636
  : compilation.codeGenerationResults.getHash(
557
637
  module,
558
638
  newRuntime
559
- );
639
+ );
560
640
  if (hash !== oldHash) {
561
- if (module.type === "runtime") {
641
+ if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) {
562
642
  newRuntimeModules = newRuntimeModules || [];
563
643
  newRuntimeModules.push(
564
644
  /** @type {RuntimeModule} */ (module)
@@ -581,13 +661,19 @@ class HotModuleReplacementPlugin {
581
661
  for (const moduleRuntime of runtimes) {
582
662
  if (typeof moduleRuntime === "string") {
583
663
  if (moduleRuntime === runtime) return;
584
- } else if (moduleRuntime !== undefined) {
585
- if (moduleRuntime.has(runtime)) return;
586
- }
664
+ } else if (
665
+ moduleRuntime !== undefined &&
666
+ moduleRuntime.has(/** @type {string} */ (runtime))
667
+ )
668
+ return;
587
669
  }
588
- hotUpdateMainContentByRuntime
589
- .get(runtime)
590
- .removedModules.add(module);
670
+ const item =
671
+ /** @type {HotUpdateMainContentByRuntimeItem} */ (
672
+ hotUpdateMainContentByRuntime.get(
673
+ /** @type {string} */ (runtime)
674
+ )
675
+ );
676
+ item.removedModules.add(module);
591
677
  });
592
678
  }
593
679
  }
@@ -597,7 +683,8 @@ class HotModuleReplacementPlugin {
597
683
  (newRuntimeModules && newRuntimeModules.length > 0)
598
684
  ) {
599
685
  const hotUpdateChunk = new HotUpdateChunk();
600
- ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
686
+ if (backCompat)
687
+ ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
601
688
  hotUpdateChunk.id = chunkId;
602
689
  hotUpdateChunk.runtime = newRuntime;
603
690
  if (currentChunk) {
@@ -660,9 +747,13 @@ class HotModuleReplacementPlugin {
660
747
  }
661
748
  }
662
749
  forEachRuntime(newRuntime, runtime => {
663
- hotUpdateMainContentByRuntime
664
- .get(runtime)
665
- .updatedChunkIds.add(chunkId);
750
+ const item =
751
+ /** @type {HotUpdateMainContentByRuntimeItem} */ (
752
+ hotUpdateMainContentByRuntime.get(
753
+ /** @type {string} */ (runtime)
754
+ )
755
+ );
756
+ item.updatedChunkIds.add(/** @type {ChunkId} */ (chunkId));
666
757
  });
667
758
  }
668
759
  }
@@ -716,10 +807,12 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
716
807
  removedModules.size === 0
717
808
  ? completelyRemovedModulesArray
718
809
  : completelyRemovedModulesArray.concat(
719
- Array.from(removedModules, m =>
720
- chunkGraph.getModuleId(m)
810
+ Array.from(
811
+ removedModules,
812
+ m =>
813
+ /** @type {ModuleId} */ (chunkGraph.getModuleId(m))
721
814
  )
722
- )
815
+ )
723
816
  };
724
817
 
725
818
  const source = new RawSource(JSON.stringify(hotUpdateMainJson));
@@ -732,7 +825,7 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
732
825
  );
733
826
 
734
827
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
735
- "HotModuleReplacementPlugin",
828
+ PLUGIN_NAME,
736
829
  (chunk, runtimeRequirements) => {
737
830
  runtimeRequirements.add(RuntimeGlobals.hmrDownloadManifest);
738
831
  runtimeRequirements.add(RuntimeGlobals.hmrDownloadUpdateHandlers);
@@ -746,24 +839,24 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
746
839
  );
747
840
 
748
841
  normalModuleFactory.hooks.parser
749
- .for("javascript/auto")
750
- .tap("HotModuleReplacementPlugin", parser => {
842
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
843
+ .tap(PLUGIN_NAME, parser => {
751
844
  applyModuleHot(parser);
752
845
  applyImportMetaHot(parser);
753
846
  });
754
847
  normalModuleFactory.hooks.parser
755
- .for("javascript/dynamic")
756
- .tap("HotModuleReplacementPlugin", parser => {
848
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
849
+ .tap(PLUGIN_NAME, parser => {
757
850
  applyModuleHot(parser);
758
851
  });
759
852
  normalModuleFactory.hooks.parser
760
- .for("javascript/esm")
761
- .tap("HotModuleReplacementPlugin", parser => {
853
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
854
+ .tap(PLUGIN_NAME, parser => {
762
855
  applyImportMetaHot(parser);
763
856
  });
764
857
 
765
858
  NormalModule.getCompilationHooks(compilation).loader.tap(
766
- "HotModuleReplacementPlugin",
859
+ PLUGIN_NAME,
767
860
  context => {
768
861
  context.hot = true;
769
862
  }