webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -9,9 +9,9 @@ const {
9
9
  compareModulesByPreOrderIndexOrIdentifier
10
10
  } = require("../util/comparators");
11
11
  const {
12
- getUsedModuleIdsAndModules,
12
+ assignDeterministicIds,
13
13
  getFullModuleName,
14
- assignDeterministicIds
14
+ getUsedModuleIdsAndModules
15
15
  } = require("./IdHelpers");
16
16
 
17
17
  /** @typedef {import("../Compiler")} Compiler */
@@ -20,16 +20,18 @@ const {
20
20
  /**
21
21
  * @typedef {object} DeterministicModuleIdsPluginOptions
22
22
  * @property {string=} context context relative to which module identifiers are computed
23
- * @property {function(Module): boolean=} test selector function for modules
23
+ * @property {((module: Module) => boolean)=} test selector function for modules
24
24
  * @property {number=} maxLength maximum id length in digits (used as starting point)
25
25
  * @property {number=} salt hash salt for ids
26
26
  * @property {boolean=} fixedLength do not increase the maxLength to find an optimal id space size
27
27
  * @property {boolean=} failOnConflict throw an error when id conflicts occur (instead of rehashing)
28
28
  */
29
29
 
30
+ const PLUGIN_NAME = "DeterministicModuleIdsPlugin";
31
+
30
32
  class DeterministicModuleIdsPlugin {
31
33
  /**
32
- * @param {DeterministicModuleIdsPluginOptions} [options] options
34
+ * @param {DeterministicModuleIdsPluginOptions=} options options
33
35
  */
34
36
  constructor(options = {}) {
35
37
  this.options = options;
@@ -41,56 +43,54 @@ class DeterministicModuleIdsPlugin {
41
43
  * @returns {void}
42
44
  */
43
45
  apply(compiler) {
44
- compiler.hooks.compilation.tap(
45
- "DeterministicModuleIdsPlugin",
46
- compilation => {
47
- compilation.hooks.moduleIds.tap("DeterministicModuleIdsPlugin", () => {
48
- const chunkGraph = compilation.chunkGraph;
49
- const context = this.options.context
50
- ? this.options.context
51
- : compiler.context;
52
- const maxLength = this.options.maxLength || 3;
53
- const failOnConflict = this.options.failOnConflict || false;
54
- const fixedLength = this.options.fixedLength || false;
55
- const salt = this.options.salt || 0;
56
- let conflicts = 0;
46
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
47
+ compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
48
+ const chunkGraph = compilation.chunkGraph;
49
+ const context = this.options.context
50
+ ? this.options.context
51
+ : compiler.context;
52
+ const maxLength = this.options.maxLength || 3;
53
+ const failOnConflict = this.options.failOnConflict || false;
54
+ const fixedLength = this.options.fixedLength || false;
55
+ const salt = this.options.salt || 0;
56
+ let conflicts = 0;
57
57
 
58
- const [usedIds, modules] = getUsedModuleIdsAndModules(
59
- compilation,
60
- this.options.test
61
- );
62
- assignDeterministicIds(
63
- modules,
64
- module => getFullModuleName(module, context, compiler.root),
65
- failOnConflict
66
- ? () => 0
67
- : compareModulesByPreOrderIndexOrIdentifier(
68
- compilation.moduleGraph
69
- ),
70
- (module, id) => {
71
- const size = usedIds.size;
72
- usedIds.add(`${id}`);
73
- if (size === usedIds.size) {
74
- conflicts++;
75
- return false;
76
- }
77
- chunkGraph.setModuleId(module, id);
78
- return true;
79
- },
80
- [10 ** maxLength],
81
- fixedLength ? 0 : 10,
82
- usedIds.size,
83
- salt
58
+ const [usedIds, modules] = getUsedModuleIdsAndModules(
59
+ compilation,
60
+ this.options.test
61
+ );
62
+ assignDeterministicIds(
63
+ modules,
64
+ (module) => getFullModuleName(module, context, compiler.root),
65
+ failOnConflict
66
+ ? () => 0
67
+ : compareModulesByPreOrderIndexOrIdentifier(
68
+ compilation.moduleGraph
69
+ ),
70
+ (module, id) => {
71
+ const size = usedIds.size;
72
+ usedIds.add(`${id}`);
73
+ if (size === usedIds.size) {
74
+ conflicts++;
75
+ return false;
76
+ }
77
+ chunkGraph.setModuleId(module, id);
78
+ return true;
79
+ },
80
+ [10 ** maxLength],
81
+ fixedLength ? 0 : 10,
82
+ usedIds.size,
83
+ salt
84
+ );
85
+ if (failOnConflict && conflicts) {
86
+ throw new Error(
87
+ `Assigning deterministic module ids has lead to ${conflicts} conflict${
88
+ conflicts > 1 ? "s" : ""
89
+ }.\nIncrease the 'maxLength' to increase the id space and make conflicts less likely (recommended when there are many conflicts or application is expected to grow), or add an 'salt' number to try another hash starting value in the same id space (recommended when there is only a single conflict).`
84
90
  );
85
- if (failOnConflict && conflicts)
86
- throw new Error(
87
- `Assigning deterministic module ids has lead to ${conflicts} conflict${
88
- conflicts > 1 ? "s" : ""
89
- }.\nIncrease the 'maxLength' to increase the id space and make conflicts less likely (recommended when there are many conflicts or application is expected to grow), or add an 'salt' number to try another hash starting value in the same id space (recommended when there is only a single conflict).`
90
- );
91
- });
92
- }
93
- );
91
+ }
92
+ });
93
+ });
94
94
  }
95
95
  }
96
96
 
@@ -5,28 +5,31 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { DEFAULTS } = require("../config/defaults");
8
9
  const {
9
10
  compareModulesByPreOrderIndexOrIdentifier
10
11
  } = require("../util/comparators");
11
12
  const createSchemaValidation = require("../util/create-schema-validation");
12
13
  const createHash = require("../util/createHash");
13
14
  const {
14
- getUsedModuleIdsAndModules,
15
- getFullModuleName
15
+ getFullModuleName,
16
+ getUsedModuleIdsAndModules
16
17
  } = require("./IdHelpers");
17
18
 
18
- /** @typedef {import("../../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
19
+ /** @typedef {import("../../declarations/plugins/ids/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
19
20
  /** @typedef {import("../Compiler")} Compiler */
20
21
 
21
22
  const validate = createSchemaValidation(
22
- require("../../schemas/plugins/HashedModuleIdsPlugin.check.js"),
23
- () => require("../../schemas/plugins/HashedModuleIdsPlugin.json"),
23
+ require("../../schemas/plugins/ids/HashedModuleIdsPlugin.check"),
24
+ () => require("../../schemas/plugins/ids/HashedModuleIdsPlugin.json"),
24
25
  {
25
26
  name: "Hashed Module Ids Plugin",
26
27
  baseDataPath: "options"
27
28
  }
28
29
  );
29
30
 
31
+ const PLUGIN_NAME = "HashedModuleIdsPlugin";
32
+
30
33
  class HashedModuleIdsPlugin {
31
34
  /**
32
35
  * @param {HashedModuleIdsPluginOptions=} options options object
@@ -34,10 +37,10 @@ class HashedModuleIdsPlugin {
34
37
  constructor(options = {}) {
35
38
  validate(options);
36
39
 
37
- /** @type {HashedModuleIdsPluginOptions} */
40
+ /** @type {Required<Omit<HashedModuleIdsPluginOptions, "context">> & { context?: string | undefined }} */
38
41
  this.options = {
39
42
  context: undefined,
40
- hashFunction: "md4",
43
+ hashFunction: DEFAULTS.HASH_FUNCTION,
41
44
  hashDigest: "base64",
42
45
  hashDigestLength: 4,
43
46
  ...options
@@ -51,8 +54,8 @@ class HashedModuleIdsPlugin {
51
54
  */
52
55
  apply(compiler) {
53
56
  const options = this.options;
54
- compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => {
55
- compilation.hooks.moduleIds.tap("HashedModuleIdsPlugin", () => {
57
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
58
+ compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
56
59
  const chunkGraph = compilation.chunkGraph;
57
60
  const context = this.options.context
58
61
  ? this.options.context
@@ -70,12 +73,11 @@ class HashedModuleIdsPlugin {
70
73
  )
71
74
  );
72
75
  hash.update(ident || "");
73
- const hashId = /** @type {string} */ (
74
- hash.digest(options.hashDigest)
75
- );
76
+ const hashId = hash.digest(options.hashDigest);
76
77
  let len = options.hashDigestLength;
77
- while (usedIds.has(hashId.slice(0, len)))
78
+ while (usedIds.has(hashId.slice(0, len))) {
78
79
  /** @type {number} */ (len)++;
80
+ }
79
81
  const moduleId = hashId.slice(0, len);
80
82
  chunkGraph.setModuleId(module, moduleId);
81
83
  usedIds.add(moduleId);
@@ -14,6 +14,8 @@ const numberHash = require("../util/numberHash");
14
14
  /** @typedef {import("../Compilation")} Compilation */
15
15
  /** @typedef {import("../Module")} Module */
16
16
  /** @typedef {typeof import("../util/Hash")} Hash */
17
+ /** @typedef {import("../util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
17
19
 
18
20
  /**
19
21
  * @param {string} str string to hash
@@ -24,7 +26,7 @@ const numberHash = require("../util/numberHash");
24
26
  const getHash = (str, len, hashFunction) => {
25
27
  const hash = createHash(hashFunction);
26
28
  hash.update(str);
27
- const digest = /** @type {string} */ (hash.digest("hex"));
29
+ const digest = hash.digest("hex");
28
30
  return digest.slice(0, len);
29
31
  };
30
32
 
@@ -32,7 +34,7 @@ const getHash = (str, len, hashFunction) => {
32
34
  * @param {string} str the string
33
35
  * @returns {string} string prefixed by an underscore if it is a number
34
36
  */
35
- const avoidNumber = str => {
37
+ const avoidNumber = (str) => {
36
38
  // max length of a number is 21 chars, bigger numbers a written as "...e+xx"
37
39
  if (str.length > 21) return str;
38
40
  const firstChar = str.charCodeAt(0);
@@ -53,9 +55,8 @@ const avoidNumber = str => {
53
55
  * @param {string} request the request
54
56
  * @returns {string} id representation
55
57
  */
56
- const requestToId = request =>
58
+ const requestToId = (request) =>
57
59
  request.replace(/^(\.\.?\/)+/, "").replace(/(^[.-]|[^a-zA-Z0-9_-])+/g, "_");
58
- module.exports.requestToId = requestToId;
59
60
 
60
61
  /**
61
62
  * @param {string} string the string
@@ -75,27 +76,27 @@ const shortenLongString = (string, delimiter, hashFunction) => {
75
76
  /**
76
77
  * @param {Module} module the module
77
78
  * @param {string} context context directory
78
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
79
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
79
80
  * @returns {string} short module name
80
81
  */
81
82
  const getShortModuleName = (module, context, associatedObjectForCache) => {
82
83
  const libIdent = module.libIdent({ context, associatedObjectForCache });
83
84
  if (libIdent) return avoidNumber(libIdent);
84
85
  const nameForCondition = module.nameForCondition();
85
- if (nameForCondition)
86
+ if (nameForCondition) {
86
87
  return avoidNumber(
87
88
  makePathsRelative(context, nameForCondition, associatedObjectForCache)
88
89
  );
90
+ }
89
91
  return "";
90
92
  };
91
- module.exports.getShortModuleName = getShortModuleName;
92
93
 
93
94
  /**
94
95
  * @param {string} shortName the short name
95
96
  * @param {Module} module the module
96
97
  * @param {string} context context directory
97
98
  * @param {string | Hash} hashFunction hash function to use
98
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
99
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
99
100
  * @returns {string} long module name
100
101
  */
101
102
  const getLongModuleName = (
@@ -108,17 +109,15 @@ const getLongModuleName = (
108
109
  const fullName = getFullModuleName(module, context, associatedObjectForCache);
109
110
  return `${shortName}?${getHash(fullName, 4, hashFunction)}`;
110
111
  };
111
- module.exports.getLongModuleName = getLongModuleName;
112
112
 
113
113
  /**
114
114
  * @param {Module} module the module
115
115
  * @param {string} context context directory
116
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
116
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
117
117
  * @returns {string} full module name
118
118
  */
119
119
  const getFullModuleName = (module, context, associatedObjectForCache) =>
120
120
  makePathsRelative(context, module.identifier(), associatedObjectForCache);
121
- module.exports.getFullModuleName = getFullModuleName;
122
121
 
123
122
  /**
124
123
  * @param {Chunk} chunk the chunk
@@ -126,7 +125,7 @@ module.exports.getFullModuleName = getFullModuleName;
126
125
  * @param {string} context context directory
127
126
  * @param {string} delimiter delimiter for names
128
127
  * @param {string | Hash} hashFunction hash function to use
129
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
128
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
130
129
  * @returns {string} short chunk name
131
130
  */
132
131
  const getShortChunkName = (
@@ -138,17 +137,15 @@ const getShortChunkName = (
138
137
  associatedObjectForCache
139
138
  ) => {
140
139
  const modules = chunkGraph.getChunkRootModules(chunk);
141
- const shortModuleNames = modules.map(m =>
140
+ const shortModuleNames = modules.map((m) =>
142
141
  requestToId(getShortModuleName(m, context, associatedObjectForCache))
143
142
  );
144
143
  chunk.idNameHints.sort();
145
- const chunkName = Array.from(chunk.idNameHints)
146
- .concat(shortModuleNames)
144
+ const chunkName = [...chunk.idNameHints, ...shortModuleNames]
147
145
  .filter(Boolean)
148
146
  .join(delimiter);
149
147
  return shortenLongString(chunkName, delimiter, hashFunction);
150
148
  };
151
- module.exports.getShortChunkName = getShortChunkName;
152
149
 
153
150
  /**
154
151
  * @param {Chunk} chunk the chunk
@@ -156,7 +153,7 @@ module.exports.getShortChunkName = getShortChunkName;
156
153
  * @param {string} context context directory
157
154
  * @param {string} delimiter delimiter for names
158
155
  * @param {string | Hash} hashFunction hash function to use
159
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
156
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
160
157
  * @returns {string} short chunk name
161
158
  */
162
159
  const getLongChunkName = (
@@ -168,28 +165,30 @@ const getLongChunkName = (
168
165
  associatedObjectForCache
169
166
  ) => {
170
167
  const modules = chunkGraph.getChunkRootModules(chunk);
171
- const shortModuleNames = modules.map(m =>
168
+ const shortModuleNames = modules.map((m) =>
172
169
  requestToId(getShortModuleName(m, context, associatedObjectForCache))
173
170
  );
174
- const longModuleNames = modules.map(m =>
171
+ const longModuleNames = modules.map((m) =>
175
172
  requestToId(
176
173
  getLongModuleName("", m, context, hashFunction, associatedObjectForCache)
177
174
  )
178
175
  );
179
176
  chunk.idNameHints.sort();
180
- const chunkName = Array.from(chunk.idNameHints)
181
- .concat(shortModuleNames, longModuleNames)
177
+ const chunkName = [
178
+ ...chunk.idNameHints,
179
+ ...shortModuleNames,
180
+ ...longModuleNames
181
+ ]
182
182
  .filter(Boolean)
183
183
  .join(delimiter);
184
184
  return shortenLongString(chunkName, delimiter, hashFunction);
185
185
  };
186
- module.exports.getLongChunkName = getLongChunkName;
187
186
 
188
187
  /**
189
188
  * @param {Chunk} chunk the chunk
190
189
  * @param {ChunkGraph} chunkGraph the chunk graph
191
190
  * @param {string} context context directory
192
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
191
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
193
192
  * @returns {string} full chunk name
194
193
  */
195
194
  const getFullChunkName = (
@@ -200,12 +199,11 @@ const getFullChunkName = (
200
199
  ) => {
201
200
  if (chunk.name) return chunk.name;
202
201
  const modules = chunkGraph.getChunkRootModules(chunk);
203
- const fullModuleNames = modules.map(m =>
202
+ const fullModuleNames = modules.map((m) =>
204
203
  makePathsRelative(context, m.identifier(), associatedObjectForCache)
205
204
  );
206
205
  return fullModuleNames.join();
207
206
  };
208
- module.exports.getFullChunkName = getFullChunkName;
209
207
 
210
208
  /**
211
209
  * @template K
@@ -224,17 +222,19 @@ const addToMapOfItems = (map, key, value) => {
224
222
  array.push(value);
225
223
  };
226
224
 
225
+ /** @typedef {Set<string>} UsedModuleIds */
226
+
227
227
  /**
228
228
  * @param {Compilation} compilation the compilation
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
229
+ * @param {((module: Module) => boolean)=} filter filter modules
230
+ * @returns {[UsedModuleIds, Module[]]} used module ids as strings and modules without id matching the filter
231
231
  */
232
232
  const getUsedModuleIdsAndModules = (compilation, filter) => {
233
233
  const chunkGraph = compilation.chunkGraph;
234
234
 
235
235
  const modules = [];
236
236
 
237
- /** @type {Set<string>} */
237
+ /** @type {UsedModuleIds} */
238
238
  const usedIds = new Set();
239
239
  if (compilation.usedModuleIds) {
240
240
  for (const id of compilation.usedModuleIds) {
@@ -249,7 +249,9 @@ const getUsedModuleIdsAndModules = (compilation, filter) => {
249
249
  usedIds.add(String(moduleId));
250
250
  } else if (
251
251
  (!filter || filter(module)) &&
252
- chunkGraph.getNumberOfModuleChunks(module) !== 0
252
+ (chunkGraph.getNumberOfModuleChunks(module) !== 0 ||
253
+ // CSS modules need IDs even when not in chunks, for generating CSS class names(i.e. [id]-[local])
254
+ /** @type {BuildMeta} */ (module.buildMeta).isCSSModule)
253
255
  ) {
254
256
  modules.push(module);
255
257
  }
@@ -257,14 +259,15 @@ const getUsedModuleIdsAndModules = (compilation, filter) => {
257
259
 
258
260
  return [usedIds, modules];
259
261
  };
260
- module.exports.getUsedModuleIdsAndModules = getUsedModuleIdsAndModules;
262
+
263
+ /** @typedef {Set<string>} UsedChunkIds */
261
264
 
262
265
  /**
263
266
  * @param {Compilation} compilation the compilation
264
- * @returns {Set<string>} used chunk ids as strings
267
+ * @returns {UsedChunkIds} used chunk ids as strings
265
268
  */
266
- const getUsedChunkIds = compilation => {
267
- /** @type {Set<string>} */
269
+ const getUsedChunkIds = (compilation) => {
270
+ /** @type {UsedChunkIds} */
268
271
  const usedIds = new Set();
269
272
  if (compilation.usedChunkIds) {
270
273
  for (const id of compilation.usedChunkIds) {
@@ -281,16 +284,15 @@ const getUsedChunkIds = compilation => {
281
284
 
282
285
  return usedIds;
283
286
  };
284
- module.exports.getUsedChunkIds = getUsedChunkIds;
285
287
 
286
288
  /**
287
289
  * @template T
288
290
  * @param {Iterable<T>} items list of items to be named
289
- * @param {function(T): string} getShortName get a short name for an item
290
- * @param {function(T, string): string} getLongName get a long name for an item
291
- * @param {function(T, T): -1|0|1} comparator order of items
291
+ * @param {(item: T) => string} getShortName get a short name for an item
292
+ * @param {(item: T, name: string) => string} getLongName get a long name for an item
293
+ * @param {(a: T, b: T) => -1 | 0 | 1} comparator order of items
292
294
  * @param {Set<string>} usedIds already used ids, will not be assigned
293
- * @param {function(T, string): void} assignName assign a name to an item
295
+ * @param {(item: T, name: string) => void} assignName assign a name to an item
294
296
  * @returns {T[]} list of items without a name
295
297
  */
296
298
  const assignNames = (
@@ -301,7 +303,12 @@ const assignNames = (
301
303
  usedIds,
302
304
  assignName
303
305
  ) => {
304
- /** @type {Map<string, T[]>} */
306
+ /**
307
+ * @template T
308
+ * @typedef {Map<string, T[]>} MapToItem
309
+ */
310
+
311
+ /** @type {MapToItem<T>} */
305
312
  const nameToItems = new Map();
306
313
 
307
314
  for (const item of items) {
@@ -309,7 +316,7 @@ const assignNames = (
309
316
  addToMapOfItems(nameToItems, name, item);
310
317
  }
311
318
 
312
- /** @type {Map<string, T[]>} */
319
+ /** @type {MapToItem<T>} */
313
320
  const nameToItems2 = new Map();
314
321
 
315
322
  for (const [name, items] of nameToItems) {
@@ -349,14 +356,13 @@ const assignNames = (
349
356
  unnamedItems.sort(comparator);
350
357
  return unnamedItems;
351
358
  };
352
- module.exports.assignNames = assignNames;
353
359
 
354
360
  /**
355
361
  * @template T
356
362
  * @param {T[]} items list of items to be named
357
- * @param {function(T): string} getName get a name for an item
358
- * @param {function(T, T): -1|0|1} comparator order of items
359
- * @param {function(T, number): boolean} assignId assign an id to an item
363
+ * @param {(item: T) => string} getName get a name for an item
364
+ * @param {(a: T, n: T) => -1 | 0 | 1} comparator order of items
365
+ * @param {(item: T, id: number) => boolean} assignId assign an id to an item
360
366
  * @param {number[]} ranges usable ranges for ids
361
367
  * @param {number} expandFactor factor to create more ranges
362
368
  * @param {number} extraSpace extra space to allocate, i. e. when some ids are already used
@@ -403,10 +409,9 @@ const assignDeterministicIds = (
403
409
  } while (!assignId(item, id));
404
410
  }
405
411
  };
406
- module.exports.assignDeterministicIds = assignDeterministicIds;
407
412
 
408
413
  /**
409
- * @param {Set<string>} usedIds used ids
414
+ * @param {UsedModuleIds} usedIds used ids
410
415
  * @param {Iterable<Module>} modules the modules
411
416
  * @param {Compilation} compilation the compilation
412
417
  * @returns {void}
@@ -420,7 +425,7 @@ const assignAscendingModuleIds = (usedIds, modules, compilation) => {
420
425
  /**
421
426
  * @param {Module} module the module
422
427
  */
423
- assignId = module => {
428
+ assignId = (module) => {
424
429
  if (chunkGraph.getModuleId(module) === null) {
425
430
  while (usedIds.has(String(nextId))) nextId++;
426
431
  chunkGraph.setModuleId(module, nextId++);
@@ -430,7 +435,7 @@ const assignAscendingModuleIds = (usedIds, modules, compilation) => {
430
435
  /**
431
436
  * @param {Module} module the module
432
437
  */
433
- assignId = module => {
438
+ assignId = (module) => {
434
439
  if (chunkGraph.getModuleId(module) === null) {
435
440
  chunkGraph.setModuleId(module, nextId++);
436
441
  }
@@ -440,7 +445,6 @@ const assignAscendingModuleIds = (usedIds, modules, compilation) => {
440
445
  assignId(module);
441
446
  }
442
447
  };
443
- module.exports.assignAscendingModuleIds = assignAscendingModuleIds;
444
448
 
445
449
  /**
446
450
  * @param {Iterable<Chunk>} chunks the chunks
@@ -470,4 +474,17 @@ const assignAscendingChunkIds = (chunks, compilation) => {
470
474
  }
471
475
  }
472
476
  };
477
+
473
478
  module.exports.assignAscendingChunkIds = assignAscendingChunkIds;
479
+ module.exports.assignAscendingModuleIds = assignAscendingModuleIds;
480
+ module.exports.assignDeterministicIds = assignDeterministicIds;
481
+ module.exports.assignNames = assignNames;
482
+ module.exports.getFullChunkName = getFullChunkName;
483
+ module.exports.getFullModuleName = getFullModuleName;
484
+ module.exports.getLongChunkName = getLongChunkName;
485
+ module.exports.getLongModuleName = getLongModuleName;
486
+ module.exports.getShortChunkName = getShortChunkName;
487
+ module.exports.getShortModuleName = getShortModuleName;
488
+ module.exports.getUsedChunkIds = getUsedChunkIds;
489
+ module.exports.getUsedModuleIdsAndModules = getUsedModuleIdsAndModules;
490
+ module.exports.requestToId = requestToId;
@@ -7,24 +7,23 @@
7
7
 
8
8
  const { compareChunksNatural } = require("../util/comparators");
9
9
  const {
10
- getShortChunkName,
11
- getLongChunkName,
10
+ assignAscendingChunkIds,
12
11
  assignNames,
13
- getUsedChunkIds,
14
- assignAscendingChunkIds
12
+ getLongChunkName,
13
+ getShortChunkName,
14
+ getUsedChunkIds
15
15
  } = require("./IdHelpers");
16
16
 
17
- /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
18
- /** @typedef {import("../Chunk")} Chunk */
19
17
  /** @typedef {import("../Compiler")} Compiler */
20
- /** @typedef {import("../Module")} Module */
21
18
 
22
19
  /**
23
20
  * @typedef {object} NamedChunkIdsPluginOptions
24
- * @property {string} [context] context
25
- * @property {string} [delimiter] delimiter
21
+ * @property {string=} context context
22
+ * @property {string=} delimiter delimiter
26
23
  */
27
24
 
25
+ const PLUGIN_NAME = "NamedChunkIdsPlugin";
26
+
28
27
  class NamedChunkIdsPlugin {
29
28
  /**
30
29
  * @param {NamedChunkIdsPluginOptions=} options options
@@ -40,24 +39,22 @@ class NamedChunkIdsPlugin {
40
39
  * @returns {void}
41
40
  */
42
41
  apply(compiler) {
43
- compiler.hooks.compilation.tap("NamedChunkIdsPlugin", compilation => {
44
- const hashFunction =
45
- /** @type {NonNullable<Output["hashFunction"]>} */
46
- (compilation.outputOptions.hashFunction);
47
- compilation.hooks.chunkIds.tap("NamedChunkIdsPlugin", chunks => {
42
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
43
+ const hashFunction = compilation.outputOptions.hashFunction;
44
+ compilation.hooks.chunkIds.tap(PLUGIN_NAME, (chunks) => {
48
45
  const chunkGraph = compilation.chunkGraph;
49
46
  const context = this.context ? this.context : compiler.context;
50
47
  const delimiter = this.delimiter;
51
48
 
52
49
  const unnamedChunks = assignNames(
53
- Array.from(chunks).filter(chunk => {
50
+ [...chunks].filter((chunk) => {
54
51
  if (chunk.name) {
55
52
  chunk.id = chunk.name;
56
53
  chunk.ids = [chunk.name];
57
54
  }
58
55
  return chunk.id === null;
59
56
  }),
60
- chunk =>
57
+ (chunk) =>
61
58
  getShortChunkName(
62
59
  chunk,
63
60
  chunkGraph,
@@ -66,7 +63,7 @@ class NamedChunkIdsPlugin {
66
63
  hashFunction,
67
64
  compiler.root
68
65
  ),
69
- chunk =>
66
+ (chunk) =>
70
67
  getLongChunkName(
71
68
  chunk,
72
69
  chunkGraph,