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
@@ -14,13 +14,13 @@ const DEFAULT_EXPORT = "__WEBPACK_DEFAULT_EXPORT__";
14
14
  const NAMESPACE_OBJECT_EXPORT = "__WEBPACK_NAMESPACE_OBJECT__";
15
15
 
16
16
  /**
17
- * @typedef {Object} ExternalModuleInfo
17
+ * @typedef {object} ExternalModuleInfo
18
18
  * @property {number} index
19
19
  * @property {Module} module
20
20
  */
21
21
 
22
22
  /**
23
- * @typedef {Object} ConcatenatedModuleInfo
23
+ * @typedef {object} ConcatenatedModuleInfo
24
24
  * @property {number} index
25
25
  * @property {Module} module
26
26
  * @property {Map<string, string>} exportMap mapping from export name to symbol
@@ -31,7 +31,7 @@ const NAMESPACE_OBJECT_EXPORT = "__WEBPACK_NAMESPACE_OBJECT__";
31
31
  /** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo} ModuleInfo */
32
32
 
33
33
  /**
34
- * @typedef {Object} ModuleReferenceOptions
34
+ * @typedef {object} ModuleReferenceOptions
35
35
  * @property {string[]} ids the properties/exports of the module
36
36
  * @property {boolean} call true, when this referenced export is called
37
37
  * @property {boolean} directImport true, when this referenced export is directly imported (not via property access)
@@ -64,7 +64,6 @@ class ConcatenationScope {
64
64
  }
65
65
 
66
66
  /**
67
- *
68
67
  * @param {string} exportName name of the export
69
68
  * @param {string} symbol identifier of the export in source code
70
69
  */
@@ -78,7 +77,6 @@ class ConcatenationScope {
78
77
  }
79
78
 
80
79
  /**
81
- *
82
80
  * @param {string} exportName name of the export
83
81
  * @param {string} expression expression to be used
84
82
  */
@@ -99,7 +97,6 @@ class ConcatenationScope {
99
97
  }
100
98
 
101
99
  /**
102
- *
103
100
  * @param {Module} module the referenced module
104
101
  * @param {Partial<ModuleReferenceOptions>} options options
105
102
  * @returns {string} the reference as identifier
@@ -108,14 +105,14 @@ class ConcatenationScope {
108
105
  module,
109
106
  { ids = undefined, call = false, directImport = false, asiSafe = false }
110
107
  ) {
111
- const info = this._modulesMap.get(module);
108
+ const info = /** @type {ModuleInfo} */ (this._modulesMap.get(module));
112
109
  const callFlag = call ? "_call" : "";
113
110
  const directImportFlag = directImport ? "_directImport" : "";
114
111
  const asiSafeFlag = asiSafe
115
112
  ? "_asiSafe1"
116
113
  : asiSafe === false
117
- ? "_asiSafe0"
118
- : "";
114
+ ? "_asiSafe0"
115
+ : "";
119
116
  const exportData = ids
120
117
  ? Buffer.from(JSON.stringify(ids), "utf-8").toString("hex")
121
118
  : "ns";
@@ -133,12 +130,12 @@ class ConcatenationScope {
133
130
 
134
131
  /**
135
132
  * @param {string} name the identifier
136
- * @returns {ModuleReferenceOptions & { index: number }} parsed options and index
133
+ * @returns {ModuleReferenceOptions & { index: number } | null} parsed options and index
137
134
  */
138
135
  static matchModuleReference(name) {
139
136
  const match = MODULE_REFERENCE_REGEXP.exec(name);
140
137
  if (!match) return null;
141
- const index = +match[1];
138
+ const index = Number(match[1]);
142
139
  const asiSafe = match[5];
143
140
  return {
144
141
  index,
@@ -146,8 +143,8 @@ class ConcatenationScope {
146
143
  match[2] === "ns"
147
144
  ? []
148
145
  : JSON.parse(Buffer.from(match[2], "hex").toString("utf-8")),
149
- call: !!match[3],
150
- directImport: !!match[4],
146
+ call: Boolean(match[3]),
147
+ directImport: Boolean(match[4]),
151
148
  asiSafe: asiSafe ? asiSafe === "1" : undefined
152
149
  };
153
150
  }
@@ -14,6 +14,11 @@ const { mergeRuntime } = require("./util/runtime");
14
14
  /** @typedef {import("./Generator").GenerateContext} GenerateContext */
15
15
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
16
16
 
17
+ /**
18
+ * @param {string} condition condition
19
+ * @param {string | Source} source source
20
+ * @returns {string | Source} wrapped source
21
+ */
17
22
  const wrapInCondition = (condition, source) => {
18
23
  if (typeof source === "string") {
19
24
  return Template.asString([
@@ -22,26 +27,25 @@ const wrapInCondition = (condition, source) => {
22
27
  "}",
23
28
  ""
24
29
  ]);
25
- } else {
26
- return new ConcatSource(
27
- `if (${condition}) {\n`,
28
- new PrefixSource("\t", source),
29
- "}\n"
30
- );
31
30
  }
31
+ return new ConcatSource(
32
+ `if (${condition}) {\n`,
33
+ new PrefixSource("\t", source),
34
+ "}\n"
35
+ );
32
36
  };
33
37
 
34
38
  /**
35
- * @typedef {GenerateContext} Context
39
+ * @extends {InitFragment<GenerateContext>}
36
40
  */
37
41
  class ConditionalInitFragment extends InitFragment {
38
42
  /**
39
- * @param {string|Source} content the source code that will be included as initialization code
43
+ * @param {string | Source | undefined} content the source code that will be included as initialization code
40
44
  * @param {number} stage category of initialization code (contribute to order)
41
45
  * @param {number} position position in the category (contribute to order)
42
- * @param {string} key unique key to avoid emitting the same initialization code twice
46
+ * @param {string | undefined} key unique key to avoid emitting the same initialization code twice
43
47
  * @param {RuntimeSpec | boolean} runtimeCondition in which runtime this fragment should be executed
44
- * @param {string|Source=} endContent the source code that will be included at the end of the module
48
+ * @param {string | Source=} endContent the source code that will be included at the end of the module
45
49
  */
46
50
  constructor(
47
51
  content,
@@ -49,15 +53,15 @@ class ConditionalInitFragment extends InitFragment {
49
53
  position,
50
54
  key,
51
55
  runtimeCondition = true,
52
- endContent
56
+ endContent = undefined
53
57
  ) {
54
58
  super(content, stage, position, key, endContent);
55
59
  this.runtimeCondition = runtimeCondition;
56
60
  }
57
61
 
58
62
  /**
59
- * @param {Context} context context
60
- * @returns {string|Source} the source code that will be included as initialization code
63
+ * @param {GenerateContext} context context
64
+ * @returns {string | Source | undefined} the source code that will be included as initialization code
61
65
  */
62
66
  getContent(context) {
63
67
  if (this.runtimeCondition === false || !this.content) return "";
@@ -73,7 +77,7 @@ class ConditionalInitFragment extends InitFragment {
73
77
  }
74
78
 
75
79
  /**
76
- * @param {Context} context context
80
+ * @param {GenerateContext} context context
77
81
  * @returns {string|Source=} the source code that will be included at the end of the module
78
82
  */
79
83
  getEndContent(context) {
@@ -89,6 +93,10 @@ class ConditionalInitFragment extends InitFragment {
89
93
  return wrapInCondition(expr, this.endContent);
90
94
  }
91
95
 
96
+ /**
97
+ * @param {ConditionalInitFragment} other fragment to merge with
98
+ * @returns {ConditionalInitFragment} merged fragment
99
+ */
92
100
  merge(other) {
93
101
  if (this.runtimeCondition === true) return this;
94
102
  if (other.runtimeCondition === true) return other;
@@ -5,19 +5,36 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const CachedConstDependency = require("./dependencies/CachedConstDependency");
9
14
  const ConstDependency = require("./dependencies/ConstDependency");
10
15
  const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
11
16
  const { parseResource } = require("./util/identifier");
12
17
 
13
- /** @typedef {import("estree").Expression} ExpressionNode */
14
- /** @typedef {import("estree").Super} SuperNode */
18
+ /** @typedef {import("estree").AssignmentProperty} AssignmentProperty */
19
+ /** @typedef {import("estree").Expression} Expression */
20
+ /** @typedef {import("estree").Identifier} Identifier */
21
+ /** @typedef {import("estree").Pattern} Pattern */
22
+ /** @typedef {import("estree").SourceLocation} SourceLocation */
23
+ /** @typedef {import("estree").Statement} Statement */
24
+ /** @typedef {import("estree").Super} Super */
15
25
  /** @typedef {import("./Compiler")} Compiler */
26
+ /** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
27
+ /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
28
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
16
29
 
30
+ /**
31
+ * @param {Set<string>} declarations set of declarations
32
+ * @param {Identifier | Pattern} pattern pattern to collect declarations from
33
+ */
17
34
  const collectDeclaration = (declarations, pattern) => {
18
35
  const stack = [pattern];
19
36
  while (stack.length > 0) {
20
- const node = stack.pop();
37
+ const node = /** @type {Pattern} */ (stack.pop());
21
38
  switch (node.type) {
22
39
  case "Identifier":
23
40
  declarations.add(node.name);
@@ -34,7 +51,7 @@ const collectDeclaration = (declarations, pattern) => {
34
51
  break;
35
52
  case "ObjectPattern":
36
53
  for (const property of node.properties) {
37
- stack.push(property.value);
54
+ stack.push(/** @type {AssignmentProperty} */ (property).value);
38
55
  }
39
56
  break;
40
57
  case "RestElement":
@@ -44,8 +61,14 @@ const collectDeclaration = (declarations, pattern) => {
44
61
  }
45
62
  };
46
63
 
64
+ /**
65
+ * @param {Statement} branch branch to get hoisted declarations from
66
+ * @param {boolean} includeFunctionDeclarations whether to include function declarations
67
+ * @returns {Array<string>} hoisted declarations
68
+ */
47
69
  const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
48
70
  const declarations = new Set();
71
+ /** @type {Array<TODO | null | undefined>} */
49
72
  const stack = [branch];
50
73
  while (stack.length > 0) {
51
74
  const node = stack.pop();
@@ -93,7 +116,7 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
93
116
  break;
94
117
  case "FunctionDeclaration":
95
118
  if (includeFunctionDeclarations) {
96
- collectDeclaration(declarations, node.id);
119
+ collectDeclaration(declarations, /** @type {Identifier} */ (node.id));
97
120
  }
98
121
  break;
99
122
  case "VariableDeclaration":
@@ -108,6 +131,8 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
108
131
  return Array.from(declarations);
109
132
  };
110
133
 
134
+ const PLUGIN_NAME = "ConstPlugin";
135
+
111
136
  class ConstPlugin {
112
137
  /**
113
138
  * Apply the plugin
@@ -117,7 +142,7 @@ class ConstPlugin {
117
142
  apply(compiler) {
118
143
  const cachedParseResource = parseResource.bindCache(compiler.root);
119
144
  compiler.hooks.compilation.tap(
120
- "ConstPlugin",
145
+ PLUGIN_NAME,
121
146
  (compilation, { normalModuleFactory }) => {
122
147
  compilation.dependencyTemplates.set(
123
148
  ConstDependency,
@@ -129,15 +154,21 @@ class ConstPlugin {
129
154
  new CachedConstDependency.Template()
130
155
  );
131
156
 
157
+ /**
158
+ * @param {JavascriptParser} parser the parser
159
+ */
132
160
  const handler = parser => {
133
- parser.hooks.statementIf.tap("ConstPlugin", statement => {
161
+ parser.hooks.statementIf.tap(PLUGIN_NAME, statement => {
134
162
  if (parser.scope.isAsmJs) return;
135
163
  const param = parser.evaluateExpression(statement.test);
136
164
  const bool = param.asBool();
137
165
  if (typeof bool === "boolean") {
138
166
  if (!param.couldHaveSideEffects()) {
139
- const dep = new ConstDependency(`${bool}`, param.range);
140
- dep.loc = statement.loc;
167
+ const dep = new ConstDependency(
168
+ `${bool}`,
169
+ /** @type {Range} */ (param.range)
170
+ );
171
+ dep.loc = /** @type {SourceLocation} */ (statement.loc);
141
172
  parser.state.module.addPresentationalDependency(dep);
142
173
  } else {
143
174
  parser.walkExpression(statement.test);
@@ -176,41 +207,36 @@ class ConstPlugin {
176
207
  // NOTE: When code runs in strict mode, `var` declarations
177
208
  // are hoisted but `function` declarations don't.
178
209
  //
179
- let declarations;
180
- if (parser.scope.isStrict) {
181
- // If the code runs in strict mode, variable declarations
182
- // using `var` must be hoisted.
183
- declarations = getHoistedDeclarations(branchToRemove, false);
184
- } else {
185
- // Otherwise, collect all hoisted declaration.
186
- declarations = getHoistedDeclarations(branchToRemove, true);
187
- }
188
- let replacement;
189
- if (declarations.length > 0) {
190
- replacement = `{ var ${declarations.join(", ")}; }`;
191
- } else {
192
- replacement = "{}";
193
- }
210
+ const declarations = parser.scope.isStrict
211
+ ? getHoistedDeclarations(branchToRemove, false)
212
+ : getHoistedDeclarations(branchToRemove, true);
213
+ const replacement =
214
+ declarations.length > 0
215
+ ? `{ var ${declarations.join(", ")}; }`
216
+ : "{}";
194
217
  const dep = new ConstDependency(
195
218
  replacement,
196
- branchToRemove.range
219
+ /** @type {Range} */ (branchToRemove.range)
197
220
  );
198
- dep.loc = branchToRemove.loc;
221
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
199
222
  parser.state.module.addPresentationalDependency(dep);
200
223
  }
201
224
  return bool;
202
225
  }
203
226
  });
204
227
  parser.hooks.expressionConditionalOperator.tap(
205
- "ConstPlugin",
228
+ PLUGIN_NAME,
206
229
  expression => {
207
230
  if (parser.scope.isAsmJs) return;
208
231
  const param = parser.evaluateExpression(expression.test);
209
232
  const bool = param.asBool();
210
233
  if (typeof bool === "boolean") {
211
234
  if (!param.couldHaveSideEffects()) {
212
- const dep = new ConstDependency(` ${bool}`, param.range);
213
- dep.loc = expression.loc;
235
+ const dep = new ConstDependency(
236
+ ` ${bool}`,
237
+ /** @type {Range} */ (param.range)
238
+ );
239
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
214
240
  parser.state.module.addPresentationalDependency(dep);
215
241
  } else {
216
242
  parser.walkExpression(expression.test);
@@ -229,15 +255,18 @@ class ConstPlugin {
229
255
  const branchToRemove = bool
230
256
  ? expression.alternate
231
257
  : expression.consequent;
232
- const dep = new ConstDependency("0", branchToRemove.range);
233
- dep.loc = branchToRemove.loc;
258
+ const dep = new ConstDependency(
259
+ "0",
260
+ /** @type {Range} */ (branchToRemove.range)
261
+ );
262
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
234
263
  parser.state.module.addPresentationalDependency(dep);
235
264
  return bool;
236
265
  }
237
266
  }
238
267
  );
239
268
  parser.hooks.expressionLogicalOperator.tap(
240
- "ConstPlugin",
269
+ PLUGIN_NAME,
241
270
  expression => {
242
271
  if (parser.scope.isAsmJs) return;
243
272
  if (
@@ -306,8 +335,11 @@ class ConstPlugin {
306
335
  //
307
336
  // returnfalse&&'foo'
308
337
  //
309
- const dep = new ConstDependency(` ${bool}`, param.range);
310
- dep.loc = expression.loc;
338
+ const dep = new ConstDependency(
339
+ ` ${bool}`,
340
+ /** @type {Range} */ (param.range)
341
+ );
342
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
311
343
  parser.state.module.addPresentationalDependency(dep);
312
344
  } else {
313
345
  parser.walkExpression(expression.left);
@@ -315,16 +347,16 @@ class ConstPlugin {
315
347
  if (!keepRight) {
316
348
  const dep = new ConstDependency(
317
349
  "0",
318
- expression.right.range
350
+ /** @type {Range} */ (expression.right.range)
319
351
  );
320
- dep.loc = expression.loc;
352
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
321
353
  parser.state.module.addPresentationalDependency(dep);
322
354
  }
323
355
  return keepRight;
324
356
  }
325
357
  } else if (expression.operator === "??") {
326
358
  const param = parser.evaluateExpression(expression.left);
327
- const keepRight = param && param.asNullish();
359
+ const keepRight = param.asNullish();
328
360
  if (typeof keepRight === "boolean") {
329
361
  // ------------------------------------------
330
362
  //
@@ -356,15 +388,18 @@ class ConstPlugin {
356
388
  //
357
389
  // returnnull??'foo'
358
390
  //
359
- const dep = new ConstDependency(" null", param.range);
360
- dep.loc = expression.loc;
391
+ const dep = new ConstDependency(
392
+ " null",
393
+ /** @type {Range} */ (param.range)
394
+ );
395
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
361
396
  parser.state.module.addPresentationalDependency(dep);
362
397
  } else {
363
398
  const dep = new ConstDependency(
364
399
  "0",
365
- expression.right.range
400
+ /** @type {Range} */ (expression.right.range)
366
401
  );
367
- dep.loc = expression.loc;
402
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
368
403
  parser.state.module.addPresentationalDependency(dep);
369
404
  parser.walkExpression(expression.left);
370
405
  }
@@ -374,10 +409,10 @@ class ConstPlugin {
374
409
  }
375
410
  }
376
411
  );
377
- parser.hooks.optionalChaining.tap("ConstPlugin", expr => {
378
- /** @type {ExpressionNode[]} */
412
+ parser.hooks.optionalChaining.tap(PLUGIN_NAME, expr => {
413
+ /** @type {Expression[]} */
379
414
  const optionalExpressionsStack = [];
380
- /** @type {ExpressionNode|SuperNode} */
415
+ /** @type {Expression | Super} */
381
416
  let next = expr.expression;
382
417
 
383
418
  while (
@@ -388,7 +423,7 @@ class ConstPlugin {
388
423
  if (next.optional) {
389
424
  // SuperNode can not be optional
390
425
  optionalExpressionsStack.push(
391
- /** @type {ExpressionNode} */ (next.object)
426
+ /** @type {Expression} */ (next.object)
392
427
  );
393
428
  }
394
429
  next = next.object;
@@ -396,7 +431,7 @@ class ConstPlugin {
396
431
  if (next.optional) {
397
432
  // SuperNode can not be optional
398
433
  optionalExpressionsStack.push(
399
- /** @type {ExpressionNode} */ (next.callee)
434
+ /** @type {Expression} */ (next.callee)
400
435
  );
401
436
  }
402
437
  next = next.callee;
@@ -405,9 +440,11 @@ class ConstPlugin {
405
440
 
406
441
  while (optionalExpressionsStack.length) {
407
442
  const expression = optionalExpressionsStack.pop();
408
- const evaluated = parser.evaluateExpression(expression);
443
+ const evaluated = parser.evaluateExpression(
444
+ /** @type {Expression} */ (expression)
445
+ );
409
446
 
410
- if (evaluated && evaluated.asNullish()) {
447
+ if (evaluated.asNullish()) {
411
448
  // ------------------------------------------
412
449
  //
413
450
  // Given the following code:
@@ -420,8 +457,11 @@ class ConstPlugin {
420
457
  //
421
458
  // ------------------------------------------
422
459
  //
423
- const dep = new ConstDependency(" undefined", expr.range);
424
- dep.loc = expr.loc;
460
+ const dep = new ConstDependency(
461
+ " undefined",
462
+ /** @type {Range} */ (expr.range)
463
+ );
464
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
425
465
  parser.state.module.addPresentationalDependency(dep);
426
466
  return true;
427
467
  }
@@ -429,7 +469,7 @@ class ConstPlugin {
429
469
  });
430
470
  parser.hooks.evaluateIdentifier
431
471
  .for("__resourceQuery")
432
- .tap("ConstPlugin", expr => {
472
+ .tap(PLUGIN_NAME, expr => {
433
473
  if (parser.scope.isAsmJs) return;
434
474
  if (!parser.state.module) return;
435
475
  return evaluateToString(
@@ -438,24 +478,24 @@ class ConstPlugin {
438
478
  });
439
479
  parser.hooks.expression
440
480
  .for("__resourceQuery")
441
- .tap("ConstPlugin", expr => {
481
+ .tap(PLUGIN_NAME, expr => {
442
482
  if (parser.scope.isAsmJs) return;
443
483
  if (!parser.state.module) return;
444
484
  const dep = new CachedConstDependency(
445
485
  JSON.stringify(
446
486
  cachedParseResource(parser.state.module.resource).query
447
487
  ),
448
- expr.range,
488
+ /** @type {Range} */ (expr.range),
449
489
  "__resourceQuery"
450
490
  );
451
- dep.loc = expr.loc;
491
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
452
492
  parser.state.module.addPresentationalDependency(dep);
453
493
  return true;
454
494
  });
455
495
 
456
496
  parser.hooks.evaluateIdentifier
457
497
  .for("__resourceFragment")
458
- .tap("ConstPlugin", expr => {
498
+ .tap(PLUGIN_NAME, expr => {
459
499
  if (parser.scope.isAsmJs) return;
460
500
  if (!parser.state.module) return;
461
501
  return evaluateToString(
@@ -464,31 +504,31 @@ class ConstPlugin {
464
504
  });
465
505
  parser.hooks.expression
466
506
  .for("__resourceFragment")
467
- .tap("ConstPlugin", expr => {
507
+ .tap(PLUGIN_NAME, expr => {
468
508
  if (parser.scope.isAsmJs) return;
469
509
  if (!parser.state.module) return;
470
510
  const dep = new CachedConstDependency(
471
511
  JSON.stringify(
472
512
  cachedParseResource(parser.state.module.resource).fragment
473
513
  ),
474
- expr.range,
514
+ /** @type {Range} */ (expr.range),
475
515
  "__resourceFragment"
476
516
  );
477
- dep.loc = expr.loc;
517
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
478
518
  parser.state.module.addPresentationalDependency(dep);
479
519
  return true;
480
520
  });
481
521
  };
482
522
 
483
523
  normalModuleFactory.hooks.parser
484
- .for("javascript/auto")
485
- .tap("ConstPlugin", handler);
524
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
525
+ .tap(PLUGIN_NAME, handler);
486
526
  normalModuleFactory.hooks.parser
487
- .for("javascript/dynamic")
488
- .tap("ConstPlugin", handler);
527
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
528
+ .tap(PLUGIN_NAME, handler);
489
529
  normalModuleFactory.hooks.parser
490
- .for("javascript/esm")
491
- .tap("ConstPlugin", handler);
530
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
531
+ .tap(PLUGIN_NAME, handler);
492
532
  }
493
533
  );
494
534
  }
@@ -22,9 +22,9 @@ class ContextExclusionPlugin {
22
22
  */
23
23
  apply(compiler) {
24
24
  compiler.hooks.contextModuleFactory.tap("ContextExclusionPlugin", cmf => {
25
- cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files => {
26
- return files.filter(filePath => !this.negativeMatcher.test(filePath));
27
- });
25
+ cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files =>
26
+ files.filter(filePath => !this.negativeMatcher.test(filePath))
27
+ );
28
28
  });
29
29
  }
30
30
  }