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
@@ -5,10 +5,16 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_ESM,
11
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
12
+ } = require("./ModuleTypeConstants");
8
13
  const RuntimeGlobals = require("./RuntimeGlobals");
9
14
  const WebpackError = require("./WebpackError");
10
15
  const ConstDependency = require("./dependencies/ConstDependency");
11
16
  const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
17
+
12
18
  const {
13
19
  evaluateToString,
14
20
  toConstantDependency
@@ -16,16 +22,22 @@ const {
16
22
  const createHash = require("./util/createHash");
17
23
 
18
24
  /** @typedef {import("estree").Expression} Expression */
25
+ /** @typedef {import("./Compilation").ValueCacheVersion} ValueCacheVersion */
19
26
  /** @typedef {import("./Compiler")} Compiler */
27
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
20
28
  /** @typedef {import("./NormalModule")} NormalModule */
21
29
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
22
30
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
31
+ /** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
32
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
33
+ /** @typedef {import("./logging/Logger").Logger} Logger */
34
+ /** @typedef {import("./util/createHash").Algorithm} Algorithm */
23
35
 
24
36
  /** @typedef {null|undefined|RegExp|Function|string|number|boolean|bigint|undefined} CodeValuePrimitive */
25
37
  /** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive|RuntimeValue>} CodeValue */
26
38
 
27
39
  /**
28
- * @typedef {Object} RuntimeValueOptions
40
+ * @typedef {object} RuntimeValueOptions
29
41
  * @property {string[]=} fileDependencies
30
42
  * @property {string[]=} contextDependencies
31
43
  * @property {string[]=} missingDependencies
@@ -33,9 +45,11 @@ const createHash = require("./util/createHash");
33
45
  * @property {string|function(): string=} version
34
46
  */
35
47
 
48
+ /** @typedef {function({ module: NormalModule, key: string, readonly version: ValueCacheVersion }): CodeValuePrimitive} GeneratorFn */
49
+
36
50
  class RuntimeValue {
37
51
  /**
38
- * @param {function({ module: NormalModule, key: string, readonly version: string | undefined }): CodeValuePrimitive} fn generator function
52
+ * @param {GeneratorFn} fn generator function
39
53
  * @param {true | string[] | RuntimeValueOptions=} options options
40
54
  */
41
55
  constructor(fn, options) {
@@ -54,33 +68,37 @@ class RuntimeValue {
54
68
 
55
69
  /**
56
70
  * @param {JavascriptParser} parser the parser
57
- * @param {Map<string, string | Set<string>>} valueCacheVersions valueCacheVersions
71
+ * @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
58
72
  * @param {string} key the defined key
59
73
  * @returns {CodeValuePrimitive} code
60
74
  */
61
75
  exec(parser, valueCacheVersions, key) {
62
- const buildInfo = parser.state.module.buildInfo;
76
+ const buildInfo = /** @type {BuildInfo} */ (parser.state.module.buildInfo);
63
77
  if (this.options === true) {
64
78
  buildInfo.cacheable = false;
65
79
  } else {
66
80
  if (this.options.fileDependencies) {
67
81
  for (const dep of this.options.fileDependencies) {
68
- buildInfo.fileDependencies.add(dep);
82
+ /** @type {NonNullable<BuildInfo["fileDependencies"]>} */
83
+ (buildInfo.fileDependencies).add(dep);
69
84
  }
70
85
  }
71
86
  if (this.options.contextDependencies) {
72
87
  for (const dep of this.options.contextDependencies) {
73
- buildInfo.contextDependencies.add(dep);
88
+ /** @type {NonNullable<BuildInfo["contextDependencies"]>} */
89
+ (buildInfo.contextDependencies).add(dep);
74
90
  }
75
91
  }
76
92
  if (this.options.missingDependencies) {
77
93
  for (const dep of this.options.missingDependencies) {
78
- buildInfo.missingDependencies.add(dep);
94
+ /** @type {NonNullable<BuildInfo["missingDependencies"]>} */
95
+ (buildInfo.missingDependencies).add(dep);
79
96
  }
80
97
  }
81
98
  if (this.options.buildDependencies) {
82
99
  for (const dep of this.options.buildDependencies) {
83
- buildInfo.buildDependencies.add(dep);
100
+ /** @type {NonNullable<BuildInfo["buildDependencies"]>} */
101
+ (buildInfo.buildDependencies).add(dep);
84
102
  }
85
103
  }
86
104
  }
@@ -89,9 +107,7 @@ class RuntimeValue {
89
107
  module: parser.state.module,
90
108
  key,
91
109
  get version() {
92
- return /** @type {string} */ (
93
- valueCacheVersions.get(VALUE_DEP_PREFIX + key)
94
- );
110
+ return valueCacheVersions.get(VALUE_DEP_PREFIX + key);
95
111
  }
96
112
  });
97
113
  }
@@ -105,13 +121,27 @@ class RuntimeValue {
105
121
  }
106
122
  }
107
123
 
124
+ /**
125
+ * @param {Set<DestructuringAssignmentProperty> | undefined} properties properties
126
+ * @returns {Set<string> | undefined} used keys
127
+ */
128
+ function getObjKeys(properties) {
129
+ if (!properties) return;
130
+ return new Set([...properties].map(p => p.id));
131
+ }
132
+
133
+ /** @typedef {Set<string> | null} ObjKeys */
134
+ /** @typedef {boolean | undefined | null} AsiSafe */
135
+
108
136
  /**
109
137
  * @param {any[]|{[k: string]: any}} obj obj
110
138
  * @param {JavascriptParser} parser Parser
111
- * @param {Map<string, string | Set<string>>} valueCacheVersions valueCacheVersions
139
+ * @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
112
140
  * @param {string} key the defined key
113
141
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
114
- * @param {boolean|undefined|null=} asiSafe asi safe (undefined: unknown, null: unneeded)
142
+ * @param {Logger} logger the logger object
143
+ * @param {AsiSafe=} asiSafe asi safe (undefined: unknown, null: unneeded)
144
+ * @param {ObjKeys=} objKeys used keys
115
145
  * @returns {string} code converted to string that evaluates
116
146
  */
117
147
  const stringifyObj = (
@@ -120,25 +150,45 @@ const stringifyObj = (
120
150
  valueCacheVersions,
121
151
  key,
122
152
  runtimeTemplate,
123
- asiSafe
153
+ logger,
154
+ asiSafe,
155
+ objKeys
124
156
  ) => {
125
157
  let code;
126
- let arr = Array.isArray(obj);
158
+ const arr = Array.isArray(obj);
127
159
  if (arr) {
128
- code = `[${obj
129
- .map(code =>
130
- toCode(code, parser, valueCacheVersions, key, runtimeTemplate, null)
131
- )
132
- .join(",")}]`;
160
+ code = `[${
161
+ /** @type {any[]} */ (obj)
162
+ .map(code =>
163
+ toCode(
164
+ code,
165
+ parser,
166
+ valueCacheVersions,
167
+ key,
168
+ runtimeTemplate,
169
+ logger,
170
+ null
171
+ )
172
+ )
173
+ .join(",")
174
+ }]`;
133
175
  } else {
134
- code = `{${Object.keys(obj)
176
+ let keys = Object.keys(obj);
177
+ if (objKeys) {
178
+ keys = objKeys.size === 0 ? [] : keys.filter(k => objKeys.has(k));
179
+ }
180
+ code = `{${keys
135
181
  .map(key => {
136
- const code = obj[key];
137
- return (
138
- JSON.stringify(key) +
139
- ":" +
140
- toCode(code, parser, valueCacheVersions, key, runtimeTemplate, null)
141
- );
182
+ const code = /** @type {{[k: string]: any}} */ (obj)[key];
183
+ return `${JSON.stringify(key)}:${toCode(
184
+ code,
185
+ parser,
186
+ valueCacheVersions,
187
+ key,
188
+ runtimeTemplate,
189
+ logger,
190
+ null
191
+ )}`;
142
192
  })
143
193
  .join(",")}}`;
144
194
  }
@@ -159,10 +209,12 @@ const stringifyObj = (
159
209
  * Convert code to a string that evaluates
160
210
  * @param {CodeValue} code Code to evaluate
161
211
  * @param {JavascriptParser} parser Parser
162
- * @param {Map<string, string | Set<string>>} valueCacheVersions valueCacheVersions
212
+ * @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
163
213
  * @param {string} key the defined key
164
214
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
165
- * @param {boolean|undefined|null=} asiSafe asi safe (undefined: unknown, null: unneeded)
215
+ * @param {Logger} logger the logger object
216
+ * @param {boolean | undefined | null=} asiSafe asi safe (undefined: unknown, null: unneeded)
217
+ * @param {ObjKeys=} objKeys used keys
166
218
  * @returns {string} code converted to string that evaluates
167
219
  */
168
220
  const toCode = (
@@ -171,51 +223,68 @@ const toCode = (
171
223
  valueCacheVersions,
172
224
  key,
173
225
  runtimeTemplate,
174
- asiSafe
226
+ logger,
227
+ asiSafe,
228
+ objKeys
175
229
  ) => {
176
- if (code === null) {
177
- return "null";
178
- }
179
- if (code === undefined) {
180
- return "undefined";
181
- }
182
- if (Object.is(code, -0)) {
183
- return "-0";
184
- }
185
- if (code instanceof RuntimeValue) {
186
- return toCode(
187
- code.exec(parser, valueCacheVersions, key),
188
- parser,
189
- valueCacheVersions,
190
- key,
191
- runtimeTemplate,
192
- asiSafe
193
- );
194
- }
195
- if (code instanceof RegExp && code.toString) {
196
- return code.toString();
197
- }
198
- if (typeof code === "function" && code.toString) {
199
- return "(" + code.toString() + ")";
200
- }
201
- if (typeof code === "object") {
202
- return stringifyObj(
203
- code,
204
- parser,
205
- valueCacheVersions,
206
- key,
207
- runtimeTemplate,
208
- asiSafe
209
- );
210
- }
211
- if (typeof code === "bigint") {
212
- return runtimeTemplate.supportsBigIntLiteral()
213
- ? `${code}n`
214
- : `BigInt("${code}")`;
215
- }
216
- return code + "";
230
+ const transformToCode = () => {
231
+ if (code === null) {
232
+ return "null";
233
+ }
234
+ if (code === undefined) {
235
+ return "undefined";
236
+ }
237
+ if (Object.is(code, -0)) {
238
+ return "-0";
239
+ }
240
+ if (code instanceof RuntimeValue) {
241
+ return toCode(
242
+ code.exec(parser, valueCacheVersions, key),
243
+ parser,
244
+ valueCacheVersions,
245
+ key,
246
+ runtimeTemplate,
247
+ logger,
248
+ asiSafe
249
+ );
250
+ }
251
+ if (code instanceof RegExp && code.toString) {
252
+ return code.toString();
253
+ }
254
+ if (typeof code === "function" && code.toString) {
255
+ return `(${code.toString()})`;
256
+ }
257
+ if (typeof code === "object") {
258
+ return stringifyObj(
259
+ code,
260
+ parser,
261
+ valueCacheVersions,
262
+ key,
263
+ runtimeTemplate,
264
+ logger,
265
+ asiSafe,
266
+ objKeys
267
+ );
268
+ }
269
+ if (typeof code === "bigint") {
270
+ return runtimeTemplate.supportsBigIntLiteral()
271
+ ? `${code}n`
272
+ : `BigInt("${code}")`;
273
+ }
274
+ return `${code}`;
275
+ };
276
+
277
+ const strCode = transformToCode();
278
+
279
+ logger.debug(`Replaced "${key}" with "${strCode}"`);
280
+
281
+ return strCode;
217
282
  };
218
283
 
284
+ /**
285
+ * @param {CodeValue} code code
286
+ * @returns {string | undefined} result
287
+ */
219
288
  const toCacheVersion = code => {
220
289
  if (code === null) {
221
290
  return "null";
@@ -233,24 +302,30 @@ const toCacheVersion = code => {
233
302
  return code.toString();
234
303
  }
235
304
  if (typeof code === "function" && code.toString) {
236
- return "(" + code.toString() + ")";
305
+ return `(${code.toString()})`;
237
306
  }
238
307
  if (typeof code === "object") {
239
308
  const items = Object.keys(code).map(key => ({
240
309
  key,
241
- value: toCacheVersion(code[key])
310
+ value: toCacheVersion(/** @type {Record<string, any>} */ (code)[key])
242
311
  }));
243
- if (items.some(({ value }) => value === undefined)) return undefined;
312
+ if (items.some(({ value }) => value === undefined)) return;
244
313
  return `{${items.map(({ key, value }) => `${key}: ${value}`).join(", ")}}`;
245
314
  }
246
315
  if (typeof code === "bigint") {
247
316
  return `${code}n`;
248
317
  }
249
- return code + "";
318
+ return `${code}`;
250
319
  };
251
320
 
252
- const VALUE_DEP_PREFIX = "webpack/DefinePlugin ";
253
- const VALUE_DEP_MAIN = "webpack/DefinePlugin_hash";
321
+ const PLUGIN_NAME = "DefinePlugin";
322
+ const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
323
+ const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
324
+ const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
325
+ const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
326
+ `${RuntimeGlobals.require}\\s*(!?\\.)`
327
+ );
328
+ const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
254
329
 
255
330
  class DefinePlugin {
256
331
  /**
@@ -262,7 +337,7 @@ class DefinePlugin {
262
337
  }
263
338
 
264
339
  /**
265
- * @param {function({ module: NormalModule, key: string, readonly version: string | undefined }): CodeValuePrimitive} fn generator function
340
+ * @param {GeneratorFn} fn generator function
266
341
  * @param {true | string[] | RuntimeValueOptions=} options options
267
342
  * @returns {RuntimeValue} runtime value
268
343
  */
@@ -278,19 +353,22 @@ class DefinePlugin {
278
353
  apply(compiler) {
279
354
  const definitions = this.definitions;
280
355
  compiler.hooks.compilation.tap(
281
- "DefinePlugin",
356
+ PLUGIN_NAME,
282
357
  (compilation, { normalModuleFactory }) => {
358
+ const logger = compilation.getLogger("webpack.DefinePlugin");
283
359
  compilation.dependencyTemplates.set(
284
360
  ConstDependency,
285
361
  new ConstDependency.Template()
286
362
  );
287
363
  const { runtimeTemplate } = compilation;
288
364
 
289
- const mainHash = createHash(compilation.outputOptions.hashFunction);
365
+ const mainHash = createHash(
366
+ /** @type {Algorithm} */
367
+ (compilation.outputOptions.hashFunction)
368
+ );
290
369
  mainHash.update(
291
- /** @type {string} */ (
292
- compilation.valueCacheVersions.get(VALUE_DEP_MAIN)
293
- ) || ""
370
+ /** @type {string} */
371
+ (compilation.valueCacheVersions.get(VALUE_DEP_MAIN)) || ""
294
372
  );
295
373
 
296
374
  /**
@@ -300,21 +378,35 @@ class DefinePlugin {
300
378
  */
301
379
  const handler = parser => {
302
380
  const mainValue = compilation.valueCacheVersions.get(VALUE_DEP_MAIN);
303
- parser.hooks.program.tap("DefinePlugin", () => {
304
- const { buildInfo } = parser.state.module;
381
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
382
+ const buildInfo = /** @type {BuildInfo} */ (
383
+ parser.state.module.buildInfo
384
+ );
305
385
  if (!buildInfo.valueDependencies)
306
386
  buildInfo.valueDependencies = new Map();
307
387
  buildInfo.valueDependencies.set(VALUE_DEP_MAIN, mainValue);
308
388
  });
309
389
 
390
+ /**
391
+ * @param {string} key key
392
+ */
310
393
  const addValueDependency = key => {
311
- const { buildInfo } = parser.state.module;
312
- buildInfo.valueDependencies.set(
394
+ const buildInfo =
395
+ /** @type {BuildInfo} */
396
+ (parser.state.module.buildInfo);
397
+ /** @type {NonNullable<BuildInfo["valueDependencies"]>} */
398
+ (buildInfo.valueDependencies).set(
313
399
  VALUE_DEP_PREFIX + key,
314
400
  compilation.valueCacheVersions.get(VALUE_DEP_PREFIX + key)
315
401
  );
316
402
  };
317
403
 
404
+ /**
405
+ * @template {Function} T
406
+ * @param {string} key key
407
+ * @param {T} fn fn
408
+ * @returns {function(TODO): TODO} result
409
+ */
318
410
  const withValueDependency =
319
411
  (key, fn) =>
320
412
  (...args) => {
@@ -324,12 +416,12 @@ class DefinePlugin {
324
416
 
325
417
  /**
326
418
  * Walk definitions
327
- * @param {Object} definitions Definitions map
419
+ * @param {Record<string, CodeValue>} definitions Definitions map
328
420
  * @param {string} prefix Prefix string
329
421
  * @returns {void}
330
422
  */
331
423
  const walkDefinitions = (definitions, prefix) => {
332
- Object.keys(definitions).forEach(key => {
424
+ for (const key of Object.keys(definitions)) {
333
425
  const code = definitions[key];
334
426
  if (
335
427
  code &&
@@ -337,13 +429,16 @@ class DefinePlugin {
337
429
  !(code instanceof RuntimeValue) &&
338
430
  !(code instanceof RegExp)
339
431
  ) {
340
- walkDefinitions(code, prefix + key + ".");
432
+ walkDefinitions(
433
+ /** @type {Record<string, CodeValue>} */ (code),
434
+ `${prefix + key}.`
435
+ );
341
436
  applyObjectDefine(prefix + key, code);
342
- return;
437
+ continue;
343
438
  }
344
439
  applyDefineKey(prefix, key);
345
440
  applyDefine(prefix + key, code);
346
- });
441
+ }
347
442
  };
348
443
 
349
444
  /**
@@ -354,13 +449,13 @@ class DefinePlugin {
354
449
  */
355
450
  const applyDefineKey = (prefix, key) => {
356
451
  const splittedKey = key.split(".");
357
- splittedKey.slice(1).forEach((_, i) => {
452
+ for (const [i, _] of splittedKey.slice(1).entries()) {
358
453
  const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
359
- parser.hooks.canRename.for(fullKey).tap("DefinePlugin", () => {
454
+ parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
360
455
  addValueDependency(key);
361
456
  return true;
362
457
  });
363
- });
458
+ }
364
459
  };
365
460
 
366
461
  /**
@@ -371,18 +466,18 @@ class DefinePlugin {
371
466
  */
372
467
  const applyDefine = (key, code) => {
373
468
  const originalKey = key;
374
- const isTypeof = /^typeof\s+/.test(key);
375
- if (isTypeof) key = key.replace(/^typeof\s+/, "");
469
+ const isTypeof = TYPEOF_OPERATOR_REGEXP.test(key);
470
+ if (isTypeof) key = key.replace(TYPEOF_OPERATOR_REGEXP, "");
376
471
  let recurse = false;
377
472
  let recurseTypeof = false;
378
473
  if (!isTypeof) {
379
- parser.hooks.canRename.for(key).tap("DefinePlugin", () => {
474
+ parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
380
475
  addValueDependency(originalKey);
381
476
  return true;
382
477
  });
383
478
  parser.hooks.evaluateIdentifier
384
479
  .for(key)
385
- .tap("DefinePlugin", expr => {
480
+ .tap(PLUGIN_NAME, expr => {
386
481
  /**
387
482
  * this is needed in case there is a recursion in the DefinePlugin
388
483
  * to prevent an endless recursion
@@ -401,37 +496,44 @@ class DefinePlugin {
401
496
  compilation.valueCacheVersions,
402
497
  key,
403
498
  runtimeTemplate,
499
+ logger,
404
500
  null
405
501
  )
406
502
  );
407
503
  recurse = false;
408
- res.setRange(expr.range);
504
+ res.setRange(/** @type {Range} */ (expr.range));
409
505
  return res;
410
506
  });
411
- parser.hooks.expression.for(key).tap("DefinePlugin", expr => {
507
+ parser.hooks.expression.for(key).tap(PLUGIN_NAME, expr => {
412
508
  addValueDependency(originalKey);
413
- const strCode = toCode(
509
+ let strCode = toCode(
414
510
  code,
415
511
  parser,
416
512
  compilation.valueCacheVersions,
417
513
  originalKey,
418
514
  runtimeTemplate,
419
- !parser.isAsiPosition(expr.range[0])
515
+ logger,
516
+ !parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
517
+ null
420
518
  );
421
- if (/__webpack_require__\s*(!?\.)/.test(strCode)) {
519
+
520
+ if (parser.scope.inShorthand) {
521
+ strCode = `${parser.scope.inShorthand}:${strCode}`;
522
+ }
523
+
524
+ if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
422
525
  return toConstantDependency(parser, strCode, [
423
526
  RuntimeGlobals.require
424
527
  ])(expr);
425
- } else if (/__webpack_require__/.test(strCode)) {
528
+ } else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
426
529
  return toConstantDependency(parser, strCode, [
427
530
  RuntimeGlobals.requireScope
428
531
  ])(expr);
429
- } else {
430
- return toConstantDependency(parser, strCode)(expr);
431
532
  }
533
+ return toConstantDependency(parser, strCode)(expr);
432
534
  });
433
535
  }
434
- parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", expr => {
536
+ parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, expr => {
435
537
  /**
436
538
  * this is needed in case there is a recursion in the DefinePlugin
437
539
  * to prevent an endless recursion
@@ -449,17 +551,16 @@ class DefinePlugin {
449
551
  compilation.valueCacheVersions,
450
552
  originalKey,
451
553
  runtimeTemplate,
554
+ logger,
452
555
  null
453
556
  );
454
- const typeofCode = isTypeof
455
- ? codeCode
456
- : "typeof (" + codeCode + ")";
557
+ const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
457
558
  const res = parser.evaluate(typeofCode);
458
559
  recurseTypeof = false;
459
- res.setRange(expr.range);
560
+ res.setRange(/** @type {Range} */ (expr.range));
460
561
  return res;
461
562
  });
462
- parser.hooks.typeof.for(key).tap("DefinePlugin", expr => {
563
+ parser.hooks.typeof.for(key).tap(PLUGIN_NAME, expr => {
463
564
  addValueDependency(originalKey);
464
565
  const codeCode = toCode(
465
566
  code,
@@ -467,11 +568,10 @@ class DefinePlugin {
467
568
  compilation.valueCacheVersions,
468
569
  originalKey,
469
570
  runtimeTemplate,
571
+ logger,
470
572
  null
471
573
  );
472
- const typeofCode = isTypeof
473
- ? codeCode
474
- : "typeof (" + codeCode + ")";
574
+ const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
475
575
  const res = parser.evaluate(typeofCode);
476
576
  if (!res.isString()) return;
477
577
  return toConstantDependency(
@@ -484,56 +584,59 @@ class DefinePlugin {
484
584
  /**
485
585
  * Apply Object
486
586
  * @param {string} key Key
487
- * @param {Object} obj Object
587
+ * @param {object} obj Object
488
588
  * @returns {void}
489
589
  */
490
590
  const applyObjectDefine = (key, obj) => {
491
- parser.hooks.canRename.for(key).tap("DefinePlugin", () => {
591
+ parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
492
592
  addValueDependency(key);
493
593
  return true;
494
594
  });
495
- parser.hooks.evaluateIdentifier
496
- .for(key)
497
- .tap("DefinePlugin", expr => {
498
- addValueDependency(key);
499
- return new BasicEvaluatedExpression()
500
- .setTruthy()
501
- .setSideEffects(false)
502
- .setRange(expr.range);
503
- });
595
+ parser.hooks.evaluateIdentifier.for(key).tap(PLUGIN_NAME, expr => {
596
+ addValueDependency(key);
597
+ return new BasicEvaluatedExpression()
598
+ .setTruthy()
599
+ .setSideEffects(false)
600
+ .setRange(/** @type {Range} */ (expr.range));
601
+ });
504
602
  parser.hooks.evaluateTypeof
505
603
  .for(key)
506
604
  .tap(
507
- "DefinePlugin",
605
+ PLUGIN_NAME,
508
606
  withValueDependency(key, evaluateToString("object"))
509
607
  );
510
- parser.hooks.expression.for(key).tap("DefinePlugin", expr => {
608
+ parser.hooks.expression.for(key).tap(PLUGIN_NAME, expr => {
511
609
  addValueDependency(key);
512
- const strCode = stringifyObj(
610
+ let strCode = stringifyObj(
513
611
  obj,
514
612
  parser,
515
613
  compilation.valueCacheVersions,
516
614
  key,
517
615
  runtimeTemplate,
518
- !parser.isAsiPosition(expr.range[0])
616
+ logger,
617
+ !parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
618
+ getObjKeys(parser.destructuringAssignmentPropertiesFor(expr))
519
619
  );
520
620
 
521
- if (/__webpack_require__\s*(!?\.)/.test(strCode)) {
621
+ if (parser.scope.inShorthand) {
622
+ strCode = `${parser.scope.inShorthand}:${strCode}`;
623
+ }
624
+
625
+ if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
522
626
  return toConstantDependency(parser, strCode, [
523
627
  RuntimeGlobals.require
524
628
  ])(expr);
525
- } else if (/__webpack_require__/.test(strCode)) {
629
+ } else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
526
630
  return toConstantDependency(parser, strCode, [
527
631
  RuntimeGlobals.requireScope
528
632
  ])(expr);
529
- } else {
530
- return toConstantDependency(parser, strCode)(expr);
531
633
  }
634
+ return toConstantDependency(parser, strCode)(expr);
532
635
  });
533
636
  parser.hooks.typeof
534
637
  .for(key)
535
638
  .tap(
536
- "DefinePlugin",
639
+ PLUGIN_NAME,
537
640
  withValueDependency(
538
641
  key,
539
642
  toConstantDependency(parser, JSON.stringify("object"))
@@ -545,33 +648,33 @@ class DefinePlugin {
545
648
  };
546
649
 
547
650
  normalModuleFactory.hooks.parser
548
- .for("javascript/auto")
549
- .tap("DefinePlugin", handler);
651
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
652
+ .tap(PLUGIN_NAME, handler);
550
653
  normalModuleFactory.hooks.parser
551
- .for("javascript/dynamic")
552
- .tap("DefinePlugin", handler);
654
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
655
+ .tap(PLUGIN_NAME, handler);
553
656
  normalModuleFactory.hooks.parser
554
- .for("javascript/esm")
555
- .tap("DefinePlugin", handler);
657
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
658
+ .tap(PLUGIN_NAME, handler);
556
659
 
557
660
  /**
558
661
  * Walk definitions
559
- * @param {Object} definitions Definitions map
662
+ * @param {Record<string, CodeValue>} definitions Definitions map
560
663
  * @param {string} prefix Prefix string
561
664
  * @returns {void}
562
665
  */
563
666
  const walkDefinitionsForValues = (definitions, prefix) => {
564
- Object.keys(definitions).forEach(key => {
667
+ for (const key of Object.keys(definitions)) {
565
668
  const code = definitions[key];
566
669
  const version = toCacheVersion(code);
567
670
  const name = VALUE_DEP_PREFIX + prefix + key;
568
- mainHash.update("|" + prefix + key);
671
+ mainHash.update(`|${prefix}${key}`);
569
672
  const oldVersion = compilation.valueCacheVersions.get(name);
570
673
  if (oldVersion === undefined) {
571
674
  compilation.valueCacheVersions.set(name, version);
572
675
  } else if (oldVersion !== version) {
573
676
  const warning = new WebpackError(
574
- `DefinePlugin\nConflicting values for '${prefix + key}'`
677
+ `${PLUGIN_NAME}\nConflicting values for '${prefix + key}'`
575
678
  );
576
679
  warning.details = `'${oldVersion}' !== '${version}'`;
577
680
  warning.hideStack = true;
@@ -583,9 +686,12 @@ class DefinePlugin {
583
686
  !(code instanceof RuntimeValue) &&
584
687
  !(code instanceof RegExp)
585
688
  ) {
586
- walkDefinitionsForValues(code, prefix + key + ".");
689
+ walkDefinitionsForValues(
690
+ /** @type {Record<string, CodeValue>} */ (code),
691
+ `${prefix + key}.`
692
+ );
587
693
  }
588
- });
694
+ }
589
695
  };
590
696
 
591
697
  walkDefinitionsForValues(definitions, "");