webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -21,6 +21,9 @@ class EnsureChunkConditionsPlugin {
21
21
  compiler.hooks.compilation.tap(
22
22
  "EnsureChunkConditionsPlugin",
23
23
  compilation => {
24
+ /**
25
+ * @param {Iterable<Chunk>} chunks the chunks
26
+ */
24
27
  const handler = chunks => {
25
28
  const chunkGraph = compilation.chunkGraph;
26
29
  // These sets are hoisted here to save memory
@@ -53,7 +56,7 @@ class EnsureChunkConditionsPlugin {
53
56
  // We reached the entrypoint: fail
54
57
  if (chunkGroup.isInitial()) {
55
58
  throw new Error(
56
- "Cannot fullfil chunk condition of " + module.identifier()
59
+ `Cannot fulfil chunk condition of ${module.identifier()}`
57
60
  );
58
61
  }
59
62
  // Try placing in all parents
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  /** @typedef {import("../Chunk")} Chunk */
9
+ /** @typedef {import("../Chunk").ChunkId} ChunkId */
9
10
  /** @typedef {import("../Compiler")} Compiler */
10
11
  /** @typedef {import("../Module")} Module */
11
12
 
@@ -38,10 +39,10 @@ class FlagIncludedChunksPlugin {
38
39
  const modulesCount = compilation.modules.size;
39
40
 
40
41
  // precalculate the modulo values for each bit
41
- const modulo = 1 / Math.pow(1 / modulesCount, 1 / 31);
42
+ const modulo = 1 / (1 / modulesCount) ** (1 / 31);
42
43
  const modulos = Array.from(
43
44
  { length: 31 },
44
- (x, i) => Math.pow(modulo, i) | 0
45
+ (x, i) => (modulo ** i) | 0
45
46
  );
46
47
 
47
48
  // iterate all modules to generate bit values
@@ -61,17 +62,19 @@ class FlagIncludedChunksPlugin {
61
62
  for (const chunk of chunks) {
62
63
  let hash = 0;
63
64
  for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
64
- hash |= moduleBits.get(module);
65
+ hash |= /** @type {number} */ (moduleBits.get(module));
65
66
  }
66
67
  chunkModulesHash.set(chunk, hash);
67
68
  }
68
69
 
69
70
  for (const chunkA of chunks) {
70
- const chunkAHash = chunkModulesHash.get(chunkA);
71
+ const chunkAHash =
72
+ /** @type {number} */
73
+ (chunkModulesHash.get(chunkA));
71
74
  const chunkAModulesCount =
72
75
  chunkGraph.getNumberOfChunkModules(chunkA);
73
76
  if (chunkAModulesCount === 0) continue;
74
- let bestModule = undefined;
77
+ let bestModule;
75
78
  for (const module of chunkGraph.getChunkModulesIterable(chunkA)) {
76
79
  if (
77
80
  bestModule === undefined ||
@@ -81,7 +84,7 @@ class FlagIncludedChunksPlugin {
81
84
  bestModule = module;
82
85
  }
83
86
  loopB: for (const chunkB of chunkGraph.getModuleChunksIterable(
84
- bestModule
87
+ /** @type {Module} */ (bestModule)
85
88
  )) {
86
89
  // as we iterate the same iterables twice
87
90
  // skip if we find ourselves
@@ -100,14 +103,17 @@ class FlagIncludedChunksPlugin {
100
103
  // is chunkA in chunkB?
101
104
 
102
105
  // we do a cheap check for the hash value
103
- const chunkBHash = chunkModulesHash.get(chunkB);
106
+ const chunkBHash =
107
+ /** @type {number} */
108
+ (chunkModulesHash.get(chunkB));
104
109
  if ((chunkBHash & chunkAHash) !== chunkAHash) continue;
105
110
 
106
111
  // compare all modules
107
112
  for (const m of chunkGraph.getChunkModulesIterable(chunkA)) {
108
113
  if (!chunkGraph.isModuleInChunk(m, chunkB)) continue loopB;
109
114
  }
110
- chunkB.ids.push(chunkA.id);
115
+ /** @type {ChunkId[]} */
116
+ (chunkB.ids).push(/** @type {ChunkId} */ (chunkA.id));
111
117
  }
112
118
  }
113
119
  }
@@ -9,6 +9,7 @@ const { UsageState } = require("../ExportsInfo");
9
9
 
10
10
  /** @typedef {import("estree").Node} AnyNode */
11
11
  /** @typedef {import("../Dependency")} Dependency */
12
+ /** @typedef {import("../Module")} Module */
12
13
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
13
14
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
14
15
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
@@ -16,11 +17,11 @@ const { UsageState } = require("../ExportsInfo");
16
17
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
17
18
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
18
19
 
19
- /** @typedef {Map<TopLevelSymbol | null, Set<string | TopLevelSymbol> | true>} InnerGraph */
20
+ /** @typedef {Map<TopLevelSymbol | null, Set<string | TopLevelSymbol> | true | undefined>} InnerGraph */
20
21
  /** @typedef {function(boolean | Set<string> | undefined): void} UsageCallback */
21
22
 
22
23
  /**
23
- * @typedef {Object} StateObject
24
+ * @typedef {object} StateObject
24
25
  * @property {InnerGraph} innerGraph
25
26
  * @property {TopLevelSymbol=} currentTopLevelSymbol
26
27
  * @property {Map<TopLevelSymbol, Set<UsageCallback>>} usageCallbackMap
@@ -34,7 +35,7 @@ const topLevelSymbolTag = Symbol("top level symbol");
34
35
 
35
36
  /**
36
37
  * @param {ParserState} parserState parser state
37
- * @returns {State} state
38
+ * @returns {State | undefined} state
38
39
  */
39
40
  function getState(parserState) {
40
41
  return parserStateMap.get(parserState);
@@ -44,7 +45,7 @@ function getState(parserState) {
44
45
  * @param {ParserState} parserState parser state
45
46
  * @returns {void}
46
47
  */
47
- exports.bailout = parserState => {
48
+ module.exports.bailout = parserState => {
48
49
  parserStateMap.set(parserState, false);
49
50
  };
50
51
 
@@ -52,7 +53,7 @@ exports.bailout = parserState => {
52
53
  * @param {ParserState} parserState parser state
53
54
  * @returns {void}
54
55
  */
55
- exports.enable = parserState => {
56
+ module.exports.enable = parserState => {
56
57
  const state = parserStateMap.get(parserState);
57
58
  if (state === false) {
58
59
  return;
@@ -68,9 +69,9 @@ exports.enable = parserState => {
68
69
  * @param {ParserState} parserState parser state
69
70
  * @returns {boolean} true, when enabled
70
71
  */
71
- exports.isEnabled = parserState => {
72
+ module.exports.isEnabled = parserState => {
72
73
  const state = parserStateMap.get(parserState);
73
- return !!state;
74
+ return Boolean(state);
74
75
  };
75
76
 
76
77
  /**
@@ -79,7 +80,7 @@ exports.isEnabled = parserState => {
79
80
  * @param {string | TopLevelSymbol | true} usage usage data
80
81
  * @returns {void}
81
82
  */
82
- exports.addUsage = (state, symbol, usage) => {
83
+ module.exports.addUsage = (state, symbol, usage) => {
83
84
  const innerGraphState = getState(state);
84
85
 
85
86
  if (innerGraphState) {
@@ -101,13 +102,13 @@ exports.addUsage = (state, symbol, usage) => {
101
102
  * @param {string | TopLevelSymbol | true} usage usage data
102
103
  * @returns {void}
103
104
  */
104
- exports.addVariableUsage = (parser, name, usage) => {
105
+ module.exports.addVariableUsage = (parser, name, usage) => {
105
106
  const symbol =
106
107
  /** @type {TopLevelSymbol} */ (
107
108
  parser.getTagData(name, topLevelSymbolTag)
108
- ) || exports.tagTopLevelSymbol(parser, name);
109
+ ) || module.exports.tagTopLevelSymbol(parser, name);
109
110
  if (symbol) {
110
- exports.addUsage(parser.state, symbol, usage);
111
+ module.exports.addUsage(parser.state, symbol, usage);
111
112
  }
112
113
  };
113
114
 
@@ -115,7 +116,7 @@ exports.addVariableUsage = (parser, name, usage) => {
115
116
  * @param {ParserState} state parser state
116
117
  * @returns {void}
117
118
  */
118
- exports.inferDependencyUsage = state => {
119
+ module.exports.inferDependencyUsage = state => {
119
120
  const innerGraphState = getState(state);
120
121
 
121
122
  if (!innerGraphState) {
@@ -211,7 +212,7 @@ exports.inferDependencyUsage = state => {
211
212
  * @param {ParserState} state parser state
212
213
  * @param {UsageCallback} onUsageCallback on usage callback
213
214
  */
214
- exports.onUsage = (state, onUsageCallback) => {
215
+ module.exports.onUsage = (state, onUsageCallback) => {
215
216
  const innerGraphState = getState(state);
216
217
 
217
218
  if (innerGraphState) {
@@ -235,9 +236,9 @@ exports.onUsage = (state, onUsageCallback) => {
235
236
 
236
237
  /**
237
238
  * @param {ParserState} state parser state
238
- * @param {TopLevelSymbol} symbol the symbol
239
+ * @param {TopLevelSymbol | undefined} symbol the symbol
239
240
  */
240
- exports.setTopLevelSymbol = (state, symbol) => {
241
+ module.exports.setTopLevelSymbol = (state, symbol) => {
241
242
  const innerGraphState = getState(state);
242
243
 
243
244
  if (innerGraphState) {
@@ -249,7 +250,7 @@ exports.setTopLevelSymbol = (state, symbol) => {
249
250
  * @param {ParserState} state parser state
250
251
  * @returns {TopLevelSymbol|void} usage data
251
252
  */
252
- exports.getTopLevelSymbol = state => {
253
+ module.exports.getTopLevelSymbol = state => {
253
254
  const innerGraphState = getState(state);
254
255
 
255
256
  if (innerGraphState) {
@@ -260,9 +261,9 @@ exports.getTopLevelSymbol = state => {
260
261
  /**
261
262
  * @param {JavascriptParser} parser parser
262
263
  * @param {string} name name of variable
263
- * @returns {TopLevelSymbol} symbol
264
+ * @returns {TopLevelSymbol | undefined} symbol
264
265
  */
265
- exports.tagTopLevelSymbol = (parser, name) => {
266
+ module.exports.tagTopLevelSymbol = (parser, name) => {
266
267
  const innerGraphState = getState(parser.state);
267
268
  if (!innerGraphState) return;
268
269
 
@@ -287,7 +288,7 @@ exports.tagTopLevelSymbol = (parser, name) => {
287
288
  * @param {RuntimeSpec} runtime runtime
288
289
  * @returns {boolean} false, when unused. Otherwise true
289
290
  */
290
- exports.isDependencyUsedByExports = (
291
+ module.exports.isDependencyUsedByExports = (
291
292
  dependency,
292
293
  usedByExports,
293
294
  moduleGraph,
@@ -295,7 +296,9 @@ exports.isDependencyUsedByExports = (
295
296
  ) => {
296
297
  if (usedByExports === false) return false;
297
298
  if (usedByExports !== true && usedByExports !== undefined) {
298
- const selfModule = moduleGraph.getParentModule(dependency);
299
+ const selfModule =
300
+ /** @type {Module} */
301
+ (moduleGraph.getParentModule(dependency));
299
302
  const exportsInfo = moduleGraph.getExportsInfo(selfModule);
300
303
  let used = false;
301
304
  for (const exportName of usedByExports) {
@@ -309,18 +312,20 @@ exports.isDependencyUsedByExports = (
309
312
 
310
313
  /**
311
314
  * @param {Dependency} dependency the dependency
312
- * @param {Set<string> | boolean} usedByExports usedByExports info
315
+ * @param {Set<string> | boolean | undefined} usedByExports usedByExports info
313
316
  * @param {ModuleGraph} moduleGraph moduleGraph
314
317
  * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active
315
318
  */
316
- exports.getDependencyUsedByExportsCondition = (
319
+ module.exports.getDependencyUsedByExportsCondition = (
317
320
  dependency,
318
321
  usedByExports,
319
322
  moduleGraph
320
323
  ) => {
321
324
  if (usedByExports === false) return false;
322
325
  if (usedByExports !== true && usedByExports !== undefined) {
323
- const selfModule = moduleGraph.getParentModule(dependency);
326
+ const selfModule =
327
+ /** @type {Module} */
328
+ (moduleGraph.getParentModule(dependency));
324
329
  const exportsInfo = moduleGraph.getExportsInfo(selfModule);
325
330
  return (connections, runtime) => {
326
331
  for (const exportName of usedByExports) {
@@ -342,5 +347,5 @@ class TopLevelSymbol {
342
347
  }
343
348
  }
344
349
 
345
- exports.TopLevelSymbol = TopLevelSymbol;
346
- exports.topLevelSymbolTag = topLevelSymbolTag;
350
+ module.exports.TopLevelSymbol = TopLevelSymbol;
351
+ module.exports.topLevelSymbolTag = topLevelSymbolTag;
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_ESM
11
+ } = require("../ModuleTypeConstants");
8
12
  const PureExpressionDependency = require("../dependencies/PureExpressionDependency");
9
13
  const InnerGraph = require("./InnerGraph");
10
14
 
@@ -12,15 +16,20 @@ const InnerGraph = require("./InnerGraph");
12
16
  /** @typedef {import("estree").ClassExpression} ClassExpressionNode */
13
17
  /** @typedef {import("estree").Node} Node */
14
18
  /** @typedef {import("estree").VariableDeclarator} VariableDeclaratorNode */
19
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
15
20
  /** @typedef {import("../Compiler")} Compiler */
16
21
  /** @typedef {import("../Dependency")} Dependency */
22
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
17
23
  /** @typedef {import("../dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
18
24
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
25
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
26
  /** @typedef {import("./InnerGraph").InnerGraph} InnerGraph */
20
27
  /** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
21
28
 
22
29
  const { topLevelSymbolTag } = InnerGraph;
23
30
 
31
+ const PLUGIN_NAME = "InnerGraphPlugin";
32
+
24
33
  class InnerGraphPlugin {
25
34
  /**
26
35
  * Apply the plugin
@@ -29,7 +38,7 @@ class InnerGraphPlugin {
29
38
  */
30
39
  apply(compiler) {
31
40
  compiler.hooks.compilation.tap(
32
- "InnerGraphPlugin",
41
+ PLUGIN_NAME,
33
42
  (compilation, { normalModuleFactory }) => {
34
43
  const logger = compilation.getLogger("webpack.InnerGraphPlugin");
35
44
 
@@ -40,7 +49,7 @@ class InnerGraphPlugin {
40
49
 
41
50
  /**
42
51
  * @param {JavascriptParser} parser the parser
43
- * @param {Object} parserOptions options
52
+ * @param {JavascriptParserOptions} parserOptions options
44
53
  * @returns {void}
45
54
  */
46
55
  const handler = (parser, parserOptions) => {
@@ -61,11 +70,11 @@ class InnerGraphPlugin {
61
70
  });
62
71
  };
63
72
 
64
- parser.hooks.program.tap("InnerGraphPlugin", () => {
73
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
65
74
  InnerGraph.enable(parser.state);
66
75
  });
67
76
 
68
- parser.hooks.finish.tap("InnerGraphPlugin", () => {
77
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
69
78
  if (!InnerGraph.isEnabled(parser.state)) return;
70
79
 
71
80
  logger.time("infer dependency usage");
@@ -97,24 +106,31 @@ class InnerGraphPlugin {
97
106
 
98
107
  // The following hooks are used during prewalking:
99
108
 
100
- parser.hooks.preStatement.tap("InnerGraphPlugin", statement => {
109
+ parser.hooks.preStatement.tap(PLUGIN_NAME, statement => {
101
110
  if (!InnerGraph.isEnabled(parser.state)) return;
102
111
 
103
- if (parser.scope.topLevelScope === true) {
104
- if (statement.type === "FunctionDeclaration") {
105
- const name = statement.id ? statement.id.name : "*default*";
106
- const fn = InnerGraph.tagTopLevelSymbol(parser, name);
107
- statementWithTopLevelSymbol.set(statement, fn);
108
- return true;
109
- }
112
+ if (
113
+ parser.scope.topLevelScope === true &&
114
+ statement.type === "FunctionDeclaration"
115
+ ) {
116
+ const name = statement.id ? statement.id.name : "*default*";
117
+ const fn = InnerGraph.tagTopLevelSymbol(parser, name);
118
+ statementWithTopLevelSymbol.set(statement, fn);
119
+ return true;
110
120
  }
111
121
  });
112
122
 
113
- parser.hooks.blockPreStatement.tap("InnerGraphPlugin", statement => {
123
+ parser.hooks.blockPreStatement.tap(PLUGIN_NAME, statement => {
114
124
  if (!InnerGraph.isEnabled(parser.state)) return;
115
125
 
116
126
  if (parser.scope.topLevelScope === true) {
117
- if (statement.type === "ClassDeclaration") {
127
+ if (
128
+ statement.type === "ClassDeclaration" &&
129
+ parser.isPure(
130
+ statement,
131
+ /** @type {Range} */ (statement.range)[0]
132
+ )
133
+ ) {
118
134
  const name = statement.id ? statement.id.name : "*default*";
119
135
  const fn = InnerGraph.tagTopLevelSymbol(parser, name);
120
136
  classWithTopLevelSymbol.set(statement, fn);
@@ -125,11 +141,14 @@ class InnerGraphPlugin {
125
141
  const fn = InnerGraph.tagTopLevelSymbol(parser, name);
126
142
  const decl = statement.declaration;
127
143
  if (
128
- decl.type === "ClassExpression" ||
129
- decl.type === "ClassDeclaration"
144
+ (decl.type === "ClassExpression" ||
145
+ decl.type === "ClassDeclaration") &&
146
+ parser.isPure(decl, /** @type {Range} */ (decl.range)[0])
130
147
  ) {
131
148
  classWithTopLevelSymbol.set(decl, fn);
132
- } else if (parser.isPure(decl, statement.range[0])) {
149
+ } else if (
150
+ parser.isPure(decl, /** @type {Range} */ (statement.range)[0])
151
+ ) {
133
152
  statementWithTopLevelSymbol.set(statement, fn);
134
153
  if (
135
154
  !decl.type.endsWith("FunctionExpression") &&
@@ -143,33 +162,40 @@ class InnerGraphPlugin {
143
162
  }
144
163
  });
145
164
 
146
- parser.hooks.preDeclarator.tap(
147
- "InnerGraphPlugin",
148
- (decl, statement) => {
149
- if (!InnerGraph.isEnabled(parser.state)) return;
165
+ parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
166
+ if (!InnerGraph.isEnabled(parser.state)) return;
167
+ if (
168
+ parser.scope.topLevelScope === true &&
169
+ decl.init &&
170
+ decl.id.type === "Identifier"
171
+ ) {
172
+ const name = decl.id.name;
150
173
  if (
151
- parser.scope.topLevelScope === true &&
152
- decl.init &&
153
- decl.id.type === "Identifier"
174
+ decl.init.type === "ClassExpression" &&
175
+ parser.isPure(
176
+ decl.init,
177
+ /** @type {Range} */ (decl.id.range)[1]
178
+ )
154
179
  ) {
155
- const name = decl.id.name;
156
- if (decl.init.type === "ClassExpression") {
157
- const fn = InnerGraph.tagTopLevelSymbol(parser, name);
158
- classWithTopLevelSymbol.set(decl.init, fn);
159
- } else if (parser.isPure(decl.init, decl.id.range[1])) {
160
- const fn = InnerGraph.tagTopLevelSymbol(parser, name);
161
- declWithTopLevelSymbol.set(decl, fn);
162
- if (
163
- !decl.init.type.endsWith("FunctionExpression") &&
164
- decl.init.type !== "Literal"
165
- ) {
166
- pureDeclarators.add(decl);
167
- }
168
- return true;
180
+ const fn = InnerGraph.tagTopLevelSymbol(parser, name);
181
+ classWithTopLevelSymbol.set(decl.init, fn);
182
+ } else if (
183
+ parser.isPure(
184
+ decl.init,
185
+ /** @type {Range} */ (decl.id.range)[1]
186
+ )
187
+ ) {
188
+ const fn = InnerGraph.tagTopLevelSymbol(parser, name);
189
+ declWithTopLevelSymbol.set(decl, fn);
190
+ if (
191
+ !decl.init.type.endsWith("FunctionExpression") &&
192
+ decl.init.type !== "Literal"
193
+ ) {
194
+ pureDeclarators.add(decl);
169
195
  }
170
196
  }
171
197
  }
172
- );
198
+ });
173
199
 
174
200
  // During real walking we set the TopLevelSymbol state to the assigned
175
201
  // TopLevelSymbol by using the fill datastructures.
@@ -187,7 +213,7 @@ class InnerGraphPlugin {
187
213
 
188
214
  // The following hooks are called during walking:
189
215
 
190
- parser.hooks.statement.tap("InnerGraphPlugin", statement => {
216
+ parser.hooks.statement.tap(PLUGIN_NAME, statement => {
191
217
  if (!InnerGraph.isEnabled(parser.state)) return;
192
218
  if (parser.scope.topLevelScope === true) {
193
219
  InnerGraph.setTopLevelSymbol(parser.state, undefined);
@@ -204,9 +230,11 @@ class InnerGraphPlugin {
204
230
  return;
205
231
  default: {
206
232
  const dep = new PureExpressionDependency(
207
- purePart.range
233
+ /** @type {Range} */ (purePart.range)
208
234
  );
209
- dep.loc = statement.loc;
235
+ dep.loc =
236
+ /** @type {DependencyLocation} */
237
+ (statement.loc);
210
238
  dep.usedByExports = usedByExports;
211
239
  parser.state.module.addDependency(dep);
212
240
  break;
@@ -219,7 +247,7 @@ class InnerGraphPlugin {
219
247
  });
220
248
 
221
249
  parser.hooks.classExtendsExpression.tap(
222
- "InnerGraphPlugin",
250
+ PLUGIN_NAME,
223
251
  (expr, statement) => {
224
252
  if (!InnerGraph.isEnabled(parser.state)) return;
225
253
  if (parser.scope.topLevelScope === true) {
@@ -228,7 +256,9 @@ class InnerGraphPlugin {
228
256
  fn &&
229
257
  parser.isPure(
230
258
  expr,
231
- statement.id ? statement.id.range[1] : statement.range[0]
259
+ statement.id
260
+ ? /** @type {Range} */ (statement.id.range)[1]
261
+ : /** @type {Range} */ (statement.range)[0]
232
262
  )
233
263
  ) {
234
264
  InnerGraph.setTopLevelSymbol(parser.state, fn);
@@ -239,7 +269,7 @@ class InnerGraphPlugin {
239
269
  );
240
270
 
241
271
  parser.hooks.classBodyElement.tap(
242
- "InnerGraphPlugin",
272
+ PLUGIN_NAME,
243
273
  (element, classDefinition) => {
244
274
  if (!InnerGraph.isEnabled(parser.state)) return;
245
275
  if (parser.scope.topLevelScope === true) {
@@ -252,7 +282,7 @@ class InnerGraphPlugin {
252
282
  );
253
283
 
254
284
  parser.hooks.classBodyValue.tap(
255
- "InnerGraphPlugin",
285
+ PLUGIN_NAME,
256
286
  (expression, element, classDefinition) => {
257
287
  if (!InnerGraph.isEnabled(parser.state)) return;
258
288
  if (parser.scope.topLevelScope === true) {
@@ -262,7 +292,9 @@ class InnerGraphPlugin {
262
292
  !element.static ||
263
293
  parser.isPure(
264
294
  expression,
265
- element.key ? element.key.range[1] : element.range[0]
295
+ element.key
296
+ ? /** @type {Range} */ (element.key.range)[1]
297
+ : /** @type {Range} */ (element.range)[0]
266
298
  )
267
299
  ) {
268
300
  InnerGraph.setTopLevelSymbol(parser.state, fn);
@@ -274,9 +306,11 @@ class InnerGraphPlugin {
274
306
  return;
275
307
  default: {
276
308
  const dep = new PureExpressionDependency(
277
- expression.range
309
+ /** @type {Range} */ (expression.range)
278
310
  );
279
- dep.loc = expression.loc;
311
+ dep.loc =
312
+ /** @type {DependencyLocation} */
313
+ (expression.loc);
280
314
  dep.usedByExports = usedByExports;
281
315
  parser.state.module.addDependency(dep);
282
316
  break;
@@ -292,7 +326,7 @@ class InnerGraphPlugin {
292
326
  }
293
327
  );
294
328
 
295
- parser.hooks.declarator.tap("InnerGraphPlugin", (decl, statement) => {
329
+ parser.hooks.declarator.tap(PLUGIN_NAME, (decl, statement) => {
296
330
  if (!InnerGraph.isEnabled(parser.state)) return;
297
331
  const fn = declWithTopLevelSymbol.get(decl);
298
332
 
@@ -311,9 +345,9 @@ class InnerGraphPlugin {
311
345
  return;
312
346
  default: {
313
347
  const dep = new PureExpressionDependency(
314
- decl.init.range
348
+ /** @type {Range} */ (decl.init.range)
315
349
  );
316
- dep.loc = decl.loc;
350
+ dep.loc = /** @type {DependencyLocation} */ (decl.loc);
317
351
  dep.usedByExports = usedByExports;
318
352
  parser.state.module.addDependency(dep);
319
353
  break;
@@ -325,12 +359,21 @@ class InnerGraphPlugin {
325
359
  parser.walkExpression(decl.init);
326
360
  InnerGraph.setTopLevelSymbol(parser.state, undefined);
327
361
  return true;
362
+ } else if (
363
+ decl.id.type === "Identifier" &&
364
+ decl.init &&
365
+ decl.init.type === "ClassExpression" &&
366
+ classWithTopLevelSymbol.has(decl.init)
367
+ ) {
368
+ parser.walkExpression(decl.init);
369
+ InnerGraph.setTopLevelSymbol(parser.state, undefined);
370
+ return true;
328
371
  }
329
372
  });
330
373
 
331
374
  parser.hooks.expression
332
375
  .for(topLevelSymbolTag)
333
- .tap("InnerGraphPlugin", () => {
376
+ .tap(PLUGIN_NAME, () => {
334
377
  const topLevelSymbol = /** @type {TopLevelSymbol} */ (
335
378
  parser.currentTagData
336
379
  );
@@ -343,21 +386,19 @@ class InnerGraphPlugin {
343
386
  currentTopLevelSymbol || true
344
387
  );
345
388
  });
346
- parser.hooks.assign
347
- .for(topLevelSymbolTag)
348
- .tap("InnerGraphPlugin", expr => {
349
- if (!InnerGraph.isEnabled(parser.state)) return;
350
- if (expr.operator === "=") return true;
351
- });
389
+ parser.hooks.assign.for(topLevelSymbolTag).tap(PLUGIN_NAME, expr => {
390
+ if (!InnerGraph.isEnabled(parser.state)) return;
391
+ if (expr.operator === "=") return true;
392
+ });
352
393
  };
353
394
  normalModuleFactory.hooks.parser
354
- .for("javascript/auto")
355
- .tap("InnerGraphPlugin", handler);
395
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
396
+ .tap(PLUGIN_NAME, handler);
356
397
  normalModuleFactory.hooks.parser
357
- .for("javascript/esm")
358
- .tap("InnerGraphPlugin", handler);
398
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
399
+ .tap(PLUGIN_NAME, handler);
359
400
 
360
- compilation.hooks.finishModules.tap("InnerGraphPlugin", () => {
401
+ compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {
361
402
  logger.timeAggregateEnd("infer dependency usage");
362
403
  });
363
404
  }