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
@@ -7,12 +7,13 @@
7
7
 
8
8
  const Dependency = require("../Dependency");
9
9
  const DependencyTemplate = require("../DependencyTemplate");
10
- const memoize = require("../util/memoize");
10
+ const RawModule = require("../RawModule");
11
11
 
12
12
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
13
13
  /** @typedef {import("../Module")} Module */
14
-
15
- const getRawModule = memoize(() => require("../RawModule"));
14
+ /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
17
 
17
18
  class ModuleDependency extends Dependency {
18
19
  /**
@@ -23,16 +24,25 @@ class ModuleDependency extends Dependency {
23
24
  this.request = request;
24
25
  this.userRequest = request;
25
26
  this.range = undefined;
27
+ // TODO move it to subclasses and rename
26
28
  // assertions must be serialized by subclasses that use it
27
- /** @type {Record<string, any> | undefined} */
29
+ /** @type {ImportAttributes | undefined} */
28
30
  this.assertions = undefined;
31
+ this._context = undefined;
32
+ }
33
+
34
+ /**
35
+ * @returns {string | undefined} a request context
36
+ */
37
+ getContext() {
38
+ return this._context;
29
39
  }
30
40
 
31
41
  /**
32
42
  * @returns {string | null} an identifier to merge equal requests
33
43
  */
34
44
  getResourceIdentifier() {
35
- let str = `module${this.request}`;
45
+ let str = `context${this._context || ""}|module${this.request}`;
36
46
  if (this.assertions !== undefined) {
37
47
  str += JSON.stringify(this.assertions);
38
48
  }
@@ -48,10 +58,9 @@ class ModuleDependency extends Dependency {
48
58
 
49
59
  /**
50
60
  * @param {string} context context directory
51
- * @returns {Module} a module
61
+ * @returns {Module | null} a module
52
62
  */
53
63
  createIgnoredModule(context) {
54
- const RawModule = getRawModule();
55
64
  return new RawModule(
56
65
  "/* (ignored) */",
57
66
  `ignored|${context}|${this.request}`,
@@ -59,18 +68,26 @@ class ModuleDependency extends Dependency {
59
68
  );
60
69
  }
61
70
 
71
+ /**
72
+ * @param {ObjectSerializerContext} context context
73
+ */
62
74
  serialize(context) {
63
75
  const { write } = context;
64
76
  write(this.request);
65
77
  write(this.userRequest);
78
+ write(this._context);
66
79
  write(this.range);
67
80
  super.serialize(context);
68
81
  }
69
82
 
83
+ /**
84
+ * @param {ObjectDeserializerContext} context context
85
+ */
70
86
  deserialize(context) {
71
87
  const { read } = context;
72
88
  this.request = read();
73
89
  this.userRequest = read();
90
+ this._context = read();
74
91
  this.range = read();
75
92
  super.deserialize(context);
76
93
  }
@@ -10,6 +10,7 @@ const ModuleDependency = require("./ModuleDependency");
10
10
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
11
11
  /** @typedef {import("../Dependency")} Dependency */
12
12
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
13
+ /** @typedef {import("../Module")} Module */
13
14
 
14
15
  class ModuleDependencyTemplateAsId extends ModuleDependency.Template {
15
16
  /**
@@ -22,7 +23,7 @@ class ModuleDependencyTemplateAsId extends ModuleDependency.Template {
22
23
  const dep = /** @type {ModuleDependency} */ (dependency);
23
24
  if (!dep.range) return;
24
25
  const content = runtimeTemplate.moduleId({
25
- module: moduleGraph.getModule(dep),
26
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
26
27
  chunkGraph,
27
28
  request: dep.request,
28
29
  weak: dep.weak
@@ -9,7 +9,13 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
  const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
11
11
 
12
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+
12
14
  class ModuleHotAcceptDependency extends ModuleDependency {
15
+ /**
16
+ * @param {string} request the request string
17
+ * @param {Range} range location in source code
18
+ */
13
19
  constructor(request, range) {
14
20
  super(request);
15
21
  this.range = range;
@@ -9,7 +9,13 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
  const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
11
11
 
12
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+
12
14
  class ModuleHotDeclineDependency extends ModuleDependency {
15
+ /**
16
+ * @param {string} request the request string
17
+ * @param {Range} range location in source code
18
+ */
13
19
  constructor(request, range) {
14
20
  super(request);
15
21
 
@@ -8,6 +8,9 @@
8
8
  const ModuleDependency = require("./ModuleDependency");
9
9
 
10
10
  class PrefetchDependency extends ModuleDependency {
11
+ /**
12
+ * @param {string} request the request string
13
+ */
11
14
  constructor(request) {
12
15
  super(request);
13
16
  }
@@ -5,19 +5,25 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const Dependency = require("../Dependency");
8
9
  const InitFragment = require("../InitFragment");
9
10
  const makeSerializable = require("../util/makeSerializable");
10
11
  const ModuleDependency = require("./ModuleDependency");
11
12
 
12
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
14
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
14
- /** @typedef {import("../Dependency")} Dependency */
15
+ /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
15
16
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
16
17
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
18
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
18
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
19
21
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
22
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
25
  /** @typedef {import("../util/Hash")} Hash */
26
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
21
27
 
22
28
  /**
23
29
  * @param {string[]|null} path the property path array
@@ -29,10 +35,16 @@ const pathToString = path =>
29
35
  : "";
30
36
 
31
37
  class ProvidedDependency extends ModuleDependency {
32
- constructor(request, identifier, path, range) {
38
+ /**
39
+ * @param {string} request request
40
+ * @param {string} identifier identifier
41
+ * @param {string[]} ids ids
42
+ * @param {Range} range range
43
+ */
44
+ constructor(request, identifier, ids, range) {
33
45
  super(request);
34
46
  this.identifier = identifier;
35
- this.path = path;
47
+ this.ids = ids;
36
48
  this.range = range;
37
49
  this._hashUpdate = undefined;
38
50
  }
@@ -45,6 +57,18 @@ class ProvidedDependency extends ModuleDependency {
45
57
  return "esm";
46
58
  }
47
59
 
60
+ /**
61
+ * Returns list of exports referenced by this dependency
62
+ * @param {ModuleGraph} moduleGraph module graph
63
+ * @param {RuntimeSpec} runtime the runtime for which the module is analysed
64
+ * @returns {(string[] | ReferencedExport)[]} referenced exports
65
+ */
66
+ getReferencedExports(moduleGraph, runtime) {
67
+ const ids = this.ids;
68
+ if (ids.length === 0) return Dependency.EXPORTS_OBJECT_REFERENCED;
69
+ return [ids];
70
+ }
71
+
48
72
  /**
49
73
  * Update the hash
50
74
  * @param {Hash} hash hash to be updated
@@ -53,23 +77,28 @@ class ProvidedDependency extends ModuleDependency {
53
77
  */
54
78
  updateHash(hash, context) {
55
79
  if (this._hashUpdate === undefined) {
56
- this._hashUpdate =
57
- this.identifier + (this.path ? this.path.join(",") : "null");
80
+ this._hashUpdate = this.identifier + (this.ids ? this.ids.join(",") : "");
58
81
  }
59
82
  hash.update(this._hashUpdate);
60
83
  }
61
84
 
85
+ /**
86
+ * @param {ObjectSerializerContext} context context
87
+ */
62
88
  serialize(context) {
63
89
  const { write } = context;
64
90
  write(this.identifier);
65
- write(this.path);
91
+ write(this.ids);
66
92
  super.serialize(context);
67
93
  }
68
94
 
95
+ /**
96
+ * @param {ObjectDeserializerContext} context context
97
+ */
69
98
  deserialize(context) {
70
99
  const { read } = context;
71
100
  this.identifier = read();
72
- this.path = read();
101
+ this.ids = read();
73
102
  super.deserialize(context);
74
103
  }
75
104
  }
@@ -90,6 +119,7 @@ class ProvidedDependencyTemplate extends ModuleDependency.Template {
90
119
  dependency,
91
120
  source,
92
121
  {
122
+ runtime,
93
123
  runtimeTemplate,
94
124
  moduleGraph,
95
125
  chunkGraph,
@@ -98,6 +128,11 @@ class ProvidedDependencyTemplate extends ModuleDependency.Template {
98
128
  }
99
129
  ) {
100
130
  const dep = /** @type {ProvidedDependency} */ (dependency);
131
+ const connection =
132
+ /** @type {ModuleGraphConnection} */
133
+ (moduleGraph.getConnection(dep));
134
+ const exportsInfo = moduleGraph.getExportsInfo(connection.module);
135
+ const usedName = exportsInfo.getUsedName(dep.ids, runtime);
101
136
  initFragments.push(
102
137
  new InitFragment(
103
138
  `/* provided dependency */ var ${
@@ -107,7 +142,7 @@ class ProvidedDependencyTemplate extends ModuleDependency.Template {
107
142
  chunkGraph,
108
143
  request: dep.request,
109
144
  runtimeRequirements
110
- })}${pathToString(dep.path)};\n`,
145
+ })}${pathToString(/** @type {string[]} */ (usedName))};\n`,
111
146
  InitFragment.STAGE_PROVIDES,
112
147
  1,
113
148
  `provided ${dep.identifier}`
@@ -7,28 +7,57 @@
7
7
 
8
8
  const { UsageState } = require("../ExportsInfo");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
- const { filterRuntime } = require("../util/runtime");
10
+ const { filterRuntime, runtimeToString } = require("../util/runtime");
11
11
  const NullDependency = require("./NullDependency");
12
12
 
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
14
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
15
  /** @typedef {import("../Dependency")} Dependency */
16
+ /** @typedef {import("../Dependency").RuntimeSpec} RuntimeSpec */
16
17
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
17
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
+ /** @typedef {import("../Module")} Module */
18
20
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
21
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
22
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
25
  /** @typedef {import("../util/Hash")} Hash */
21
26
 
22
27
  class PureExpressionDependency extends NullDependency {
23
28
  /**
24
- * @param {[number, number]} range the source range
29
+ * @param {Range} range the source range
25
30
  */
26
31
  constructor(range) {
27
32
  super();
28
33
  this.range = range;
29
34
  /** @type {Set<string> | false} */
30
35
  this.usedByExports = false;
31
- this._hashUpdate = undefined;
36
+ }
37
+
38
+ /**
39
+ * @param {ModuleGraph} moduleGraph module graph
40
+ * @param {RuntimeSpec} runtime current runtimes
41
+ * @returns {boolean | RuntimeSpec} runtime condition
42
+ */
43
+ _getRuntimeCondition(moduleGraph, runtime) {
44
+ const usedByExports = this.usedByExports;
45
+ if (usedByExports !== false) {
46
+ const selfModule =
47
+ /** @type {Module} */
48
+ (moduleGraph.getParentModule(this));
49
+ const exportsInfo = moduleGraph.getExportsInfo(selfModule);
50
+ const runtimeCondition = filterRuntime(runtime, runtime => {
51
+ for (const exportName of usedByExports) {
52
+ if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused) {
53
+ return true;
54
+ }
55
+ }
56
+ return false;
57
+ });
58
+ return runtimeCondition;
59
+ }
60
+ return false;
32
61
  }
33
62
 
34
63
  /**
@@ -38,10 +67,22 @@ class PureExpressionDependency extends NullDependency {
38
67
  * @returns {void}
39
68
  */
40
69
  updateHash(hash, context) {
41
- if (this._hashUpdate === undefined) {
42
- this._hashUpdate = this.range + "";
70
+ const runtimeCondition = this._getRuntimeCondition(
71
+ context.chunkGraph.moduleGraph,
72
+ context.runtime
73
+ );
74
+ if (runtimeCondition === true) {
75
+ return;
76
+ } else if (runtimeCondition === false) {
77
+ hash.update("null");
78
+ } else {
79
+ hash.update(
80
+ `${runtimeToString(runtimeCondition)}|${runtimeToString(
81
+ context.runtime
82
+ )}`
83
+ );
43
84
  }
44
- hash.update(this._hashUpdate);
85
+ hash.update(String(this.range));
45
86
  }
46
87
 
47
88
  /**
@@ -52,6 +93,9 @@ class PureExpressionDependency extends NullDependency {
52
93
  return false;
53
94
  }
54
95
 
96
+ /**
97
+ * @param {ObjectSerializerContext} context context
98
+ */
55
99
  serialize(context) {
56
100
  const { write } = context;
57
101
  write(this.range);
@@ -59,6 +103,9 @@ class PureExpressionDependency extends NullDependency {
59
103
  super.serialize(context);
60
104
  }
61
105
 
106
+ /**
107
+ * @param {ObjectDeserializerContext} context context
108
+ */
62
109
  deserialize(context) {
63
110
  const { read } = context;
64
111
  this.range = read();
@@ -87,41 +134,28 @@ PureExpressionDependency.Template = class PureExpressionDependencyTemplate exten
87
134
  { chunkGraph, moduleGraph, runtime, runtimeTemplate, runtimeRequirements }
88
135
  ) {
89
136
  const dep = /** @type {PureExpressionDependency} */ (dependency);
90
-
91
- const usedByExports = dep.usedByExports;
92
- if (usedByExports !== false) {
93
- const selfModule = moduleGraph.getParentModule(dep);
94
- const exportsInfo = moduleGraph.getExportsInfo(selfModule);
95
- const runtimeCondition = filterRuntime(runtime, runtime => {
96
- for (const exportName of usedByExports) {
97
- if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused) {
98
- return true;
99
- }
100
- }
101
- return false;
137
+ const runtimeCondition = dep._getRuntimeCondition(moduleGraph, runtime);
138
+ if (runtimeCondition === true) {
139
+ // Do nothing
140
+ } else if (runtimeCondition === false) {
141
+ source.insert(
142
+ dep.range[0],
143
+ "(/* unused pure expression or super */ null && ("
144
+ );
145
+ source.insert(dep.range[1], "))");
146
+ } else {
147
+ const condition = runtimeTemplate.runtimeConditionExpression({
148
+ chunkGraph,
149
+ runtime,
150
+ runtimeCondition,
151
+ runtimeRequirements
102
152
  });
103
- if (runtimeCondition === true) return;
104
- if (runtimeCondition !== false) {
105
- const condition = runtimeTemplate.runtimeConditionExpression({
106
- chunkGraph,
107
- runtime,
108
- runtimeCondition,
109
- runtimeRequirements
110
- });
111
- source.insert(
112
- dep.range[0],
113
- `(/* runtime-dependent pure expression or super */ ${condition} ? (`
114
- );
115
- source.insert(dep.range[1], ") : null)");
116
- return;
117
- }
153
+ source.insert(
154
+ dep.range[0],
155
+ `(/* runtime-dependent pure expression or super */ ${condition} ? (`
156
+ );
157
+ source.insert(dep.range[1], ") : null)");
118
158
  }
119
-
120
- source.insert(
121
- dep.range[0],
122
- `(/* unused pure expression or super */ null && (`
123
- );
124
- source.insert(dep.range[1], "))");
125
159
  }
126
160
  };
127
161
 
@@ -9,7 +9,13 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
11
11
 
12
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+
12
14
  class RequireContextDependency extends ContextDependency {
15
+ /**
16
+ * @param {TODO} options options
17
+ * @param {Range} range range
18
+ */
13
19
  constructor(options, range) {
14
20
  super(options);
15
21
 
@@ -19,22 +25,6 @@ class RequireContextDependency extends ContextDependency {
19
25
  get type() {
20
26
  return "require.context";
21
27
  }
22
-
23
- serialize(context) {
24
- const { write } = context;
25
-
26
- write(this.range);
27
-
28
- super.serialize(context);
29
- }
30
-
31
- deserialize(context) {
32
- const { read } = context;
33
-
34
- this.range = read();
35
-
36
- super.deserialize(context);
37
- }
38
28
  }
39
29
 
40
30
  makeSerializable(
@@ -7,7 +7,15 @@
7
7
 
8
8
  const RequireContextDependency = require("./RequireContextDependency");
9
9
 
10
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
11
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
12
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+
10
14
  module.exports = class RequireContextDependencyParserPlugin {
15
+ /**
16
+ * @param {JavascriptParser} parser the parser
17
+ * @returns {void}
18
+ */
11
19
  apply(parser) {
12
20
  parser.hooks.call
13
21
  .for("require.context")
@@ -19,19 +27,19 @@ module.exports = class RequireContextDependencyParserPlugin {
19
27
  case 4: {
20
28
  const modeExpr = parser.evaluateExpression(expr.arguments[3]);
21
29
  if (!modeExpr.isString()) return;
22
- mode = modeExpr.string;
30
+ mode = /** @type {string} */ (modeExpr.string);
23
31
  }
24
32
  // falls through
25
33
  case 3: {
26
34
  const regExpExpr = parser.evaluateExpression(expr.arguments[2]);
27
35
  if (!regExpExpr.isRegExp()) return;
28
- regExp = regExpExpr.regExp;
36
+ regExp = /** @type {RegExp} */ (regExpExpr.regExp);
29
37
  }
30
38
  // falls through
31
39
  case 2: {
32
40
  const recursiveExpr = parser.evaluateExpression(expr.arguments[1]);
33
41
  if (!recursiveExpr.isBoolean()) return;
34
- recursive = recursiveExpr.bool;
42
+ recursive = /** @type {boolean} */ (recursiveExpr.bool);
35
43
  }
36
44
  // falls through
37
45
  case 1: {
@@ -45,10 +53,10 @@ module.exports = class RequireContextDependencyParserPlugin {
45
53
  mode,
46
54
  category: "commonjs"
47
55
  },
48
- expr.range
56
+ /** @type {Range} */ (expr.range)
49
57
  );
50
- dep.loc = expr.loc;
51
- dep.optional = !!parser.scope.inTry;
58
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
59
+ dep.optional = Boolean(parser.scope.inTry);
52
60
  parser.state.current.addDependency(dep);
53
61
  return true;
54
62
  }
@@ -5,17 +5,25 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
11
+ } = require("../ModuleTypeConstants");
8
12
  const { cachedSetProperty } = require("../util/cleverMerge");
9
13
  const ContextElementDependency = require("./ContextElementDependency");
10
14
  const RequireContextDependency = require("./RequireContextDependency");
11
15
  const RequireContextDependencyParserPlugin = require("./RequireContextDependencyParserPlugin");
12
16
 
17
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
13
18
  /** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
14
19
  /** @typedef {import("../Compiler")} Compiler */
20
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
15
21
 
16
22
  /** @type {ResolveOptions} */
17
23
  const EMPTY_RESOLVE_OPTIONS = {};
18
24
 
25
+ const PLUGIN_NAME = "RequireContextPlugin";
26
+
19
27
  class RequireContextPlugin {
20
28
  /**
21
29
  * Apply the plugin
@@ -24,7 +32,7 @@ class RequireContextPlugin {
24
32
  */
25
33
  apply(compiler) {
26
34
  compiler.hooks.compilation.tap(
27
- "RequireContextPlugin",
35
+ PLUGIN_NAME,
28
36
  (compilation, { contextModuleFactory, normalModuleFactory }) => {
29
37
  compilation.dependencyFactories.set(
30
38
  RequireContextDependency,
@@ -40,6 +48,11 @@ class RequireContextPlugin {
40
48
  normalModuleFactory
41
49
  );
42
50
 
51
+ /**
52
+ * @param {Parser} parser parser parser
53
+ * @param {JavascriptParserOptions} parserOptions parserOptions
54
+ * @returns {void}
55
+ */
43
56
  const handler = (parser, parserOptions) => {
44
57
  if (
45
58
  parserOptions.requireContext !== undefined &&
@@ -51,14 +64,14 @@ class RequireContextPlugin {
51
64
  };
52
65
 
53
66
  normalModuleFactory.hooks.parser
54
- .for("javascript/auto")
55
- .tap("RequireContextPlugin", handler);
67
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
68
+ .tap(PLUGIN_NAME, handler);
56
69
  normalModuleFactory.hooks.parser
57
- .for("javascript/dynamic")
58
- .tap("RequireContextPlugin", handler);
70
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
71
+ .tap(PLUGIN_NAME, handler);
59
72
 
60
73
  contextModuleFactory.hooks.alternativeRequests.tap(
61
- "RequireContextPlugin",
74
+ PLUGIN_NAME,
62
75
  (items, options) => {
63
76
  if (items.length === 0) return items;
64
77
 
@@ -67,7 +80,7 @@ class RequireContextPlugin {
67
80
  cachedSetProperty(
68
81
  options.resolveOptions || EMPTY_RESOLVE_OPTIONS,
69
82
  "dependencyType",
70
- options.category
83
+ /** @type {string} */ (options.category)
71
84
  )
72
85
  ).options;
73
86
 
@@ -8,7 +8,14 @@
8
8
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */
12
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
13
+
11
14
  class RequireEnsureDependenciesBlock extends AsyncDependenciesBlock {
15
+ /**
16
+ * @param {ChunkGroupOptions & { entryOptions?: TODO }} chunkName chunk name
17
+ * @param {DependencyLocation} loc location info
18
+ */
12
19
  constructor(chunkName, loc) {
13
20
  super(chunkName, loc, null);
14
21
  }