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
@@ -15,6 +15,10 @@ const Queue = require("./util/Queue");
15
15
  /** @typedef {import("./Dependency").ExportsSpec} ExportsSpec */
16
16
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
17
17
  /** @typedef {import("./Module")} Module */
18
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
19
+
20
+ const PLUGIN_NAME = "FlagDependencyExportsPlugin";
21
+ const PLUGIN_LOGGER_NAME = `webpack.${PLUGIN_NAME}`;
18
22
 
19
23
  class FlagDependencyExportsPlugin {
20
24
  /**
@@ -23,394 +27,393 @@ class FlagDependencyExportsPlugin {
23
27
  * @returns {void}
24
28
  */
25
29
  apply(compiler) {
26
- compiler.hooks.compilation.tap(
27
- "FlagDependencyExportsPlugin",
28
- compilation => {
29
- const moduleGraph = compilation.moduleGraph;
30
- const cache = compilation.getCache("FlagDependencyExportsPlugin");
31
- compilation.hooks.finishModules.tapAsync(
32
- "FlagDependencyExportsPlugin",
33
- (modules, callback) => {
34
- const logger = compilation.getLogger(
35
- "webpack.FlagDependencyExportsPlugin"
36
- );
37
- let statRestoredFromMemCache = 0;
38
- let statRestoredFromCache = 0;
39
- let statNoExports = 0;
40
- let statFlaggedUncached = 0;
41
- let statNotCached = 0;
42
- let statQueueItemsProcessed = 0;
43
-
44
- const { moduleMemCaches } = compilation;
45
-
46
- /** @type {Queue<Module>} */
47
- const queue = new Queue();
48
-
49
- // Step 1: Try to restore cached provided export info from cache
50
- logger.time("restore cached provided exports");
51
- asyncLib.each(
52
- modules,
53
- (module, callback) => {
54
- const exportsInfo = moduleGraph.getExportsInfo(module);
55
- if (!module.buildMeta || !module.buildMeta.exportsType) {
56
- if (exportsInfo.otherExportsInfo.provided !== null) {
57
- // It's a module without declared exports
58
- statNoExports++;
30
+ compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
31
+ const moduleGraph = compilation.moduleGraph;
32
+ const cache = compilation.getCache(PLUGIN_NAME);
33
+ compilation.hooks.finishModules.tapAsync(
34
+ PLUGIN_NAME,
35
+ (modules, callback) => {
36
+ const logger = compilation.getLogger(PLUGIN_LOGGER_NAME);
37
+ let statRestoredFromMemCache = 0;
38
+ let statRestoredFromCache = 0;
39
+ let statNoExports = 0;
40
+ let statFlaggedUncached = 0;
41
+ let statNotCached = 0;
42
+ let statQueueItemsProcessed = 0;
43
+
44
+ const { moduleMemCaches } = compilation;
45
+
46
+ /** @type {Queue<Module>} */
47
+ const queue = new Queue();
48
+
49
+ // Step 1: Try to restore cached provided export info from cache
50
+ logger.time("restore cached provided exports");
51
+ asyncLib.each(
52
+ modules,
53
+ (module, callback) => {
54
+ const exportsInfo = moduleGraph.getExportsInfo(module);
55
+ // If the module doesn't have an exportsType, it's a module
56
+ // without declared exports.
57
+ if (
58
+ (!module.buildMeta || !module.buildMeta.exportsType) &&
59
+ exportsInfo.otherExportsInfo.provided !== null
60
+ ) {
61
+ // It's a module without declared exports
62
+ statNoExports++;
63
+ exportsInfo.setHasProvideInfo();
64
+ exportsInfo.setUnknownExportsProvided();
65
+ return callback();
66
+ }
67
+ // If the module has no hash, it's uncacheable
68
+ if (
69
+ typeof (/** @type {BuildInfo} */ (module.buildInfo).hash) !==
70
+ "string"
71
+ ) {
72
+ statFlaggedUncached++;
73
+ // Enqueue uncacheable module for determining the exports
74
+ queue.enqueue(module);
75
+ exportsInfo.setHasProvideInfo();
76
+ return callback();
77
+ }
78
+ const memCache = moduleMemCaches && moduleMemCaches.get(module);
79
+ const memCacheValue = memCache && memCache.get(this);
80
+ if (memCacheValue !== undefined) {
81
+ statRestoredFromMemCache++;
82
+ exportsInfo.restoreProvided(memCacheValue);
83
+ return callback();
84
+ }
85
+ cache.get(
86
+ module.identifier(),
87
+ /** @type {BuildInfo} */
88
+ (module.buildInfo).hash,
89
+ (err, result) => {
90
+ if (err) return callback(err);
91
+
92
+ if (result !== undefined) {
93
+ statRestoredFromCache++;
94
+ exportsInfo.restoreProvided(result);
95
+ } else {
96
+ statNotCached++;
97
+ // Without cached info enqueue module for determining the exports
98
+ queue.enqueue(module);
59
99
  exportsInfo.setHasProvideInfo();
60
- exportsInfo.setUnknownExportsProvided();
61
- return callback();
62
100
  }
101
+ callback();
63
102
  }
64
- if (typeof module.buildInfo.hash !== "string") {
65
- statFlaggedUncached++;
66
- // Enqueue uncacheable module for determining the exports
67
- queue.enqueue(module);
68
- exportsInfo.setHasProvideInfo();
69
- return callback();
70
- }
71
- const memCache = moduleMemCaches && moduleMemCaches.get(module);
72
- const memCacheValue = memCache && memCache.get(this);
73
- if (memCacheValue !== undefined) {
74
- statRestoredFromMemCache++;
75
- exportsInfo.restoreProvided(memCacheValue);
76
- return callback();
77
- }
78
- cache.get(
79
- module.identifier(),
80
- module.buildInfo.hash,
81
- (err, result) => {
82
- if (err) return callback(err);
83
-
84
- if (result !== undefined) {
85
- statRestoredFromCache++;
86
- exportsInfo.restoreProvided(result);
87
- } else {
88
- statNotCached++;
89
- // Without cached info enqueue module for determining the exports
90
- queue.enqueue(module);
91
- exportsInfo.setHasProvideInfo();
92
- }
93
- callback();
94
- }
95
- );
96
- },
97
- err => {
98
- logger.timeEnd("restore cached provided exports");
99
- if (err) return callback(err);
103
+ );
104
+ },
105
+ err => {
106
+ logger.timeEnd("restore cached provided exports");
107
+ if (err) return callback(err);
100
108
 
101
- /** @type {Set<Module>} */
102
- const modulesToStore = new Set();
109
+ /** @type {Set<Module>} */
110
+ const modulesToStore = new Set();
103
111
 
104
- /** @type {Map<Module, Set<Module>>} */
105
- const dependencies = new Map();
112
+ /** @type {Map<Module, Set<Module>>} */
113
+ const dependencies = new Map();
106
114
 
107
- /** @type {Module} */
108
- let module;
115
+ /** @type {Module} */
116
+ let module;
109
117
 
110
- /** @type {ExportsInfo} */
111
- let exportsInfo;
118
+ /** @type {ExportsInfo} */
119
+ let exportsInfo;
112
120
 
113
- /** @type {Map<Dependency, ExportsSpec>} */
114
- const exportsSpecsFromDependencies = new Map();
121
+ /** @type {Map<Dependency, ExportsSpec>} */
122
+ const exportsSpecsFromDependencies = new Map();
115
123
 
116
- let cacheable = true;
117
- let changed = false;
124
+ let cacheable = true;
125
+ let changed = false;
118
126
 
119
- /**
120
- * @param {DependenciesBlock} depBlock the dependencies block
121
- * @returns {void}
122
- */
123
- const processDependenciesBlock = depBlock => {
124
- for (const dep of depBlock.dependencies) {
125
- processDependency(dep);
127
+ /**
128
+ * @param {DependenciesBlock} depBlock the dependencies block
129
+ * @returns {void}
130
+ */
131
+ const processDependenciesBlock = depBlock => {
132
+ for (const dep of depBlock.dependencies) {
133
+ processDependency(dep);
134
+ }
135
+ for (const block of depBlock.blocks) {
136
+ processDependenciesBlock(block);
137
+ }
138
+ };
139
+
140
+ /**
141
+ * @param {Dependency} dep the dependency
142
+ * @returns {void}
143
+ */
144
+ const processDependency = dep => {
145
+ const exportDesc = dep.getExports(moduleGraph);
146
+ if (!exportDesc) return;
147
+ exportsSpecsFromDependencies.set(dep, exportDesc);
148
+ };
149
+
150
+ /**
151
+ * @param {Dependency} dep dependency
152
+ * @param {ExportsSpec} exportDesc info
153
+ * @returns {void}
154
+ */
155
+ const processExportsSpec = (dep, exportDesc) => {
156
+ const exports = exportDesc.exports;
157
+ const globalCanMangle = exportDesc.canMangle;
158
+ const globalFrom = exportDesc.from;
159
+ const globalPriority = exportDesc.priority;
160
+ const globalTerminalBinding =
161
+ exportDesc.terminalBinding || false;
162
+ const exportDeps = exportDesc.dependencies;
163
+ if (exportDesc.hideExports) {
164
+ for (const name of exportDesc.hideExports) {
165
+ const exportInfo = exportsInfo.getExportInfo(name);
166
+ exportInfo.unsetTarget(dep);
126
167
  }
127
- for (const block of depBlock.blocks) {
128
- processDependenciesBlock(block);
168
+ }
169
+ if (exports === true) {
170
+ // unknown exports
171
+ if (
172
+ exportsInfo.setUnknownExportsProvided(
173
+ globalCanMangle,
174
+ exportDesc.excludeExports,
175
+ globalFrom && dep,
176
+ globalFrom,
177
+ globalPriority
178
+ )
179
+ ) {
180
+ changed = true;
129
181
  }
130
- };
131
-
132
- /**
133
- * @param {Dependency} dep the dependency
134
- * @returns {void}
135
- */
136
- const processDependency = dep => {
137
- const exportDesc = dep.getExports(moduleGraph);
138
- if (!exportDesc) return;
139
- exportsSpecsFromDependencies.set(dep, exportDesc);
140
- };
141
-
142
- /**
143
- * @param {Dependency} dep dependency
144
- * @param {ExportsSpec} exportDesc info
145
- * @returns {void}
146
- */
147
- const processExportsSpec = (dep, exportDesc) => {
148
- const exports = exportDesc.exports;
149
- const globalCanMangle = exportDesc.canMangle;
150
- const globalFrom = exportDesc.from;
151
- const globalPriority = exportDesc.priority;
152
- const globalTerminalBinding =
153
- exportDesc.terminalBinding || false;
154
- const exportDeps = exportDesc.dependencies;
155
- if (exportDesc.hideExports) {
156
- for (const name of exportDesc.hideExports) {
182
+ } else if (Array.isArray(exports)) {
183
+ /**
184
+ * merge in new exports
185
+ * @param {ExportsInfo} exportsInfo own exports info
186
+ * @param {(ExportSpec | string)[]} exports list of exports
187
+ */
188
+ const mergeExports = (exportsInfo, exports) => {
189
+ for (const exportNameOrSpec of exports) {
190
+ let name;
191
+ let canMangle = globalCanMangle;
192
+ let terminalBinding = globalTerminalBinding;
193
+ let exports;
194
+ let from = globalFrom;
195
+ let fromExport;
196
+ let priority = globalPriority;
197
+ let hidden = false;
198
+ if (typeof exportNameOrSpec === "string") {
199
+ name = exportNameOrSpec;
200
+ } else {
201
+ name = exportNameOrSpec.name;
202
+ if (exportNameOrSpec.canMangle !== undefined)
203
+ canMangle = exportNameOrSpec.canMangle;
204
+ if (exportNameOrSpec.export !== undefined)
205
+ fromExport = exportNameOrSpec.export;
206
+ if (exportNameOrSpec.exports !== undefined)
207
+ exports = exportNameOrSpec.exports;
208
+ if (exportNameOrSpec.from !== undefined)
209
+ from = exportNameOrSpec.from;
210
+ if (exportNameOrSpec.priority !== undefined)
211
+ priority = exportNameOrSpec.priority;
212
+ if (exportNameOrSpec.terminalBinding !== undefined)
213
+ terminalBinding = exportNameOrSpec.terminalBinding;
214
+ if (exportNameOrSpec.hidden !== undefined)
215
+ hidden = exportNameOrSpec.hidden;
216
+ }
157
217
  const exportInfo = exportsInfo.getExportInfo(name);
158
- exportInfo.unsetTarget(dep);
159
- }
160
- }
161
- if (exports === true) {
162
- // unknown exports
163
- if (
164
- exportsInfo.setUnknownExportsProvided(
165
- globalCanMangle,
166
- exportDesc.excludeExports,
167
- globalFrom && dep,
168
- globalFrom,
169
- globalPriority
170
- )
171
- ) {
172
- changed = true;
173
- }
174
- } else if (Array.isArray(exports)) {
175
- /**
176
- * merge in new exports
177
- * @param {ExportsInfo} exportsInfo own exports info
178
- * @param {(ExportSpec | string)[]} exports list of exports
179
- */
180
- const mergeExports = (exportsInfo, exports) => {
181
- for (const exportNameOrSpec of exports) {
182
- let name;
183
- let canMangle = globalCanMangle;
184
- let terminalBinding = globalTerminalBinding;
185
- let exports = undefined;
186
- let from = globalFrom;
187
- let fromExport = undefined;
188
- let priority = globalPriority;
189
- let hidden = false;
190
- if (typeof exportNameOrSpec === "string") {
191
- name = exportNameOrSpec;
192
- } else {
193
- name = exportNameOrSpec.name;
194
- if (exportNameOrSpec.canMangle !== undefined)
195
- canMangle = exportNameOrSpec.canMangle;
196
- if (exportNameOrSpec.export !== undefined)
197
- fromExport = exportNameOrSpec.export;
198
- if (exportNameOrSpec.exports !== undefined)
199
- exports = exportNameOrSpec.exports;
200
- if (exportNameOrSpec.from !== undefined)
201
- from = exportNameOrSpec.from;
202
- if (exportNameOrSpec.priority !== undefined)
203
- priority = exportNameOrSpec.priority;
204
- if (exportNameOrSpec.terminalBinding !== undefined)
205
- terminalBinding = exportNameOrSpec.terminalBinding;
206
- if (exportNameOrSpec.hidden !== undefined)
207
- hidden = exportNameOrSpec.hidden;
208
- }
209
- const exportInfo = exportsInfo.getExportInfo(name);
210
218
 
211
- if (
212
- exportInfo.provided === false ||
213
- exportInfo.provided === null
214
- ) {
215
- exportInfo.provided = true;
216
- changed = true;
217
- }
219
+ if (
220
+ exportInfo.provided === false ||
221
+ exportInfo.provided === null
222
+ ) {
223
+ exportInfo.provided = true;
224
+ changed = true;
225
+ }
218
226
 
219
- if (
220
- exportInfo.canMangleProvide !== false &&
221
- canMangle === false
222
- ) {
223
- exportInfo.canMangleProvide = false;
224
- changed = true;
225
- }
227
+ if (
228
+ exportInfo.canMangleProvide !== false &&
229
+ canMangle === false
230
+ ) {
231
+ exportInfo.canMangleProvide = false;
232
+ changed = true;
233
+ }
226
234
 
227
- if (terminalBinding && !exportInfo.terminalBinding) {
228
- exportInfo.terminalBinding = true;
229
- changed = true;
230
- }
235
+ if (terminalBinding && !exportInfo.terminalBinding) {
236
+ exportInfo.terminalBinding = true;
237
+ changed = true;
238
+ }
231
239
 
232
- if (exports) {
233
- const nestedExportsInfo =
234
- exportInfo.createNestedExportsInfo();
235
- mergeExports(nestedExportsInfo, exports);
236
- }
240
+ if (exports) {
241
+ const nestedExportsInfo =
242
+ exportInfo.createNestedExportsInfo();
243
+ mergeExports(
244
+ /** @type {ExportsInfo} */ (nestedExportsInfo),
245
+ exports
246
+ );
247
+ }
237
248
 
238
- if (
239
- from &&
240
- (hidden
241
- ? exportInfo.unsetTarget(dep)
242
- : exportInfo.setTarget(
243
- dep,
244
- from,
245
- fromExport === undefined ? [name] : fromExport,
246
- priority
247
- ))
248
- ) {
249
- changed = true;
250
- }
249
+ if (
250
+ from &&
251
+ (hidden
252
+ ? exportInfo.unsetTarget(dep)
253
+ : exportInfo.setTarget(
254
+ dep,
255
+ from,
256
+ fromExport === undefined ? [name] : fromExport,
257
+ priority
258
+ ))
259
+ ) {
260
+ changed = true;
261
+ }
251
262
 
252
- // Recalculate target exportsInfo
253
- const target = exportInfo.getTarget(moduleGraph);
254
- let targetExportsInfo = undefined;
255
- if (target) {
256
- const targetModuleExportsInfo =
257
- moduleGraph.getExportsInfo(target.module);
258
- targetExportsInfo =
259
- targetModuleExportsInfo.getNestedExportsInfo(
260
- target.export
261
- );
262
- // add dependency for this module
263
- const set = dependencies.get(target.module);
264
- if (set === undefined) {
265
- dependencies.set(target.module, new Set([module]));
266
- } else {
267
- set.add(module);
268
- }
263
+ // Recalculate target exportsInfo
264
+ const target = exportInfo.getTarget(moduleGraph);
265
+ let targetExportsInfo;
266
+ if (target) {
267
+ const targetModuleExportsInfo =
268
+ moduleGraph.getExportsInfo(target.module);
269
+ targetExportsInfo =
270
+ targetModuleExportsInfo.getNestedExportsInfo(
271
+ target.export
272
+ );
273
+ // add dependency for this module
274
+ const set = dependencies.get(target.module);
275
+ if (set === undefined) {
276
+ dependencies.set(target.module, new Set([module]));
277
+ } else {
278
+ set.add(module);
269
279
  }
280
+ }
270
281
 
271
- if (exportInfo.exportsInfoOwned) {
272
- if (
273
- exportInfo.exportsInfo.setRedirectNamedTo(
274
- targetExportsInfo
275
- )
276
- ) {
277
- changed = true;
278
- }
279
- } else if (
280
- exportInfo.exportsInfo !== targetExportsInfo
282
+ if (exportInfo.exportsInfoOwned) {
283
+ if (
284
+ /** @type {ExportsInfo} */
285
+ (exportInfo.exportsInfo).setRedirectNamedTo(
286
+ targetExportsInfo
287
+ )
281
288
  ) {
282
- exportInfo.exportsInfo = targetExportsInfo;
283
289
  changed = true;
284
290
  }
291
+ } else if (exportInfo.exportsInfo !== targetExportsInfo) {
292
+ exportInfo.exportsInfo = targetExportsInfo;
293
+ changed = true;
285
294
  }
286
- };
287
- mergeExports(exportsInfo, exports);
288
- }
289
- // store dependencies
290
- if (exportDeps) {
291
- cacheable = false;
292
- for (const exportDependency of exportDeps) {
293
- // add dependency for this module
294
- const set = dependencies.get(exportDependency);
295
- if (set === undefined) {
296
- dependencies.set(exportDependency, new Set([module]));
297
- } else {
298
- set.add(module);
299
- }
295
+ }
296
+ };
297
+ mergeExports(exportsInfo, exports);
298
+ }
299
+ // store dependencies
300
+ if (exportDeps) {
301
+ cacheable = false;
302
+ for (const exportDependency of exportDeps) {
303
+ // add dependency for this module
304
+ const set = dependencies.get(exportDependency);
305
+ if (set === undefined) {
306
+ dependencies.set(exportDependency, new Set([module]));
307
+ } else {
308
+ set.add(module);
300
309
  }
301
310
  }
302
- };
311
+ }
312
+ };
303
313
 
304
- const notifyDependencies = () => {
305
- const deps = dependencies.get(module);
306
- if (deps !== undefined) {
307
- for (const dep of deps) {
308
- queue.enqueue(dep);
309
- }
314
+ const notifyDependencies = () => {
315
+ const deps = dependencies.get(module);
316
+ if (deps !== undefined) {
317
+ for (const dep of deps) {
318
+ queue.enqueue(dep);
310
319
  }
311
- };
320
+ }
321
+ };
312
322
 
313
- logger.time("figure out provided exports");
314
- while (queue.length > 0) {
315
- module = queue.dequeue();
323
+ logger.time("figure out provided exports");
324
+ while (queue.length > 0) {
325
+ module = /** @type {Module} */ (queue.dequeue());
316
326
 
317
- statQueueItemsProcessed++;
327
+ statQueueItemsProcessed++;
318
328
 
319
- exportsInfo = moduleGraph.getExportsInfo(module);
329
+ exportsInfo = moduleGraph.getExportsInfo(module);
320
330
 
321
- cacheable = true;
322
- changed = false;
331
+ cacheable = true;
332
+ changed = false;
323
333
 
324
- exportsSpecsFromDependencies.clear();
325
- moduleGraph.freeze();
326
- processDependenciesBlock(module);
327
- moduleGraph.unfreeze();
328
- for (const [
329
- dep,
330
- exportsSpec
331
- ] of exportsSpecsFromDependencies) {
332
- processExportsSpec(dep, exportsSpec);
333
- }
334
+ exportsSpecsFromDependencies.clear();
335
+ moduleGraph.freeze();
336
+ processDependenciesBlock(module);
337
+ moduleGraph.unfreeze();
338
+ for (const [dep, exportsSpec] of exportsSpecsFromDependencies) {
339
+ processExportsSpec(dep, exportsSpec);
340
+ }
334
341
 
335
- if (cacheable) {
336
- modulesToStore.add(module);
337
- }
342
+ if (cacheable) {
343
+ modulesToStore.add(module);
344
+ }
338
345
 
339
- if (changed) {
340
- notifyDependencies();
341
- }
346
+ if (changed) {
347
+ notifyDependencies();
342
348
  }
343
- logger.timeEnd("figure out provided exports");
344
-
345
- logger.log(
346
- `${Math.round(
347
- (100 * (statFlaggedUncached + statNotCached)) /
348
- (statRestoredFromMemCache +
349
- statRestoredFromCache +
350
- statNotCached +
351
- statFlaggedUncached +
352
- statNoExports)
353
- )}% of exports of modules have been determined (${statNoExports} no declared exports, ${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${statRestoredFromMemCache} from mem cache, ${
354
- statQueueItemsProcessed -
355
- statNotCached -
356
- statFlaggedUncached
357
- } additional calculations due to dependencies)`
358
- );
359
-
360
- logger.time("store provided exports into cache");
361
- asyncLib.each(
362
- modulesToStore,
363
- (module, callback) => {
364
- if (typeof module.buildInfo.hash !== "string") {
365
- // not cacheable
366
- return callback();
367
- }
368
- const cachedData = moduleGraph
369
- .getExportsInfo(module)
370
- .getRestoreProvidedData();
371
- const memCache =
372
- moduleMemCaches && moduleMemCaches.get(module);
373
- if (memCache) {
374
- memCache.set(this, cachedData);
375
- }
376
- cache.store(
377
- module.identifier(),
378
- module.buildInfo.hash,
379
- cachedData,
380
- callback
381
- );
382
- },
383
- err => {
384
- logger.timeEnd("store provided exports into cache");
385
- callback(err);
386
- }
387
- );
388
349
  }
389
- );
390
- }
391
- );
392
-
393
- /** @type {WeakMap<Module, any>} */
394
- const providedExportsCache = new WeakMap();
395
- compilation.hooks.rebuildModule.tap(
396
- "FlagDependencyExportsPlugin",
397
- module => {
398
- providedExportsCache.set(
399
- module,
400
- moduleGraph.getExportsInfo(module).getRestoreProvidedData()
401
- );
402
- }
403
- );
404
- compilation.hooks.finishRebuildingModule.tap(
405
- "FlagDependencyExportsPlugin",
406
- module => {
407
- moduleGraph
408
- .getExportsInfo(module)
409
- .restoreProvided(providedExportsCache.get(module));
410
- }
350
+ logger.timeEnd("figure out provided exports");
351
+
352
+ logger.log(
353
+ `${Math.round(
354
+ (100 * (statFlaggedUncached + statNotCached)) /
355
+ (statRestoredFromMemCache +
356
+ statRestoredFromCache +
357
+ statNotCached +
358
+ statFlaggedUncached +
359
+ statNoExports)
360
+ )}% of exports of modules have been determined (${statNoExports} no declared exports, ${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${statRestoredFromMemCache} from mem cache, ${
361
+ statQueueItemsProcessed - statNotCached - statFlaggedUncached
362
+ } additional calculations due to dependencies)`
363
+ );
364
+
365
+ logger.time("store provided exports into cache");
366
+ asyncLib.each(
367
+ modulesToStore,
368
+ (module, callback) => {
369
+ if (
370
+ typeof (
371
+ /** @type {BuildInfo} */ (module.buildInfo).hash
372
+ ) !== "string"
373
+ ) {
374
+ // not cacheable
375
+ return callback();
376
+ }
377
+ const cachedData = moduleGraph
378
+ .getExportsInfo(module)
379
+ .getRestoreProvidedData();
380
+ const memCache =
381
+ moduleMemCaches && moduleMemCaches.get(module);
382
+ if (memCache) {
383
+ memCache.set(this, cachedData);
384
+ }
385
+ cache.store(
386
+ module.identifier(),
387
+ /** @type {BuildInfo} */
388
+ (module.buildInfo).hash,
389
+ cachedData,
390
+ callback
391
+ );
392
+ },
393
+ err => {
394
+ logger.timeEnd("store provided exports into cache");
395
+ callback(err);
396
+ }
397
+ );
398
+ }
399
+ );
400
+ }
401
+ );
402
+
403
+ /** @type {WeakMap<Module, any>} */
404
+ const providedExportsCache = new WeakMap();
405
+ compilation.hooks.rebuildModule.tap(PLUGIN_NAME, module => {
406
+ providedExportsCache.set(
407
+ module,
408
+ moduleGraph.getExportsInfo(module).getRestoreProvidedData()
411
409
  );
412
- }
413
- );
410
+ });
411
+ compilation.hooks.finishRebuildingModule.tap(PLUGIN_NAME, module => {
412
+ moduleGraph
413
+ .getExportsInfo(module)
414
+ .restoreProvided(providedExportsCache.get(module));
415
+ });
416
+ });
414
417
  }
415
418
  }
416
419