@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -6,8 +6,6 @@
6
6
  "use strict";
7
7
 
8
8
  const querystring = require("querystring");
9
- const parseJson = require("json-parse-even-better-errors");
10
- const { getContext, runLoaders } = require("loader-runner");
11
9
  const {
12
10
  AsyncSeriesBailHook,
13
11
  HookMap,
@@ -20,39 +18,45 @@ const {
20
18
  RawSource,
21
19
  SourceMapSource
22
20
  } = require("webpack-sources");
23
- const Compilation = require("./Compilation");
24
- const HookWebpackError = require("./HookWebpackError");
21
+ const Dependency = require("./Dependency");
25
22
  const Module = require("./Module");
26
- const ModuleBuildError = require("./ModuleBuildError");
27
- const ModuleError = require("./ModuleError");
28
23
  const ModuleGraphConnection = require("./ModuleGraphConnection");
29
- const ModuleParseError = require("./ModuleParseError");
30
24
  const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
31
- const ModuleWarning = require("./ModuleWarning");
32
25
  const RuntimeGlobals = require("./RuntimeGlobals");
33
- const UnhandledSchemeError = require("./UnhandledSchemeError");
34
- const WebpackError = require("./WebpackError");
35
- const formatLocation = require("./formatLocation");
26
+ const HookWebpackError = require("./errors/HookWebpackError");
27
+ const ModuleBuildError = require("./errors/ModuleBuildError");
28
+ const ModuleError = require("./errors/ModuleError");
29
+ const ModuleParseError = require("./errors/ModuleParseError");
30
+ const ModuleWarning = require("./errors/ModuleWarning");
31
+ const NonErrorEmittedError = require("./errors/NonErrorEmittedError");
32
+ const UnhandledSchemeError = require("./errors/UnhandledSchemeError");
33
+ const {
34
+ createLoaderContext,
35
+ getContext,
36
+ runLoaders
37
+ } = require("./loaders/LoaderRunner");
36
38
  const LazySet = require("./util/LazySet");
37
39
  const { isSubset } = require("./util/SetHelpers");
38
40
  const { getScheme } = require("./util/URLAbsoluteSpecifier");
39
41
  const {
40
- compareLocations,
41
- compareSelect,
42
42
  concatComparators,
43
43
  keepOriginalOrder,
44
44
  sortWithSourceOrder
45
45
  } = require("./util/comparators");
46
46
  const createHash = require("./util/createHash");
47
+ const createHooksRegistry = require("./util/createHooksRegistry");
47
48
  const { createFakeHook } = require("./util/deprecation");
49
+ const formatLocation = require("./util/formatLocation");
48
50
  const { join } = require("./util/fs");
49
51
  const {
52
+ ABSOLUTE_PATH_REGEXP,
50
53
  absolutify,
51
54
  contextify,
52
- makePathsRelative
55
+ contextifySourceUrl
53
56
  } = require("./util/identifier");
54
57
  const makeSerializable = require("./util/makeSerializable");
55
58
  const memoize = require("./util/memoize");
59
+ const parseJson = require("./util/parseJson");
56
60
 
57
61
  /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
58
62
  /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
@@ -60,12 +64,15 @@ const memoize = require("./util/memoize");
60
64
  /** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
61
65
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
62
66
  /** @typedef {import("../declarations/WebpackOptions").NoParse} NoParse */
67
+ /** @typedef {import("./Compilation")} Compilation */
63
68
  /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
64
69
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
65
70
  /** @typedef {import("./Generator")} Generator */
66
71
  /** @typedef {import("./Generator").GenerateErrorFn} GenerateErrorFn */
72
+ /** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
67
73
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
68
74
  /** @typedef {import("./Module").FileSystemDependencies} FileSystemDependencies */
75
+ /** @typedef {import("./Module").ValueCacheVersions} ValueCacheVersions */
69
76
  /** @typedef {import("./Module").BuildMeta} BuildMeta */
70
77
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
71
78
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
@@ -87,6 +94,10 @@ const memoize = require("./util/memoize");
87
94
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
88
95
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
89
96
  /** @typedef {import("./NormalModuleFactory").NormalModuleTypes} NormalModuleTypes */
97
+ /** @typedef {import("./NormalModuleFactory").ParserByType} ParserByType */
98
+ /** @typedef {import("./NormalModuleFactory").ParserOptionsByType} ParserOptionsByType */
99
+ /** @typedef {import("./NormalModuleFactory").GeneratorByType} GeneratorByType */
100
+ /** @typedef {import("./NormalModuleFactory").GeneratorOptionsByType} GeneratorOptionsByType */
90
101
  /** @typedef {import("./NormalModuleFactory").ResourceSchemeData} ResourceSchemeData */
91
102
  /** @typedef {import("./Parser")} Parser */
92
103
  /** @typedef {import("./Parser").PreparsedAst} PreparsedAst */
@@ -119,14 +130,258 @@ const memoize = require("./util/memoize");
119
130
  /** @typedef {(content: string) => boolean} NoParseFn */
120
131
 
121
132
  const getInvalidDependenciesModuleWarning = memoize(() =>
122
- require("./InvalidDependenciesModuleWarning")
133
+ require("./errors/InvalidDependenciesModuleWarning")
123
134
  );
124
135
 
125
136
  const getExtractSourceMap = memoize(() => require("./util/extractSourceMap"));
126
137
 
127
138
  const getValidate = memoize(() => require("schema-utils").validate);
128
139
 
129
- const ABSOLUTE_PATH_REGEX = /^(?:[a-z]:\\|\\\\|\/)/i;
140
+ const getHarmonyImportSideEffectDependency = memoize(() =>
141
+ require("./dependencies/HarmonyImportSideEffectDependency")
142
+ );
143
+
144
+ /**
145
+ * @param {NormalModule} mod the module
146
+ * @param {ModuleGraph} moduleGraph the module graph
147
+ * @param {Dependency} dep the dep that triggered the bailout
148
+ */
149
+ const recordSideEffectsBailout = (mod, moduleGraph, dep) => {
150
+ if (mod._addedSideEffectsBailout === undefined) {
151
+ mod._addedSideEffectsBailout = new WeakSet();
152
+ } else if (mod._addedSideEffectsBailout.has(moduleGraph)) {
153
+ return;
154
+ }
155
+ mod._addedSideEffectsBailout.add(moduleGraph);
156
+ moduleGraph
157
+ .getOptimizationBailout(mod)
158
+ .push(
159
+ () =>
160
+ `Dependency (${dep.type}) with side effects at ${formatLocation(dep.loc)}`
161
+ );
162
+ };
163
+
164
+ /**
165
+ * Walks the `HarmonyImportSideEffectDependency` graph to decide how `rootMod`
166
+ * connects to a referrer when consumed for its side effects only.
167
+ *
168
+ * Iterative (explicit work stack) so deep import chains never approach V8's
169
+ * recursion limit — the overflow behind #20986 — with no separate recursive
170
+ * form or depth cap. Cycles use Tarjan's `index`/`lowlink`: a module's result
171
+ * is memoized on `_sideEffectsStateGraph` only when it is context-independent
172
+ * (cycle-free, or the root of its strongly-connected component), i.e. exactly
173
+ * when the result cannot depend on which ancestors are mid-walk.
174
+ *
175
+ * The previous walker disabled memoization for the whole walk the moment any
176
+ * cycle appeared (one global `circular` flag). With diamond-shaped graphs that
177
+ * made the walk exponential, so a single circular import could blow up an
178
+ * otherwise-linear graph. Per-module lowlink keeps the cycle-free majority
179
+ * memoized while a cycle exists elsewhere.
180
+ *
181
+ * Caching under `lowlink === index` is conservative: an imprecise lowlink can
182
+ * only skip caching (a later recompute yields the same value), never memoize a
183
+ * state that depended on stack context. `true` is monotonic and always cached.
184
+ * A non-`NormalModule` dependency (e.g. `ConcatenatedModule` re-entering this
185
+ * method) is treated as a taint so its chain is never memoized, and any module
186
+ * already flagged `_isEvaluatingSideEffects` (this walk or an outer re-entrant
187
+ * one) counts as circular, matching the previous walker.
188
+ * @param {NormalModule} rootMod the module being walked
189
+ * @param {ModuleGraph} moduleGraph the module graph
190
+ * @param {EXPECTED_ANY} SideEffectDep `HarmonyImportSideEffectDependency` constructor, resolved once at the entry
191
+ * @returns {ConnectionState} the side-effects connection state
192
+ */
193
+ const walkSideEffects = (rootMod, moduleGraph, SideEffectDep) => {
194
+ // Context-independent state without descending; `undefined` => walk deps.
195
+ /**
196
+ * @param {NormalModule} mod module
197
+ * @returns {ConnectionState | undefined} resolved state or undefined
198
+ */
199
+ const quick = (mod) => {
200
+ if (mod._sideEffectsStateGraph === moduleGraph) {
201
+ return /** @type {ConnectionState} */ (mod._sideEffectsStateValue);
202
+ }
203
+ const fm = mod.factoryMeta;
204
+ if (fm !== undefined) {
205
+ if (fm.sideEffectFree) return false;
206
+ if (fm.sideEffectFree === false) return true;
207
+ }
208
+ if (!(mod.buildMeta !== undefined && mod.buildMeta.sideEffectFree)) {
209
+ return true;
210
+ }
211
+ return undefined;
212
+ };
213
+
214
+ const q0 = quick(rootMod);
215
+ if (q0 !== undefined) return q0;
216
+
217
+ /** @type {Map<NormalModule, number>} module -> Tarjan index */
218
+ const indexOf = new Map();
219
+ /** @type {Map<NormalModule, number>} module -> Tarjan lowlink */
220
+ const lowOf = new Map();
221
+ // Parallel frame arrays, to avoid a per-frame object allocation.
222
+ /** @type {NormalModule[]} */
223
+ const fMod = [];
224
+ /** @type {Dependency[][]} */
225
+ const fDeps = [];
226
+ /** @type {number[]} */
227
+ const fIdx = [];
228
+ /** @type {ConnectionState[]} */
229
+ const fCur = [];
230
+ let counter = 0;
231
+
232
+ /**
233
+ * @param {NormalModule} mod module to push a frame for
234
+ */
235
+ const enter = (mod) => {
236
+ indexOf.set(mod, counter);
237
+ lowOf.set(mod, counter);
238
+ counter++;
239
+ mod._isEvaluatingSideEffects = true;
240
+ fMod.push(mod);
241
+ fDeps.push(mod.dependencies);
242
+ fIdx.push(0);
243
+ fCur.push(false);
244
+ };
245
+
246
+ enter(rootMod);
247
+ /** @type {ConnectionState} the just-popped frame's result */
248
+ let result = false;
249
+ /**
250
+ * Result of a just-popped child frame, to apply to the new top's current
251
+ * dep. `undefined` means "no pending; advance normally".
252
+ * @type {ConnectionState | undefined}
253
+ */
254
+ let pending;
255
+
256
+ while (fMod.length > 0) {
257
+ const top = fMod.length - 1;
258
+ const mod = fMod[top];
259
+ const deps = fDeps[top];
260
+ let i = fIdx[top];
261
+ let current = fCur[top];
262
+
263
+ // Apply a popped child's result to the dep that spawned it.
264
+ if (pending !== undefined) {
265
+ const state = pending;
266
+ pending = undefined;
267
+ const dep = deps[i];
268
+ if (state === true) {
269
+ recordSideEffectsBailout(mod, moduleGraph, dep);
270
+ mod._sideEffectsStateGraph = moduleGraph;
271
+ mod._sideEffectsStateValue = true;
272
+ mod._isEvaluatingSideEffects = false;
273
+ fMod.pop();
274
+ fDeps.pop();
275
+ fIdx.pop();
276
+ fCur.pop();
277
+ result = true;
278
+ pending = true;
279
+ continue;
280
+ }
281
+ if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
282
+ current = ModuleGraphConnection.addConnectionStates(current, state);
283
+ }
284
+ i++;
285
+ }
286
+
287
+ let descended = false;
288
+ while (i < deps.length) {
289
+ const dep = deps[i];
290
+ /** @type {ConnectionState} */
291
+ let state;
292
+
293
+ if (dep instanceof SideEffectDep) {
294
+ const refModule = moduleGraph.getModule(dep);
295
+ if (!refModule) {
296
+ state = true;
297
+ } else if (refModule instanceof NormalModule) {
298
+ if (refModule._isEvaluatingSideEffects) {
299
+ // On the current stack (or an outer re-entrant walk) => cycle.
300
+ state = ModuleGraphConnection.CIRCULAR_CONNECTION;
301
+ const ri = indexOf.get(refModule);
302
+ lowOf.set(
303
+ mod,
304
+ Math.min(
305
+ /** @type {number} */ (lowOf.get(mod)),
306
+ ri === undefined ? -1 : ri
307
+ )
308
+ );
309
+ } else {
310
+ const q = quick(refModule);
311
+ if (q !== undefined) {
312
+ state = q;
313
+ } else {
314
+ // Descend: pause this frame, walk the child next.
315
+ fIdx[top] = i;
316
+ fCur[top] = current;
317
+ enter(refModule);
318
+ descended = true;
319
+ break;
320
+ }
321
+ }
322
+ } else {
323
+ // Non-NormalModule (e.g. ConcatenatedModule delegating back
324
+ // through here) resolves via a re-entrant walk that may see our
325
+ // in-progress modules as circular, so taint this chain: never
326
+ // memoize it.
327
+ state = refModule.getSideEffectsConnectionState(moduleGraph);
328
+ lowOf.set(mod, -1);
329
+ }
330
+ } else {
331
+ state = dep.getModuleEvaluationSideEffectsState(moduleGraph);
332
+ }
333
+
334
+ if (state === true) {
335
+ recordSideEffectsBailout(mod, moduleGraph, dep);
336
+ // `true` is monotonic — always safe to memoize.
337
+ mod._sideEffectsStateGraph = moduleGraph;
338
+ mod._sideEffectsStateValue = true;
339
+ mod._isEvaluatingSideEffects = false;
340
+ fMod.pop();
341
+ fDeps.pop();
342
+ fIdx.pop();
343
+ fCur.pop();
344
+ result = true;
345
+ pending = true;
346
+ descended = true;
347
+ break;
348
+ }
349
+ if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
350
+ current = ModuleGraphConnection.addConnectionStates(current, state);
351
+ }
352
+ i++;
353
+ }
354
+
355
+ if (descended) continue;
356
+
357
+ // `mod` finished without a `true` bailout.
358
+ mod._isEvaluatingSideEffects = false;
359
+ // Memoize only when the result is context-independent: no back-edge in
360
+ // this subtree reached above `mod` (a cycle-free module or an SCC root).
361
+ if (lowOf.get(mod) === indexOf.get(mod)) {
362
+ mod._sideEffectsStateGraph = moduleGraph;
363
+ mod._sideEffectsStateValue = current;
364
+ }
365
+ fMod.pop();
366
+ fDeps.pop();
367
+ fIdx.pop();
368
+ fCur.pop();
369
+ result = current;
370
+ pending = current;
371
+ if (fMod.length > 0) {
372
+ const parent = fMod[fMod.length - 1];
373
+ lowOf.set(
374
+ parent,
375
+ Math.min(
376
+ /** @type {number} */ (lowOf.get(parent)),
377
+ /** @type {number} */ (lowOf.get(mod))
378
+ )
379
+ );
380
+ }
381
+ }
382
+
383
+ return result;
384
+ };
130
385
 
131
386
  /**
132
387
  * @typedef {object} LoaderItem
@@ -136,21 +391,6 @@ const ABSOLUTE_PATH_REGEX = /^(?:[a-z]:\\|\\\\|\/)/i;
136
391
  * @property {string | null=} type
137
392
  */
138
393
 
139
- /**
140
- * @param {string} context absolute context path
141
- * @param {string} source a source path
142
- * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
143
- * @returns {string} new source path
144
- */
145
- const contextifySourceUrl = (context, source, associatedObjectForCache) => {
146
- if (source.startsWith("webpack://")) return source;
147
- return `webpack://${makePathsRelative(
148
- context,
149
- source,
150
- associatedObjectForCache
151
- )}`;
152
- };
153
-
154
394
  /**
155
395
  * @param {string} context absolute context path
156
396
  * @param {string | RawSourceMap} sourceMap a source map
@@ -207,24 +447,6 @@ const asBuffer = (input) => {
207
447
  return input;
208
448
  };
209
449
 
210
- class NonErrorEmittedError extends WebpackError {
211
- /**
212
- * @param {EXPECTED_ANY} error value which is not an instance of Error
213
- */
214
- constructor(error) {
215
- super();
216
-
217
- this.name = "NonErrorEmittedError";
218
- this.message = `(Emitted value instead of an instance of Error) ${error}`;
219
- }
220
- }
221
-
222
- makeSerializable(
223
- NonErrorEmittedError,
224
- "webpack/lib/NormalModule",
225
- "NonErrorEmittedError"
226
- );
227
-
228
450
  /** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]} Result */
229
451
 
230
452
  /** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
@@ -234,22 +456,86 @@ makeSerializable(
234
456
  * @typedef {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} DeprecatedReadResourceForScheme
235
457
  */
236
458
 
459
+ const createCompilationHooks = () => {
460
+ /** @type {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} */
461
+ const readResource = new HookMap(
462
+ () => new AsyncSeriesBailHook(["loaderContext"])
463
+ );
464
+ return {
465
+ // TODO webpack 6 deprecate
466
+ /**
467
+ * @deprecated Use the `readResource` hook instead.
468
+ * @type {DeprecatedReadResourceForScheme}
469
+ */
470
+ readResourceForScheme: new HookMap((scheme) => {
471
+ const hook = readResource.for(scheme);
472
+ return createFakeHook(
473
+ /** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
474
+ tap: (options, fn) =>
475
+ hook.tap(options, (loaderContext) =>
476
+ fn(
477
+ loaderContext.resource,
478
+ /** @type {NormalModule} */ (loaderContext._module)
479
+ )
480
+ ),
481
+ tapAsync: (options, fn) =>
482
+ hook.tapAsync(options, (loaderContext, callback) =>
483
+ fn(
484
+ loaderContext.resource,
485
+ /** @type {NormalModule} */ (loaderContext._module),
486
+ callback
487
+ )
488
+ ),
489
+ tapPromise: (options, fn) =>
490
+ hook.tapPromise(options, (loaderContext) =>
491
+ fn(
492
+ loaderContext.resource,
493
+ /** @type {NormalModule} */ (loaderContext._module)
494
+ )
495
+ )
496
+ })
497
+ );
498
+ }),
499
+ /**
500
+ * @since 5.58.0
501
+ */
502
+ readResource,
503
+ /** @type {SyncHook<[AnyLoaderContext, NormalModule]>} */
504
+ loader: new SyncHook(["loaderContext", "module"]),
505
+ /** @type {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} */
506
+ beforeLoaders: new SyncHook(["loaders", "module", "loaderContext"]),
507
+ /**
508
+ * @type {SyncHook<[NormalModule]>}
509
+ * @since 5.59.0
510
+ */
511
+ beforeParse: new SyncHook(["module"]),
512
+ /**
513
+ * @type {SyncHook<[NormalModule]>}
514
+ * @since 5.59.0
515
+ */
516
+ beforeSnapshot: new SyncHook(["module"]),
517
+ /**
518
+ * @type {SyncWaterfallHook<[Result, NormalModule]>}
519
+ * @since 5.99.0
520
+ */
521
+ processResult: new SyncWaterfallHook(["result", "module"]),
522
+ /**
523
+ * @type {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>}
524
+ * @since 5.49.0
525
+ */
526
+ needBuild: new AsyncSeriesBailHook(["module", "context"])
527
+ };
528
+ };
529
+
237
530
  /**
238
- * @typedef {object} NormalModuleCompilationHooks
239
- * @property {SyncHook<[AnyLoaderContext, NormalModule]>} loader
240
- * @property {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} beforeLoaders
241
- * @property {SyncHook<[NormalModule]>} beforeParse
242
- * @property {SyncHook<[NormalModule]>} beforeSnapshot
243
- * @property {DeprecatedReadResourceForScheme} readResourceForScheme
244
- * @property {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} readResource
245
- * @property {SyncWaterfallHook<[Result, NormalModule]>} processResult
246
- * @property {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>} needBuild
531
+ * @typedef {ReturnType<typeof createCompilationHooks>} NormalModuleCompilationHooks
247
532
  */
248
533
 
249
534
  /**
535
+ * @template {NormalModuleTypes | ""} [T=NormalModuleTypes | ""]
250
536
  * @typedef {object} NormalModuleCreateData
251
537
  * @property {string=} layer an optional layer in which the module is
252
- * @property {NormalModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
538
+ * @property {T} type module type. When deserializing, this is set to an empty string "".
253
539
  * @property {string} request request string
254
540
  * @property {string} userRequest request intended by user (without loaders from config)
255
541
  * @property {string} rawRequest request without resolving
@@ -258,10 +544,10 @@ makeSerializable(
258
544
  * @property {(ResourceSchemeData & Partial<ResolveRequest>)=} resourceResolveData resource resolve data
259
545
  * @property {string} context context directory for resolving
260
546
  * @property {string=} matchResource path + query of the matched resource (virtual)
261
- * @property {Parser} parser the parser used
262
- * @property {ParserOptions=} parserOptions the options of the parser used
263
- * @property {Generator} generator the generator used
264
- * @property {GeneratorOptions=} generatorOptions the options of the generator used
547
+ * @property {ParserByType[T]} parser the parser used
548
+ * @property {ParserOptionsByType[T]=} parserOptions the options of the parser used
549
+ * @property {GeneratorByType[T]} generator the generator used
550
+ * @property {GeneratorOptionsByType[T]=} generatorOptions the options of the generator used
265
551
  * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
266
552
  * @property {boolean} extractSourceMap enable/disable extracting source map
267
553
  */
@@ -270,8 +556,23 @@ makeSerializable(
270
556
  * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
271
557
  */
272
558
 
273
- /** @type {WeakMap<Compilation, NormalModuleCompilationHooks>} */
274
- const compilationHooksMap = new WeakMap();
559
+ /**
560
+ * Defines the build info properties of normal modules (filesystem-backed, loader-processed).
561
+ * @typedef {object} KnownNormalModuleBuildInfo
562
+ * @property {boolean=} parsed
563
+ * @property {string=} hash
564
+ * @property {FileSystemDependencies=} fileDependencies
565
+ * @property {FileSystemDependencies=} contextDependencies
566
+ * @property {FileSystemDependencies=} missingDependencies
567
+ * @property {FileSystemDependencies=} buildDependencies
568
+ * @property {ValueCacheVersions=} valueDependencies
569
+ * @property {(Snapshot | null)=} snapshot
570
+ * @property {string=} resourceIntegrity using in HttpUriPlugin
571
+ */
572
+
573
+ /** @typedef {BuildInfo & KnownNormalModuleBuildInfo} NormalModuleBuildInfo */
574
+
575
+ const normalModuleHooksRegistry = createHooksRegistry(createCompilationHooks);
275
576
 
276
577
  class NormalModule extends Module {
277
578
  /**
@@ -279,62 +580,7 @@ class NormalModule extends Module {
279
580
  * @returns {NormalModuleCompilationHooks} the attached hooks
280
581
  */
281
582
  static getCompilationHooks(compilation) {
282
- if (!(compilation instanceof Compilation)) {
283
- throw new TypeError(
284
- "The 'compilation' argument must be an instance of Compilation"
285
- );
286
- }
287
- let hooks = compilationHooksMap.get(compilation);
288
- if (hooks === undefined) {
289
- hooks = {
290
- loader: new SyncHook(["loaderContext", "module"]),
291
- beforeLoaders: new SyncHook(["loaders", "module", "loaderContext"]),
292
- beforeParse: new SyncHook(["module"]),
293
- beforeSnapshot: new SyncHook(["module"]),
294
- // TODO webpack 6 deprecate
295
- readResourceForScheme: new HookMap((scheme) => {
296
- const hook =
297
- /** @type {NormalModuleCompilationHooks} */
298
- (hooks).readResource.for(scheme);
299
- return createFakeHook(
300
- /** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
301
- tap: (options, fn) =>
302
- hook.tap(options, (loaderContext) =>
303
- fn(
304
- loaderContext.resource,
305
- /** @type {NormalModule} */ (loaderContext._module)
306
- )
307
- ),
308
- tapAsync: (options, fn) =>
309
- hook.tapAsync(options, (loaderContext, callback) =>
310
- fn(
311
- loaderContext.resource,
312
- /** @type {NormalModule} */ (loaderContext._module),
313
- callback
314
- )
315
- ),
316
- tapPromise: (options, fn) =>
317
- hook.tapPromise(options, (loaderContext) =>
318
- fn(
319
- loaderContext.resource,
320
- /** @type {NormalModule} */ (loaderContext._module)
321
- )
322
- )
323
- })
324
- );
325
- }),
326
- readResource: new HookMap(
327
- () => new AsyncSeriesBailHook(["loaderContext"])
328
- ),
329
- processResult: new SyncWaterfallHook(["result", "module"]),
330
- needBuild: new AsyncSeriesBailHook(["module", "context"])
331
- };
332
- compilationHooksMap.set(
333
- compilation,
334
- /** @type {NormalModuleCompilationHooks} */ (hooks)
335
- );
336
- }
337
- return /** @type {NormalModuleCompilationHooks} */ (hooks);
583
+ return normalModuleHooksRegistry(compilation);
338
584
  }
339
585
 
340
586
  /**
@@ -393,14 +639,27 @@ class NormalModule extends Module {
393
639
  /** @type {NormalModuleCreateData['extractSourceMap']} */
394
640
  this.extractSourceMap = extractSourceMap;
395
641
 
642
+ // Set by HotModuleReplacementPlugin via NormalModuleFactory's `module` hook
643
+ /** @type {boolean} */
644
+ this.hot = false;
645
+
396
646
  // Info from Build
397
- /** @type {WebpackError | null} */
647
+ // Redeclared with the normal module specific shape (see KnownNormalModuleBuildInfo)
648
+ /** @type {NormalModuleBuildInfo | undefined} */
649
+ this.buildInfo = undefined;
650
+ /** @type {Error | null} */
398
651
  this.error = null;
399
652
  /**
400
653
  * @private
401
654
  * @type {Source | null}
402
655
  */
403
656
  this._source = null;
657
+ // Set at build time; declared here so the instance shape is fixed at construction
658
+ /**
659
+ * @private
660
+ * @type {PreparsedAst | null}
661
+ */
662
+ this._ast = null;
404
663
  /**
405
664
  * @private
406
665
  * @type {Map<undefined | SourceType, number> | undefined}
@@ -423,15 +682,25 @@ class NormalModule extends Module {
423
682
  */
424
683
  this._forceBuild = true;
425
684
  /**
426
- * @private
427
685
  * @type {boolean}
428
686
  */
429
687
  this._isEvaluatingSideEffects = false;
430
688
  /**
431
- * @private
432
689
  * @type {WeakSet<ModuleGraph> | undefined}
433
690
  */
434
691
  this._addedSideEffectsBailout = undefined;
692
+ /**
693
+ * Memoizes the result of `getSideEffectsConnectionState`. The
694
+ * graph slot keys the cached value to the `ModuleGraph` it was
695
+ * computed against so stale values never leak across compilations
696
+ * — a walk that targets a different graph just overwrites both
697
+ * slots. Populated only for context-independent results (cycle-free
698
+ * or SCC-root modules; see `walkSideEffects`).
699
+ * @type {ModuleGraph | undefined}
700
+ */
701
+ this._sideEffectsStateGraph = undefined;
702
+ /** @type {ConnectionState | undefined} */
703
+ this._sideEffectsStateValue = undefined;
435
704
  /**
436
705
  * @private
437
706
  * @type {CodeGenerationResultData}
@@ -440,6 +709,7 @@ class NormalModule extends Module {
440
709
  }
441
710
 
442
711
  /**
712
+ * Returns the unique identifier used to reference this module.
443
713
  * @returns {string} a unique identifier of the module
444
714
  */
445
715
  identifier() {
@@ -453,6 +723,7 @@ class NormalModule extends Module {
453
723
  }
454
724
 
455
725
  /**
726
+ * Returns a human-readable identifier for this module.
456
727
  * @param {RequestShortener} requestShortener the request shortener
457
728
  * @returns {string} a user readable identifier of the module
458
729
  */
@@ -468,6 +739,7 @@ class NormalModule extends Module {
468
739
  }
469
740
 
470
741
  /**
742
+ * Gets the library identifier.
471
743
  * @param {LibIdentOptions} options options
472
744
  * @returns {LibIdent | null} an identifier for library inclusion
473
745
  */
@@ -482,6 +754,7 @@ class NormalModule extends Module {
482
754
  }
483
755
 
484
756
  /**
757
+ * Returns the path used when matching this module against rule conditions.
485
758
  * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
486
759
  */
487
760
  nameForCondition() {
@@ -535,6 +808,11 @@ class NormalModule extends Module {
535
808
  this.parserOptions = undefined;
536
809
  this.generator = undefined;
537
810
  this.generatorOptions = undefined;
811
+ // Drop the side-effects memoization so a long-lived module doesn't
812
+ // strong-reference a stale `ModuleGraph`/`Compilation` for graphs
813
+ // that never get re-queried with a fresh one.
814
+ this._sideEffectsStateGraph = undefined;
815
+ this._sideEffectsStateValue = undefined;
538
816
  }
539
817
 
540
818
  /**
@@ -707,11 +985,8 @@ class NormalModule extends Module {
707
985
  /** @type {NormalModuleLoaderContext<T>} */
708
986
  const loaderContext = {
709
987
  version: 2,
710
- /**
711
- * @param {import("../declarations/LoaderContext").Schema=} schema schema
712
- * @returns {T} options
713
- */
714
- getOptions: (schema) => {
988
+ /** @type {LoaderContext<EXPECTED_ANY>["getOptions"]} */
989
+ getOptions: (/** @type {EXPECTED_ANY} */ schema = undefined) => {
715
990
  const loader = this.getCurrentLoader(
716
991
  /** @type {AnyLoaderContext} */
717
992
  (loaderContext)
@@ -722,7 +997,9 @@ class NormalModule extends Module {
722
997
  if (typeof options === "string") {
723
998
  if (options.startsWith("{") && options.endsWith("}")) {
724
999
  try {
725
- options = parseJson(options);
1000
+ options =
1001
+ /** @type {LoaderItem["options"]} */
1002
+ (parseJson(options));
726
1003
  } catch (err) {
727
1004
  throw new Error(
728
1005
  `Cannot parse string options: ${/** @type {Error} */ (err).message}`,
@@ -756,6 +1033,7 @@ class NormalModule extends Module {
756
1033
 
757
1034
  return /** @type {T} */ (options);
758
1035
  },
1036
+ /** @type {LoaderContext<EXPECTED_ANY>["emitWarning"]} */
759
1037
  emitWarning: (warning) => {
760
1038
  if (!(warning instanceof Error)) {
761
1039
  warning = new NonErrorEmittedError(warning);
@@ -766,6 +1044,7 @@ class NormalModule extends Module {
766
1044
  })
767
1045
  );
768
1046
  },
1047
+ /** @type {LoaderContext<EXPECTED_ANY>["emitError"]} */
769
1048
  emitError: (error) => {
770
1049
  if (!(error instanceof Error)) {
771
1050
  error = new NonErrorEmittedError(error);
@@ -776,6 +1055,7 @@ class NormalModule extends Module {
776
1055
  })
777
1056
  );
778
1057
  },
1058
+ /** @type {LoaderContext<EXPECTED_ANY>["getLogger"]} */
779
1059
  getLogger: (name) => {
780
1060
  const currentLoader = this.getCurrentLoader(
781
1061
  /** @type {AnyLoaderContext} */
@@ -787,9 +1067,11 @@ class NormalModule extends Module {
787
1067
  .join("|")
788
1068
  );
789
1069
  },
1070
+ /** @type {LoaderContext<EXPECTED_ANY>["resolve"]} */
790
1071
  resolve(context, request, callback) {
791
1072
  resolver.resolve({}, context, request, getResolveContext(), callback);
792
1073
  },
1074
+ /** @type {LoaderContext<EXPECTED_ANY>["getResolve"]} */
793
1075
  getResolve(options) {
794
1076
  const child = options ? resolver.withOptions(options) : resolver;
795
1077
  return /** @type {ReturnType<import("../declarations/LoaderContext").NormalModuleLoaderContext<T>["getResolve"]>} */ (
@@ -819,8 +1101,9 @@ class NormalModule extends Module {
819
1101
  }
820
1102
  );
821
1103
  },
1104
+ /** @type {LoaderContext<EXPECTED_ANY>["emitFile"]} */
822
1105
  emitFile: (name, content, sourceMap, assetInfo) => {
823
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1106
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
824
1107
 
825
1108
  if (!buildInfo.assets) {
826
1109
  buildInfo.assets = Object.create(null);
@@ -844,7 +1127,7 @@ class NormalModule extends Module {
844
1127
  assetsInfo.set(name, assetInfo);
845
1128
  },
846
1129
  addBuildDependency: (dep) => {
847
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1130
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
848
1131
 
849
1132
  if (buildInfo.buildDependencies === undefined) {
850
1133
  buildInfo.buildDependencies = new LazySet();
@@ -867,6 +1150,7 @@ class NormalModule extends Module {
867
1150
  };
868
1151
 
869
1152
  Object.assign(loaderContext, options.loader);
1153
+ createLoaderContext(loaderContext);
870
1154
 
871
1155
  hooks.loader.call(
872
1156
  /** @type {AnyLoaderContext} */
@@ -1017,7 +1301,7 @@ class NormalModule extends Module {
1017
1301
  return callback();
1018
1302
  };
1019
1303
 
1020
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1304
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1021
1305
 
1022
1306
  buildInfo.fileDependencies = new LazySet();
1023
1307
  buildInfo.contextDependencies = new LazySet();
@@ -1037,7 +1321,7 @@ class NormalModule extends Module {
1037
1321
  }
1038
1322
 
1039
1323
  if (this.loaders.length > 0) {
1040
- /** @type {BuildInfo} */
1324
+ /** @type {NormalModuleBuildInfo} */
1041
1325
  (this.buildInfo).buildDependencies = new LazySet();
1042
1326
  }
1043
1327
 
@@ -1133,7 +1417,7 @@ class NormalModule extends Module {
1133
1417
  (undefined);
1134
1418
 
1135
1419
  if (!result) {
1136
- /** @type {BuildInfo} */
1420
+ /** @type {NormalModuleBuildInfo} */
1137
1421
  (this.buildInfo).cacheable = false;
1138
1422
  return processResult(
1139
1423
  err || new Error("No result from loader-runner processing"),
@@ -1141,16 +1425,16 @@ class NormalModule extends Module {
1141
1425
  );
1142
1426
  }
1143
1427
 
1144
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1428
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1145
1429
 
1146
1430
  const fileDependencies =
1147
- /** @type {NonNullable<KnownBuildInfo["fileDependencies"]>} */
1431
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1148
1432
  (buildInfo.fileDependencies);
1149
1433
  const contextDependencies =
1150
- /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1434
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1151
1435
  (buildInfo.contextDependencies);
1152
1436
  const missingDependencies =
1153
- /** @type {NonNullable<KnownBuildInfo["missingDependencies"]>} */
1437
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1154
1438
  (buildInfo.missingDependencies);
1155
1439
 
1156
1440
  fileDependencies.addAll(result.fileDependencies);
@@ -1158,19 +1442,22 @@ class NormalModule extends Module {
1158
1442
  missingDependencies.addAll(result.missingDependencies);
1159
1443
  for (const loader of this.loaders) {
1160
1444
  const buildDependencies =
1161
- /** @type {NonNullable<KnownBuildInfo["buildDependencies"]>} */
1445
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["buildDependencies"]>} */
1162
1446
  (buildInfo.buildDependencies);
1163
1447
 
1164
1448
  buildDependencies.add(loader.loader);
1165
1449
  }
1166
1450
  buildInfo.cacheable = buildInfo.cacheable && result.cacheable;
1451
+ if (result.notCacheableReasons.length > 0) {
1452
+ buildInfo.notCacheableReasons = result.notCacheableReasons;
1453
+ }
1167
1454
  processResult(err, result.result);
1168
1455
  }
1169
1456
  );
1170
1457
  }
1171
1458
 
1172
1459
  /**
1173
- * @param {WebpackError} error the error
1460
+ * @param {Error} error the error
1174
1461
  * @returns {void}
1175
1462
  */
1176
1463
  markModuleAsErrored(error) {
@@ -1240,11 +1527,12 @@ class NormalModule extends Module {
1240
1527
  }
1241
1528
  hash.update("meta");
1242
1529
  hash.update(JSON.stringify(this.buildMeta));
1243
- /** @type {BuildInfo} */
1530
+ /** @type {NormalModuleBuildInfo} */
1244
1531
  (this.buildInfo).hash = hash.digest("hex");
1245
1532
  }
1246
1533
 
1247
1534
  /**
1535
+ * Builds the module using the provided compilation context.
1248
1536
  * @param {WebpackOptions} options webpack options
1249
1537
  * @param {Compilation} compilation the compilation
1250
1538
  * @param {ResolverWithOptions} resolver the resolver
@@ -1261,9 +1549,15 @@ class NormalModule extends Module {
1261
1549
  this.error = null;
1262
1550
  this.clearWarningsAndErrors();
1263
1551
  this.clearDependenciesAndBlocks();
1264
- this.buildMeta = {};
1552
+ this.buildMeta = {
1553
+ exportsType: undefined,
1554
+ defaultObject: undefined,
1555
+ strictHarmonyModule: undefined,
1556
+ async: undefined
1557
+ };
1265
1558
  this.buildInfo = {
1266
1559
  cacheable: false,
1560
+ notCacheableReasons: undefined,
1267
1561
  parsed: true,
1268
1562
  fileDependencies: undefined,
1269
1563
  contextDependencies: undefined,
@@ -1272,7 +1566,16 @@ class NormalModule extends Module {
1272
1566
  valueDependencies: undefined,
1273
1567
  hash: undefined,
1274
1568
  assets: undefined,
1275
- assetsInfo: undefined
1569
+ assetsInfo: undefined,
1570
+ snapshot: undefined,
1571
+ strict: undefined,
1572
+ exportsArgument: undefined,
1573
+ moduleArgument: undefined,
1574
+ topLevelDeclarations: undefined,
1575
+ pureFunctions: undefined,
1576
+ inlineExports: undefined,
1577
+ moduleConcatenationBailout: undefined,
1578
+ needCreateRequire: undefined
1276
1579
  };
1277
1580
 
1278
1581
  const startTime = compilation.compiler.fsStartTime || Date.now();
@@ -1305,7 +1608,7 @@ class NormalModule extends Module {
1305
1608
  const handleParseResult = () => {
1306
1609
  this.dependencies.sort(
1307
1610
  concatComparators(
1308
- compareSelect((a) => a.loc, compareLocations),
1611
+ Dependency.compareLocations,
1309
1612
  keepOriginalOrder(this.dependencies)
1310
1613
  )
1311
1614
  );
@@ -1321,12 +1624,14 @@ class NormalModule extends Module {
1321
1624
  try {
1322
1625
  hooks.beforeSnapshot.call(this);
1323
1626
  } catch (err) {
1324
- this.markModuleAsErrored(/** @type {WebpackError} */ (err));
1627
+ this.markModuleAsErrored(/** @type {Error} */ (err));
1325
1628
  return callback();
1326
1629
  }
1327
1630
 
1328
1631
  const snapshotOptions = compilation.options.snapshot.module;
1329
- const { cacheable } = /** @type {BuildInfo} */ (this.buildInfo);
1632
+ const { cacheable } = /** @type {NormalModuleBuildInfo} */ (
1633
+ this.buildInfo
1634
+ );
1330
1635
  if (!cacheable || !snapshotOptions) {
1331
1636
  return callback();
1332
1637
  }
@@ -1339,7 +1644,7 @@ class NormalModule extends Module {
1339
1644
  */
1340
1645
  const checkDependencies = (deps) => {
1341
1646
  for (const dep of deps) {
1342
- if (!ABSOLUTE_PATH_REGEX.test(dep)) {
1647
+ if (!ABSOLUTE_PATH_REGEXP.test(dep)) {
1343
1648
  if (nonAbsoluteDependencies === undefined) {
1344
1649
  nonAbsoluteDependencies = new Set();
1345
1650
  }
@@ -1353,11 +1658,11 @@ class NormalModule extends Module {
1353
1658
  (this.context),
1354
1659
  depWithoutGlob
1355
1660
  );
1356
- if (absolute !== dep && ABSOLUTE_PATH_REGEX.test(absolute)) {
1661
+ if (absolute !== dep && ABSOLUTE_PATH_REGEXP.test(absolute)) {
1357
1662
  (depWithoutGlob !== dep
1358
- ? /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1663
+ ? /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1359
1664
  (
1360
- /** @type {BuildInfo} */
1665
+ /** @type {NormalModuleBuildInfo} */
1361
1666
  (this.buildInfo).contextDependencies
1362
1667
  )
1363
1668
  : deps
@@ -1369,15 +1674,15 @@ class NormalModule extends Module {
1369
1674
  }
1370
1675
  }
1371
1676
  };
1372
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1677
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1373
1678
  const fileDependencies =
1374
- /** @type {NonNullable<KnownBuildInfo["fileDependencies"]>} */
1679
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1375
1680
  (buildInfo.fileDependencies);
1376
1681
  const contextDependencies =
1377
- /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1682
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1378
1683
  (buildInfo.contextDependencies);
1379
1684
  const missingDependencies =
1380
- /** @type {NonNullable<KnownBuildInfo["missingDependencies"]>} */
1685
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1381
1686
  (buildInfo.missingDependencies);
1382
1687
  checkDependencies(fileDependencies);
1383
1688
  checkDependencies(missingDependencies);
@@ -1413,7 +1718,7 @@ class NormalModule extends Module {
1413
1718
  try {
1414
1719
  hooks.beforeParse.call(this);
1415
1720
  } catch (err) {
1416
- this.markModuleAsErrored(/** @type {WebpackError} */ (err));
1721
+ this.markModuleAsErrored(/** @type {Error} */ (err));
1417
1722
  this._initBuildHash(compilation);
1418
1723
  return callback();
1419
1724
  }
@@ -1423,7 +1728,7 @@ class NormalModule extends Module {
1423
1728
  const noParseRule = options.module && options.module.noParse;
1424
1729
  if (this.shouldPreventParsing(noParseRule, this.request)) {
1425
1730
  // We assume that we need module and exports
1426
- /** @type {BuildInfo} */
1731
+ /** @type {NormalModuleBuildInfo} */
1427
1732
  (this.buildInfo).parsed = false;
1428
1733
  this._initBuildHash(compilation);
1429
1734
  return handleBuildDone();
@@ -1437,7 +1742,11 @@ class NormalModule extends Module {
1437
1742
  current: this,
1438
1743
  module: this,
1439
1744
  compilation,
1440
- options
1745
+ options,
1746
+ harmonyNamedExports: undefined,
1747
+ harmonyStarExports: undefined,
1748
+ lastHarmonyImportOrder: undefined,
1749
+ localModules: undefined
1441
1750
  });
1442
1751
  } catch (parseErr) {
1443
1752
  handleParseError(/** @type {Error} */ (parseErr));
@@ -1448,6 +1757,7 @@ class NormalModule extends Module {
1448
1757
  }
1449
1758
 
1450
1759
  /**
1760
+ * Returns the reason this module cannot be concatenated, when one exists.
1451
1761
  * @param {ConcatenationBailoutReasonContext} context context
1452
1762
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
1453
1763
  */
@@ -1458,54 +1768,23 @@ class NormalModule extends Module {
1458
1768
  }
1459
1769
 
1460
1770
  /**
1771
+ * Gets side effects connection state.
1461
1772
  * @param {ModuleGraph} moduleGraph the module graph
1462
1773
  * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
1463
1774
  */
1464
1775
  getSideEffectsConnectionState(moduleGraph) {
1465
- if (this.factoryMeta !== undefined) {
1466
- if (this.factoryMeta.sideEffectFree) return false;
1467
- if (this.factoryMeta.sideEffectFree === false) return true;
1468
- }
1469
- if (this.buildMeta !== undefined && this.buildMeta.sideEffectFree) {
1470
- if (this._isEvaluatingSideEffects) {
1471
- return ModuleGraphConnection.CIRCULAR_CONNECTION;
1472
- }
1473
- this._isEvaluatingSideEffects = true;
1474
- /** @type {ConnectionState} */
1475
- let current = false;
1476
- for (const dep of this.dependencies) {
1477
- const state = dep.getModuleEvaluationSideEffectsState(moduleGraph);
1478
- if (state === true) {
1479
- if (
1480
- this._addedSideEffectsBailout === undefined
1481
- ? ((this._addedSideEffectsBailout = new WeakSet()), true)
1482
- : !this._addedSideEffectsBailout.has(moduleGraph)
1483
- ) {
1484
- this._addedSideEffectsBailout.add(moduleGraph);
1485
- moduleGraph
1486
- .getOptimizationBailout(this)
1487
- .push(
1488
- () =>
1489
- `Dependency (${
1490
- dep.type
1491
- }) with side effects at ${formatLocation(dep.loc)}`
1492
- );
1493
- }
1494
- this._isEvaluatingSideEffects = false;
1495
- return true;
1496
- } else if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
1497
- current = ModuleGraphConnection.addConnectionStates(current, state);
1498
- }
1499
- }
1500
- this._isEvaluatingSideEffects = false;
1501
- // When caching is implemented here, make sure to not cache when
1502
- // at least one circular connection was in the loop above
1503
- return current;
1504
- }
1505
- return true;
1776
+ // Each call owns its Tarjan bookkeeping; re-entrant calls (e.g.
1777
+ // `ConcatenatedModule.getSideEffectsConnectionState` delegating back
1778
+ // through here) can't clobber the outer walk.
1779
+ return walkSideEffects(
1780
+ this,
1781
+ moduleGraph,
1782
+ getHarmonyImportSideEffectDependency()
1783
+ );
1506
1784
  }
1507
1785
 
1508
1786
  /**
1787
+ * Returns the source types this module can generate.
1509
1788
  * @returns {SourceTypes} types available (do not mutate)
1510
1789
  */
1511
1790
  getSourceTypes() {
@@ -1518,6 +1797,19 @@ class NormalModule extends Module {
1518
1797
  }
1519
1798
 
1520
1799
  /**
1800
+ * Freshly recomputed source types when they depend on incoming connections, for chunk-graph cache invalidation; undefined otherwise. #20800
1801
+ * @returns {SourceTypes | undefined} source types or undefined
1802
+ */
1803
+ getReferencedSourceTypes() {
1804
+ const generator = /** @type {Generator} */ (this.generator);
1805
+ // Bypass the _sourceTypes cache: it may be stale when the module is not rebuilt.
1806
+ return generator.getTypesDependOnIncomingConnections()
1807
+ ? generator.getTypes(this)
1808
+ : undefined;
1809
+ }
1810
+
1811
+ /**
1812
+ * Generates code and runtime requirements for this module.
1521
1813
  * @param {CodeGenerationContext} context context for code generation
1522
1814
  * @returns {CodeGenerationResult} result
1523
1815
  */
@@ -1534,7 +1826,7 @@ class NormalModule extends Module {
1534
1826
  /** @type {RuntimeRequirements} */
1535
1827
  const runtimeRequirements = new Set();
1536
1828
 
1537
- const { parsed } = /** @type {BuildInfo} */ (this.buildInfo);
1829
+ const { parsed } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1538
1830
 
1539
1831
  if (!parsed) {
1540
1832
  runtimeRequirements.add(RuntimeGlobals.module);
@@ -1590,12 +1882,14 @@ class NormalModule extends Module {
1590
1882
  const resultEntry = {
1591
1883
  sources,
1592
1884
  runtimeRequirements,
1593
- data: this._codeGeneratorData
1885
+ data: this._codeGeneratorData,
1886
+ hash: undefined
1594
1887
  };
1595
1888
  return resultEntry;
1596
1889
  }
1597
1890
 
1598
1891
  /**
1892
+ * Gets the original source.
1599
1893
  * @returns {Source | null} the original source for the module before webpack transformation
1600
1894
  */
1601
1895
  originalSource() {
@@ -1603,6 +1897,7 @@ class NormalModule extends Module {
1603
1897
  }
1604
1898
 
1605
1899
  /**
1900
+ * Invalidates the cached state associated with this value.
1606
1901
  * @returns {void}
1607
1902
  */
1608
1903
  invalidateBuild() {
@@ -1610,6 +1905,7 @@ class NormalModule extends Module {
1610
1905
  }
1611
1906
 
1612
1907
  /**
1908
+ * Checks whether the module needs to be rebuilt for the current build state.
1613
1909
  * @param {NeedBuildContext} context context info
1614
1910
  * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
1615
1911
  * @returns {void}
@@ -1623,7 +1919,7 @@ class NormalModule extends Module {
1623
1919
  if (this.error) return callback(null, true);
1624
1920
 
1625
1921
  const { cacheable, snapshot, valueDependencies } =
1626
- /** @type {BuildInfo} */ (this.buildInfo);
1922
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1627
1923
 
1628
1924
  // always build when module is not cacheable
1629
1925
  if (!cacheable) return callback(null, true);
@@ -1669,6 +1965,7 @@ class NormalModule extends Module {
1669
1965
  }
1670
1966
 
1671
1967
  /**
1968
+ * Returns the estimated size for the requested source type.
1672
1969
  * @param {string=} type the source type for which the size should be estimated
1673
1970
  * @returns {number} the estimated size of the module (must be non-zero)
1674
1971
  */
@@ -1690,6 +1987,7 @@ class NormalModule extends Module {
1690
1987
  }
1691
1988
 
1692
1989
  /**
1990
+ * Adds the provided file dependencies to the module.
1693
1991
  * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
1694
1992
  * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
1695
1993
  * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
@@ -1702,7 +2000,7 @@ class NormalModule extends Module {
1702
2000
  buildDependencies
1703
2001
  ) {
1704
2002
  const { snapshot, buildDependencies: buildDeps } =
1705
- /** @type {BuildInfo} */ (this.buildInfo);
2003
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1706
2004
  if (snapshot) {
1707
2005
  fileDependencies.addAll(snapshot.getFileIterable());
1708
2006
  contextDependencies.addAll(snapshot.getContextIterable());
@@ -1712,7 +2010,7 @@ class NormalModule extends Module {
1712
2010
  fileDependencies: fileDeps,
1713
2011
  contextDependencies: contextDeps,
1714
2012
  missingDependencies: missingDeps
1715
- } = /** @type {BuildInfo} */ (this.buildInfo);
2013
+ } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1716
2014
  if (fileDeps !== undefined) fileDependencies.addAll(fileDeps);
1717
2015
  if (contextDeps !== undefined) contextDependencies.addAll(contextDeps);
1718
2016
  if (missingDeps !== undefined) missingDependencies.addAll(missingDeps);
@@ -1723,16 +2021,26 @@ class NormalModule extends Module {
1723
2021
  }
1724
2022
 
1725
2023
  /**
2024
+ * Updates the hash with the data contributed by this instance.
1726
2025
  * @param {Hash} hash the hash used to track dependencies
1727
2026
  * @param {UpdateHashContext} context context
1728
2027
  * @returns {void}
1729
2028
  */
1730
2029
  updateHash(hash, context) {
1731
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
2030
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1732
2031
  hash.update(
1733
2032
  /** @type {string} */
1734
2033
  (buildInfo.hash)
1735
2034
  );
2035
+ // Clear cached source types and re-compute so that changes in incoming
2036
+ // connections (e.g. asset module newly referenced from JS via lazy
2037
+ // compilation) are reflected in the hash and trigger code generation
2038
+ // cache invalidation.
2039
+ // https://github.com/webpack/webpack/issues/20800
2040
+ this._sourceTypes = undefined;
2041
+ for (const type of this.getSourceTypes()) {
2042
+ hash.update(type);
2043
+ }
1736
2044
  /** @type {Generator} */
1737
2045
  (this.generator).updateHash(hash, {
1738
2046
  module: this,
@@ -1742,6 +2050,7 @@ class NormalModule extends Module {
1742
2050
  }
1743
2051
 
1744
2052
  /**
2053
+ * Serializes this instance into the provided serializer context.
1745
2054
  * @param {ObjectSerializerContext} context context
1746
2055
  */
1747
2056
  serialize(context) {
@@ -1752,6 +2061,7 @@ class NormalModule extends Module {
1752
2061
  write(this._lastSuccessfulBuildMeta);
1753
2062
  write(this._forceBuild);
1754
2063
  write(this._codeGeneratorData);
2064
+ write(this.hot);
1755
2065
  super.serialize(context);
1756
2066
  }
1757
2067
 
@@ -1760,7 +2070,8 @@ class NormalModule extends Module {
1760
2070
  * @returns {NormalModule} module
1761
2071
  */
1762
2072
  static deserialize(context) {
1763
- const obj = new NormalModule({
2073
+ // `new this` so subclasses without extra constructor options inherit this method
2074
+ const obj = new this({
1764
2075
  // will be deserialized by Module
1765
2076
  layer: /** @type {EXPECTED_ANY} */ (null),
1766
2077
  type: "",
@@ -1784,6 +2095,7 @@ class NormalModule extends Module {
1784
2095
  }
1785
2096
 
1786
2097
  /**
2098
+ * Restores this instance from the provided deserializer context.
1787
2099
  * @param {ObjectDeserializerContext} context context
1788
2100
  */
1789
2101
  deserialize(context) {
@@ -1793,6 +2105,7 @@ class NormalModule extends Module {
1793
2105
  this._lastSuccessfulBuildMeta = read();
1794
2106
  this._forceBuild = read();
1795
2107
  this._codeGeneratorData = read();
2108
+ this.hot = read();
1796
2109
  super.deserialize(context);
1797
2110
  }
1798
2111
  }