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
@@ -10,9 +10,13 @@ const {
10
10
  } = require("../util/comparators");
11
11
  const createSchemaValidation = require("../util/create-schema-validation");
12
12
  const createHash = require("../util/createHash");
13
- const { getUsedModuleIds, getFullModuleName } = require("./IdHelpers");
13
+ const {
14
+ getUsedModuleIdsAndModules,
15
+ getFullModuleName
16
+ } = require("./IdHelpers");
14
17
 
15
18
  /** @typedef {import("../../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
19
+ /** @typedef {import("../Compiler")} Compiler */
16
20
 
17
21
  const validate = createSchemaValidation(
18
22
  require("../../schemas/plugins/HashedModuleIdsPlugin.check.js"),
@@ -32,7 +36,7 @@ class HashedModuleIdsPlugin {
32
36
 
33
37
  /** @type {HashedModuleIdsPluginOptions} */
34
38
  this.options = {
35
- context: null,
39
+ context: undefined,
36
40
  hashFunction: "md4",
37
41
  hashDigest: "base64",
38
42
  hashDigestLength: 4,
@@ -40,35 +44,39 @@ class HashedModuleIdsPlugin {
40
44
  };
41
45
  }
42
46
 
47
+ /**
48
+ * Apply the plugin
49
+ * @param {Compiler} compiler the compiler instance
50
+ * @returns {void}
51
+ */
43
52
  apply(compiler) {
44
53
  const options = this.options;
45
54
  compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => {
46
- compilation.hooks.moduleIds.tap("HashedModuleIdsPlugin", modules => {
55
+ compilation.hooks.moduleIds.tap("HashedModuleIdsPlugin", () => {
47
56
  const chunkGraph = compilation.chunkGraph;
48
57
  const context = this.options.context
49
58
  ? this.options.context
50
59
  : compiler.context;
51
60
 
52
- const usedIds = getUsedModuleIds(compilation);
53
- const modulesInNaturalOrder = Array.from(modules)
54
- .filter(m => {
55
- if (!m.needId) return false;
56
- if (chunkGraph.getNumberOfModuleChunks(m) === 0) return false;
57
- return chunkGraph.getModuleId(module) === null;
58
- })
59
- .sort(
60
- compareModulesByPreOrderIndexOrIdentifier(compilation.moduleGraph)
61
- );
61
+ const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
62
+ const modulesInNaturalOrder = modules.sort(
63
+ compareModulesByPreOrderIndexOrIdentifier(compilation.moduleGraph)
64
+ );
62
65
  for (const module of modulesInNaturalOrder) {
63
66
  const ident = getFullModuleName(module, context, compiler.root);
64
- const hash = createHash(options.hashFunction);
67
+ const hash = createHash(
68
+ /** @type {NonNullable<HashedModuleIdsPluginOptions["hashFunction"]>} */ (
69
+ options.hashFunction
70
+ )
71
+ );
65
72
  hash.update(ident || "");
66
73
  const hashId = /** @type {string} */ (
67
74
  hash.digest(options.hashDigest)
68
75
  );
69
76
  let len = options.hashDigestLength;
70
- while (usedIds.has(hashId.substr(0, len))) len++;
71
- const moduleId = hashId.substr(0, len);
77
+ while (usedIds.has(hashId.slice(0, len)))
78
+ /** @type {number} */ (len)++;
79
+ const moduleId = hashId.slice(0, len);
72
80
  chunkGraph.setModuleId(module, moduleId);
73
81
  usedIds.add(moduleId);
74
82
  }
@@ -25,7 +25,7 @@ const getHash = (str, len, hashFunction) => {
25
25
  const hash = createHash(hashFunction);
26
26
  hash.update(str);
27
27
  const digest = /** @type {string} */ (hash.digest("hex"));
28
- return digest.substr(0, len);
28
+ return digest.slice(0, len);
29
29
  };
30
30
 
31
31
  /**
@@ -43,7 +43,7 @@ const avoidNumber = str => {
43
43
  } else if (firstChar > 57) {
44
44
  return str;
45
45
  }
46
- if (str === +str + "") {
46
+ if (str === String(Number(str))) {
47
47
  return `_${str}`;
48
48
  }
49
49
  return str;
@@ -53,12 +53,9 @@ const avoidNumber = str => {
53
53
  * @param {string} request the request
54
54
  * @returns {string} id representation
55
55
  */
56
- const requestToId = request => {
57
- return request
58
- .replace(/^(\.\.?\/)+/, "")
59
- .replace(/(^[.-]|[^a-zA-Z0-9_-])+/g, "_");
60
- };
61
- exports.requestToId = requestToId;
56
+ const requestToId = request =>
57
+ request.replace(/^(\.\.?\/)+/, "").replace(/(^[.-]|[^a-zA-Z0-9_-])+/g, "_");
58
+ module.exports.requestToId = requestToId;
62
59
 
63
60
  /**
64
61
  * @param {string} string the string
@@ -78,7 +75,7 @@ const shortenLongString = (string, delimiter, hashFunction) => {
78
75
  /**
79
76
  * @param {Module} module the module
80
77
  * @param {string} context context directory
81
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
78
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
82
79
  * @returns {string} short module name
83
80
  */
84
81
  const getShortModuleName = (module, context, associatedObjectForCache) => {
@@ -91,14 +88,14 @@ const getShortModuleName = (module, context, associatedObjectForCache) => {
91
88
  );
92
89
  return "";
93
90
  };
94
- exports.getShortModuleName = getShortModuleName;
91
+ module.exports.getShortModuleName = getShortModuleName;
95
92
 
96
93
  /**
97
94
  * @param {string} shortName the short name
98
95
  * @param {Module} module the module
99
96
  * @param {string} context context directory
100
97
  * @param {string | Hash} hashFunction hash function to use
101
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
98
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
102
99
  * @returns {string} long module name
103
100
  */
104
101
  const getLongModuleName = (
@@ -111,22 +108,17 @@ const getLongModuleName = (
111
108
  const fullName = getFullModuleName(module, context, associatedObjectForCache);
112
109
  return `${shortName}?${getHash(fullName, 4, hashFunction)}`;
113
110
  };
114
- exports.getLongModuleName = getLongModuleName;
111
+ module.exports.getLongModuleName = getLongModuleName;
115
112
 
116
113
  /**
117
114
  * @param {Module} module the module
118
115
  * @param {string} context context directory
119
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
116
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
120
117
  * @returns {string} full module name
121
118
  */
122
- const getFullModuleName = (module, context, associatedObjectForCache) => {
123
- return makePathsRelative(
124
- context,
125
- module.identifier(),
126
- associatedObjectForCache
127
- );
128
- };
129
- exports.getFullModuleName = getFullModuleName;
119
+ const getFullModuleName = (module, context, associatedObjectForCache) =>
120
+ makePathsRelative(context, module.identifier(), associatedObjectForCache);
121
+ module.exports.getFullModuleName = getFullModuleName;
130
122
 
131
123
  /**
132
124
  * @param {Chunk} chunk the chunk
@@ -134,7 +126,7 @@ exports.getFullModuleName = getFullModuleName;
134
126
  * @param {string} context context directory
135
127
  * @param {string} delimiter delimiter for names
136
128
  * @param {string | Hash} hashFunction hash function to use
137
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
129
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
138
130
  * @returns {string} short chunk name
139
131
  */
140
132
  const getShortChunkName = (
@@ -156,7 +148,7 @@ const getShortChunkName = (
156
148
  .join(delimiter);
157
149
  return shortenLongString(chunkName, delimiter, hashFunction);
158
150
  };
159
- exports.getShortChunkName = getShortChunkName;
151
+ module.exports.getShortChunkName = getShortChunkName;
160
152
 
161
153
  /**
162
154
  * @param {Chunk} chunk the chunk
@@ -164,7 +156,7 @@ exports.getShortChunkName = getShortChunkName;
164
156
  * @param {string} context context directory
165
157
  * @param {string} delimiter delimiter for names
166
158
  * @param {string | Hash} hashFunction hash function to use
167
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
159
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
168
160
  * @returns {string} short chunk name
169
161
  */
170
162
  const getLongChunkName = (
@@ -191,13 +183,13 @@ const getLongChunkName = (
191
183
  .join(delimiter);
192
184
  return shortenLongString(chunkName, delimiter, hashFunction);
193
185
  };
194
- exports.getLongChunkName = getLongChunkName;
186
+ module.exports.getLongChunkName = getLongChunkName;
195
187
 
196
188
  /**
197
189
  * @param {Chunk} chunk the chunk
198
190
  * @param {ChunkGraph} chunkGraph the chunk graph
199
191
  * @param {string} context context directory
200
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
192
+ * @param {object=} associatedObjectForCache an object to which the cache will be attached
201
193
  * @returns {string} full chunk name
202
194
  */
203
195
  const getFullChunkName = (
@@ -213,7 +205,7 @@ const getFullChunkName = (
213
205
  );
214
206
  return fullModuleNames.join();
215
207
  };
216
- exports.getFullChunkName = getFullChunkName;
208
+ module.exports.getFullChunkName = getFullChunkName;
217
209
 
218
210
  /**
219
211
  * @template K
@@ -234,29 +226,38 @@ const addToMapOfItems = (map, key, value) => {
234
226
 
235
227
  /**
236
228
  * @param {Compilation} compilation the compilation
237
- * @returns {Set<string>} used module ids as strings
229
+ * @param {function(Module): boolean=} filter filter modules
230
+ * @returns {[Set<string>, Module[]]} used module ids as strings and modules without id matching the filter
238
231
  */
239
- const getUsedModuleIds = compilation => {
232
+ const getUsedModuleIdsAndModules = (compilation, filter) => {
240
233
  const chunkGraph = compilation.chunkGraph;
241
234
 
235
+ const modules = [];
236
+
242
237
  /** @type {Set<string>} */
243
238
  const usedIds = new Set();
244
239
  if (compilation.usedModuleIds) {
245
240
  for (const id of compilation.usedModuleIds) {
246
- usedIds.add(id + "");
241
+ usedIds.add(String(id));
247
242
  }
248
243
  }
249
244
 
250
245
  for (const module of compilation.modules) {
246
+ if (!module.needId) continue;
251
247
  const moduleId = chunkGraph.getModuleId(module);
252
248
  if (moduleId !== null) {
253
- usedIds.add(moduleId + "");
249
+ usedIds.add(String(moduleId));
250
+ } else if (
251
+ (!filter || filter(module)) &&
252
+ chunkGraph.getNumberOfModuleChunks(module) !== 0
253
+ ) {
254
+ modules.push(module);
254
255
  }
255
256
  }
256
257
 
257
- return usedIds;
258
+ return [usedIds, modules];
258
259
  };
259
- exports.getUsedModuleIds = getUsedModuleIds;
260
+ module.exports.getUsedModuleIdsAndModules = getUsedModuleIdsAndModules;
260
261
 
261
262
  /**
262
263
  * @param {Compilation} compilation the compilation
@@ -267,20 +268,20 @@ const getUsedChunkIds = compilation => {
267
268
  const usedIds = new Set();
268
269
  if (compilation.usedChunkIds) {
269
270
  for (const id of compilation.usedChunkIds) {
270
- usedIds.add(id + "");
271
+ usedIds.add(String(id));
271
272
  }
272
273
  }
273
274
 
274
275
  for (const chunk of compilation.chunks) {
275
276
  const chunkId = chunk.id;
276
277
  if (chunkId !== null) {
277
- usedIds.add(chunkId + "");
278
+ usedIds.add(String(chunkId));
278
279
  }
279
280
  }
280
281
 
281
282
  return usedIds;
282
283
  };
283
- exports.getUsedChunkIds = getUsedChunkIds;
284
+ module.exports.getUsedChunkIds = getUsedChunkIds;
284
285
 
285
286
  /**
286
287
  * @template T
@@ -348,7 +349,7 @@ const assignNames = (
348
349
  unnamedItems.sort(comparator);
349
350
  return unnamedItems;
350
351
  };
351
- exports.assignNames = assignNames;
352
+ module.exports.assignNames = assignNames;
352
353
 
353
354
  /**
354
355
  * @template T
@@ -359,6 +360,7 @@ exports.assignNames = assignNames;
359
360
  * @param {number[]} ranges usable ranges for ids
360
361
  * @param {number} expandFactor factor to create more ranges
361
362
  * @param {number} extraSpace extra space to allocate, i. e. when some ids are already used
363
+ * @param {number} salt salting number to initialize hashing
362
364
  * @returns {void}
363
365
  */
364
366
  const assignDeterministicIds = (
@@ -368,13 +370,14 @@ const assignDeterministicIds = (
368
370
  assignId,
369
371
  ranges = [10],
370
372
  expandFactor = 10,
371
- extraSpace = 0
373
+ extraSpace = 0,
374
+ salt = 0
372
375
  ) => {
373
376
  items.sort(comparator);
374
377
 
375
378
  // max 5% fill rate
376
379
  const optimalRange = Math.min(
377
- Math.ceil(items.length * 20) + extraSpace,
380
+ items.length * 20 + extraSpace,
378
381
  Number.MAX_SAFE_INTEGER
379
382
  );
380
383
 
@@ -384,42 +387,49 @@ const assignDeterministicIds = (
384
387
  i++;
385
388
  if (i < ranges.length) {
386
389
  range = Math.min(ranges[i], Number.MAX_SAFE_INTEGER);
387
- } else {
390
+ } else if (expandFactor) {
388
391
  range = Math.min(range * expandFactor, Number.MAX_SAFE_INTEGER);
392
+ } else {
393
+ break;
389
394
  }
390
395
  }
391
396
 
392
397
  for (const item of items) {
393
398
  const ident = getName(item);
394
399
  let id;
395
- let i = 0;
400
+ let i = salt;
396
401
  do {
397
402
  id = numberHash(ident + i++, range);
398
403
  } while (!assignId(item, id));
399
404
  }
400
405
  };
401
- exports.assignDeterministicIds = assignDeterministicIds;
406
+ module.exports.assignDeterministicIds = assignDeterministicIds;
402
407
 
403
408
  /**
409
+ * @param {Set<string>} usedIds used ids
404
410
  * @param {Iterable<Module>} modules the modules
405
411
  * @param {Compilation} compilation the compilation
406
412
  * @returns {void}
407
413
  */
408
- const assignAscendingModuleIds = (modules, compilation) => {
414
+ const assignAscendingModuleIds = (usedIds, modules, compilation) => {
409
415
  const chunkGraph = compilation.chunkGraph;
410
416
 
411
- const usedIds = getUsedModuleIds(compilation);
412
-
413
417
  let nextId = 0;
414
418
  let assignId;
415
419
  if (usedIds.size > 0) {
420
+ /**
421
+ * @param {Module} module the module
422
+ */
416
423
  assignId = module => {
417
424
  if (chunkGraph.getModuleId(module) === null) {
418
- while (usedIds.has(nextId + "")) nextId++;
425
+ while (usedIds.has(String(nextId))) nextId++;
419
426
  chunkGraph.setModuleId(module, nextId++);
420
427
  }
421
428
  };
422
429
  } else {
430
+ /**
431
+ * @param {Module} module the module
432
+ */
423
433
  assignId = module => {
424
434
  if (chunkGraph.getModuleId(module) === null) {
425
435
  chunkGraph.setModuleId(module, nextId++);
@@ -430,7 +440,7 @@ const assignAscendingModuleIds = (modules, compilation) => {
430
440
  assignId(module);
431
441
  }
432
442
  };
433
- exports.assignAscendingModuleIds = assignAscendingModuleIds;
443
+ module.exports.assignAscendingModuleIds = assignAscendingModuleIds;
434
444
 
435
445
  /**
436
446
  * @param {Iterable<Chunk>} chunks the chunks
@@ -444,7 +454,7 @@ const assignAscendingChunkIds = (chunks, compilation) => {
444
454
  if (usedIds.size > 0) {
445
455
  for (const chunk of chunks) {
446
456
  if (chunk.id === null) {
447
- while (usedIds.has(nextId + "")) nextId++;
457
+ while (usedIds.has(String(nextId))) nextId++;
448
458
  chunk.id = nextId;
449
459
  chunk.ids = [nextId];
450
460
  nextId++;
@@ -460,4 +470,4 @@ const assignAscendingChunkIds = (chunks, compilation) => {
460
470
  }
461
471
  }
462
472
  };
463
- exports.assignAscendingChunkIds = assignAscendingChunkIds;
473
+ module.exports.assignAscendingChunkIds = assignAscendingChunkIds;
@@ -14,11 +14,21 @@ const {
14
14
  assignAscendingChunkIds
15
15
  } = require("./IdHelpers");
16
16
 
17
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
17
18
  /** @typedef {import("../Chunk")} Chunk */
18
19
  /** @typedef {import("../Compiler")} Compiler */
19
20
  /** @typedef {import("../Module")} Module */
20
21
 
22
+ /**
23
+ * @typedef {object} NamedChunkIdsPluginOptions
24
+ * @property {string} [context] context
25
+ * @property {string} [delimiter] delimiter
26
+ */
27
+
21
28
  class NamedChunkIdsPlugin {
29
+ /**
30
+ * @param {NamedChunkIdsPluginOptions=} options options
31
+ */
22
32
  constructor(options) {
23
33
  this.delimiter = (options && options.delimiter) || "-";
24
34
  this.context = options && options.context;
@@ -31,7 +41,9 @@ class NamedChunkIdsPlugin {
31
41
  */
32
42
  apply(compiler) {
33
43
  compiler.hooks.compilation.tap("NamedChunkIdsPlugin", compilation => {
34
- const { hashFunction } = compilation.outputOptions;
44
+ const hashFunction =
45
+ /** @type {NonNullable<Output["hashFunction"]>} */
46
+ (compilation.outputOptions.hashFunction);
35
47
  compilation.hooks.chunkIds.tap("NamedChunkIdsPlugin", chunks => {
36
48
  const chunkGraph = compilation.chunkGraph;
37
49
  const context = this.context ? this.context : compiler.context;
@@ -10,16 +10,25 @@ const {
10
10
  getShortModuleName,
11
11
  getLongModuleName,
12
12
  assignNames,
13
- getUsedModuleIds,
13
+ getUsedModuleIdsAndModules,
14
14
  assignAscendingModuleIds
15
15
  } = require("./IdHelpers");
16
16
 
17
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
17
18
  /** @typedef {import("../Compiler")} Compiler */
18
19
  /** @typedef {import("../Module")} Module */
19
20
 
21
+ /**
22
+ * @typedef {object} NamedModuleIdsPluginOptions
23
+ * @property {string} [context] context
24
+ */
25
+
20
26
  class NamedModuleIdsPlugin {
21
- constructor(options) {
22
- this.options = options || {};
27
+ /**
28
+ * @param {NamedModuleIdsPluginOptions} [options] options
29
+ */
30
+ constructor(options = {}) {
31
+ this.options = options;
23
32
  }
24
33
 
25
34
  /**
@@ -30,28 +39,27 @@ class NamedModuleIdsPlugin {
30
39
  apply(compiler) {
31
40
  const { root } = compiler;
32
41
  compiler.hooks.compilation.tap("NamedModuleIdsPlugin", compilation => {
33
- const { hashFunction } = compilation.outputOptions;
34
- compilation.hooks.moduleIds.tap("NamedModuleIdsPlugin", modules => {
42
+ const hashFunction =
43
+ /** @type {NonNullable<Output["hashFunction"]>} */
44
+ (compilation.outputOptions.hashFunction);
45
+ compilation.hooks.moduleIds.tap("NamedModuleIdsPlugin", () => {
35
46
  const chunkGraph = compilation.chunkGraph;
36
47
  const context = this.options.context
37
48
  ? this.options.context
38
49
  : compiler.context;
39
50
 
51
+ const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
40
52
  const unnamedModules = assignNames(
41
- Array.from(modules).filter(module => {
42
- if (!module.needId) return false;
43
- if (chunkGraph.getNumberOfModuleChunks(module) === 0) return false;
44
- return chunkGraph.getModuleId(module) === null;
45
- }),
53
+ modules,
46
54
  m => getShortModuleName(m, context, root),
47
55
  (m, shortName) =>
48
56
  getLongModuleName(shortName, m, context, hashFunction, root),
49
57
  compareModulesByIdentifier,
50
- getUsedModuleIds(compilation),
58
+ usedIds,
51
59
  (m, name) => chunkGraph.setModuleId(m, name)
52
60
  );
53
61
  if (unnamedModules.length > 0) {
54
- assignAscendingModuleIds(unnamedModules, compilation);
62
+ assignAscendingModuleIds(usedIds, unnamedModules, compilation);
55
63
  }
56
64
  });
57
65
  });
@@ -8,7 +8,10 @@
8
8
  const {
9
9
  compareModulesByPreOrderIndexOrIdentifier
10
10
  } = require("../util/comparators");
11
- const { assignAscendingModuleIds } = require("./IdHelpers");
11
+ const {
12
+ assignAscendingModuleIds,
13
+ getUsedModuleIdsAndModules
14
+ } = require("./IdHelpers");
12
15
 
13
16
  /** @typedef {import("../Compiler")} Compiler */
14
17
  /** @typedef {import("../Module")} Module */
@@ -22,18 +25,12 @@ class NaturalModuleIdsPlugin {
22
25
  apply(compiler) {
23
26
  compiler.hooks.compilation.tap("NaturalModuleIdsPlugin", compilation => {
24
27
  compilation.hooks.moduleIds.tap("NaturalModuleIdsPlugin", modules => {
25
- const chunkGraph = compilation.chunkGraph;
26
- const modulesInNaturalOrder = Array.from(modules)
27
- .filter(
28
- m =>
29
- m.needId &&
30
- chunkGraph.getNumberOfModuleChunks(m) > 0 &&
31
- chunkGraph.getModuleId(m) === null
32
- )
33
- .sort(
34
- compareModulesByPreOrderIndexOrIdentifier(compilation.moduleGraph)
35
- );
36
- assignAscendingModuleIds(modulesInNaturalOrder, compilation);
28
+ const [usedIds, modulesInNaturalOrder] =
29
+ getUsedModuleIdsAndModules(compilation);
30
+ modulesInNaturalOrder.sort(
31
+ compareModulesByPreOrderIndexOrIdentifier(compilation.moduleGraph)
32
+ );
33
+ assignAscendingModuleIds(usedIds, modulesInNaturalOrder, compilation);
37
34
  });
38
35
  });
39
36
  }
@@ -60,8 +60,12 @@ class OccurrenceChunkIdsPlugin {
60
60
 
61
61
  const chunksInOccurrenceOrder = Array.from(chunks).sort((a, b) => {
62
62
  if (prioritiseInitial) {
63
- const aEntryOccurs = occursInInitialChunksMap.get(a);
64
- const bEntryOccurs = occursInInitialChunksMap.get(b);
63
+ const aEntryOccurs =
64
+ /** @type {number} */
65
+ (occursInInitialChunksMap.get(a));
66
+ const bEntryOccurs =
67
+ /** @type {number} */
68
+ (occursInInitialChunksMap.get(b));
65
69
  if (aEntryOccurs > bEntryOccurs) return -1;
66
70
  if (aEntryOccurs < bEntryOccurs) return 1;
67
71
  }
@@ -9,7 +9,10 @@ const {
9
9
  compareModulesByPreOrderIndexOrIdentifier
10
10
  } = require("../util/comparators");
11
11
  const createSchemaValidation = require("../util/create-schema-validation");
12
- const { assignAscendingModuleIds } = require("./IdHelpers");
12
+ const {
13
+ assignAscendingModuleIds,
14
+ getUsedModuleIdsAndModules
15
+ } = require("./IdHelpers");
13
16
 
14
17
  /** @typedef {import("../../declarations/plugins/ids/OccurrenceModuleIdsPlugin").OccurrenceModuleIdsPluginOptions} OccurrenceModuleIdsPluginOptions */
15
18
  /** @typedef {import("../Compiler")} Compiler */
@@ -44,15 +47,11 @@ class OccurrenceModuleIdsPlugin {
44
47
  compiler.hooks.compilation.tap("OccurrenceModuleIdsPlugin", compilation => {
45
48
  const moduleGraph = compilation.moduleGraph;
46
49
 
47
- compilation.hooks.moduleIds.tap("OccurrenceModuleIdsPlugin", modules => {
50
+ compilation.hooks.moduleIds.tap("OccurrenceModuleIdsPlugin", () => {
48
51
  const chunkGraph = compilation.chunkGraph;
49
52
 
50
- const modulesInOccurrenceOrder = Array.from(modules).filter(
51
- m =>
52
- m.needId &&
53
- chunkGraph.getNumberOfModuleChunks(m) > 0 &&
54
- chunkGraph.getModuleId(m) === null
55
- );
53
+ const [usedIds, modulesInOccurrenceOrder] =
54
+ getUsedModuleIdsAndModules(compilation);
56
55
 
57
56
  const occursInInitialChunksMap = new Map();
58
57
  const occursInAllChunksMap = new Map();
@@ -82,7 +81,7 @@ class OccurrenceModuleIdsPlugin {
82
81
  ] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
83
82
  if (!originModule) continue;
84
83
  if (!connections.some(c => c.isTargetActive(undefined))) continue;
85
- sum += initialChunkChunkMap.get(originModule);
84
+ sum += initialChunkChunkMap.get(originModule) || 0;
86
85
  }
87
86
  return sum;
88
87
  };
@@ -121,7 +120,7 @@ class OccurrenceModuleIdsPlugin {
121
120
  }
122
121
  }
123
122
 
124
- for (const m of modules) {
123
+ for (const m of modulesInOccurrenceOrder) {
125
124
  const result =
126
125
  countOccurs(m) +
127
126
  chunkGraph.getNumberOfModuleChunks(m) +
@@ -147,7 +146,11 @@ class OccurrenceModuleIdsPlugin {
147
146
  return naturalCompare(a, b);
148
147
  });
149
148
 
150
- assignAscendingModuleIds(modulesInOccurrenceOrder, compilation);
149
+ assignAscendingModuleIds(
150
+ usedIds,
151
+ modulesInOccurrenceOrder,
152
+ compilation
153
+ );
151
154
  });
152
155
  });
153
156
  }