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
package/lib/Module.js CHANGED
@@ -18,20 +18,28 @@ const makeSerializable = require("./util/makeSerializable");
18
18
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
19
19
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
20
20
  /** @typedef {import("./Chunk")} Chunk */
21
+ /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
21
22
  /** @typedef {import("./ChunkGroup")} ChunkGroup */
23
+ /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
22
24
  /** @typedef {import("./Compilation")} Compilation */
25
+ /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
26
+ /** @typedef {import("./Compilation").ValueCacheVersion} ValueCacheVersion */
23
27
  /** @typedef {import("./ConcatenationScope")} ConcatenationScope */
24
28
  /** @typedef {import("./Dependency")} Dependency */
25
29
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
26
30
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
27
31
  /** @typedef {import("./ExportsInfo").UsageStateType} UsageStateType */
28
32
  /** @typedef {import("./FileSystemInfo")} FileSystemInfo */
33
+ /** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
29
34
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
35
+ /** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */
30
36
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
31
37
  /** @typedef {import("./RequestShortener")} RequestShortener */
32
38
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
33
39
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
34
40
  /** @typedef {import("./WebpackError")} WebpackError */
41
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
42
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
35
43
  /** @typedef {import("./util/Hash")} Hash */
36
44
  /** @template T @typedef {import("./util/LazySet")<T>} LazySet<T> */
37
45
  /** @template T @typedef {import("./util/SortableSet")<T>} SortableSet<T> */
@@ -39,7 +47,7 @@ const makeSerializable = require("./util/makeSerializable");
39
47
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
40
48
 
41
49
  /**
42
- * @typedef {Object} SourceContext
50
+ * @typedef {object} SourceContext
43
51
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
44
52
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
45
53
  * @property {ModuleGraph} moduleGraph the module graph
@@ -48,38 +56,45 @@ const makeSerializable = require("./util/makeSerializable");
48
56
  * @property {string=} type the type of source that should be generated
49
57
  */
50
58
 
59
+ // TODO webpack 6: compilation will be required in CodeGenerationContext
51
60
  /**
52
- * @typedef {Object} CodeGenerationContext
61
+ * @typedef {object} CodeGenerationContext
53
62
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
54
63
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
55
64
  * @property {ModuleGraph} moduleGraph the module graph
56
65
  * @property {ChunkGraph} chunkGraph the chunk graph
57
66
  * @property {RuntimeSpec} runtime the runtimes code should be generated for
58
67
  * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
68
+ * @property {CodeGenerationResults | undefined} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
69
+ * @property {Compilation=} compilation the compilation
70
+ * @property {ReadonlySet<string>=} sourceTypes source types
59
71
  */
60
72
 
61
73
  /**
62
- * @typedef {Object} ConcatenationBailoutReasonContext
74
+ * @typedef {object} ConcatenationBailoutReasonContext
63
75
  * @property {ModuleGraph} moduleGraph the module graph
64
76
  * @property {ChunkGraph} chunkGraph the chunk graph
65
77
  */
66
78
 
79
+ /** @typedef {Set<string>} RuntimeRequirements */
80
+ /** @typedef {ReadonlySet<string>} ReadOnlyRuntimeRequirements */
81
+
67
82
  /**
68
- * @typedef {Object} CodeGenerationResult
83
+ * @typedef {object} CodeGenerationResult
69
84
  * @property {Map<string, Source>} sources the resulting sources for all source types
70
85
  * @property {Map<string, any>=} data the resulting data for all source types
71
- * @property {ReadonlySet<string>} runtimeRequirements the runtime requirements
86
+ * @property {ReadOnlyRuntimeRequirements | null} runtimeRequirements the runtime requirements
72
87
  * @property {string=} hash a hash of the code generation result (will be automatically calculated from sources and runtimeRequirements if not provided)
73
88
  */
74
89
 
75
90
  /**
76
- * @typedef {Object} LibIdentOptions
91
+ * @typedef {object} LibIdentOptions
77
92
  * @property {string} context absolute context path to which lib ident is relative to
78
- * @property {Object=} associatedObjectForCache object for caching
93
+ * @property {object=} associatedObjectForCache object for caching
79
94
  */
80
95
 
81
96
  /**
82
- * @typedef {Object} KnownBuildMeta
97
+ * @typedef {object} KnownBuildMeta
83
98
  * @property {string=} moduleArgument
84
99
  * @property {string=} exportsArgument
85
100
  * @property {boolean=} strict
@@ -92,13 +107,38 @@ const makeSerializable = require("./util/makeSerializable");
92
107
  */
93
108
 
94
109
  /**
95
- * @typedef {Object} NeedBuildContext
110
+ * @typedef {object} KnownBuildInfo
111
+ * @property {boolean=} cacheable
112
+ * @property {boolean=} parsed
113
+ * @property {LazySet<string>=} fileDependencies
114
+ * @property {LazySet<string>=} contextDependencies
115
+ * @property {LazySet<string>=} missingDependencies
116
+ * @property {LazySet<string>=} buildDependencies
117
+ * @property {(Map<string, ValueCacheVersion>)=} valueDependencies
118
+ * @property {TODO=} hash
119
+ * @property {Record<string, Source>=} assets
120
+ * @property {Map<string, AssetInfo | undefined>=} assetsInfo
121
+ * @property {(Snapshot | null)=} snapshot
122
+ */
123
+
124
+ /**
125
+ * @typedef {object} NeedBuildContext
96
126
  * @property {Compilation} compilation
97
127
  * @property {FileSystemInfo} fileSystemInfo
98
128
  * @property {Map<string, string | Set<string>>} valueCacheVersions
99
129
  */
100
130
 
101
131
  /** @typedef {KnownBuildMeta & Record<string, any>} BuildMeta */
132
+ /** @typedef {KnownBuildInfo & Record<string, any>} BuildInfo */
133
+
134
+ /**
135
+ * @typedef {object} FactoryMeta
136
+ * @property {boolean=} sideEffectFree
137
+ */
138
+
139
+ /** @typedef {Set<string>} SourceTypes */
140
+
141
+ /** @typedef {{ factoryMeta: FactoryMeta | undefined, resolveOptions: ResolveOptions | undefined }} UnsafeCacheData */
102
142
 
103
143
  const EMPTY_RESOLVE_OPTIONS = {};
104
144
 
@@ -108,12 +148,16 @@ const DEFAULT_TYPES_UNKNOWN = new Set(["unknown"]);
108
148
  const DEFAULT_TYPES_JS = new Set(["javascript"]);
109
149
 
110
150
  const deprecatedNeedRebuild = util.deprecate(
111
- (module, context) => {
112
- return module.needRebuild(
151
+ /**
152
+ * @param {Module} module the module
153
+ * @param {NeedBuildContext} context context info
154
+ * @returns {boolean} true, when rebuild is needed
155
+ */
156
+ (module, context) =>
157
+ module.needRebuild(
113
158
  context.fileSystemInfo.getDeprecatedFileTimestamps(),
114
159
  context.fileSystemInfo.getDeprecatedContextTimestamps()
115
- );
116
- },
160
+ ),
117
161
  "Module.needRebuild is deprecated in favor of Module.needBuild",
118
162
  "DEP_WEBPACK_MODULE_NEED_REBUILD"
119
163
  );
@@ -122,14 +166,14 @@ const deprecatedNeedRebuild = util.deprecate(
122
166
 
123
167
  class Module extends DependenciesBlock {
124
168
  /**
125
- * @param {string} type the module type
126
- * @param {string=} context an optional context
127
- * @param {string=} layer an optional layer in which the module is
169
+ * @param {ModuleTypes | ""} type the module type, when deserializing the type is not known and is an empty string
170
+ * @param {(string | null)=} context an optional context
171
+ * @param {(string | null)=} layer an optional layer in which the module is
128
172
  */
129
173
  constructor(type, context = null, layer = null) {
130
174
  super();
131
175
 
132
- /** @type {string} */
176
+ /** @type {ModuleTypes} */
133
177
  this.type = type;
134
178
  /** @type {string | null} */
135
179
  this.context = context;
@@ -143,9 +187,9 @@ class Module extends DependenciesBlock {
143
187
  this.debugId = debugId++;
144
188
 
145
189
  // Info from Factory
146
- /** @type {ResolveOptions} */
190
+ /** @type {ResolveOptions | undefined} */
147
191
  this.resolveOptions = EMPTY_RESOLVE_OPTIONS;
148
- /** @type {object | undefined} */
192
+ /** @type {FactoryMeta | undefined} */
149
193
  this.factoryMeta = undefined;
150
194
  // TODO refactor this -> options object filled from Factory
151
195
  // TODO webpack 6: use an enum
@@ -159,16 +203,21 @@ class Module extends DependenciesBlock {
159
203
  this._warnings = undefined;
160
204
  /** @type {WebpackError[] | undefined} */
161
205
  this._errors = undefined;
162
- /** @type {BuildMeta} */
206
+ /** @type {BuildMeta | undefined} */
163
207
  this.buildMeta = undefined;
164
- /** @type {Record<string, any>} */
208
+ /** @type {BuildInfo | undefined} */
165
209
  this.buildInfo = undefined;
166
210
  /** @type {Dependency[] | undefined} */
167
211
  this.presentationalDependencies = undefined;
212
+ /** @type {Dependency[] | undefined} */
213
+ this.codeGenerationDependencies = undefined;
168
214
  }
169
215
 
170
216
  // TODO remove in webpack 6
171
217
  // BACKWARD-COMPAT START
218
+ /**
219
+ * @returns {ModuleId | null} module id
220
+ */
172
221
  get id() {
173
222
  return ChunkGraph.getChunkGraphForModule(
174
223
  this,
@@ -177,6 +226,9 @@ class Module extends DependenciesBlock {
177
226
  ).getModuleId(this);
178
227
  }
179
228
 
229
+ /**
230
+ * @param {ModuleId} value value
231
+ */
180
232
  set id(value) {
181
233
  if (value === "") {
182
234
  this.needId = false;
@@ -227,6 +279,9 @@ class Module extends DependenciesBlock {
227
279
  ).setProfile(this, value);
228
280
  }
229
281
 
282
+ /**
283
+ * @returns {number | null} the pre order index
284
+ */
230
285
  get index() {
231
286
  return ModuleGraph.getModuleGraphForModule(
232
287
  this,
@@ -235,6 +290,9 @@ class Module extends DependenciesBlock {
235
290
  ).getPreOrderIndex(this);
236
291
  }
237
292
 
293
+ /**
294
+ * @param {number} value the pre order index
295
+ */
238
296
  set index(value) {
239
297
  ModuleGraph.getModuleGraphForModule(
240
298
  this,
@@ -243,6 +301,9 @@ class Module extends DependenciesBlock {
243
301
  ).setPreOrderIndex(this, value);
244
302
  }
245
303
 
304
+ /**
305
+ * @returns {number | null} the post order index
306
+ */
246
307
  get index2() {
247
308
  return ModuleGraph.getModuleGraphForModule(
248
309
  this,
@@ -251,6 +312,9 @@ class Module extends DependenciesBlock {
251
312
  ).getPostOrderIndex(this);
252
313
  }
253
314
 
315
+ /**
316
+ * @param {number} value the post order index
317
+ */
254
318
  set index2(value) {
255
319
  ModuleGraph.getModuleGraphForModule(
256
320
  this,
@@ -259,6 +323,9 @@ class Module extends DependenciesBlock {
259
323
  ).setPostOrderIndex(this, value);
260
324
  }
261
325
 
326
+ /**
327
+ * @returns {number | null} the depth
328
+ */
262
329
  get depth() {
263
330
  return ModuleGraph.getModuleGraphForModule(
264
331
  this,
@@ -267,6 +334,9 @@ class Module extends DependenciesBlock {
267
334
  ).getDepth(this);
268
335
  }
269
336
 
337
+ /**
338
+ * @param {number} value the depth
339
+ */
270
340
  set depth(value) {
271
341
  ModuleGraph.getModuleGraphForModule(
272
342
  this,
@@ -275,6 +345,9 @@ class Module extends DependenciesBlock {
275
345
  ).setDepth(this, value);
276
346
  }
277
347
 
348
+ /**
349
+ * @returns {Module | null | undefined} issuer
350
+ */
278
351
  get issuer() {
279
352
  return ModuleGraph.getModuleGraphForModule(
280
353
  this,
@@ -283,6 +356,9 @@ class Module extends DependenciesBlock {
283
356
  ).getIssuer(this);
284
357
  }
285
358
 
359
+ /**
360
+ * @param {Module | null} value issuer
361
+ */
286
362
  set issuer(value) {
287
363
  ModuleGraph.getModuleGraphForModule(
288
364
  this,
@@ -321,6 +397,10 @@ class Module extends DependenciesBlock {
321
397
  );
322
398
  }
323
399
 
400
+ /**
401
+ * @param {Chunk} chunk the chunk
402
+ * @returns {boolean} true, when the module was added
403
+ */
324
404
  addChunk(chunk) {
325
405
  const chunkGraph = ChunkGraph.getChunkGraphForModule(
326
406
  this,
@@ -332,6 +412,10 @@ class Module extends DependenciesBlock {
332
412
  return true;
333
413
  }
334
414
 
415
+ /**
416
+ * @param {Chunk} chunk the chunk
417
+ * @returns {void}
418
+ */
335
419
  removeChunk(chunk) {
336
420
  return ChunkGraph.getChunkGraphForModule(
337
421
  this,
@@ -340,6 +424,10 @@ class Module extends DependenciesBlock {
340
424
  ).disconnectChunkAndModule(chunk, this);
341
425
  }
342
426
 
427
+ /**
428
+ * @param {Chunk} chunk the chunk
429
+ * @returns {boolean} true, when the module is in the chunk
430
+ */
343
431
  isInChunk(chunk) {
344
432
  return ChunkGraph.getChunkGraphForModule(
345
433
  this,
@@ -396,7 +484,6 @@ class Module extends DependenciesBlock {
396
484
  // BACKWARD-COMPAT END
397
485
 
398
486
  /**
399
- * @deprecated moved to .buildInfo.exportsArgument
400
487
  * @returns {string} name of the exports argument
401
488
  */
402
489
  get exportsArgument() {
@@ -404,7 +491,6 @@ class Module extends DependenciesBlock {
404
491
  }
405
492
 
406
493
  /**
407
- * @deprecated moved to .buildInfo.moduleArgument
408
494
  * @returns {string} name of the module argument
409
495
  */
410
496
  get moduleArgument() {
@@ -413,7 +499,7 @@ class Module extends DependenciesBlock {
413
499
 
414
500
  /**
415
501
  * @param {ModuleGraph} moduleGraph the module graph
416
- * @param {boolean} strict the importing module is strict
502
+ * @param {boolean | undefined} strict the importing module is strict
417
503
  * @returns {"namespace" | "default-only" | "default-with-named" | "dynamic"} export type
418
504
  * "namespace": Exports is already a namespace object. namespace = exports.
419
505
  * "dynamic": Check at runtime if __esModule is set. When set: namespace = { ...exports, default: exports }. When not set: namespace = { default: exports }.
@@ -427,7 +513,7 @@ class Module extends DependenciesBlock {
427
513
  case "namespace":
428
514
  return "namespace";
429
515
  case "default":
430
- switch (this.buildMeta.defaultObject) {
516
+ switch (/** @type {BuildMeta} */ (this.buildMeta).defaultObject) {
431
517
  case "redirect":
432
518
  return "default-with-named";
433
519
  case "redirect-warn":
@@ -439,7 +525,7 @@ class Module extends DependenciesBlock {
439
525
  if (strict) return "default-with-named";
440
526
  // Try to figure out value of __esModule by following reexports
441
527
  const handleDefault = () => {
442
- switch (this.buildMeta.defaultObject) {
528
+ switch (/** @type {BuildMeta} */ (this.buildMeta).defaultObject) {
443
529
  case "redirect":
444
530
  case "redirect-warn":
445
531
  return "default-with-named";
@@ -493,6 +579,19 @@ class Module extends DependenciesBlock {
493
579
  this.presentationalDependencies.push(presentationalDependency);
494
580
  }
495
581
 
582
+ /**
583
+ * @param {Dependency} codeGenerationDependency dependency being tied to module.
584
+ * This is a Dependency where the code generation result of the referenced module is needed during code generation.
585
+ * The Dependency should also be added to normal dependencies via addDependency.
586
+ * @returns {void}
587
+ */
588
+ addCodeGenerationDependency(codeGenerationDependency) {
589
+ if (this.codeGenerationDependencies === undefined) {
590
+ this.codeGenerationDependencies = [];
591
+ }
592
+ this.codeGenerationDependencies.push(codeGenerationDependency);
593
+ }
594
+
496
595
  /**
497
596
  * Removes all dependencies and blocks
498
597
  * @returns {void}
@@ -501,6 +600,9 @@ class Module extends DependenciesBlock {
501
600
  if (this.presentationalDependencies !== undefined) {
502
601
  this.presentationalDependencies.length = 0;
503
602
  }
603
+ if (this.codeGenerationDependencies !== undefined) {
604
+ this.codeGenerationDependencies.length = 0;
605
+ }
504
606
  super.clearDependenciesAndBlocks();
505
607
  }
506
608
 
@@ -640,7 +742,7 @@ class Module extends DependenciesBlock {
640
742
  ] of moduleGraph.getIncomingConnectionsByOriginModule(this)) {
641
743
  if (!connections.some(c => c.isTargetActive(chunk.runtime))) continue;
642
744
  for (const originChunk of chunkGraph.getModuleChunksIterable(
643
- fromModule
745
+ /** @type {Module} */ (fromModule)
644
746
  )) {
645
747
  // return true if module this is not reachable from originChunk when ignoring chunk
646
748
  if (!this.isAccessibleInChunk(chunkGraph, originChunk, chunk))
@@ -671,7 +773,7 @@ class Module extends DependenciesBlock {
671
773
 
672
774
  /**
673
775
  * @param {NeedBuildContext} context context info
674
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
776
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
675
777
  * @returns {void}
676
778
  */
677
779
  needBuild(context, callback) {
@@ -764,15 +866,14 @@ class Module extends DependenciesBlock {
764
866
 
765
867
  /**
766
868
  * @abstract
767
- * @returns {Set<string>} types available (do not mutate)
869
+ * @returns {SourceTypes} types available (do not mutate)
768
870
  */
769
871
  getSourceTypes() {
770
872
  // Better override this method to return the correct types
771
873
  if (this.source === Module.prototype.source) {
772
874
  return DEFAULT_TYPES_UNKNOWN;
773
- } else {
774
- return DEFAULT_TYPES_JS;
775
875
  }
876
+ return DEFAULT_TYPES_JS;
776
877
  }
777
878
 
778
879
  /**
@@ -799,10 +900,16 @@ class Module extends DependenciesBlock {
799
900
  runtimeTemplate,
800
901
  moduleGraph: chunkGraph.moduleGraph,
801
902
  chunkGraph,
802
- runtime: undefined
903
+ runtime: undefined,
904
+ codeGenerationResults: undefined
803
905
  };
804
906
  const sources = this.codeGeneration(codeGenContext).sources;
805
- return type ? sources.get(type) : sources.get(first(this.getSourceTypes()));
907
+
908
+ return /** @type {Source} */ (
909
+ type
910
+ ? sources.get(type)
911
+ : sources.get(/** @type {string} */ (first(this.getSourceTypes())))
912
+ );
806
913
  }
807
914
 
808
915
  /* istanbul ignore next */
@@ -907,7 +1014,7 @@ class Module extends DependenciesBlock {
907
1014
  /**
908
1015
  * Module should be unsafe cached. Get data that's needed for that.
909
1016
  * This data will be passed to restoreFromUnsafeCache later.
910
- * @returns {object} cached data
1017
+ * @returns {UnsafeCacheData} cached data
911
1018
  */
912
1019
  getUnsafeCacheData() {
913
1020
  return {
@@ -954,6 +1061,9 @@ class Module extends DependenciesBlock {
954
1061
  buildDependencies
955
1062
  ) {}
956
1063
 
1064
+ /**
1065
+ * @param {ObjectSerializerContext} context context
1066
+ */
957
1067
  serialize(context) {
958
1068
  const { write } = context;
959
1069
  write(this.type);
@@ -976,9 +1086,13 @@ class Module extends DependenciesBlock {
976
1086
  write(this.buildMeta);
977
1087
  write(this.buildInfo);
978
1088
  write(this.presentationalDependencies);
1089
+ write(this.codeGenerationDependencies);
979
1090
  super.serialize(context);
980
1091
  }
981
1092
 
1093
+ /**
1094
+ * @param {ObjectDeserializerContext} context context
1095
+ */
982
1096
  deserialize(context) {
983
1097
  const { read } = context;
984
1098
  this.type = read();
@@ -993,6 +1107,7 @@ class Module extends DependenciesBlock {
993
1107
  this.buildMeta = read();
994
1108
  this.buildInfo = read();
995
1109
  this.presentationalDependencies = read();
1110
+ this.codeGenerationDependencies = read();
996
1111
  super.deserialize(context);
997
1112
  }
998
1113
  }
@@ -1000,6 +1115,8 @@ class Module extends DependenciesBlock {
1000
1115
  makeSerializable(Module, "webpack/lib/Module");
1001
1116
 
1002
1117
  // TODO remove in webpack 6
1118
+ // eslint-disable-next-line no-warning-comments
1119
+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/42919
1003
1120
  Object.defineProperty(Module.prototype, "hasEqualsChunks", {
1004
1121
  get() {
1005
1122
  throw new Error(
@@ -1009,6 +1126,8 @@ Object.defineProperty(Module.prototype, "hasEqualsChunks", {
1009
1126
  });
1010
1127
 
1011
1128
  // TODO remove in webpack 6
1129
+ // eslint-disable-next-line no-warning-comments
1130
+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/42919
1012
1131
  Object.defineProperty(Module.prototype, "isUsed", {
1013
1132
  get() {
1014
1133
  throw new Error(
@@ -1054,6 +1173,8 @@ Object.defineProperty(Module.prototype, "warnings", {
1054
1173
  });
1055
1174
 
1056
1175
  // TODO remove in webpack 6
1176
+ // eslint-disable-next-line no-warning-comments
1177
+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/42919
1057
1178
  Object.defineProperty(Module.prototype, "used", {
1058
1179
  get() {
1059
1180
  throw new Error(
@@ -9,6 +9,9 @@ const { cutOffLoaderExecution } = require("./ErrorHelpers");
9
9
  const WebpackError = require("./WebpackError");
10
10
  const makeSerializable = require("./util/makeSerializable");
11
11
 
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class ModuleBuildError extends WebpackError {
13
16
  /**
14
17
  * @param {string | Error&any} err error thrown
@@ -16,13 +19,9 @@ class ModuleBuildError extends WebpackError {
16
19
  */
17
20
  constructor(err, { from = null } = {}) {
18
21
  let message = "Module build failed";
19
- let details = undefined;
22
+ let details;
20
23
 
21
- if (from) {
22
- message += ` (from ${from}):\n`;
23
- } else {
24
- message += ": ";
25
- }
24
+ message += from ? ` (from ${from}):\n` : ": ";
26
25
 
27
26
  if (err !== null && typeof err === "object") {
28
27
  if (typeof err.stack === "string" && err.stack) {
@@ -33,11 +32,8 @@ class ModuleBuildError extends WebpackError {
33
32
  } else {
34
33
  details = stack;
35
34
 
36
- if (typeof err.message === "string" && err.message) {
37
- message += err.message;
38
- } else {
39
- message += err;
40
- }
35
+ message +=
36
+ typeof err.message === "string" && err.message ? err.message : err;
41
37
  }
42
38
  } else if (typeof err.message === "string" && err.message) {
43
39
  message += err.message;
@@ -55,6 +51,9 @@ class ModuleBuildError extends WebpackError {
55
51
  this.error = err;
56
52
  }
57
53
 
54
+ /**
55
+ * @param {ObjectSerializerContext} context context
56
+ */
58
57
  serialize(context) {
59
58
  const { write } = context;
60
59
 
@@ -63,6 +62,9 @@ class ModuleBuildError extends WebpackError {
63
62
  super.serialize(context);
64
63
  }
65
64
 
65
+ /**
66
+ * @param {ObjectDeserializerContext} context context
67
+ */
66
68
  deserialize(context) {
67
69
  const { read } = context;
68
70
 
@@ -23,16 +23,18 @@ class ModuleDependencyError extends WebpackError {
23
23
  this.name = "ModuleDependencyError";
24
24
  this.details =
25
25
  err && !(/** @type {any} */ (err).hideStack)
26
- ? err.stack.split("\n").slice(1).join("\n")
26
+ ? /** @type {string} */ (err.stack).split("\n").slice(1).join("\n")
27
27
  : undefined;
28
28
  this.module = module;
29
29
  this.loc = loc;
30
30
  /** error is not (de)serialized, so it might be undefined after deserialization */
31
31
  this.error = err;
32
32
 
33
- if (err && /** @type {any} */ (err).hideStack) {
34
- this.stack =
35
- err.stack.split("\n").slice(1).join("\n") + "\n\n" + this.stack;
33
+ if (err && /** @type {any} */ (err).hideStack && err.stack) {
34
+ this.stack = /** @type {string} */ `${err.stack
35
+ .split("\n")
36
+ .slice(1)
37
+ .join("\n")}\n\n${this.stack}`;
36
38
  }
37
39
  }
38
40
  }
@@ -23,16 +23,18 @@ class ModuleDependencyWarning extends WebpackError {
23
23
  this.name = "ModuleDependencyWarning";
24
24
  this.details =
25
25
  err && !(/** @type {any} */ (err).hideStack)
26
- ? err.stack.split("\n").slice(1).join("\n")
26
+ ? /** @type {string} */ (err.stack).split("\n").slice(1).join("\n")
27
27
  : undefined;
28
28
  this.module = module;
29
29
  this.loc = loc;
30
30
  /** error is not (de)serialized, so it might be undefined after deserialization */
31
31
  this.error = err;
32
32
 
33
- if (err && /** @type {any} */ (err).hideStack) {
34
- this.stack =
35
- err.stack.split("\n").slice(1).join("\n") + "\n\n" + this.stack;
33
+ if (err && /** @type {any} */ (err).hideStack && err.stack) {
34
+ this.stack = /** @type {string} */ `${err.stack
35
+ .split("\n")
36
+ .slice(1)
37
+ .join("\n")}\n\n${this.stack}`;
36
38
  }
37
39
  }
38
40
  }
@@ -9,6 +9,9 @@ const { cleanUp } = require("./ErrorHelpers");
9
9
  const WebpackError = require("./WebpackError");
10
10
  const makeSerializable = require("./util/makeSerializable");
11
11
 
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class ModuleError extends WebpackError {
13
16
  /**
14
17
  * @param {Error} err error thrown
@@ -17,11 +20,7 @@ class ModuleError extends WebpackError {
17
20
  constructor(err, { from = null } = {}) {
18
21
  let message = "Module Error";
19
22
 
20
- if (from) {
21
- message += ` (from ${from}):\n`;
22
- } else {
23
- message += ": ";
24
- }
23
+ message += from ? ` (from ${from}):\n` : ": ";
25
24
 
26
25
  if (err && typeof err === "object" && err.message) {
27
26
  message += err.message;
@@ -39,6 +38,9 @@ class ModuleError extends WebpackError {
39
38
  : undefined;
40
39
  }
41
40
 
41
+ /**
42
+ * @param {ObjectSerializerContext} context context
43
+ */
42
44
  serialize(context) {
43
45
  const { write } = context;
44
46
 
@@ -47,6 +49,9 @@ class ModuleError extends WebpackError {
47
49
  super.serialize(context);
48
50
  }
49
51
 
52
+ /**
53
+ * @param {ObjectDeserializerContext} context context
54
+ */
50
55
  deserialize(context) {
51
56
  const { read } = context;
52
57