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
@@ -6,19 +6,20 @@
6
6
  "use strict";
7
7
 
8
8
  const { UsageState } = require("../ExportsInfo");
9
+ const JavascriptParser = require("../javascript/JavascriptParser");
9
10
 
10
- /** @typedef {import("estree").Node} AnyNode */
11
11
  /** @typedef {import("../Dependency")} Dependency */
12
+ /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
12
13
  /** @typedef {import("../Module")} Module */
13
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
14
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
15
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
16
15
  /** @typedef {import("../Parser").ParserState} ParserState */
17
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
18
16
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
17
 
20
- /** @typedef {Map<TopLevelSymbol | null, Set<string | TopLevelSymbol> | true | undefined>} InnerGraph */
21
- /** @typedef {function(boolean | Set<string> | undefined): void} UsageCallback */
18
+ /** @typedef {Set<string | TopLevelSymbol>} InnerGraphValueSet */
19
+ /** @typedef {InnerGraphValueSet | true} InnerGraphValue */
20
+ /** @typedef {TopLevelSymbol | null} InnerGraphKey */
21
+ /** @typedef {Map<InnerGraphKey, InnerGraphValue | undefined>} InnerGraph */
22
+ /** @typedef {(value: boolean | Set<string> | undefined) => void} UsageCallback */
22
23
 
23
24
  /**
24
25
  * @typedef {object} StateObject
@@ -27,7 +28,18 @@ const { UsageState } = require("../ExportsInfo");
27
28
  * @property {Map<TopLevelSymbol, Set<UsageCallback>>} usageCallbackMap
28
29
  */
29
30
 
30
- /** @typedef {false|StateObject} State */
31
+ /** @typedef {false | StateObject} State */
32
+
33
+ class TopLevelSymbol {
34
+ /**
35
+ * @param {string} name name of the variable
36
+ */
37
+ constructor(name) {
38
+ this.name = name;
39
+ }
40
+ }
41
+
42
+ module.exports.TopLevelSymbol = TopLevelSymbol;
31
43
 
32
44
  /** @type {WeakMap<ParserState, State>} */
33
45
  const parserStateMap = new WeakMap();
@@ -41,43 +53,10 @@ function getState(parserState) {
41
53
  return parserStateMap.get(parserState);
42
54
  }
43
55
 
44
- /**
45
- * @param {ParserState} parserState parser state
46
- * @returns {void}
47
- */
48
- module.exports.bailout = parserState => {
49
- parserStateMap.set(parserState, false);
50
- };
51
-
52
- /**
53
- * @param {ParserState} parserState parser state
54
- * @returns {void}
55
- */
56
- module.exports.enable = parserState => {
57
- const state = parserStateMap.get(parserState);
58
- if (state === false) {
59
- return;
60
- }
61
- parserStateMap.set(parserState, {
62
- innerGraph: new Map(),
63
- currentTopLevelSymbol: undefined,
64
- usageCallbackMap: new Map()
65
- });
66
- };
67
-
68
- /**
69
- * @param {ParserState} parserState parser state
70
- * @returns {boolean} true, when enabled
71
- */
72
- module.exports.isEnabled = parserState => {
73
- const state = parserStateMap.get(parserState);
74
- return Boolean(state);
75
- };
76
-
77
56
  /**
78
57
  * @param {ParserState} state parser state
79
58
  * @param {TopLevelSymbol | null} symbol the symbol, or null for all symbols
80
- * @param {string | TopLevelSymbol | true} usage usage data
59
+ * @param {Usage} usage usage data
81
60
  * @returns {void}
82
61
  */
83
62
  module.exports.addUsage = (state, symbol, usage) => {
@@ -96,10 +75,12 @@ module.exports.addUsage = (state, symbol, usage) => {
96
75
  }
97
76
  };
98
77
 
78
+ /** @typedef {string | TopLevelSymbol | true} Usage */
79
+
99
80
  /**
100
81
  * @param {JavascriptParser} parser the parser
101
82
  * @param {string} name name of variable
102
- * @param {string | TopLevelSymbol | true} usage usage data
83
+ * @param {Usage} usage usage data
103
84
  * @returns {void}
104
85
  */
105
86
  module.exports.addVariableUsage = (parser, name, usage) => {
@@ -112,11 +93,78 @@ module.exports.addVariableUsage = (parser, name, usage) => {
112
93
  }
113
94
  };
114
95
 
96
+ /**
97
+ * @param {ParserState} parserState parser state
98
+ * @returns {void}
99
+ */
100
+ module.exports.bailout = (parserState) => {
101
+ parserStateMap.set(parserState, false);
102
+ };
103
+
104
+ /**
105
+ * @param {ParserState} parserState parser state
106
+ * @returns {void}
107
+ */
108
+ module.exports.enable = (parserState) => {
109
+ const state = parserStateMap.get(parserState);
110
+ if (state === false) {
111
+ return;
112
+ }
113
+ parserStateMap.set(parserState, {
114
+ innerGraph: new Map(),
115
+ currentTopLevelSymbol: undefined,
116
+ usageCallbackMap: new Map()
117
+ });
118
+ };
119
+
120
+ /** @typedef {Set<string> | boolean} UsedByExports */
121
+
122
+ /**
123
+ * @param {Dependency} dependency the dependency
124
+ * @param {UsedByExports | undefined} usedByExports usedByExports info
125
+ * @param {ModuleGraph} moduleGraph moduleGraph
126
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
127
+ */
128
+ module.exports.getDependencyUsedByExportsCondition = (
129
+ dependency,
130
+ usedByExports,
131
+ moduleGraph
132
+ ) => {
133
+ if (usedByExports === false) return false;
134
+ if (usedByExports !== true && usedByExports !== undefined) {
135
+ const selfModule =
136
+ /** @type {Module} */
137
+ (moduleGraph.getParentModule(dependency));
138
+ const exportsInfo = moduleGraph.getExportsInfo(selfModule);
139
+ return (connections, runtime) => {
140
+ for (const exportName of usedByExports) {
141
+ if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused) {
142
+ return true;
143
+ }
144
+ }
145
+ return false;
146
+ };
147
+ }
148
+ return null;
149
+ };
150
+
151
+ /**
152
+ * @param {ParserState} state parser state
153
+ * @returns {TopLevelSymbol | void} usage data
154
+ */
155
+ module.exports.getTopLevelSymbol = (state) => {
156
+ const innerGraphState = getState(state);
157
+
158
+ if (innerGraphState) {
159
+ return innerGraphState.currentTopLevelSymbol;
160
+ }
161
+ };
162
+
115
163
  /**
116
164
  * @param {ParserState} state parser state
117
165
  * @returns {void}
118
166
  */
119
- module.exports.inferDependencyUsage = state => {
167
+ module.exports.inferDependencyUsage = (state) => {
120
168
  const innerGraphState = getState(state);
121
169
 
122
170
  if (!innerGraphState) {
@@ -124,17 +172,19 @@ module.exports.inferDependencyUsage = state => {
124
172
  }
125
173
 
126
174
  const { innerGraph, usageCallbackMap } = innerGraphState;
175
+ /** @type {Map<InnerGraphKey, InnerGraphValueSet | undefined>} */
127
176
  const processed = new Map();
128
177
  // flatten graph to terminal nodes (string, undefined or true)
129
178
  const nonTerminal = new Set(innerGraph.keys());
130
179
  while (nonTerminal.size > 0) {
131
180
  for (const key of nonTerminal) {
132
- /** @type {Set<string|TopLevelSymbol> | true} */
181
+ /** @type {InnerGraphValue} */
133
182
  let newSet = new Set();
134
183
  let isTerminal = true;
135
184
  const value = innerGraph.get(key);
136
185
  let alreadyProcessed = processed.get(key);
137
186
  if (alreadyProcessed === undefined) {
187
+ /** @type {InnerGraphValueSet} */
138
188
  alreadyProcessed = new Set();
139
189
  processed.set(key, alreadyProcessed);
140
190
  }
@@ -208,6 +258,45 @@ module.exports.inferDependencyUsage = state => {
208
258
  }
209
259
  };
210
260
 
261
+ /**
262
+ * @param {Dependency} dependency the dependency
263
+ * @param {UsedByExports | undefined} usedByExports usedByExports info
264
+ * @param {ModuleGraph} moduleGraph moduleGraph
265
+ * @param {RuntimeSpec} runtime runtime
266
+ * @returns {boolean} false, when unused. Otherwise true
267
+ */
268
+ module.exports.isDependencyUsedByExports = (
269
+ dependency,
270
+ usedByExports,
271
+ moduleGraph,
272
+ runtime
273
+ ) => {
274
+ if (usedByExports === false) return false;
275
+ if (usedByExports !== true && usedByExports !== undefined) {
276
+ const selfModule =
277
+ /** @type {Module} */
278
+ (moduleGraph.getParentModule(dependency));
279
+ const exportsInfo = moduleGraph.getExportsInfo(selfModule);
280
+ let used = false;
281
+ for (const exportName of usedByExports) {
282
+ if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused) {
283
+ used = true;
284
+ }
285
+ }
286
+ if (!used) return false;
287
+ }
288
+ return true;
289
+ };
290
+
291
+ /**
292
+ * @param {ParserState} parserState parser state
293
+ * @returns {boolean} true, when enabled
294
+ */
295
+ module.exports.isEnabled = (parserState) => {
296
+ const state = parserStateMap.get(parserState);
297
+ return Boolean(state);
298
+ };
299
+
211
300
  /**
212
301
  * @param {ParserState} state parser state
213
302
  * @param {UsageCallback} onUsageCallback on usage callback
@@ -246,18 +335,6 @@ module.exports.setTopLevelSymbol = (state, symbol) => {
246
335
  }
247
336
  };
248
337
 
249
- /**
250
- * @param {ParserState} state parser state
251
- * @returns {TopLevelSymbol|void} usage data
252
- */
253
- module.exports.getTopLevelSymbol = state => {
254
- const innerGraphState = getState(state);
255
-
256
- if (innerGraphState) {
257
- return innerGraphState.currentTopLevelSymbol;
258
- }
259
- };
260
-
261
338
  /**
262
339
  * @param {JavascriptParser} parser parser
263
340
  * @param {string} name name of variable
@@ -277,75 +354,13 @@ module.exports.tagTopLevelSymbol = (parser, name) => {
277
354
  }
278
355
 
279
356
  const fn = new TopLevelSymbol(name);
280
- parser.tagVariable(name, topLevelSymbolTag, fn);
357
+ parser.tagVariable(
358
+ name,
359
+ topLevelSymbolTag,
360
+ fn,
361
+ JavascriptParser.VariableInfoFlags.Normal
362
+ );
281
363
  return fn;
282
364
  };
283
365
 
284
- /**
285
- * @param {Dependency} dependency the dependency
286
- * @param {Set<string> | boolean} usedByExports usedByExports info
287
- * @param {ModuleGraph} moduleGraph moduleGraph
288
- * @param {RuntimeSpec} runtime runtime
289
- * @returns {boolean} false, when unused. Otherwise true
290
- */
291
- module.exports.isDependencyUsedByExports = (
292
- dependency,
293
- usedByExports,
294
- moduleGraph,
295
- runtime
296
- ) => {
297
- if (usedByExports === false) return false;
298
- if (usedByExports !== true && usedByExports !== undefined) {
299
- const selfModule =
300
- /** @type {Module} */
301
- (moduleGraph.getParentModule(dependency));
302
- const exportsInfo = moduleGraph.getExportsInfo(selfModule);
303
- let used = false;
304
- for (const exportName of usedByExports) {
305
- if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused)
306
- used = true;
307
- }
308
- if (!used) return false;
309
- }
310
- return true;
311
- };
312
-
313
- /**
314
- * @param {Dependency} dependency the dependency
315
- * @param {Set<string> | boolean | undefined} usedByExports usedByExports info
316
- * @param {ModuleGraph} moduleGraph moduleGraph
317
- * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active
318
- */
319
- module.exports.getDependencyUsedByExportsCondition = (
320
- dependency,
321
- usedByExports,
322
- moduleGraph
323
- ) => {
324
- if (usedByExports === false) return false;
325
- if (usedByExports !== true && usedByExports !== undefined) {
326
- const selfModule =
327
- /** @type {Module} */
328
- (moduleGraph.getParentModule(dependency));
329
- const exportsInfo = moduleGraph.getExportsInfo(selfModule);
330
- return (connections, runtime) => {
331
- for (const exportName of usedByExports) {
332
- if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused)
333
- return true;
334
- }
335
- return false;
336
- };
337
- }
338
- return null;
339
- };
340
-
341
- class TopLevelSymbol {
342
- /**
343
- * @param {string} name name of the variable
344
- */
345
- constructor(name) {
346
- this.name = name;
347
- }
348
- }
349
-
350
- module.exports.TopLevelSymbol = TopLevelSymbol;
351
366
  module.exports.topLevelSymbolTag = topLevelSymbolTag;
@@ -15,16 +15,15 @@ const InnerGraph = require("./InnerGraph");
15
15
  /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
16
16
  /** @typedef {import("estree").ClassExpression} ClassExpression */
17
17
  /** @typedef {import("estree").Expression} Expression */
18
+ /** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
19
+ /** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
18
20
  /** @typedef {import("estree").Node} Node */
19
- /** @typedef {import("estree").VariableDeclarator} VariableDeclaratorNode */
21
+ /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
20
22
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
21
23
  /** @typedef {import("../Compiler")} Compiler */
22
- /** @typedef {import("../Dependency")} Dependency */
23
24
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
24
- /** @typedef {import("../dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
25
25
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
26
26
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
27
- /** @typedef {import("./InnerGraph").InnerGraph} InnerGraph */
28
27
  /** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
29
28
 
30
29
  const { topLevelSymbolTag } = InnerGraph;
@@ -57,8 +56,8 @@ class InnerGraphPlugin {
57
56
  /**
58
57
  * @param {Expression} sup sup
59
58
  */
60
- const onUsageSuper = sup => {
61
- InnerGraph.onUsage(parser.state, usedByExports => {
59
+ const onUsageSuper = (sup) => {
60
+ InnerGraph.onUsage(parser.state, (usedByExports) => {
62
61
  switch (usedByExports) {
63
62
  case undefined:
64
63
  case true:
@@ -98,22 +97,22 @@ class InnerGraphPlugin {
98
97
  // 2. classes (class declaration, class expression)
99
98
  // 3. variable declarators (const x = ...)
100
99
 
101
- /** @type {WeakMap<Node, TopLevelSymbol>} */
100
+ /** @type {WeakMap<Node | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration, TopLevelSymbol>} */
102
101
  const statementWithTopLevelSymbol = new WeakMap();
103
- /** @type {WeakMap<Node, Node>} */
102
+ /** @type {WeakMap<Node | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration, Node>} */
104
103
  const statementPurePart = new WeakMap();
105
104
 
106
- /** @type {WeakMap<ClassExpression | ClassDeclaration, TopLevelSymbol>} */
105
+ /** @type {WeakMap<ClassExpression | ClassDeclaration | MaybeNamedClassDeclaration, TopLevelSymbol>} */
107
106
  const classWithTopLevelSymbol = new WeakMap();
108
107
 
109
- /** @type {WeakMap<VariableDeclaratorNode, TopLevelSymbol>} */
108
+ /** @type {WeakMap<VariableDeclarator, TopLevelSymbol>} */
110
109
  const declWithTopLevelSymbol = new WeakMap();
111
- /** @type {WeakSet<VariableDeclaratorNode>} */
110
+ /** @type {WeakSet<VariableDeclarator>} */
112
111
  const pureDeclarators = new WeakSet();
113
112
 
114
113
  // The following hooks are used during prewalking:
115
114
 
116
- parser.hooks.preStatement.tap(PLUGIN_NAME, statement => {
115
+ parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
117
116
  if (!InnerGraph.isEnabled(parser.state)) return;
118
117
 
119
118
  if (
@@ -129,7 +128,7 @@ class InnerGraphPlugin {
129
128
  }
130
129
  });
131
130
 
132
- parser.hooks.blockPreStatement.tap(PLUGIN_NAME, statement => {
131
+ parser.hooks.blockPreStatement.tap(PLUGIN_NAME, (statement) => {
133
132
  if (!InnerGraph.isEnabled(parser.state)) return;
134
133
 
135
134
  if (parser.scope.topLevelScope === true) {
@@ -193,7 +192,7 @@ class InnerGraphPlugin {
193
192
  }
194
193
  });
195
194
 
196
- parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
195
+ parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, _statement) => {
197
196
  if (!InnerGraph.isEnabled(parser.state)) return;
198
197
  if (
199
198
  parser.scope.topLevelScope === true &&
@@ -248,7 +247,7 @@ class InnerGraphPlugin {
248
247
 
249
248
  // The following hooks are called during walking:
250
249
 
251
- parser.hooks.statement.tap(PLUGIN_NAME, statement => {
250
+ parser.hooks.statement.tap(PLUGIN_NAME, (statement) => {
252
251
  if (!InnerGraph.isEnabled(parser.state)) return;
253
252
  if (parser.scope.topLevelScope === true) {
254
253
  InnerGraph.setTopLevelSymbol(parser.state, undefined);
@@ -258,7 +257,7 @@ class InnerGraphPlugin {
258
257
  InnerGraph.setTopLevelSymbol(parser.state, fn);
259
258
  const purePart = statementPurePart.get(statement);
260
259
  if (purePart) {
261
- InnerGraph.onUsage(parser.state, usedByExports => {
260
+ InnerGraph.onUsage(parser.state, (usedByExports) => {
262
261
  switch (usedByExports) {
263
262
  case undefined:
264
263
  case true:
@@ -334,7 +333,7 @@ class InnerGraphPlugin {
334
333
  ) {
335
334
  InnerGraph.setTopLevelSymbol(parser.state, fn);
336
335
  if (element.type !== "MethodDefinition" && element.static) {
337
- InnerGraph.onUsage(parser.state, usedByExports => {
336
+ InnerGraph.onUsage(parser.state, (usedByExports) => {
338
337
  switch (usedByExports) {
339
338
  case undefined:
340
339
  case true:
@@ -361,7 +360,7 @@ class InnerGraphPlugin {
361
360
  }
362
361
  );
363
362
 
364
- parser.hooks.declarator.tap(PLUGIN_NAME, (decl, statement) => {
363
+ parser.hooks.declarator.tap(PLUGIN_NAME, (decl, _statement) => {
365
364
  if (!InnerGraph.isEnabled(parser.state)) return;
366
365
  const fn = declWithTopLevelSymbol.get(decl);
367
366
 
@@ -376,7 +375,7 @@ class InnerGraphPlugin {
376
375
  onUsageSuper(decl.init.superClass);
377
376
  }
378
377
  } else {
379
- InnerGraph.onUsage(parser.state, usedByExports => {
378
+ InnerGraph.onUsage(parser.state, (usedByExports) => {
380
379
  switch (usedByExports) {
381
380
  case undefined:
382
381
  case true:
@@ -397,7 +396,11 @@ class InnerGraphPlugin {
397
396
  });
398
397
  }
399
398
  }
400
- parser.walkExpression(decl.init);
399
+ parser.walkExpression(
400
+ /** @type {NonNullable<VariableDeclarator["init"]>} */ (
401
+ decl.init
402
+ )
403
+ );
401
404
  InnerGraph.setTopLevelSymbol(parser.state, undefined);
402
405
  return true;
403
406
  } else if (
@@ -427,10 +430,12 @@ class InnerGraphPlugin {
427
430
  currentTopLevelSymbol || true
428
431
  );
429
432
  });
430
- parser.hooks.assign.for(topLevelSymbolTag).tap(PLUGIN_NAME, expr => {
431
- if (!InnerGraph.isEnabled(parser.state)) return;
432
- if (expr.operator === "=") return true;
433
- });
433
+ parser.hooks.assign
434
+ .for(topLevelSymbolTag)
435
+ .tap(PLUGIN_NAME, (expr) => {
436
+ if (!InnerGraph.isEnabled(parser.state)) return;
437
+ if (expr.operator === "=") return true;
438
+ });
434
439
  };
435
440
  normalModuleFactory.hooks.parser
436
441
  .for(JAVASCRIPT_MODULE_TYPE_AUTO)
@@ -15,7 +15,7 @@ const createSchemaValidation = require("../util/create-schema-validation");
15
15
  /** @typedef {import("../Compiler")} Compiler */
16
16
 
17
17
  const validate = createSchemaValidation(
18
- require("../../schemas/plugins/optimize/LimitChunkCountPlugin.check.js"),
18
+ require("../../schemas/plugins/optimize/LimitChunkCountPlugin.check"),
19
19
  () => require("../../schemas/plugins/optimize/LimitChunkCountPlugin.json"),
20
20
  {
21
21
  name: "Limit Chunk Count Plugin",
@@ -51,6 +51,8 @@ const addToSetMap = (map, key, value) => {
51
51
  }
52
52
  };
53
53
 
54
+ const PLUGIN_NAME = "LimitChunkCountPlugin";
55
+
54
56
  class LimitChunkCountPlugin {
55
57
  /**
56
58
  * @param {LimitChunkCountPluginOptions=} options options object
@@ -66,13 +68,13 @@ class LimitChunkCountPlugin {
66
68
  */
67
69
  apply(compiler) {
68
70
  const options = this.options;
69
- compiler.hooks.compilation.tap("LimitChunkCountPlugin", compilation => {
71
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
70
72
  compilation.hooks.optimizeChunks.tap(
71
73
  {
72
- name: "LimitChunkCountPlugin",
74
+ name: PLUGIN_NAME,
73
75
  stage: STAGE_ADVANCED
74
76
  },
75
- chunks => {
77
+ (chunks) => {
76
78
  const chunkGraph = compilation.chunkGraph;
77
79
  const maxChunks = options.maxChunks;
78
80
  if (!maxChunks) return;
@@ -83,31 +85,51 @@ class LimitChunkCountPlugin {
83
85
 
84
86
  // order chunks in a deterministic way
85
87
  const compareChunksWithGraph = compareChunks(chunkGraph);
86
- const orderedChunks = Array.from(chunks).sort(compareChunksWithGraph);
88
+ /** @type {Chunk[]} */
89
+ const orderedChunks = [...chunks].sort(compareChunksWithGraph);
87
90
 
88
91
  // create a lazy sorted data structure to keep all combinations
89
92
  // this is large. Size = chunks * (chunks - 1) / 2
90
93
  // It uses a multi layer bucket sort plus normal sort in the last layer
91
94
  // It's also lazy so only accessed buckets are sorted
95
+ /** @type {LazyBucketSortedSet<ChunkCombination, number>} */
92
96
  const combinations = new LazyBucketSortedSet(
93
97
  // Layer 1: ordered by largest size benefit
94
- c => c.sizeDiff,
98
+ (c) => c.sizeDiff,
95
99
  (a, b) => b - a,
100
+
96
101
  // Layer 2: ordered by smallest combined size
97
102
  /**
98
103
  * @param {ChunkCombination} c combination
99
104
  * @returns {number} integrated size
100
105
  */
101
- c => c.integratedSize,
106
+ (c) => c.integratedSize,
107
+ /**
108
+ * @param {number} a a
109
+ * @param {number} b b
110
+ * @returns {number} result
111
+ */
102
112
  (a, b) => a - b,
113
+
103
114
  // Layer 3: ordered by position difference in orderedChunk (-> to be deterministic)
104
115
  /**
105
116
  * @param {ChunkCombination} c combination
106
117
  * @returns {number} position difference
107
118
  */
108
- c => c.bIdx - c.aIdx,
119
+ (c) => c.bIdx - c.aIdx,
120
+ /**
121
+ * @param {number} a a
122
+ * @param {number} b b
123
+ * @returns {number} result
124
+ */
109
125
  (a, b) => a - b,
126
+
110
127
  // Layer 4: ordered by position in orderedChunk (-> to be deterministic)
128
+ /**
129
+ * @param {ChunkCombination} a a
130
+ * @param {ChunkCombination} b b
131
+ * @returns {number} result
132
+ */
111
133
  (a, b) => a.bIdx - b.bIdx
112
134
  );
113
135
 
@@ -132,6 +154,7 @@ class LimitChunkCountPlugin {
132
154
 
133
155
  const aSize = chunkGraph.getChunkSize(a, options);
134
156
  const bSize = chunkGraph.getChunkSize(b, options);
157
+ /** @type {ChunkCombination} */
135
158
  const c = {
136
159
  deleted: false,
137
160
  sizeDiff: aSize + bSize - integratedSize,
@@ -274,4 +297,5 @@ class LimitChunkCountPlugin {
274
297
  });
275
298
  }
276
299
  }
300
+
277
301
  module.exports = LimitChunkCountPlugin;
@@ -7,9 +7,9 @@
7
7
 
8
8
  const { UsageState } = require("../ExportsInfo");
9
9
  const {
10
- numberToIdentifier,
10
+ NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS,
11
11
  NUMBER_OF_IDENTIFIER_START_CHARS,
12
- NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS
12
+ numberToIdentifier
13
13
  } = require("../Template");
14
14
  const { assignDeterministicIds } = require("../ids/IdHelpers");
15
15
  const { compareSelect, compareStringsNumeric } = require("../util/comparators");
@@ -22,9 +22,10 @@ const { compareSelect, compareStringsNumeric } = require("../util/comparators");
22
22
  * @param {ExportsInfo} exportsInfo exports info
23
23
  * @returns {boolean} mangle is possible
24
24
  */
25
- const canMangle = exportsInfo => {
26
- if (exportsInfo.otherExportsInfo.getUsed(undefined) !== UsageState.Unused)
25
+ const canMangle = (exportsInfo) => {
26
+ if (exportsInfo.otherExportsInfo.getUsed(undefined) !== UsageState.Unused) {
27
27
  return false;
28
+ }
28
29
  let hasSomethingToMangle = false;
29
30
  for (const exportInfo of exportsInfo.exports) {
30
31
  if (exportInfo.canMangle === true) {
@@ -35,7 +36,7 @@ const canMangle = exportsInfo => {
35
36
  };
36
37
 
37
38
  // Sort by name
38
- const comparator = compareSelect(e => e.name, compareStringsNumeric);
39
+ const comparator = compareSelect((e) => e.name, compareStringsNumeric);
39
40
  /**
40
41
  * @param {boolean} deterministic use deterministic names
41
42
  * @param {ExportsInfo} exportsInfo exports info
@@ -99,7 +100,7 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
99
100
  if (deterministic) {
100
101
  assignDeterministicIds(
101
102
  mangleableExports,
102
- e => e.name,
103
+ (e) => e.name,
103
104
  comparator,
104
105
  (e, id) => {
105
106
  const name = numberToIdentifier(id);
@@ -142,6 +143,8 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
142
143
  }
143
144
  };
144
145
 
146
+ const PLUGIN_NAME = "MangleExportsPlugin";
147
+
145
148
  class MangleExportsPlugin {
146
149
  /**
147
150
  * @param {boolean} deterministic use deterministic names
@@ -157,24 +160,21 @@ class MangleExportsPlugin {
157
160
  */
158
161
  apply(compiler) {
159
162
  const { _deterministic: deterministic } = this;
160
- compiler.hooks.compilation.tap("MangleExportsPlugin", compilation => {
163
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
161
164
  const moduleGraph = compilation.moduleGraph;
162
- compilation.hooks.optimizeCodeGeneration.tap(
163
- "MangleExportsPlugin",
164
- modules => {
165
- if (compilation.moduleMemCaches) {
166
- throw new Error(
167
- "optimization.mangleExports can't be used with cacheUnaffected as export mangling is a global effect"
168
- );
169
- }
170
- for (const module of modules) {
171
- const isNamespace =
172
- module.buildMeta && module.buildMeta.exportsType === "namespace";
173
- const exportsInfo = moduleGraph.getExportsInfo(module);
174
- mangleExportsInfo(deterministic, exportsInfo, isNamespace);
175
- }
165
+ compilation.hooks.optimizeCodeGeneration.tap(PLUGIN_NAME, (modules) => {
166
+ if (compilation.moduleMemCaches) {
167
+ throw new Error(
168
+ "optimization.mangleExports can't be used with cacheUnaffected as export mangling is a global effect"
169
+ );
170
+ }
171
+ for (const module of modules) {
172
+ const isNamespace =
173
+ module.buildMeta && module.buildMeta.exportsType === "namespace";
174
+ const exportsInfo = moduleGraph.getExportsInfo(module);
175
+ mangleExportsInfo(deterministic, exportsInfo, isNamespace);
176
176
  }
177
- );
177
+ });
178
178
  });
179
179
  }
180
180
  }