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
@@ -26,13 +26,13 @@ class IgnoreErrorModuleFactory extends ModuleFactory {
26
26
 
27
27
  /**
28
28
  * @param {ModuleFactoryCreateData} data data object
29
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
29
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
30
30
  * @returns {void}
31
31
  */
32
32
  create(data, callback) {
33
- this.normalModuleFactory.create(data, (err, result) => {
34
- return callback(null, result);
35
- });
33
+ this.normalModuleFactory.create(data, (err, result) =>
34
+ callback(null, result)
35
+ );
36
36
  }
37
37
  }
38
38
 
@@ -28,14 +28,15 @@ class IgnorePlugin {
28
28
  validate(options);
29
29
  this.options = options;
30
30
 
31
- /** @private @type {Function} */
31
+ /**
32
+ * @private
33
+ * @type {Function}
34
+ */
32
35
  this.checkIgnore = this.checkIgnore.bind(this);
33
36
  }
34
37
 
35
38
  /**
36
- * Note that if "contextRegExp" is given, both the "resourceRegExp"
37
- * and "contextRegExp" have to match.
38
- *
39
+ * Note that if "contextRegExp" is given, both the "resourceRegExp" and "contextRegExp" have to match.
39
40
  * @param {ResolveData} resolveData resolve data
40
41
  * @returns {false|undefined} returns false when the request should be ignored, otherwise undefined
41
42
  */
@@ -15,6 +15,7 @@ class IgnoreWarningsPlugin {
15
15
  constructor(ignoreWarnings) {
16
16
  this._ignoreWarnings = ignoreWarnings;
17
17
  }
18
+
18
19
  /**
19
20
  * Apply the plugin
20
21
  * @param {Compiler} compiler the compiler instance
@@ -22,15 +23,11 @@ class IgnoreWarningsPlugin {
22
23
  */
23
24
  apply(compiler) {
24
25
  compiler.hooks.compilation.tap("IgnoreWarningsPlugin", compilation => {
25
- compilation.hooks.processWarnings.tap(
26
- "IgnoreWarningsPlugin",
27
- warnings => {
28
- return warnings.filter(warning => {
29
- return !this._ignoreWarnings.some(ignore =>
30
- ignore(warning, compilation)
31
- );
32
- });
33
- }
26
+ compilation.hooks.processWarnings.tap("IgnoreWarningsPlugin", warnings =>
27
+ warnings.filter(
28
+ warning =>
29
+ !this._ignoreWarnings.some(ignore => ignore(warning, compilation))
30
+ )
34
31
  );
35
32
  });
36
33
  }
@@ -10,17 +10,21 @@ const makeSerializable = require("./util/makeSerializable");
10
10
 
11
11
  /** @typedef {import("webpack-sources").Source} Source */
12
12
  /** @typedef {import("./Generator").GenerateContext} GenerateContext */
13
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
15
 
14
16
  /**
15
- * @param {InitFragment} fragment the init fragment
17
+ * @template T
18
+ * @param {InitFragment<T>} fragment the init fragment
16
19
  * @param {number} index index
17
- * @returns {[InitFragment, number]} tuple with both
20
+ * @returns {[InitFragment<T>, number]} tuple with both
18
21
  */
19
22
  const extractFragmentIndex = (fragment, index) => [fragment, index];
20
23
 
21
24
  /**
22
- * @param {[InitFragment, number]} a first pair
23
- * @param {[InitFragment, number]} b second pair
25
+ * @template T
26
+ * @param {[InitFragment<T>, number]} a first pair
27
+ * @param {[InitFragment<T>, number]} b second pair
24
28
  * @returns {number} sort value
25
29
  */
26
30
  const sortFragmentWithIndex = ([a, i], [b, j]) => {
@@ -32,15 +36,15 @@ const sortFragmentWithIndex = ([a, i], [b, j]) => {
32
36
  };
33
37
 
34
38
  /**
35
- * @template Context
39
+ * @template GenerateContext
36
40
  */
37
41
  class InitFragment {
38
42
  /**
39
- * @param {string|Source} content the source code that will be included as initialization code
43
+ * @param {string | Source | undefined} content the source code that will be included as initialization code
40
44
  * @param {number} stage category of initialization code (contribute to order)
41
45
  * @param {number} position position in the category (contribute to order)
42
46
  * @param {string=} key unique key to avoid emitting the same initialization code twice
43
- * @param {string|Source=} endContent the source code that will be included at the end of the module
47
+ * @param {string | Source=} endContent the source code that will be included at the end of the module
44
48
  */
45
49
  constructor(content, stage, position, key, endContent) {
46
50
  this.content = content;
@@ -51,21 +55,29 @@ class InitFragment {
51
55
  }
52
56
 
53
57
  /**
54
- * @param {Context} context context
55
- * @returns {string|Source} the source code that will be included as initialization code
58
+ * @param {GenerateContext} context context
59
+ * @returns {string | Source | undefined} the source code that will be included as initialization code
56
60
  */
57
61
  getContent(context) {
58
62
  return this.content;
59
63
  }
60
64
 
61
65
  /**
62
- * @param {Context} context context
66
+ * @param {GenerateContext} context context
63
67
  * @returns {string|Source=} the source code that will be included at the end of the module
64
68
  */
65
69
  getEndContent(context) {
66
70
  return this.endContent;
67
71
  }
68
72
 
73
+ /**
74
+ * @template Context
75
+ * @template T
76
+ * @param {Source} source sources
77
+ * @param {InitFragment<T>[]} initFragments init fragments
78
+ * @param {Context} context context
79
+ * @returns {Source} source
80
+ */
69
81
  static addToSource(source, initFragments, context) {
70
82
  if (initFragments.length > 0) {
71
83
  // Sort fragments by position. If 2 fragments have the same position,
@@ -77,7 +89,12 @@ class InitFragment {
77
89
  // Deduplicate fragments. If a fragment has no key, it is always included.
78
90
  const keyedFragments = new Map();
79
91
  for (const [fragment] of sortedFragments) {
80
- if (typeof fragment.mergeAll === "function") {
92
+ if (
93
+ typeof (
94
+ /** @type {InitFragment<T> & { mergeAll?: (fragments: InitFragment<Context>[]) => InitFragment<Context>[] }} */
95
+ (fragment).mergeAll
96
+ ) === "function"
97
+ ) {
81
98
  if (!fragment.key) {
82
99
  throw new Error(
83
100
  `InitFragment with mergeAll function must have a valid key: ${fragment.constructor.name}`
@@ -99,7 +116,7 @@ class InitFragment {
99
116
  continue;
100
117
  }
101
118
  }
102
- keyedFragments.set(fragment.key || Symbol(), fragment);
119
+ keyedFragments.set(fragment.key || Symbol("fragment key"), fragment);
103
120
  }
104
121
 
105
122
  const concatSource = new ConcatSource();
@@ -120,11 +137,13 @@ class InitFragment {
120
137
  concatSource.add(content);
121
138
  }
122
139
  return concatSource;
123
- } else {
124
- return source;
125
140
  }
141
+ return source;
126
142
  }
127
143
 
144
+ /**
145
+ * @param {ObjectSerializerContext} context context
146
+ */
128
147
  serialize(context) {
129
148
  const { write } = context;
130
149
 
@@ -135,6 +154,9 @@ class InitFragment {
135
154
  write(this.endContent);
136
155
  }
137
156
 
157
+ /**
158
+ * @param {ObjectDeserializerContext} context context
159
+ */
138
160
  deserialize(context) {
139
161
  const { read } = context;
140
162
 
@@ -148,7 +170,9 @@ class InitFragment {
148
170
 
149
171
  makeSerializable(InitFragment, "webpack/lib/InitFragment");
150
172
 
151
- InitFragment.prototype.merge = undefined;
173
+ InitFragment.prototype.merge =
174
+ /** @type {TODO} */
175
+ (undefined);
152
176
 
153
177
  InitFragment.STAGE_CONSTANTS = 10;
154
178
  InitFragment.STAGE_ASYNC_BOUNDARY = 20;
@@ -5,11 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const InnerGraph = require("./optimize/InnerGraph");
9
14
 
10
15
  /** @typedef {import("./Compiler")} Compiler */
16
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
11
17
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
12
18
 
19
+ const PLUGIN_NAME = "JavascriptMetaInfoPlugin";
20
+
13
21
  class JavascriptMetaInfoPlugin {
14
22
  /**
15
23
  * Apply the plugin
@@ -18,16 +26,19 @@ class JavascriptMetaInfoPlugin {
18
26
  */
19
27
  apply(compiler) {
20
28
  compiler.hooks.compilation.tap(
21
- "JavascriptMetaInfoPlugin",
29
+ PLUGIN_NAME,
22
30
  (compilation, { normalModuleFactory }) => {
23
31
  /**
24
32
  * @param {JavascriptParser} parser the parser
25
33
  * @returns {void}
26
34
  */
27
35
  const handler = parser => {
28
- parser.hooks.call.for("eval").tap("JavascriptMetaInfoPlugin", () => {
29
- parser.state.module.buildInfo.moduleConcatenationBailout = "eval()";
30
- parser.state.module.buildInfo.usingEval = true;
36
+ parser.hooks.call.for("eval").tap(PLUGIN_NAME, () => {
37
+ const buildInfo =
38
+ /** @type {BuildInfo} */
39
+ (parser.state.module.buildInfo);
40
+ buildInfo.moduleConcatenationBailout = "eval()";
41
+ buildInfo.usingEval = true;
31
42
  const currentSymbol = InnerGraph.getTopLevelSymbol(parser.state);
32
43
  if (currentSymbol) {
33
44
  InnerGraph.addUsage(parser.state, null, currentSymbol);
@@ -35,12 +46,13 @@ class JavascriptMetaInfoPlugin {
35
46
  InnerGraph.bailout(parser.state);
36
47
  }
37
48
  });
38
- parser.hooks.finish.tap("JavascriptMetaInfoPlugin", () => {
39
- let topLevelDeclarations =
40
- parser.state.module.buildInfo.topLevelDeclarations;
49
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
50
+ const buildInfo =
51
+ /** @type {BuildInfo} */
52
+ (parser.state.module.buildInfo);
53
+ let topLevelDeclarations = buildInfo.topLevelDeclarations;
41
54
  if (topLevelDeclarations === undefined) {
42
- topLevelDeclarations =
43
- parser.state.module.buildInfo.topLevelDeclarations = new Set();
55
+ topLevelDeclarations = buildInfo.topLevelDeclarations = new Set();
44
56
  }
45
57
  for (const name of parser.scope.definitions.asSet()) {
46
58
  const freeInfo = parser.getFreeInfoFromVariable(name);
@@ -52,14 +64,14 @@ class JavascriptMetaInfoPlugin {
52
64
  };
53
65
 
54
66
  normalModuleFactory.hooks.parser
55
- .for("javascript/auto")
56
- .tap("JavascriptMetaInfoPlugin", handler);
67
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
68
+ .tap(PLUGIN_NAME, handler);
57
69
  normalModuleFactory.hooks.parser
58
- .for("javascript/dynamic")
59
- .tap("JavascriptMetaInfoPlugin", handler);
70
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
71
+ .tap(PLUGIN_NAME, handler);
60
72
  normalModuleFactory.hooks.parser
61
- .for("javascript/esm")
62
- .tap("JavascriptMetaInfoPlugin", handler);
73
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
74
+ .tap(PLUGIN_NAME, handler);
63
75
  }
64
76
  );
65
77
  }
@@ -11,16 +11,32 @@ const { someInIterable } = require("./util/IterableHelpers");
11
11
  const { compareModulesById } = require("./util/comparators");
12
12
  const { dirname, mkdirp } = require("./util/fs");
13
13
 
14
+ /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
14
15
  /** @typedef {import("./Compiler")} Compiler */
16
+ /** @typedef {import("./Compiler").IntermediateFileSystem} IntermediateFileSystem */
17
+ /** @typedef {import("./Module").BuildMeta} BuildMeta */
15
18
 
16
19
  /**
17
- * @typedef {Object} ManifestModuleData
20
+ * @typedef {object} ManifestModuleData
18
21
  * @property {string | number} id
19
- * @property {Object} buildMeta
20
- * @property {boolean | string[]} exports
22
+ * @property {BuildMeta} buildMeta
23
+ * @property {boolean | string[] | undefined} exports
24
+ */
25
+
26
+ /**
27
+ * @typedef {object} LibManifestPluginOptions
28
+ * @property {string=} context Context of requests in the manifest file (defaults to the webpack context).
29
+ * @property {boolean=} entryOnly If true, only entry points will be exposed (default: true).
30
+ * @property {boolean=} format If true, manifest json file (output) will be formatted.
31
+ * @property {string=} name Name of the exposed dll function (external name, use value of 'output.library').
32
+ * @property {string} path Absolute path to the manifest json file (output).
33
+ * @property {string=} type Type of the dll bundle (external type, use value of 'output.libraryTarget').
21
34
  */
22
35
 
23
36
  class LibManifestPlugin {
37
+ /**
38
+ * @param {LibManifestPluginOptions} options the options
39
+ */
24
40
  constructor(options) {
25
41
  this.options = options;
26
42
  }
@@ -32,10 +48,15 @@ class LibManifestPlugin {
32
48
  */
33
49
  apply(compiler) {
34
50
  compiler.hooks.emit.tapAsync(
35
- "LibManifestPlugin",
51
+ {
52
+ name: "LibManifestPlugin",
53
+ stage: 110
54
+ },
36
55
  (compilation, callback) => {
37
56
  const moduleGraph = compilation.moduleGraph;
38
- asyncLib.forEach(
57
+ // store used paths to detect issue and output an error. #18200
58
+ const usedPaths = new Set();
59
+ asyncLib.each(
39
60
  Array.from(compilation.chunks),
40
61
  (chunk, callback) => {
41
62
  if (!chunk.canBeInitial()) {
@@ -46,10 +67,16 @@ class LibManifestPlugin {
46
67
  const targetPath = compilation.getPath(this.options.path, {
47
68
  chunk
48
69
  });
70
+ if (usedPaths.has(targetPath)) {
71
+ callback(new Error("each chunk must have a unique path"));
72
+ return;
73
+ }
74
+ usedPaths.add(targetPath);
49
75
  const name =
50
76
  this.options.name &&
51
77
  compilation.getPath(this.options.name, {
52
- chunk
78
+ chunk,
79
+ contentHashType: "javascript"
53
80
  });
54
81
  const content = Object.create(null);
55
82
  for (const module of chunkGraph.getOrderedChunkModulesIterable(
@@ -66,7 +93,9 @@ class LibManifestPlugin {
66
93
  continue;
67
94
  }
68
95
  const ident = module.libIdent({
69
- context: this.options.context || compiler.options.context,
96
+ context:
97
+ this.options.context ||
98
+ /** @type {string} */ (compiler.options.context),
70
99
  associatedObjectForCache: compiler.root
71
100
  });
72
101
  if (ident) {
@@ -74,8 +103,8 @@ class LibManifestPlugin {
74
103
  const providedExports = exportsInfo.getProvidedExports();
75
104
  /** @type {ManifestModuleData} */
76
105
  const data = {
77
- id: chunkGraph.getModuleId(module),
78
- buildMeta: module.buildMeta,
106
+ id: /** @type {ModuleId} */ (chunkGraph.getModuleId(module)),
107
+ buildMeta: /** @type {BuildMeta} */ (module.buildMeta),
79
108
  exports: Array.isArray(providedExports)
80
109
  ? providedExports
81
110
  : undefined
@@ -93,16 +122,16 @@ class LibManifestPlugin {
93
122
  ? JSON.stringify(manifest, null, 2)
94
123
  : JSON.stringify(manifest);
95
124
  const buffer = Buffer.from(manifestContent, "utf8");
125
+ const intermediateFileSystem =
126
+ /** @type {IntermediateFileSystem} */ (
127
+ compiler.intermediateFileSystem
128
+ );
96
129
  mkdirp(
97
- compiler.intermediateFileSystem,
98
- dirname(compiler.intermediateFileSystem, targetPath),
130
+ intermediateFileSystem,
131
+ dirname(intermediateFileSystem, targetPath),
99
132
  err => {
100
133
  if (err) return callback(err);
101
- compiler.intermediateFileSystem.writeFile(
102
- targetPath,
103
- buffer,
104
- callback
105
- );
134
+ intermediateFileSystem.writeFile(targetPath, buffer, callback);
106
135
  }
107
136
  );
108
137
  },
@@ -11,6 +11,7 @@ const createSchemaValidation = require("./util/create-schema-validation");
11
11
 
12
12
  /** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */
13
13
  /** @typedef {import("./Compiler")} Compiler */
14
+ /** @typedef {import("./ModuleFilenameHelpers").MatchObject} MatchObject */
14
15
 
15
16
  const validate = createSchemaValidation(
16
17
  require("../schemas/plugins/LoaderOptionsPlugin.check.js"),
@@ -20,17 +21,26 @@ const validate = createSchemaValidation(
20
21
  baseDataPath: "options"
21
22
  }
22
23
  );
24
+
23
25
  class LoaderOptionsPlugin {
24
26
  /**
25
- * @param {LoaderOptionsPluginOptions} options options object
27
+ * @param {LoaderOptionsPluginOptions & MatchObject} options options object
26
28
  */
27
29
  constructor(options = {}) {
28
30
  validate(options);
31
+ // If no options are set then generate empty options object
29
32
  if (typeof options !== "object") options = {};
30
33
  if (!options.test) {
31
- options.test = {
34
+ // This is mocking a RegExp object which always returns true
35
+ // TODO: Figure out how to do `as unknown as RegExp` for this line
36
+ // in JSDoc equivalent
37
+ /** @type {any} */
38
+ const defaultTrueMockRegExp = {
32
39
  test: () => true
33
40
  };
41
+
42
+ /** @type {RegExp} */
43
+ options.test = defaultTrueMockRegExp;
34
44
  }
35
45
  this.options = options;
36
46
  }
@@ -52,7 +62,7 @@ class LoaderOptionsPlugin {
52
62
  if (
53
63
  ModuleFilenameHelpers.matchObject(
54
64
  options,
55
- i < 0 ? resource : resource.substr(0, i)
65
+ i < 0 ? resource : resource.slice(0, i)
56
66
  )
57
67
  ) {
58
68
  for (const key of Object.keys(options)) {
@@ -10,6 +10,7 @@ const util = require("util");
10
10
  const RuntimeGlobals = require("./RuntimeGlobals");
11
11
  const memoize = require("./util/memoize");
12
12
 
13
+ /** @typedef {import("tapable").Tap} Tap */
13
14
  /** @typedef {import("webpack-sources").ConcatSource} ConcatSource */
14
15
  /** @typedef {import("webpack-sources").Source} Source */
15
16
  /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */
@@ -17,15 +18,24 @@ const memoize = require("./util/memoize");
17
18
  /** @typedef {import("./Chunk")} Chunk */
18
19
  /** @typedef {import("./Compilation")} Compilation */
19
20
  /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
21
+ /** @typedef {import("./Compilation").InterpolatedPathAndAssetInfo} InterpolatedPathAndAssetInfo */
20
22
  /** @typedef {import("./Module")} Module} */
21
23
  /** @typedef {import("./util/Hash")} Hash} */
22
24
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates} */
23
25
  /** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext} */
26
+ /** @typedef {import("./javascript/JavascriptModulesPlugin").RenderBootstrapContext} RenderBootstrapContext} */
27
+ /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkHashContext} ChunkHashContext} */
24
28
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate} */
25
29
  /** @typedef {import("./ModuleGraph")} ModuleGraph} */
26
30
  /** @typedef {import("./ChunkGraph")} ChunkGraph} */
27
31
  /** @typedef {import("./Template").RenderManifestOptions} RenderManifestOptions} */
28
32
  /** @typedef {import("./Template").RenderManifestEntry} RenderManifestEntry} */
33
+ /** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath} */
34
+ /** @typedef {import("./TemplatedPathPlugin").PathData} PathData} */
35
+ /**
36
+ * @template T
37
+ * @typedef {import("tapable").IfSet<T>} IfSet
38
+ */
29
39
 
30
40
  const getJavascriptModulesPlugin = memoize(() =>
31
41
  require("./javascript/JavascriptModulesPlugin")
@@ -40,7 +50,6 @@ const getLoadScriptRuntimeModule = memoize(() =>
40
50
  // TODO webpack 6 remove this class
41
51
  class MainTemplate {
42
52
  /**
43
- *
44
53
  * @param {OutputOptions} outputOptions output options for the MainTemplate
45
54
  * @param {Compilation} compilation the compilation
46
55
  */
@@ -50,6 +59,11 @@ class MainTemplate {
50
59
  this.hooks = Object.freeze({
51
60
  renderManifest: {
52
61
  tap: util.deprecate(
62
+ /**
63
+ * @template AdditionalOptions
64
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
65
+ * @param {function(RenderManifestEntry[], RenderManifestOptions): RenderManifestEntry[]} fn fn
66
+ */
53
67
  (options, fn) => {
54
68
  compilation.hooks.renderManifest.tap(
55
69
  options,
@@ -79,6 +93,11 @@ class MainTemplate {
79
93
  },
80
94
  require: {
81
95
  tap: util.deprecate(
96
+ /**
97
+ * @template AdditionalOptions
98
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
99
+ * @param {function(string, RenderBootstrapContext): string} fn fn
100
+ */
82
101
  (options, fn) => {
83
102
  getJavascriptModulesPlugin()
84
103
  .getCompilationHooks(compilation)
@@ -111,6 +130,11 @@ class MainTemplate {
111
130
  },
112
131
  render: {
113
132
  tap: util.deprecate(
133
+ /**
134
+ * @template AdditionalOptions
135
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
136
+ * @param {function(Source, Chunk, string | undefined, ModuleTemplate, DependencyTemplates): Source} fn fn
137
+ */
114
138
  (options, fn) => {
115
139
  getJavascriptModulesPlugin()
116
140
  .getCompilationHooks(compilation)
@@ -138,6 +162,11 @@ class MainTemplate {
138
162
  },
139
163
  renderWithEntry: {
140
164
  tap: util.deprecate(
165
+ /**
166
+ * @template AdditionalOptions
167
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
168
+ * @param {function(Source, Chunk, string | undefined): Source} fn fn
169
+ */
141
170
  (options, fn) => {
142
171
  getJavascriptModulesPlugin()
143
172
  .getCompilationHooks(compilation)
@@ -159,6 +188,11 @@ class MainTemplate {
159
188
  },
160
189
  assetPath: {
161
190
  tap: util.deprecate(
191
+ /**
192
+ * @template AdditionalOptions
193
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
194
+ * @param {function(string, object, AssetInfo | undefined): string} fn fn
195
+ */
162
196
  (options, fn) => {
163
197
  compilation.hooks.assetPath.tap(options, fn);
164
198
  },
@@ -166,15 +200,23 @@ class MainTemplate {
166
200
  "DEP_WEBPACK_MAIN_TEMPLATE_ASSET_PATH"
167
201
  ),
168
202
  call: util.deprecate(
169
- (filename, options) => {
170
- return compilation.getAssetPath(filename, options);
171
- },
203
+ /**
204
+ * @param {TemplatePath} filename used to get asset path with hash
205
+ * @param {PathData} options context data
206
+ * @returns {string} interpolated path
207
+ */
208
+ (filename, options) => compilation.getAssetPath(filename, options),
172
209
  "MainTemplate.hooks.assetPath is deprecated (use Compilation.hooks.assetPath instead)",
173
210
  "DEP_WEBPACK_MAIN_TEMPLATE_ASSET_PATH"
174
211
  )
175
212
  },
176
213
  hash: {
177
214
  tap: util.deprecate(
215
+ /**
216
+ * @template AdditionalOptions
217
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
218
+ * @param {function(Hash): void} fn fn
219
+ */
178
220
  (options, fn) => {
179
221
  compilation.hooks.fullHash.tap(options, fn);
180
222
  },
@@ -184,6 +226,11 @@ class MainTemplate {
184
226
  },
185
227
  hashForChunk: {
186
228
  tap: util.deprecate(
229
+ /**
230
+ * @template AdditionalOptions
231
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
232
+ * @param {function(Hash, Chunk): void} fn fn
233
+ */
187
234
  (options, fn) => {
188
235
  getJavascriptModulesPlugin()
189
236
  .getCompilationHooks(compilation)
@@ -259,7 +306,8 @@ class MainTemplate {
259
306
  * @param {string} hash the hash
260
307
  * @param {number=} length length of the hash
261
308
  * @returns {string} generated code
262
- */ (hash, length) => {
309
+ */
310
+ (hash, length) => {
263
311
  if (length) {
264
312
  return `${RuntimeGlobals.getFullHash} ? ${
265
313
  RuntimeGlobals.getFullHash
@@ -273,31 +321,36 @@ class MainTemplate {
273
321
 
274
322
  this.getPublicPath = util.deprecate(
275
323
  /**
276
- *
277
- * @param {object} options get public path options
278
- * @returns {string} hook call
279
- */ options => {
280
- return compilation.getAssetPath(
281
- compilation.outputOptions.publicPath,
324
+ * @param {PathData} options context data
325
+ * @returns {string} interpolated path
326
+ */ options =>
327
+ compilation.getAssetPath(
328
+ /** @type {string} */
329
+ (compilation.outputOptions.publicPath),
282
330
  options
283
- );
284
- },
331
+ ),
285
332
  "MainTemplate.getPublicPath is deprecated (use Compilation.getAssetPath(compilation.outputOptions.publicPath, options) instead)",
286
333
  "DEP_WEBPACK_MAIN_TEMPLATE_GET_PUBLIC_PATH"
287
334
  );
288
335
 
289
336
  this.getAssetPath = util.deprecate(
290
- (path, options) => {
291
- return compilation.getAssetPath(path, options);
292
- },
337
+ /**
338
+ * @param {TemplatePath} path used to get asset path with hash
339
+ * @param {PathData} options context data
340
+ * @returns {string} interpolated path
341
+ */
342
+ (path, options) => compilation.getAssetPath(path, options),
293
343
  "MainTemplate.getAssetPath is deprecated (use Compilation.getAssetPath instead)",
294
344
  "DEP_WEBPACK_MAIN_TEMPLATE_GET_ASSET_PATH"
295
345
  );
296
346
 
297
347
  this.getAssetPathWithInfo = util.deprecate(
298
- (path, options) => {
299
- return compilation.getAssetPathWithInfo(path, options);
300
- },
348
+ /**
349
+ * @param {TemplatePath} path used to get asset path with hash
350
+ * @param {PathData} options context data
351
+ * @returns {InterpolatedPathAndAssetInfo} interpolated path and asset info
352
+ */
353
+ (path, options) => compilation.getAssetPathWithInfo(path, options),
301
354
  "MainTemplate.getAssetPathWithInfo is deprecated (use Compilation.getAssetPath instead)",
302
355
  "DEP_WEBPACK_MAIN_TEMPLATE_GET_ASSET_PATH_WITH_INFO"
303
356
  );
@@ -306,8 +359,8 @@ class MainTemplate {
306
359
 
307
360
  Object.defineProperty(MainTemplate.prototype, "requireFn", {
308
361
  get: util.deprecate(
309
- () => "__webpack_require__",
310
- 'MainTemplate.requireFn is deprecated (use "__webpack_require__")',
362
+ () => RuntimeGlobals.require,
363
+ `MainTemplate.requireFn is deprecated (use "${RuntimeGlobals.require}")`,
311
364
  "DEP_WEBPACK_MAIN_TEMPLATE_REQUIRE_FN"
312
365
  )
313
366
  });