@depup/webpack 5.106.0-depup.0 → 5.109.0-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 (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /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
55
  makePathsRelative
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
@@ -207,24 +462,6 @@ const asBuffer = (input) => {
207
462
  return input;
208
463
  };
209
464
 
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
465
  /** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]} Result */
229
466
 
230
467
  /** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
@@ -247,9 +484,10 @@ makeSerializable(
247
484
  */
248
485
 
249
486
  /**
487
+ * @template {NormalModuleTypes | ""} [T=NormalModuleTypes | ""]
250
488
  * @typedef {object} NormalModuleCreateData
251
489
  * @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 "".
490
+ * @property {T} type module type. When deserializing, this is set to an empty string "".
253
491
  * @property {string} request request string
254
492
  * @property {string} userRequest request intended by user (without loaders from config)
255
493
  * @property {string} rawRequest request without resolving
@@ -258,10 +496,10 @@ makeSerializable(
258
496
  * @property {(ResourceSchemeData & Partial<ResolveRequest>)=} resourceResolveData resource resolve data
259
497
  * @property {string} context context directory for resolving
260
498
  * @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
499
+ * @property {ParserByType[T]} parser the parser used
500
+ * @property {ParserOptionsByType[T]=} parserOptions the options of the parser used
501
+ * @property {GeneratorByType[T]} generator the generator used
502
+ * @property {GeneratorOptionsByType[T]=} generatorOptions the options of the generator used
265
503
  * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
266
504
  * @property {boolean} extractSourceMap enable/disable extracting source map
267
505
  */
@@ -270,8 +508,68 @@ makeSerializable(
270
508
  * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
271
509
  */
272
510
 
273
- /** @type {WeakMap<Compilation, NormalModuleCompilationHooks>} */
274
- const compilationHooksMap = new WeakMap();
511
+ /**
512
+ * Defines the build info properties of normal modules (filesystem-backed, loader-processed).
513
+ * @typedef {object} KnownNormalModuleBuildInfo
514
+ * @property {boolean=} parsed
515
+ * @property {string=} hash
516
+ * @property {FileSystemDependencies=} fileDependencies
517
+ * @property {FileSystemDependencies=} contextDependencies
518
+ * @property {FileSystemDependencies=} missingDependencies
519
+ * @property {FileSystemDependencies=} buildDependencies
520
+ * @property {ValueCacheVersions=} valueDependencies
521
+ * @property {(Snapshot | null)=} snapshot
522
+ * @property {string=} resourceIntegrity using in HttpUriPlugin
523
+ */
524
+
525
+ /** @typedef {BuildInfo & KnownNormalModuleBuildInfo} NormalModuleBuildInfo */
526
+
527
+ const normalModuleHooksRegistry = createHooksRegistry(() => {
528
+ // TODO webpack 6 deprecate
529
+ /** @type {Partial<NormalModuleCompilationHooks>} */
530
+ const hooks = {};
531
+ hooks.readResourceForScheme = new HookMap((scheme) => {
532
+ const hook =
533
+ /** @type {NormalModuleCompilationHooks} */
534
+ (hooks).readResource.for(scheme);
535
+ return createFakeHook(
536
+ /** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
537
+ tap: (options, fn) =>
538
+ hook.tap(options, (loaderContext) =>
539
+ fn(
540
+ loaderContext.resource,
541
+ /** @type {NormalModule} */ (loaderContext._module)
542
+ )
543
+ ),
544
+ tapAsync: (options, fn) =>
545
+ hook.tapAsync(options, (loaderContext, callback) =>
546
+ fn(
547
+ loaderContext.resource,
548
+ /** @type {NormalModule} */ (loaderContext._module),
549
+ callback
550
+ )
551
+ ),
552
+ tapPromise: (options, fn) =>
553
+ hook.tapPromise(options, (loaderContext) =>
554
+ fn(
555
+ loaderContext.resource,
556
+ /** @type {NormalModule} */ (loaderContext._module)
557
+ )
558
+ )
559
+ })
560
+ );
561
+ });
562
+ hooks.readResource = new HookMap(
563
+ () => new AsyncSeriesBailHook(["loaderContext"])
564
+ );
565
+ hooks.loader = new SyncHook(["loaderContext", "module"]);
566
+ hooks.beforeLoaders = new SyncHook(["loaders", "module", "loaderContext"]);
567
+ hooks.beforeParse = new SyncHook(["module"]);
568
+ hooks.beforeSnapshot = new SyncHook(["module"]);
569
+ hooks.processResult = new SyncWaterfallHook(["result", "module"]);
570
+ hooks.needBuild = new AsyncSeriesBailHook(["module", "context"]);
571
+ return /** @type {NormalModuleCompilationHooks} */ (hooks);
572
+ });
275
573
 
276
574
  class NormalModule extends Module {
277
575
  /**
@@ -279,62 +577,7 @@ class NormalModule extends Module {
279
577
  * @returns {NormalModuleCompilationHooks} the attached hooks
280
578
  */
281
579
  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);
580
+ return normalModuleHooksRegistry(compilation);
338
581
  }
339
582
 
340
583
  /**
@@ -393,8 +636,15 @@ class NormalModule extends Module {
393
636
  /** @type {NormalModuleCreateData['extractSourceMap']} */
394
637
  this.extractSourceMap = extractSourceMap;
395
638
 
639
+ // Set by HotModuleReplacementPlugin via NormalModuleFactory's `module` hook
640
+ /** @type {boolean} */
641
+ this.hot = false;
642
+
396
643
  // Info from Build
397
- /** @type {WebpackError | null} */
644
+ // Redeclared with the normal module specific shape (see KnownNormalModuleBuildInfo)
645
+ /** @type {NormalModuleBuildInfo | undefined} */
646
+ this.buildInfo = undefined;
647
+ /** @type {Error | null} */
398
648
  this.error = null;
399
649
  /**
400
650
  * @private
@@ -423,15 +673,25 @@ class NormalModule extends Module {
423
673
  */
424
674
  this._forceBuild = true;
425
675
  /**
426
- * @private
427
676
  * @type {boolean}
428
677
  */
429
678
  this._isEvaluatingSideEffects = false;
430
679
  /**
431
- * @private
432
680
  * @type {WeakSet<ModuleGraph> | undefined}
433
681
  */
434
682
  this._addedSideEffectsBailout = undefined;
683
+ /**
684
+ * Memoizes the result of `getSideEffectsConnectionState`. The
685
+ * graph slot keys the cached value to the `ModuleGraph` it was
686
+ * computed against so stale values never leak across compilations
687
+ * — a walk that targets a different graph just overwrites both
688
+ * slots. Populated only for context-independent results (cycle-free
689
+ * or SCC-root modules; see `walkSideEffects`).
690
+ * @type {ModuleGraph | undefined}
691
+ */
692
+ this._sideEffectsStateGraph = undefined;
693
+ /** @type {ConnectionState | undefined} */
694
+ this._sideEffectsStateValue = undefined;
435
695
  /**
436
696
  * @private
437
697
  * @type {CodeGenerationResultData}
@@ -440,6 +700,7 @@ class NormalModule extends Module {
440
700
  }
441
701
 
442
702
  /**
703
+ * Returns the unique identifier used to reference this module.
443
704
  * @returns {string} a unique identifier of the module
444
705
  */
445
706
  identifier() {
@@ -453,6 +714,7 @@ class NormalModule extends Module {
453
714
  }
454
715
 
455
716
  /**
717
+ * Returns a human-readable identifier for this module.
456
718
  * @param {RequestShortener} requestShortener the request shortener
457
719
  * @returns {string} a user readable identifier of the module
458
720
  */
@@ -468,6 +730,7 @@ class NormalModule extends Module {
468
730
  }
469
731
 
470
732
  /**
733
+ * Gets the library identifier.
471
734
  * @param {LibIdentOptions} options options
472
735
  * @returns {LibIdent | null} an identifier for library inclusion
473
736
  */
@@ -482,6 +745,7 @@ class NormalModule extends Module {
482
745
  }
483
746
 
484
747
  /**
748
+ * Returns the path used when matching this module against rule conditions.
485
749
  * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
486
750
  */
487
751
  nameForCondition() {
@@ -535,6 +799,11 @@ class NormalModule extends Module {
535
799
  this.parserOptions = undefined;
536
800
  this.generator = undefined;
537
801
  this.generatorOptions = undefined;
802
+ // Drop the side-effects memoization so a long-lived module doesn't
803
+ // strong-reference a stale `ModuleGraph`/`Compilation` for graphs
804
+ // that never get re-queried with a fresh one.
805
+ this._sideEffectsStateGraph = undefined;
806
+ this._sideEffectsStateValue = undefined;
538
807
  }
539
808
 
540
809
  /**
@@ -707,11 +976,8 @@ class NormalModule extends Module {
707
976
  /** @type {NormalModuleLoaderContext<T>} */
708
977
  const loaderContext = {
709
978
  version: 2,
710
- /**
711
- * @param {import("../declarations/LoaderContext").Schema=} schema schema
712
- * @returns {T} options
713
- */
714
- getOptions: (schema) => {
979
+ /** @type {LoaderContext<EXPECTED_ANY>["getOptions"]} */
980
+ getOptions: (/** @type {EXPECTED_ANY} */ schema = undefined) => {
715
981
  const loader = this.getCurrentLoader(
716
982
  /** @type {AnyLoaderContext} */
717
983
  (loaderContext)
@@ -722,7 +988,9 @@ class NormalModule extends Module {
722
988
  if (typeof options === "string") {
723
989
  if (options.startsWith("{") && options.endsWith("}")) {
724
990
  try {
725
- options = parseJson(options);
991
+ options =
992
+ /** @type {LoaderItem["options"]} */
993
+ (parseJson(options));
726
994
  } catch (err) {
727
995
  throw new Error(
728
996
  `Cannot parse string options: ${/** @type {Error} */ (err).message}`,
@@ -756,6 +1024,7 @@ class NormalModule extends Module {
756
1024
 
757
1025
  return /** @type {T} */ (options);
758
1026
  },
1027
+ /** @type {LoaderContext<EXPECTED_ANY>["emitWarning"]} */
759
1028
  emitWarning: (warning) => {
760
1029
  if (!(warning instanceof Error)) {
761
1030
  warning = new NonErrorEmittedError(warning);
@@ -766,6 +1035,7 @@ class NormalModule extends Module {
766
1035
  })
767
1036
  );
768
1037
  },
1038
+ /** @type {LoaderContext<EXPECTED_ANY>["emitError"]} */
769
1039
  emitError: (error) => {
770
1040
  if (!(error instanceof Error)) {
771
1041
  error = new NonErrorEmittedError(error);
@@ -776,6 +1046,7 @@ class NormalModule extends Module {
776
1046
  })
777
1047
  );
778
1048
  },
1049
+ /** @type {LoaderContext<EXPECTED_ANY>["getLogger"]} */
779
1050
  getLogger: (name) => {
780
1051
  const currentLoader = this.getCurrentLoader(
781
1052
  /** @type {AnyLoaderContext} */
@@ -787,9 +1058,11 @@ class NormalModule extends Module {
787
1058
  .join("|")
788
1059
  );
789
1060
  },
1061
+ /** @type {LoaderContext<EXPECTED_ANY>["resolve"]} */
790
1062
  resolve(context, request, callback) {
791
1063
  resolver.resolve({}, context, request, getResolveContext(), callback);
792
1064
  },
1065
+ /** @type {LoaderContext<EXPECTED_ANY>["getResolve"]} */
793
1066
  getResolve(options) {
794
1067
  const child = options ? resolver.withOptions(options) : resolver;
795
1068
  return /** @type {ReturnType<import("../declarations/LoaderContext").NormalModuleLoaderContext<T>["getResolve"]>} */ (
@@ -819,8 +1092,9 @@ class NormalModule extends Module {
819
1092
  }
820
1093
  );
821
1094
  },
1095
+ /** @type {LoaderContext<EXPECTED_ANY>["emitFile"]} */
822
1096
  emitFile: (name, content, sourceMap, assetInfo) => {
823
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1097
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
824
1098
 
825
1099
  if (!buildInfo.assets) {
826
1100
  buildInfo.assets = Object.create(null);
@@ -844,7 +1118,7 @@ class NormalModule extends Module {
844
1118
  assetsInfo.set(name, assetInfo);
845
1119
  },
846
1120
  addBuildDependency: (dep) => {
847
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1121
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
848
1122
 
849
1123
  if (buildInfo.buildDependencies === undefined) {
850
1124
  buildInfo.buildDependencies = new LazySet();
@@ -867,6 +1141,7 @@ class NormalModule extends Module {
867
1141
  };
868
1142
 
869
1143
  Object.assign(loaderContext, options.loader);
1144
+ createLoaderContext(loaderContext);
870
1145
 
871
1146
  hooks.loader.call(
872
1147
  /** @type {AnyLoaderContext} */
@@ -1017,7 +1292,7 @@ class NormalModule extends Module {
1017
1292
  return callback();
1018
1293
  };
1019
1294
 
1020
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1295
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1021
1296
 
1022
1297
  buildInfo.fileDependencies = new LazySet();
1023
1298
  buildInfo.contextDependencies = new LazySet();
@@ -1037,7 +1312,7 @@ class NormalModule extends Module {
1037
1312
  }
1038
1313
 
1039
1314
  if (this.loaders.length > 0) {
1040
- /** @type {BuildInfo} */
1315
+ /** @type {NormalModuleBuildInfo} */
1041
1316
  (this.buildInfo).buildDependencies = new LazySet();
1042
1317
  }
1043
1318
 
@@ -1133,7 +1408,7 @@ class NormalModule extends Module {
1133
1408
  (undefined);
1134
1409
 
1135
1410
  if (!result) {
1136
- /** @type {BuildInfo} */
1411
+ /** @type {NormalModuleBuildInfo} */
1137
1412
  (this.buildInfo).cacheable = false;
1138
1413
  return processResult(
1139
1414
  err || new Error("No result from loader-runner processing"),
@@ -1141,16 +1416,16 @@ class NormalModule extends Module {
1141
1416
  );
1142
1417
  }
1143
1418
 
1144
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1419
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1145
1420
 
1146
1421
  const fileDependencies =
1147
- /** @type {NonNullable<KnownBuildInfo["fileDependencies"]>} */
1422
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1148
1423
  (buildInfo.fileDependencies);
1149
1424
  const contextDependencies =
1150
- /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1425
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1151
1426
  (buildInfo.contextDependencies);
1152
1427
  const missingDependencies =
1153
- /** @type {NonNullable<KnownBuildInfo["missingDependencies"]>} */
1428
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1154
1429
  (buildInfo.missingDependencies);
1155
1430
 
1156
1431
  fileDependencies.addAll(result.fileDependencies);
@@ -1158,19 +1433,22 @@ class NormalModule extends Module {
1158
1433
  missingDependencies.addAll(result.missingDependencies);
1159
1434
  for (const loader of this.loaders) {
1160
1435
  const buildDependencies =
1161
- /** @type {NonNullable<KnownBuildInfo["buildDependencies"]>} */
1436
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["buildDependencies"]>} */
1162
1437
  (buildInfo.buildDependencies);
1163
1438
 
1164
1439
  buildDependencies.add(loader.loader);
1165
1440
  }
1166
1441
  buildInfo.cacheable = buildInfo.cacheable && result.cacheable;
1442
+ if (result.notCacheableReasons.length > 0) {
1443
+ buildInfo.notCacheableReasons = result.notCacheableReasons;
1444
+ }
1167
1445
  processResult(err, result.result);
1168
1446
  }
1169
1447
  );
1170
1448
  }
1171
1449
 
1172
1450
  /**
1173
- * @param {WebpackError} error the error
1451
+ * @param {Error} error the error
1174
1452
  * @returns {void}
1175
1453
  */
1176
1454
  markModuleAsErrored(error) {
@@ -1240,11 +1518,12 @@ class NormalModule extends Module {
1240
1518
  }
1241
1519
  hash.update("meta");
1242
1520
  hash.update(JSON.stringify(this.buildMeta));
1243
- /** @type {BuildInfo} */
1521
+ /** @type {NormalModuleBuildInfo} */
1244
1522
  (this.buildInfo).hash = hash.digest("hex");
1245
1523
  }
1246
1524
 
1247
1525
  /**
1526
+ * Builds the module using the provided compilation context.
1248
1527
  * @param {WebpackOptions} options webpack options
1249
1528
  * @param {Compilation} compilation the compilation
1250
1529
  * @param {ResolverWithOptions} resolver the resolver
@@ -1261,9 +1540,15 @@ class NormalModule extends Module {
1261
1540
  this.error = null;
1262
1541
  this.clearWarningsAndErrors();
1263
1542
  this.clearDependenciesAndBlocks();
1264
- this.buildMeta = {};
1543
+ this.buildMeta = {
1544
+ exportsType: undefined,
1545
+ defaultObject: undefined,
1546
+ strictHarmonyModule: undefined,
1547
+ async: undefined
1548
+ };
1265
1549
  this.buildInfo = {
1266
1550
  cacheable: false,
1551
+ notCacheableReasons: undefined,
1267
1552
  parsed: true,
1268
1553
  fileDependencies: undefined,
1269
1554
  contextDependencies: undefined,
@@ -1272,7 +1557,16 @@ class NormalModule extends Module {
1272
1557
  valueDependencies: undefined,
1273
1558
  hash: undefined,
1274
1559
  assets: undefined,
1275
- assetsInfo: undefined
1560
+ assetsInfo: undefined,
1561
+ snapshot: undefined,
1562
+ strict: undefined,
1563
+ exportsArgument: undefined,
1564
+ moduleArgument: undefined,
1565
+ topLevelDeclarations: undefined,
1566
+ pureFunctions: undefined,
1567
+ inlineExports: undefined,
1568
+ moduleConcatenationBailout: undefined,
1569
+ needCreateRequire: undefined
1276
1570
  };
1277
1571
 
1278
1572
  const startTime = compilation.compiler.fsStartTime || Date.now();
@@ -1305,7 +1599,7 @@ class NormalModule extends Module {
1305
1599
  const handleParseResult = () => {
1306
1600
  this.dependencies.sort(
1307
1601
  concatComparators(
1308
- compareSelect((a) => a.loc, compareLocations),
1602
+ Dependency.compareLocations,
1309
1603
  keepOriginalOrder(this.dependencies)
1310
1604
  )
1311
1605
  );
@@ -1321,12 +1615,14 @@ class NormalModule extends Module {
1321
1615
  try {
1322
1616
  hooks.beforeSnapshot.call(this);
1323
1617
  } catch (err) {
1324
- this.markModuleAsErrored(/** @type {WebpackError} */ (err));
1618
+ this.markModuleAsErrored(/** @type {Error} */ (err));
1325
1619
  return callback();
1326
1620
  }
1327
1621
 
1328
1622
  const snapshotOptions = compilation.options.snapshot.module;
1329
- const { cacheable } = /** @type {BuildInfo} */ (this.buildInfo);
1623
+ const { cacheable } = /** @type {NormalModuleBuildInfo} */ (
1624
+ this.buildInfo
1625
+ );
1330
1626
  if (!cacheable || !snapshotOptions) {
1331
1627
  return callback();
1332
1628
  }
@@ -1339,7 +1635,7 @@ class NormalModule extends Module {
1339
1635
  */
1340
1636
  const checkDependencies = (deps) => {
1341
1637
  for (const dep of deps) {
1342
- if (!ABSOLUTE_PATH_REGEX.test(dep)) {
1638
+ if (!ABSOLUTE_PATH_REGEXP.test(dep)) {
1343
1639
  if (nonAbsoluteDependencies === undefined) {
1344
1640
  nonAbsoluteDependencies = new Set();
1345
1641
  }
@@ -1353,11 +1649,11 @@ class NormalModule extends Module {
1353
1649
  (this.context),
1354
1650
  depWithoutGlob
1355
1651
  );
1356
- if (absolute !== dep && ABSOLUTE_PATH_REGEX.test(absolute)) {
1652
+ if (absolute !== dep && ABSOLUTE_PATH_REGEXP.test(absolute)) {
1357
1653
  (depWithoutGlob !== dep
1358
- ? /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1654
+ ? /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1359
1655
  (
1360
- /** @type {BuildInfo} */
1656
+ /** @type {NormalModuleBuildInfo} */
1361
1657
  (this.buildInfo).contextDependencies
1362
1658
  )
1363
1659
  : deps
@@ -1369,15 +1665,15 @@ class NormalModule extends Module {
1369
1665
  }
1370
1666
  }
1371
1667
  };
1372
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1668
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1373
1669
  const fileDependencies =
1374
- /** @type {NonNullable<KnownBuildInfo["fileDependencies"]>} */
1670
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1375
1671
  (buildInfo.fileDependencies);
1376
1672
  const contextDependencies =
1377
- /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1673
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1378
1674
  (buildInfo.contextDependencies);
1379
1675
  const missingDependencies =
1380
- /** @type {NonNullable<KnownBuildInfo["missingDependencies"]>} */
1676
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1381
1677
  (buildInfo.missingDependencies);
1382
1678
  checkDependencies(fileDependencies);
1383
1679
  checkDependencies(missingDependencies);
@@ -1413,7 +1709,7 @@ class NormalModule extends Module {
1413
1709
  try {
1414
1710
  hooks.beforeParse.call(this);
1415
1711
  } catch (err) {
1416
- this.markModuleAsErrored(/** @type {WebpackError} */ (err));
1712
+ this.markModuleAsErrored(/** @type {Error} */ (err));
1417
1713
  this._initBuildHash(compilation);
1418
1714
  return callback();
1419
1715
  }
@@ -1423,7 +1719,7 @@ class NormalModule extends Module {
1423
1719
  const noParseRule = options.module && options.module.noParse;
1424
1720
  if (this.shouldPreventParsing(noParseRule, this.request)) {
1425
1721
  // We assume that we need module and exports
1426
- /** @type {BuildInfo} */
1722
+ /** @type {NormalModuleBuildInfo} */
1427
1723
  (this.buildInfo).parsed = false;
1428
1724
  this._initBuildHash(compilation);
1429
1725
  return handleBuildDone();
@@ -1437,7 +1733,11 @@ class NormalModule extends Module {
1437
1733
  current: this,
1438
1734
  module: this,
1439
1735
  compilation,
1440
- options
1736
+ options,
1737
+ harmonyNamedExports: undefined,
1738
+ harmonyStarExports: undefined,
1739
+ lastHarmonyImportOrder: undefined,
1740
+ localModules: undefined
1441
1741
  });
1442
1742
  } catch (parseErr) {
1443
1743
  handleParseError(/** @type {Error} */ (parseErr));
@@ -1448,6 +1748,7 @@ class NormalModule extends Module {
1448
1748
  }
1449
1749
 
1450
1750
  /**
1751
+ * Returns the reason this module cannot be concatenated, when one exists.
1451
1752
  * @param {ConcatenationBailoutReasonContext} context context
1452
1753
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
1453
1754
  */
@@ -1458,54 +1759,23 @@ class NormalModule extends Module {
1458
1759
  }
1459
1760
 
1460
1761
  /**
1762
+ * Gets side effects connection state.
1461
1763
  * @param {ModuleGraph} moduleGraph the module graph
1462
1764
  * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
1463
1765
  */
1464
1766
  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;
1767
+ // Each call owns its Tarjan bookkeeping; re-entrant calls (e.g.
1768
+ // `ConcatenatedModule.getSideEffectsConnectionState` delegating back
1769
+ // through here) can't clobber the outer walk.
1770
+ return walkSideEffects(
1771
+ this,
1772
+ moduleGraph,
1773
+ getHarmonyImportSideEffectDependency()
1774
+ );
1506
1775
  }
1507
1776
 
1508
1777
  /**
1778
+ * Returns the source types this module can generate.
1509
1779
  * @returns {SourceTypes} types available (do not mutate)
1510
1780
  */
1511
1781
  getSourceTypes() {
@@ -1518,6 +1788,19 @@ class NormalModule extends Module {
1518
1788
  }
1519
1789
 
1520
1790
  /**
1791
+ * Freshly recomputed source types when they depend on incoming connections, for chunk-graph cache invalidation; undefined otherwise. #20800
1792
+ * @returns {SourceTypes | undefined} source types or undefined
1793
+ */
1794
+ getReferencedSourceTypes() {
1795
+ const generator = /** @type {Generator} */ (this.generator);
1796
+ // Bypass the _sourceTypes cache: it may be stale when the module is not rebuilt.
1797
+ return generator.getTypesDependOnIncomingConnections()
1798
+ ? generator.getTypes(this)
1799
+ : undefined;
1800
+ }
1801
+
1802
+ /**
1803
+ * Generates code and runtime requirements for this module.
1521
1804
  * @param {CodeGenerationContext} context context for code generation
1522
1805
  * @returns {CodeGenerationResult} result
1523
1806
  */
@@ -1534,7 +1817,7 @@ class NormalModule extends Module {
1534
1817
  /** @type {RuntimeRequirements} */
1535
1818
  const runtimeRequirements = new Set();
1536
1819
 
1537
- const { parsed } = /** @type {BuildInfo} */ (this.buildInfo);
1820
+ const { parsed } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1538
1821
 
1539
1822
  if (!parsed) {
1540
1823
  runtimeRequirements.add(RuntimeGlobals.module);
@@ -1590,12 +1873,14 @@ class NormalModule extends Module {
1590
1873
  const resultEntry = {
1591
1874
  sources,
1592
1875
  runtimeRequirements,
1593
- data: this._codeGeneratorData
1876
+ data: this._codeGeneratorData,
1877
+ hash: undefined
1594
1878
  };
1595
1879
  return resultEntry;
1596
1880
  }
1597
1881
 
1598
1882
  /**
1883
+ * Gets the original source.
1599
1884
  * @returns {Source | null} the original source for the module before webpack transformation
1600
1885
  */
1601
1886
  originalSource() {
@@ -1603,6 +1888,7 @@ class NormalModule extends Module {
1603
1888
  }
1604
1889
 
1605
1890
  /**
1891
+ * Invalidates the cached state associated with this value.
1606
1892
  * @returns {void}
1607
1893
  */
1608
1894
  invalidateBuild() {
@@ -1610,6 +1896,7 @@ class NormalModule extends Module {
1610
1896
  }
1611
1897
 
1612
1898
  /**
1899
+ * Checks whether the module needs to be rebuilt for the current build state.
1613
1900
  * @param {NeedBuildContext} context context info
1614
1901
  * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
1615
1902
  * @returns {void}
@@ -1623,7 +1910,7 @@ class NormalModule extends Module {
1623
1910
  if (this.error) return callback(null, true);
1624
1911
 
1625
1912
  const { cacheable, snapshot, valueDependencies } =
1626
- /** @type {BuildInfo} */ (this.buildInfo);
1913
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1627
1914
 
1628
1915
  // always build when module is not cacheable
1629
1916
  if (!cacheable) return callback(null, true);
@@ -1669,6 +1956,7 @@ class NormalModule extends Module {
1669
1956
  }
1670
1957
 
1671
1958
  /**
1959
+ * Returns the estimated size for the requested source type.
1672
1960
  * @param {string=} type the source type for which the size should be estimated
1673
1961
  * @returns {number} the estimated size of the module (must be non-zero)
1674
1962
  */
@@ -1690,6 +1978,7 @@ class NormalModule extends Module {
1690
1978
  }
1691
1979
 
1692
1980
  /**
1981
+ * Adds the provided file dependencies to the module.
1693
1982
  * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
1694
1983
  * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
1695
1984
  * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
@@ -1702,7 +1991,7 @@ class NormalModule extends Module {
1702
1991
  buildDependencies
1703
1992
  ) {
1704
1993
  const { snapshot, buildDependencies: buildDeps } =
1705
- /** @type {BuildInfo} */ (this.buildInfo);
1994
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1706
1995
  if (snapshot) {
1707
1996
  fileDependencies.addAll(snapshot.getFileIterable());
1708
1997
  contextDependencies.addAll(snapshot.getContextIterable());
@@ -1712,7 +2001,7 @@ class NormalModule extends Module {
1712
2001
  fileDependencies: fileDeps,
1713
2002
  contextDependencies: contextDeps,
1714
2003
  missingDependencies: missingDeps
1715
- } = /** @type {BuildInfo} */ (this.buildInfo);
2004
+ } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1716
2005
  if (fileDeps !== undefined) fileDependencies.addAll(fileDeps);
1717
2006
  if (contextDeps !== undefined) contextDependencies.addAll(contextDeps);
1718
2007
  if (missingDeps !== undefined) missingDependencies.addAll(missingDeps);
@@ -1723,16 +2012,26 @@ class NormalModule extends Module {
1723
2012
  }
1724
2013
 
1725
2014
  /**
2015
+ * Updates the hash with the data contributed by this instance.
1726
2016
  * @param {Hash} hash the hash used to track dependencies
1727
2017
  * @param {UpdateHashContext} context context
1728
2018
  * @returns {void}
1729
2019
  */
1730
2020
  updateHash(hash, context) {
1731
- const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
2021
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1732
2022
  hash.update(
1733
2023
  /** @type {string} */
1734
2024
  (buildInfo.hash)
1735
2025
  );
2026
+ // Clear cached source types and re-compute so that changes in incoming
2027
+ // connections (e.g. asset module newly referenced from JS via lazy
2028
+ // compilation) are reflected in the hash and trigger code generation
2029
+ // cache invalidation.
2030
+ // https://github.com/webpack/webpack/issues/20800
2031
+ this._sourceTypes = undefined;
2032
+ for (const type of this.getSourceTypes()) {
2033
+ hash.update(type);
2034
+ }
1736
2035
  /** @type {Generator} */
1737
2036
  (this.generator).updateHash(hash, {
1738
2037
  module: this,
@@ -1742,6 +2041,7 @@ class NormalModule extends Module {
1742
2041
  }
1743
2042
 
1744
2043
  /**
2044
+ * Serializes this instance into the provided serializer context.
1745
2045
  * @param {ObjectSerializerContext} context context
1746
2046
  */
1747
2047
  serialize(context) {
@@ -1752,6 +2052,7 @@ class NormalModule extends Module {
1752
2052
  write(this._lastSuccessfulBuildMeta);
1753
2053
  write(this._forceBuild);
1754
2054
  write(this._codeGeneratorData);
2055
+ write(this.hot);
1755
2056
  super.serialize(context);
1756
2057
  }
1757
2058
 
@@ -1760,7 +2061,8 @@ class NormalModule extends Module {
1760
2061
  * @returns {NormalModule} module
1761
2062
  */
1762
2063
  static deserialize(context) {
1763
- const obj = new NormalModule({
2064
+ // `new this` so subclasses without extra constructor options inherit this method
2065
+ const obj = new this({
1764
2066
  // will be deserialized by Module
1765
2067
  layer: /** @type {EXPECTED_ANY} */ (null),
1766
2068
  type: "",
@@ -1784,6 +2086,7 @@ class NormalModule extends Module {
1784
2086
  }
1785
2087
 
1786
2088
  /**
2089
+ * Restores this instance from the provided deserializer context.
1787
2090
  * @param {ObjectDeserializerContext} context context
1788
2091
  */
1789
2092
  deserialize(context) {
@@ -1793,6 +2096,7 @@ class NormalModule extends Module {
1793
2096
  this._lastSuccessfulBuildMeta = read();
1794
2097
  this._forceBuild = read();
1795
2098
  this._codeGeneratorData = read();
2099
+ this.hot = read();
1796
2100
  super.deserialize(context);
1797
2101
  }
1798
2102
  }