webpack 5.111.1 → 5.112.1

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 (793) hide show
  1. package/README.md +1 -1
  2. package/bin/webpack.js +13 -7
  3. package/lib/Chunk.js +3 -966
  4. package/lib/Compilation.js +373 -163
  5. package/lib/Compiler.js +31 -44
  6. package/lib/Dependency.js +3 -551
  7. package/lib/DependencyTemplate.js +3 -70
  8. package/lib/EntryPlugin.js +3 -68
  9. package/lib/Entrypoint.js +3 -121
  10. package/lib/ExternalsPlugin.js +3 -92
  11. package/lib/FileSystemInfo.js +3 -4629
  12. package/lib/InitFragment.js +3 -204
  13. package/lib/LibraryTemplatePlugin.js +3 -46
  14. package/lib/ModuleFilenameHelpers.js +3 -400
  15. package/lib/ModuleNotFoundError.js +2 -2
  16. package/lib/MultiCompiler.js +37 -8
  17. package/lib/NormalModule.js +3 -2242
  18. package/lib/NullFactory.js +3 -22
  19. package/lib/ProgressPlugin.js +3 -908
  20. package/lib/RawModule.js +3 -197
  21. package/lib/RequestShortener.js +3 -37
  22. package/lib/SingleEntryPlugin.js +1 -1
  23. package/lib/WebpackError.js +2 -2
  24. package/lib/asset/AssetBytesGenerator.js +21 -13
  25. package/lib/asset/AssetBytesParser.js +12 -10
  26. package/lib/asset/AssetGenerator.js +71 -69
  27. package/lib/asset/AssetModule.js +13 -2
  28. package/lib/asset/AssetModulesPlugin.js +10 -12
  29. package/lib/asset/AssetParser.js +10 -10
  30. package/lib/asset/AssetSourceGenerator.js +23 -15
  31. package/lib/asset/AssetSourceParser.js +12 -10
  32. package/lib/asset/RawDataUrlModule.js +17 -10
  33. package/lib/asset/WebManifestGenerator.js +17 -12
  34. package/lib/asset/WebManifestParser.js +8 -8
  35. package/lib/async-modules/AsyncModuleHelpers.js +12 -5
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  37. package/lib/async-modules/InferAsyncModulesPlugin.js +9 -3
  38. package/lib/async-modules/isGeneratorLowered.js +3 -3
  39. package/lib/bun/BunTargetPlugin.js +1 -1
  40. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  41. package/lib/{Cache.js → cache/Cache.js} +1 -1
  42. package/lib/{CacheFacade.js → cache/CacheFacade.js} +6 -6
  43. package/lib/cache/IdleFileCachePlugin.js +2 -2
  44. package/lib/cache/MemoryCachePlugin.js +2 -2
  45. package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
  46. package/lib/cache/PackFileCacheStrategy.js +13 -19
  47. package/lib/cache/ResolverCachePlugin.js +65 -11
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +209 -212
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +1 -1
  54. package/lib/{cli.js → config/cli.js} +14 -164
  55. package/lib/config/defaults.js +166 -59
  56. package/lib/config/getClaimedAssetTypes.js +22 -14
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +11 -1
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/context/ContextModule.js +37 -26
  76. package/lib/context/ContextModuleFactory.js +14 -11
  77. package/lib/context/ContextReplacementPlugin.js +6 -12
  78. package/lib/css/CssGenerator.js +78 -68
  79. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  80. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  81. package/lib/css/CssModule.js +37 -29
  82. package/lib/css/CssModulesPlugin.js +129 -45
  83. package/lib/css/CssParser.js +714 -322
  84. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  85. package/lib/{util → css}/conventions.js +1 -1
  86. package/lib/css/cssMinify.js +110 -37
  87. package/lib/css/data.js +6990 -5125
  88. package/lib/css/syntax-parser.js +20734 -0
  89. package/lib/css/syntax-printer.js +6092 -0
  90. package/lib/css/syntax.js +37 -18686
  91. package/lib/debug/ProfilingPlugin.js +106 -51
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -11
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +14 -11
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -36
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +9 -6
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +10 -11
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +7 -10
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +21 -17
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -99
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +25 -22
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +20 -20
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +146 -133
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
  188. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  189. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  190. package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
  191. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  192. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
  193. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
  194. package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
  195. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  196. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  197. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  200. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  201. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +52 -151
  202. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
  203. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
  204. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
  205. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  206. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  207. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  208. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  209. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +22 -25
  210. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  211. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  212. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  213. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  214. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  215. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +122 -103
  216. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  217. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  218. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  219. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  220. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
  221. package/lib/{url → dependencies/url}/URLParserPlugin.js +17 -19
  222. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  223. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  224. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  225. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  226. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +82 -53
  227. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
  228. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
  229. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  230. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  231. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  232. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  233. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +155 -27
  234. package/lib/{util → devtool}/generateDebugId.js +1 -1
  235. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  236. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  237. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  238. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  239. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  240. package/lib/dll/DelegatedModule.js +23 -21
  241. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  242. package/lib/dll/DelegatedPlugin.js +1 -1
  243. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  244. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  245. package/lib/dll/DllEntryPlugin.js +3 -3
  246. package/lib/dll/DllModule.js +14 -10
  247. package/lib/dll/DllModuleFactory.js +3 -3
  248. package/lib/dll/DllPlugin.js +18 -6
  249. package/lib/dll/DllReferencePlugin.js +103 -30
  250. package/lib/dll/LibManifestPlugin.js +9 -7
  251. package/lib/electron/ElectronTargetPlugin.js +2 -2
  252. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  253. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  254. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  255. package/lib/entry/EntryPlugin.js +75 -0
  256. package/lib/errors/AbstractMethodError.js +1 -1
  257. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  258. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  259. package/lib/errors/BuildCycleError.js +1 -1
  260. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  261. package/lib/errors/ChunkRenderError.js +1 -1
  262. package/lib/errors/CodeGenerationError.js +1 -1
  263. package/lib/errors/CommentCompilationWarning.js +1 -1
  264. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  265. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  266. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  267. package/lib/errors/DllManifestError.js +26 -0
  268. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  269. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  270. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  271. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  272. package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +9 -6
  273. package/lib/errors/ExternalStarReexportError.js +2 -2
  274. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  275. package/lib/errors/HookWebpackError.js +6 -5
  276. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  277. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  278. package/lib/errors/JSONParseError.js +4 -4
  279. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  280. package/lib/errors/ModuleBuildError.js +1 -1
  281. package/lib/errors/ModuleDependencyError.js +2 -2
  282. package/lib/errors/ModuleDependencyWarning.js +2 -2
  283. package/lib/errors/ModuleError.js +1 -1
  284. package/lib/errors/ModuleHashingError.js +1 -1
  285. package/lib/errors/ModuleNotFoundError.js +3 -3
  286. package/lib/errors/ModuleParseError.js +1 -1
  287. package/lib/errors/ModuleRestoreError.js +1 -1
  288. package/lib/errors/ModuleStoreError.js +1 -1
  289. package/lib/errors/ModuleWarning.js +1 -1
  290. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  291. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  292. package/lib/errors/NodeStuffInWebError.js +7 -2
  293. package/lib/errors/PathVariableError.js +31 -0
  294. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  295. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  296. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  297. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  298. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  299. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  300. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  301. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  302. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  303. package/lib/errors/WebpackError.js +13 -3
  304. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  305. package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
  306. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  307. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  308. package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
  309. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
  310. package/lib/externals/ExternalsPlugin.js +99 -0
  311. package/lib/fs/FileSystemInfo.js +4642 -0
  312. package/lib/{util → fs}/fs.js +22 -9
  313. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  314. package/lib/graph/Chunk.js +985 -0
  315. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +192 -80
  316. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  317. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  318. package/lib/graph/Dependency.js +634 -0
  319. package/lib/graph/Entrypoint.js +136 -0
  320. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
  321. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  322. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
  323. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  324. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
  325. package/lib/{util → graph}/findGraphRoots.js +15 -9
  326. package/lib/graph/isDependencyKind.js +23 -0
  327. package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
  328. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
  329. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  330. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
  331. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  332. package/lib/hmr/LazyCompilationPlugin.js +32 -28
  333. package/lib/html/HtmlGenerator.js +132 -60
  334. package/lib/html/HtmlModule.js +16 -2
  335. package/lib/html/HtmlModulesPlugin.js +184 -87
  336. package/lib/html/HtmlParser.js +511 -160
  337. package/lib/html/builtinEmbeddedRenderer.js +70 -25
  338. package/lib/html/data.js +44 -22
  339. package/lib/html/htmlMinify.js +114 -41
  340. package/lib/html/syntax-parser.js +15795 -0
  341. package/lib/html/syntax-printer.js +1033 -0
  342. package/lib/html/syntax.js +37 -13952
  343. package/lib/html/xmlMinify.js +70 -0
  344. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  345. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  346. package/lib/ids/HashedModuleIdsPlugin.js +32 -5
  347. package/lib/ids/IdHelpers.js +4 -4
  348. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  349. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  350. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  351. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  352. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  353. package/lib/{util → ids}/numberHash.js +1 -1
  354. package/lib/index.js +312 -105
  355. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
  356. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  357. package/lib/javascript/BasicEvaluatedExpression.js +9 -9
  358. package/lib/javascript/ChunkHelpers.js +64 -4
  359. package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
  360. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
  361. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
  362. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  363. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  364. package/lib/javascript/JavascriptGenerator.js +32 -27
  365. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
  366. package/lib/javascript/JavascriptModule.js +14 -3
  367. package/lib/javascript/JavascriptModulesPlugin.js +441 -214
  368. package/lib/javascript/JavascriptParser.js +318 -144
  369. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  370. package/lib/javascript/MergedEntryExports.js +196 -0
  371. package/lib/javascript/ScopeAnalyzer.js +3924 -13
  372. package/lib/javascript/StartupHelpers.js +6 -6
  373. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
  374. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  375. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  376. package/lib/javascript/data.js +533 -122
  377. package/lib/javascript/jsMinify.js +272 -0
  378. package/lib/javascript/regexp.js +67 -32
  379. package/lib/javascript/syntax-parser.js +19169 -0
  380. package/lib/javascript/syntax-printer-data.js +1099 -0
  381. package/lib/javascript/syntax-printer.js +53878 -0
  382. package/lib/javascript/syntax.js +20 -11274
  383. package/lib/json/JsonData.js +1 -1
  384. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  385. package/lib/json/JsonGenerator.js +24 -16
  386. package/lib/json/JsonModule.js +13 -2
  387. package/lib/json/JsonModulesPlugin.js +1 -1
  388. package/lib/json/JsonParser.js +11 -10
  389. package/lib/json/jsonMinify.js +69 -0
  390. package/lib/library/AbstractLibraryPlugin.js +28 -15
  391. package/lib/library/AmdLibraryPlugin.js +4 -4
  392. package/lib/library/AssignLibraryPlugin.js +28 -12
  393. package/lib/library/EnableLibraryPlugin.js +1 -1
  394. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  395. package/lib/library/JsonpLibraryPlugin.js +2 -2
  396. package/lib/library/LibraryTemplatePlugin.js +53 -0
  397. package/lib/library/ModuleLibraryPlugin.js +557 -187
  398. package/lib/library/SystemLibraryPlugin.js +6 -8
  399. package/lib/library/UmdLibraryPlugin.js +3 -4
  400. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  401. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  402. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  403. package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
  404. package/lib/loaders/LoaderRunner.js +94 -46
  405. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  406. package/lib/loaders/loadLoader.js +16 -10
  407. package/lib/logging/Logger.js +7 -9
  408. package/lib/logging/ProgressPlugin.js +957 -0
  409. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  410. package/lib/{Generator.js → module/Generator.js} +33 -23
  411. package/lib/{Module.js → module/Module.js} +121 -53
  412. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  413. package/lib/module/NormalModule.js +2350 -0
  414. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
  415. package/lib/module/NullFactory.js +29 -0
  416. package/lib/{Parser.js → module/Parser.js} +12 -5
  417. package/lib/module/RawModule.js +208 -0
  418. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  419. package/lib/{util → module}/extractSourceMap.js +71 -20
  420. package/lib/{util → module}/findCaseMismatch.js +4 -4
  421. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  422. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  423. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
  424. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  425. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  426. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  427. package/lib/node/NodeTargetPlugin.js +1 -1
  428. package/lib/node/NodeWatchFileSystem.js +58 -6
  429. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  430. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -19
  431. package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
  432. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  433. package/lib/node/nodeConsole.js +6 -7
  434. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  435. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  436. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
  437. package/lib/optimize/ConcatenatedModule.js +231 -220
  438. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  439. package/lib/optimize/ConstExportsPlugin.js +7 -7
  440. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  441. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  442. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +23 -28
  443. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
  444. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  445. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  446. package/lib/optimize/InlineExports.js +12 -7
  447. package/lib/optimize/InnerGraph.js +5 -13
  448. package/lib/optimize/InnerGraphPlugin.js +10 -10
  449. package/lib/optimize/LazyBarrels.js +620 -0
  450. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  451. package/lib/optimize/LimitChunkCountPlugin.js +16 -7
  452. package/lib/optimize/MangleExportsPlugin.js +5 -5
  453. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  454. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  455. package/lib/optimize/ModuleConcatenationPlugin.js +28 -22
  456. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  457. package/lib/optimize/RealContentHashPlugin.js +18 -13
  458. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  459. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  460. package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
  461. package/lib/optimize/SplitChunksPlugin.js +719 -174
  462. package/lib/{util → optimize}/TupleQueue.js +9 -9
  463. package/lib/optimize/chunkSetIntersections.js +437 -0
  464. package/lib/{util → optimize}/deterministicGrouping.js +17 -17
  465. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  466. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +69 -25
  467. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
  468. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  469. package/lib/output/SSRManifestPlugin.js +349 -0
  470. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  471. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  472. package/lib/performance/BroadContextsPlugin.js +4 -4
  473. package/lib/performance/CacheEffectivenessPlugin.js +2 -3
  474. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  475. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  476. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  477. package/lib/performance/DynamicExportsPlugin.js +2 -2
  478. package/lib/performance/EvalUsagePlugin.js +4 -6
  479. package/lib/performance/HotspotsPlugin.js +39 -14
  480. package/lib/performance/LargeModulesPlugin.js +2 -3
  481. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  482. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  483. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  484. package/lib/performance/PureAnnotationsPlugin.js +19 -13
  485. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  486. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  487. package/lib/performance/SizeLimitsPlugin.js +11 -12
  488. package/lib/performance/TopLevelThisPlugin.js +22 -13
  489. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  490. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  491. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  492. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  493. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  494. package/lib/performance/UnusedFederationPlugin.js +2 -4
  495. package/lib/performance/UnusedModulesPlugin.js +5 -4
  496. package/lib/performance/getModuleSize.js +1 -1
  497. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  498. package/lib/performance/isOnlyReexported.js +7 -6
  499. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  500. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  501. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  502. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  503. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  504. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  505. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  506. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  507. package/lib/prefetch/ResourceHintPlugin.js +66 -45
  508. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  509. package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
  510. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  511. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  512. package/lib/{dependencies → provide}/ProvidedDependency.js +50 -17
  513. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  514. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  515. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  516. package/lib/resolve/getResolveOptionsKey.js +59 -0
  517. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  518. package/lib/rules/RuleSetCompiler.js +42 -51
  519. package/lib/rules/UseEffectRulePlugin.js +1 -3
  520. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  521. package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
  522. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  523. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  524. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  525. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  526. package/lib/runtime/CompatRuntimeModule.js +4 -4
  527. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  528. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  529. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  530. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  531. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  532. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  533. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  534. package/lib/runtime/GetChunkFilenameRuntimeModule.js +7 -11
  535. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  536. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  537. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  538. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  539. package/lib/runtime/GlobalRuntimeModule.js +3 -3
  540. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  541. package/lib/runtime/HelperRuntimeModule.js +16 -1
  542. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  543. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
  544. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  545. package/lib/runtime/NonceRuntimeModule.js +2 -2
  546. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  547. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  548. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  549. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +24 -1
  550. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  551. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  552. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -50
  553. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  554. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  555. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  556. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  557. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  558. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  559. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  560. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  561. package/lib/runtime/baseUri.js +1 -1
  562. package/lib/schemes/DataUriPlugin.js +1 -1
  563. package/lib/schemes/HttpUriPlugin.js +68 -13
  564. package/lib/schemes/VirtualUrlPlugin.js +52 -16
  565. package/lib/serialization/AggregateErrorSerializer.js +4 -4
  566. package/lib/serialization/BinaryMiddleware.js +4 -1
  567. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  568. package/lib/serialization/FileMiddleware.js +3 -3
  569. package/lib/serialization/ObjectMiddleware.js +62 -29
  570. package/lib/serialization/PlainObjectSerializer.js +3 -7
  571. package/lib/serialization/Serializer.js +21 -11
  572. package/lib/serialization/SerializerMiddleware.js +10 -8
  573. package/lib/serialization/SingleItemMiddleware.js +4 -2
  574. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  575. package/lib/sharing/ConsumeSharedModule.js +18 -14
  576. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  577. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  578. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  579. package/lib/sharing/ProvideSharedDependency.js +1 -1
  580. package/lib/sharing/ProvideSharedModule.js +11 -9
  581. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  582. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  583. package/lib/sharing/SharePlugin.js +102 -9
  584. package/lib/sharing/ShareRuntimeModule.js +6 -6
  585. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  586. package/lib/{util → sharing}/semver.js +14 -16
  587. package/lib/sharing/utils.js +59 -2
  588. package/lib/stats/DefaultStatsFactoryPlugin.js +57 -54
  589. package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
  590. package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
  591. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  592. package/lib/{Stats.js → stats/Stats.js} +4 -4
  593. package/lib/stats/StatsFactory.js +208 -37
  594. package/lib/stats/StatsPrinter.js +126 -13
  595. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  596. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  597. package/lib/template/DependencyTemplate.js +77 -0
  598. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  599. package/lib/template/InitFragment.js +223 -0
  600. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  601. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  602. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  603. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +158 -95
  604. package/lib/{Template.js → template/Template.js} +14 -12
  605. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
  606. package/lib/typescript/TypeScriptPlugin.js +3 -3
  607. package/lib/util/RequestShortener.js +44 -0
  608. package/lib/util/SortableSet.js +87 -22
  609. package/lib/util/SourceProcessor.js +439 -51
  610. package/lib/util/TupleSet.js +27 -27
  611. package/lib/util/WeakTupleMap.js +20 -16
  612. package/lib/util/buildDiagnostics.js +2 -2
  613. package/lib/util/cleverMerge.js +61 -33
  614. package/lib/util/comparators.js +19 -15
  615. package/lib/util/concatenate.js +28 -147
  616. package/lib/util/createMappings.js +111 -0
  617. package/lib/util/dataURL.js +96 -15
  618. package/lib/util/deprecation.js +5 -4
  619. package/lib/util/extractComments.js +118 -0
  620. package/lib/util/formatLocation.js +1 -1
  621. package/lib/util/globUtils.js +198 -20
  622. package/lib/util/haltVisitors.js +51 -0
  623. package/lib/util/handlerKeys.js +2 -2
  624. package/lib/util/identifier.js +117 -1
  625. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  626. package/lib/util/internalSerializables.js +296 -102
  627. package/lib/util/magicComment.js +12 -7
  628. package/lib/util/makeSerializable.js +28 -7
  629. package/lib/util/memoize.js +1 -1
  630. package/lib/util/parseJson.js +2 -2
  631. package/lib/util/preloadModuleType.js +5 -2
  632. package/lib/util/registerExternalSerializer.js +2 -2
  633. package/lib/util/removeBOM.js +1 -1
  634. package/lib/util/runtime.js +1 -1
  635. package/lib/util/serialization.js +35 -28
  636. package/lib/util/source.js +2 -2
  637. package/lib/util/terminalColors.js +161 -0
  638. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  639. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  640. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +19 -5
  641. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
  642. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
  643. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  644. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
  645. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  646. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
  647. package/lib/wasm/wasmModuleFilename.js +2 -2
  648. package/lib/wasm-sync/SyncWasmModule.js +18 -3
  649. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
  650. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  651. package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
  652. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
  653. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  654. package/lib/wasm-sync/WebAssemblyParser.js +15 -17
  655. package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
  656. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  657. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  658. package/lib/{Watching.js → watch/Watching.js} +8 -8
  659. package/lib/web/FetchCompileAsyncWasmPlugin.js +12 -18
  660. package/lib/web/FetchCompileWasmPlugin.js +8 -10
  661. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  662. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  663. package/lib/web/JsonpTemplatePlugin.js +1 -1
  664. package/lib/webpack.js +27 -17
  665. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  666. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  667. package/package.json +57 -36
  668. package/schemas/WebpackOptions.check.js +4 -3
  669. package/schemas/WebpackOptions.d.json.ts +2 -0
  670. package/schemas/WebpackOptions.json +295 -75
  671. package/schemas/plugins/BannerPlugin.check.js +4 -3
  672. package/schemas/plugins/BannerPlugin.json +29 -2
  673. package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
  674. package/schemas/plugins/HtmlParserOptions.check.js +4 -3
  675. package/schemas/plugins/IgnorePlugin.check.js +4 -3
  676. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  677. package/schemas/plugins/IgnorePlugin.json +1 -1
  678. package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
  679. package/schemas/plugins/ManifestPlugin.check.js +4 -3
  680. package/schemas/plugins/ManifestPlugin.json +3 -3
  681. package/schemas/plugins/ProgressPlugin.check.js +4 -3
  682. package/schemas/plugins/ProgressPlugin.json +2 -7
  683. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  684. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  685. package/schemas/plugins/SourceMapDevToolPlugin.check.js +4 -3
  686. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  687. package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
  688. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  689. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
  690. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
  691. package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
  692. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
  693. package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
  694. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  695. package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
  696. package/schemas/plugins/container/ExternalsType.check.js +4 -3
  697. package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
  698. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  699. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
  700. package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
  701. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
  702. package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
  703. package/schemas/plugins/css/CssParserOptions.check.js +4 -3
  704. package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
  705. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  706. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  707. package/schemas/plugins/dll/DllPlugin.check.js +4 -3
  708. package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
  709. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  710. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
  711. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
  712. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
  713. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
  714. package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
  715. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
  716. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
  717. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
  718. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
  719. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  720. package/schemas/plugins/output/CleanOptions.json +3 -0
  721. package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
  722. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
  723. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
  724. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  725. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
  726. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  727. package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
  728. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  729. package/types.d.ts +20780 -14174
  730. package/lib/LazyBarrel.js +0 -388
  731. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  732. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  733. package/lib/javascript/ChunkFormatHelpers.js +0 -72
  734. package/lib/javascript/grammar.js +0 -5546
  735. package/lib/javascript/parser.js +0 -1500
  736. package/lib/javascript/regexpData.js +0 -51
  737. package/lib/performance/getSourceModules.js +0 -22
  738. package/lib/util/Semaphore.js +0 -65
  739. package/lib/util/objectToMap.js +0 -15
  740. package/schemas/WebpackOptions.check.d.ts +0 -7
  741. package/schemas/_container.json +0 -155
  742. package/schemas/_sharing.json +0 -118
  743. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  745. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  746. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  747. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  748. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  749. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  750. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  751. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  752. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  753. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  754. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  755. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  756. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  758. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  759. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  760. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  761. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  762. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  763. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  764. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  765. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  768. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  769. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  770. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  771. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  772. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  773. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  774. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  775. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  776. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  777. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  778. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  779. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  780. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  781. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  782. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  783. /package/lib/{util → css}/topologicalSort.js +0 -0
  784. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  785. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  786. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  787. /package/lib/{util → javascript}/StackedMap.js +0 -0
  788. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  789. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  790. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  791. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  792. /package/lib/{util → optimize}/Queue.js +0 -0
  793. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -0,0 +1,2350 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const querystring = require("querystring");
9
+ const {
10
+ AsyncSeriesBailHook,
11
+ AsyncSeriesHook,
12
+ AsyncSeriesWaterfallHook,
13
+ HookMap,
14
+ SyncHook
15
+ } = require("tapable");
16
+ const {
17
+ CachedSource,
18
+ OriginalSource,
19
+ RawSource,
20
+ SourceMapSource
21
+ } = require("webpack-sources");
22
+ const { toError } = require("../errors/ErrorHelpers");
23
+ const HookWebpackError = require("../errors/HookWebpackError");
24
+ const { join } = require("../fs/fs");
25
+ const Dependency = require("../graph/Dependency");
26
+ const ModuleGraphConnection = require("../graph/ModuleGraphConnection");
27
+ const isDependencyKind = require("../graph/isDependencyKind");
28
+ const {
29
+ createLoaderContext,
30
+ getContext,
31
+ runLoaders
32
+ } = require("../loaders/LoaderRunner");
33
+ const RuntimeGlobals = require("../runtime/RuntimeGlobals");
34
+ const LazySet = require("../util/LazySet");
35
+ const { isSubset } = require("../util/SetHelpers");
36
+ const { getScheme } = require("../util/URLAbsoluteSpecifier");
37
+ const { getBuildDiagnostics } = require("../util/buildDiagnostics");
38
+ const {
39
+ concatComparators,
40
+ keepOriginalOrder,
41
+ sortWithSourceOrder
42
+ } = require("../util/comparators");
43
+ const createHash = require("../util/createHash");
44
+ const createHooksRegistry = require("../util/createHooksRegistry");
45
+ const { createFakeHook } = require("../util/deprecation");
46
+ const formatLocation = require("../util/formatLocation");
47
+ const {
48
+ ABSOLUTE_PATH_REGEXP,
49
+ absolutify,
50
+ contextify,
51
+ contextifySourceUrl,
52
+ parseResource
53
+ } = require("../util/identifier");
54
+ const makeSerializable = require("../util/makeSerializable");
55
+ const memoize = require("../util/memoize");
56
+ const parseJson = require("../util/parseJson");
57
+ const Module = require("./Module");
58
+ const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
59
+
60
+ const getValidate = memoize(() => require("schema-utils").validate);
61
+
62
+ const getCreatePathGlobMatcher = memoize(
63
+ () => require("../util/globUtils").createPathGlobMatcher
64
+ );
65
+
66
+ /** @type {Map<string, (path: string) => boolean>} */
67
+ const noParseGlobMatchers = new Map();
68
+
69
+ const getGenerator = memoize(() => require("./Generator"));
70
+
71
+ const getExtractSourceMap = memoize(() => require("./extractSourceMap"));
72
+
73
+ const getInvalidDependenciesModuleWarning = memoize(() =>
74
+ require("../errors/InvalidDependenciesModuleWarning")
75
+ );
76
+
77
+ const getUnhandledSchemeError = memoize(() =>
78
+ require("../errors/UnhandledSchemeError")
79
+ );
80
+
81
+ const getModuleWarning = memoize(() => require("../errors/ModuleWarning"));
82
+
83
+ const getModuleParseError = memoize(() =>
84
+ require("../errors/ModuleParseError")
85
+ );
86
+
87
+ const getModuleError = memoize(() => require("../errors/ModuleError"));
88
+
89
+ const getModuleBuildError = memoize(() =>
90
+ require("../errors/ModuleBuildError")
91
+ );
92
+
93
+ // Drops the redundant string/buffer copy of a source, keeping its map: a
94
+ // parsed map is far more expensive to rebuild than a `toString`.
95
+ const CLEAR_SOURCE_COPIES = { maps: false, source: true };
96
+
97
+ // TODO in the next major release: remove, `esm*` is the new spelling of the
98
+ // three aliases this prototype carries. They sit on a prototype because
99
+ // accessors written into the state literal cost ~1.2 KB per module parsed.
100
+ const DEPRECATED_PARSER_STATE_ALIASES = {
101
+ /**
102
+ * @this {ParserState}
103
+ * @returns {Set<string> | undefined} the names the module exports
104
+ */
105
+ get harmonyNamedExports() {
106
+ return this.esmNamedExports;
107
+ },
108
+ /**
109
+ * @this {ParserState}
110
+ * @param {Set<string> | undefined} value the names the module exports
111
+ */
112
+ set harmonyNamedExports(value) {
113
+ this.esmNamedExports = value;
114
+ },
115
+ /**
116
+ * @this {ParserState}
117
+ * @returns {ESMStarExportsList | undefined} the star exports
118
+ */
119
+ get harmonyStarExports() {
120
+ return this.esmStarExports;
121
+ },
122
+ /**
123
+ * @this {ParserState}
124
+ * @param {ESMStarExportsList | undefined} value the star exports
125
+ */
126
+ set harmonyStarExports(value) {
127
+ this.esmStarExports = value;
128
+ },
129
+ /**
130
+ * @this {ParserState}
131
+ * @returns {number | undefined} the order of the last import
132
+ */
133
+ get lastHarmonyImportOrder() {
134
+ return this.lastESMImportOrder;
135
+ },
136
+ /**
137
+ * @this {ParserState}
138
+ * @param {number | undefined} value the order of the last import
139
+ */
140
+ set lastHarmonyImportOrder(value) {
141
+ this.lastESMImportOrder = value;
142
+ }
143
+ };
144
+
145
+ /** @import { ResolveContext, ResolveRequest, Resolver } from "enhanced-resolve" */
146
+ /** @import { Source, RawSourceMap } from "webpack-sources" */
147
+ /**
148
+ * @import {
149
+ * ResolveOptions,
150
+ * NoParse,
151
+ * HashFunction,
152
+ * HashDigest,
153
+ * HashDigestLength,
154
+ * HashSalt
155
+ * } from "../../declarations/WebpackOptions"
156
+ */
157
+ /**
158
+ * @import Compilation, {
159
+ * AssetInfo,
160
+ * FileSystemDependencies,
161
+ * UnsafeCacheData
162
+ * } from "../Compilation"
163
+ */
164
+ /**
165
+ * @import {
166
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
167
+ * } from "../config/defaults"
168
+ */
169
+ /** @import { UpdateHashContext } from "../graph/Dependency" */
170
+ /** @import Generator, { GenerateErrorFn } from "./Generator" */
171
+ /** @import { Snapshot } from "../fs/FileSystemInfo" */
172
+ /**
173
+ * @import {
174
+ * BuildInfo,
175
+ * ValueCacheVersions,
176
+ * BuildMeta,
177
+ * CodeGenerationContext,
178
+ * CodeGenerationResult,
179
+ * ConcatenationBailoutReasonContext,
180
+ * KnownBuildInfo,
181
+ * LibIdentOptions,
182
+ * LibIdent,
183
+ * NameForCondition,
184
+ * NeedBuildContext,
185
+ * NeedBuildCallback,
186
+ * BuildCallback,
187
+ * RuntimeRequirements,
188
+ * SourceType,
189
+ * SourceTypes,
190
+ * ModuleKinds
191
+ * } from "./Module"
192
+ */
193
+ /** @import ModuleGraph from "../graph/ModuleGraph" */
194
+ /** @import { ConnectionState } from "../graph/ModuleGraphConnection" */
195
+ /**
196
+ * @import NormalModuleFactory, {
197
+ * NormalModuleTypes,
198
+ * ParserByType,
199
+ * ParserOptionsByType,
200
+ * GeneratorByType,
201
+ * GeneratorOptionsByType,
202
+ * ResourceSchemeData
203
+ * } from "./NormalModuleFactory"
204
+ */
205
+ /** @import Parser, { ParserState, PreparsedAst } from "./Parser" */
206
+ /** @import { LoaderData, LoaderResultArgs } from "../loaders/LoaderRunner" */
207
+ /**
208
+ * @typedef {InstanceType<typeof import("../dependencies/esm/ESMExportImportedSpecifierDependency").ESMStarExportsList>} ESMStarExportsList
209
+ */
210
+ /** @import RequestShortener from "../util/RequestShortener" */
211
+ /** @import Compiler from "../Compiler" */
212
+ /** @import { Logger } from "../logging/Logger" */
213
+ /**
214
+ * @import {
215
+ * ResolverWithOptions,
216
+ * ResolveOptionsWithDependencyType
217
+ * } from "../resolve/ResolverFactory"
218
+ */
219
+ /**
220
+ * @import {
221
+ * ObjectDeserializerContext,
222
+ * ObjectSerializerContext
223
+ * } from "../serialization/ObjectMiddleware"
224
+ */
225
+ /** @import Hash from "../util/Hash" */
226
+ /** @import { InputFileSystem } from "../fs/fs" */
227
+ /** @import { AssociatedObjectForCache } from "../util/identifier" */
228
+ /**
229
+ * @template T
230
+ * @typedef {import("../util/deprecation").FakeHook<T>} FakeHook
231
+ */
232
+
233
+ /** @typedef {{ [k: string]: EXPECTED_ANY }} ParserOptions */
234
+ /** @typedef {{ [k: string]: EXPECTED_ANY }} GeneratorOptions */
235
+
236
+ /** @typedef {Parameters<Resolver["resolve"]>[4]} ResolveCallback */
237
+ /** @typedef {Parameters<typeof import("schema-utils").validate>[0]} Schema */
238
+
239
+ /**
240
+ * `getOptions` validates against a schema when given one, and TypeScript reads
241
+ * an intersection of call signatures as an overload set
242
+ * @template OptionsType
243
+ * @typedef {{ (): OptionsType } & { (schema: Schema): OptionsType }} GetOptionsMethod
244
+ */
245
+
246
+ /**
247
+ * @typedef {((context: string, request: string, callback: ResolveCallback) => void) & ((context: string, request: string) => Promise<string>)} DualModeResolve
248
+ */
249
+
250
+ /**
251
+ * @typedef {object} LoaderContextUtils
252
+ * @property {(context: string, request: string) => string} absolutify returns a new request string using absolute paths when possible
253
+ * @property {(context: string, request: string) => string} contextify returns a new request string avoiding absolute paths when possible
254
+ * @property {(algorithm?: string | typeof Hash) => Hash} createHash creates a hash with the compilation's function
255
+ */
256
+
257
+ /**
258
+ * These properties are added by the NormalModule
259
+ * @template OptionsType
260
+ * @typedef {object} NormalModuleLoaderContext
261
+ * @property {number} version
262
+ * @property {GetOptionsMethod<OptionsType>} getOptions Extracts and parses the options of the current loader.
263
+ * Parses string options as JSON or a query string.
264
+ * @property {(warning: Error | string) => void} emitWarning Emits a warning for this module.
265
+ * The warning will be displayed to the user during compilation.
266
+ * @property {(error: Error | string) => void} emitError Emits an error for this module.
267
+ * The error will be displayed to the user and typically causes the compilation to fail.
268
+ * @property {(name?: string) => Logger} getLogger Gets a logger instance scoped to this loader and module.
269
+ * Useful for emitting debug or compilation information in a structured way.
270
+ * @property {(context: string, request: string, callback: ResolveCallback) => void} resolve Resolves a module request (e.g., a relative path or module name) to an absolute file path.
271
+ * It uses Webpack's internal resolver, taking into account configured aliases and extensions.
272
+ * @property {(options?: ResolveOptionsWithDependencyType) => DualModeResolve} getResolve Creates a resolve function with specific options.
273
+ * The returned function can be used as a Promise-based resolver or a callback-based resolver.
274
+ * @property {(name: string, content: string | Buffer, sourceMap?: string, assetInfo?: AssetInfo) => void} emitFile Emits a new file (asset) to the compilation output directory.
275
+ * This allows loaders to generate additional files alongside the main module output.
276
+ * @property {(dep: string) => void} addBuildDependency
277
+ * @property {LoaderContextUtils} utils
278
+ * @property {string} rootContext
279
+ * @property {InputFileSystem} fs
280
+ * @property {boolean=} sourceMap
281
+ * @property {"development" | "production" | "none"} mode
282
+ * @property {boolean=} webpack
283
+ * @property {HashFunction} hashFunction
284
+ * @property {HashDigest} hashDigest
285
+ * @property {HashDigestLength} hashDigestLength
286
+ * @property {HashSalt=} hashSalt
287
+ * @property {NormalModule=} _module
288
+ * @property {Compilation=} _compilation
289
+ * @property {Compiler=} _compiler
290
+ */
291
+
292
+ /**
293
+ * @template T
294
+ * @template [DataType=LoaderData]
295
+ * @typedef {NormalModuleLoaderContext<T> & import("../loaders/LoaderRunner").LoaderRunnerLoaderContext<T, DataType> & import("../loaders/LoaderPlugin").LoaderPluginLoaderContext & import("../hmr/HotModuleReplacementPlugin").HotModuleReplacementPluginLoaderContext} LoaderContext
296
+ */
297
+
298
+ /** @typedef {(content: string) => boolean} NoParseFn */
299
+
300
+ /**
301
+ * @param {NormalModule} mod the module
302
+ * @param {ModuleGraph} moduleGraph the module graph
303
+ * @param {Dependency} dep the dep that triggered the bailout
304
+ */
305
+ const recordSideEffectsBailout = (mod, moduleGraph, dep) => {
306
+ if (mod._addedSideEffectsBailout === undefined) {
307
+ mod._addedSideEffectsBailout = new WeakSet();
308
+ } else if (mod._addedSideEffectsBailout.has(moduleGraph)) {
309
+ return;
310
+ }
311
+ mod._addedSideEffectsBailout.add(moduleGraph);
312
+ moduleGraph
313
+ .getOptimizationBailout(mod)
314
+ .push(
315
+ () =>
316
+ `Dependency (${dep.type}) with side effects at ${formatLocation(
317
+ dep.loc
318
+ )}`
319
+ );
320
+ };
321
+
322
+ /**
323
+ * Walks the `ESMImportSideEffectDependency` graph to decide how `rootMod`
324
+ * connects to a referrer when consumed for its side effects only.
325
+ *
326
+ * Iterative (explicit work stack) so deep import chains never approach V8's
327
+ * recursion limit — the overflow behind #20986 — with no separate recursive
328
+ * form or depth cap. Cycles use Tarjan's `index`/`lowlink`: a module's result
329
+ * is memoized on `_sideEffectsStateGraph` only when it is context-independent
330
+ * (cycle-free, or the root of its strongly-connected component), i.e. exactly
331
+ * when the result cannot depend on which ancestors are mid-walk.
332
+ *
333
+ * The previous walker disabled memoization for the whole walk the moment any
334
+ * cycle appeared (one global `circular` flag). With diamond-shaped graphs that
335
+ * made the walk exponential, so a single circular import could blow up an
336
+ * otherwise-linear graph. Per-module lowlink keeps the cycle-free majority
337
+ * memoized while a cycle exists elsewhere.
338
+ *
339
+ * Caching under `lowlink === index` is conservative: an imprecise lowlink can
340
+ * only skip caching (a later recompute yields the same value), never memoize a
341
+ * state that depended on stack context. `true` is monotonic and always cached.
342
+ * A non-`NormalModule` dependency (e.g. `ConcatenatedModule` re-entering this
343
+ * method) is treated as a taint so its chain is never memoized, and any module
344
+ * already flagged `_isEvaluatingSideEffects` (this walk or an outer re-entrant
345
+ * one) counts as circular, matching the previous walker.
346
+ * @param {NormalModule} rootMod the module being walked
347
+ * @param {ModuleGraph} moduleGraph the module graph
348
+ * @returns {ConnectionState} the side-effects connection state
349
+ */
350
+ const walkSideEffects = (rootMod, moduleGraph) => {
351
+ // Context-independent state without descending; `undefined` => walk deps.
352
+ /**
353
+ * @param {NormalModule} mod module
354
+ * @returns {ConnectionState | undefined} resolved state or undefined
355
+ */
356
+ const quick = (mod) => {
357
+ if (mod._sideEffectsStateGraph === moduleGraph) {
358
+ return /** @type {ConnectionState} */ (mod._sideEffectsStateValue);
359
+ }
360
+ const fm = mod.factoryMeta;
361
+ if (fm !== undefined) {
362
+ if (fm.sideEffectFree) return false;
363
+ if (fm.sideEffectFree === false) return true;
364
+ }
365
+ if (!(mod.buildMeta !== undefined && mod.buildMeta.sideEffectFree)) {
366
+ return true;
367
+ }
368
+ return undefined;
369
+ };
370
+
371
+ const q0 = quick(rootMod);
372
+ if (q0 !== undefined) return q0;
373
+
374
+ /** @type {Map<NormalModule, number>} module -> Tarjan index */
375
+ const indexOf = new Map();
376
+ /** @type {Map<NormalModule, number>} module -> Tarjan lowlink */
377
+ const lowOf = new Map();
378
+ // Parallel frame arrays, to avoid a per-frame object allocation.
379
+ /** @type {NormalModule[]} */
380
+ const fMod = [];
381
+ /** @type {Dependency[][]} */
382
+ const fDeps = [];
383
+ /** @type {number[]} */
384
+ const fIdx = [];
385
+ /** @type {ConnectionState[]} */
386
+ const fCur = [];
387
+ let counter = 0;
388
+
389
+ /**
390
+ * @param {NormalModule} mod module to push a frame for
391
+ */
392
+ const enter = (mod) => {
393
+ indexOf.set(mod, counter);
394
+ lowOf.set(mod, counter);
395
+ counter++;
396
+ mod._isEvaluatingSideEffects = true;
397
+ fMod.push(mod);
398
+ fDeps.push(mod.dependencies);
399
+ fIdx.push(0);
400
+ fCur.push(false);
401
+ };
402
+
403
+ enter(rootMod);
404
+ /** @type {ConnectionState} the just-popped frame's result */
405
+ let result = false;
406
+ /**
407
+ * Result of a just-popped child frame, to apply to the new top's current
408
+ * dep. `undefined` means "no pending; advance normally".
409
+ * @type {ConnectionState | undefined}
410
+ */
411
+ let pending;
412
+
413
+ while (fMod.length > 0) {
414
+ const top = fMod.length - 1;
415
+ const mod = fMod[top];
416
+ const deps = fDeps[top];
417
+ let i = fIdx[top];
418
+ let current = fCur[top];
419
+
420
+ // Apply a popped child's result to the dep that spawned it.
421
+ if (pending !== undefined) {
422
+ const state = pending;
423
+ pending = undefined;
424
+ const dep = deps[i];
425
+ if (state === true) {
426
+ recordSideEffectsBailout(mod, moduleGraph, dep);
427
+ mod._sideEffectsStateGraph = moduleGraph;
428
+ mod._sideEffectsStateValue = true;
429
+ mod._isEvaluatingSideEffects = false;
430
+ fMod.pop();
431
+ fDeps.pop();
432
+ fIdx.pop();
433
+ fCur.pop();
434
+ result = true;
435
+ pending = true;
436
+ continue;
437
+ }
438
+ if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
439
+ current = ModuleGraphConnection.addConnectionStates(current, state);
440
+ }
441
+ i++;
442
+ }
443
+
444
+ let descended = false;
445
+ while (i < deps.length) {
446
+ const dep = deps[i];
447
+ /** @type {ConnectionState} */
448
+ let state;
449
+
450
+ if (isDependencyKind(dep, "esm-side-effect-import")) {
451
+ const refModule = moduleGraph.getModule(dep);
452
+ if (!refModule) {
453
+ state = true;
454
+ } else if (refModule.is("normal")) {
455
+ if (refModule._isEvaluatingSideEffects) {
456
+ // On the current stack (or an outer re-entrant walk) => cycle.
457
+ state = ModuleGraphConnection.CIRCULAR_CONNECTION;
458
+ const ri = indexOf.get(refModule);
459
+ lowOf.set(
460
+ mod,
461
+ Math.min(
462
+ /** @type {number} */ (lowOf.get(mod)),
463
+ ri === undefined ? -1 : ri
464
+ )
465
+ );
466
+ } else {
467
+ const q = quick(refModule);
468
+ if (q !== undefined) {
469
+ state = q;
470
+ } else {
471
+ // Descend: pause this frame, walk the child next.
472
+ fIdx[top] = i;
473
+ fCur[top] = current;
474
+ enter(refModule);
475
+ descended = true;
476
+ break;
477
+ }
478
+ }
479
+ } else {
480
+ // A non-NormalModule resolves through a re-entrant walk that may read
481
+ // our in-progress modules as circular, so this chain is tainted and
482
+ // never memoized.
483
+ state = refModule.getSideEffectsConnectionState(moduleGraph);
484
+ lowOf.set(mod, -1);
485
+ }
486
+ } else {
487
+ state = dep.getModuleEvaluationSideEffectsState(moduleGraph);
488
+ }
489
+
490
+ if (state === true) {
491
+ recordSideEffectsBailout(mod, moduleGraph, dep);
492
+ // `true` is monotonic — always safe to memoize.
493
+ mod._sideEffectsStateGraph = moduleGraph;
494
+ mod._sideEffectsStateValue = true;
495
+ mod._isEvaluatingSideEffects = false;
496
+ fMod.pop();
497
+ fDeps.pop();
498
+ fIdx.pop();
499
+ fCur.pop();
500
+ result = true;
501
+ pending = true;
502
+ descended = true;
503
+ break;
504
+ }
505
+ if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
506
+ current = ModuleGraphConnection.addConnectionStates(current, state);
507
+ }
508
+ i++;
509
+ }
510
+
511
+ if (descended) continue;
512
+
513
+ // `mod` finished without a `true` bailout.
514
+ mod._isEvaluatingSideEffects = false;
515
+ // Memoize only when the result is context-independent: no back-edge in
516
+ // this subtree reached above `mod` (a cycle-free module or an SCC root).
517
+ if (lowOf.get(mod) === indexOf.get(mod)) {
518
+ mod._sideEffectsStateGraph = moduleGraph;
519
+ mod._sideEffectsStateValue = current;
520
+ }
521
+ fMod.pop();
522
+ fDeps.pop();
523
+ fIdx.pop();
524
+ fCur.pop();
525
+ result = current;
526
+ pending = current;
527
+ if (fMod.length > 0) {
528
+ const parent = fMod[fMod.length - 1];
529
+ lowOf.set(
530
+ parent,
531
+ Math.min(
532
+ /** @type {number} */ (lowOf.get(parent)),
533
+ /** @type {number} */ (lowOf.get(mod))
534
+ )
535
+ );
536
+ }
537
+ }
538
+
539
+ return result;
540
+ };
541
+
542
+ /**
543
+ * @typedef {object} LoaderItem
544
+ * @property {string} loader
545
+ * @property {string | null | undefined | Record<string, EXPECTED_ANY>} options
546
+ * @property {string | null=} ident
547
+ * @property {string | null=} type
548
+ */
549
+
550
+ /**
551
+ * @param {string} context absolute context path
552
+ * @param {string | RawSourceMap} sourceMap a source map
553
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
554
+ * @returns {string | RawSourceMap} new source map
555
+ */
556
+ const contextifySourceMap = (context, sourceMap, associatedObjectForCache) => {
557
+ if (typeof sourceMap === "string" || !Array.isArray(sourceMap.sources)) {
558
+ return sourceMap;
559
+ }
560
+ const { sourceRoot } = sourceMap;
561
+ /** @type {(source: string) => string} */
562
+ const mapper = !sourceRoot
563
+ ? (source) => source
564
+ : sourceRoot.endsWith("/")
565
+ ? (source) =>
566
+ source.startsWith("/")
567
+ ? `${sourceRoot.slice(0, -1)}${source}`
568
+ : `${sourceRoot}${source}`
569
+ : (source) =>
570
+ source.startsWith("/")
571
+ ? `${sourceRoot}${source}`
572
+ : `${sourceRoot}/${source}`;
573
+ const newSources = sourceMap.sources.map((source) =>
574
+ contextifySourceUrl(context, mapper(source), associatedObjectForCache)
575
+ );
576
+ return {
577
+ ...sourceMap,
578
+ file: "x",
579
+ sourceRoot: undefined,
580
+ sources: newSources
581
+ };
582
+ };
583
+
584
+ /**
585
+ * @param {string | Buffer} input the input
586
+ * @returns {string} the converted string
587
+ */
588
+ const asString = (input) => {
589
+ if (Buffer.isBuffer(input)) {
590
+ return input.toString("utf8");
591
+ }
592
+ return input;
593
+ };
594
+
595
+ /**
596
+ * @param {string | Buffer} input the input
597
+ * @returns {Buffer} the converted buffer
598
+ */
599
+ const asBuffer = (input) => {
600
+ if (!Buffer.isBuffer(input)) {
601
+ return Buffer.from(input, "utf8");
602
+ }
603
+ return input;
604
+ };
605
+
606
+ /** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]} Result */
607
+
608
+ /** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
609
+
610
+ /**
611
+ * @deprecated Use the `readResource` hook instead.
612
+ * @typedef {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} DeprecatedReadResourceForScheme
613
+ */
614
+
615
+ const createCompilationHooks = () => {
616
+ /** @type {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} */
617
+ const readResource = new HookMap(
618
+ () => new AsyncSeriesBailHook(["loaderContext"])
619
+ );
620
+ return {
621
+ // TODO in the next major release: deprecate
622
+ /**
623
+ * @deprecated Use the `readResource` hook instead.
624
+ * @type {DeprecatedReadResourceForScheme}
625
+ */
626
+ readResourceForScheme: new HookMap((scheme) => {
627
+ const hook = readResource.for(scheme);
628
+ return createFakeHook(
629
+ /** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
630
+ tap: (options, fn) =>
631
+ hook.tap(options, (loaderContext) =>
632
+ fn(
633
+ loaderContext.resource,
634
+ /** @type {NormalModule} */ (loaderContext._module)
635
+ )
636
+ ),
637
+ tapAsync: (options, fn) =>
638
+ hook.tapAsync(options, (loaderContext, callback) =>
639
+ fn(
640
+ loaderContext.resource,
641
+ /** @type {NormalModule} */ (loaderContext._module),
642
+ callback
643
+ )
644
+ ),
645
+ tapPromise: (options, fn) =>
646
+ hook.tapPromise(options, (loaderContext) =>
647
+ fn(
648
+ loaderContext.resource,
649
+ /** @type {NormalModule} */ (loaderContext._module)
650
+ )
651
+ )
652
+ })
653
+ );
654
+ }),
655
+ /**
656
+ * @since 5.58.0
657
+ */
658
+ readResource,
659
+ /** @type {SyncHook<[AnyLoaderContext, NormalModule]>} */
660
+ loader: new SyncHook(["loaderContext", "module"]),
661
+ /** @type {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} */
662
+ beforeLoaders: new SyncHook(["loaders", "module", "loaderContext"]),
663
+ /**
664
+ * Async since 5.112.0, so a tap can resolve values a module needs
665
+ * before it is parsed. `tap` keeps working.
666
+ * @type {AsyncSeriesHook<[NormalModule]>}
667
+ * @since 5.59.0
668
+ */
669
+ beforeParse: new AsyncSeriesHook(["module"]),
670
+ /**
671
+ * @type {SyncHook<[NormalModule]>}
672
+ * @since 5.59.0
673
+ */
674
+ beforeSnapshot: new SyncHook(["module"]),
675
+ /**
676
+ * Async since 5.111.0, so a tap can await work of its own — minifying an
677
+ * asset, say, which before only a loader could do. `tap` keeps working.
678
+ * @type {AsyncSeriesWaterfallHook<[Result, NormalModule]>}
679
+ * @since 5.99.0
680
+ */
681
+ processResult: new AsyncSeriesWaterfallHook(["result", "module"]),
682
+ /**
683
+ * @type {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>}
684
+ * @since 5.49.0
685
+ */
686
+ needBuild: new AsyncSeriesBailHook(["module", "context"])
687
+ };
688
+ };
689
+
690
+ /**
691
+ * @typedef {ReturnType<typeof createCompilationHooks>} NormalModuleCompilationHooks
692
+ */
693
+
694
+ /**
695
+ * @template {NormalModuleTypes | ""} [T=NormalModuleTypes | ""]
696
+ * @typedef {object} NormalModuleCreateData
697
+ * @property {string=} layer an optional layer in which the module is
698
+ * @property {T} type module type. When deserializing, this is set to an empty string "".
699
+ * @property {string} request request string
700
+ * @property {string} userRequest request intended by user (without loaders from config)
701
+ * @property {string} rawRequest request without resolving
702
+ * @property {LoaderItem[]} loaders list of loaders
703
+ * @property {string} resource path + query of the real resource
704
+ * @property {(ResourceSchemeData & Partial<ResolveRequest>)=} resourceResolveData resource resolve data
705
+ * @property {string} context context directory for resolving
706
+ * @property {string=} matchResource path + query of the matched resource (virtual)
707
+ * @property {ParserByType[T]} parser the parser used
708
+ * @property {ParserOptionsByType[T]=} parserOptions the options of the parser used
709
+ * @property {GeneratorByType[T]} generator the generator used
710
+ * @property {GeneratorOptionsByType[T]=} generatorOptions the options of the generator used
711
+ * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
712
+ * @property {boolean} extractSourceMap enable/disable extracting source map
713
+ */
714
+
715
+ /**
716
+ * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
717
+ */
718
+
719
+ /**
720
+ * Defines the build info properties of normal modules (filesystem-backed, loader-processed).
721
+ * @typedef {object} KnownNormalModuleBuildInfo
722
+ * @property {boolean=} parsed
723
+ * @property {string=} hash
724
+ * @property {FileSystemDependencies=} fileDependencies
725
+ * @property {FileSystemDependencies=} contextDependencies
726
+ * @property {FileSystemDependencies=} missingDependencies
727
+ * @property {FileSystemDependencies=} buildDependencies
728
+ * @property {ValueCacheVersions=} valueDependencies
729
+ * @property {(InstanceType<Snapshot> | null)=} snapshot
730
+ * @property {string=} resourceIntegrity using in HttpUriPlugin
731
+ */
732
+
733
+ /** @typedef {BuildInfo & KnownNormalModuleBuildInfo} NormalModuleBuildInfo */
734
+
735
+ const normalModuleHooksRegistry = createHooksRegistry(createCompilationHooks);
736
+
737
+ class NormalModule extends Module {
738
+ /**
739
+ * @param {Compilation} compilation the compilation
740
+ * @returns {NormalModuleCompilationHooks} the attached hooks
741
+ */
742
+ static getCompilationHooks(compilation) {
743
+ return normalModuleHooksRegistry(compilation);
744
+ }
745
+
746
+ /**
747
+ * @param {NormalModuleCreateData} options options object
748
+ */
749
+ constructor({
750
+ layer,
751
+ type,
752
+ request,
753
+ userRequest,
754
+ rawRequest,
755
+ loaders,
756
+ resource,
757
+ resourceResolveData,
758
+ context,
759
+ matchResource,
760
+ parser,
761
+ parserOptions,
762
+ generator,
763
+ generatorOptions,
764
+ resolveOptions,
765
+ extractSourceMap
766
+ }) {
767
+ super(type, context || getContext(resource), layer);
768
+
769
+ // Info from Factory
770
+ /** @type {NormalModuleCreateData['request']} */
771
+ this.request = request;
772
+ /** @type {NormalModuleCreateData['userRequest']} */
773
+ this.userRequest = userRequest;
774
+ /** @type {NormalModuleCreateData['rawRequest']} */
775
+ this.rawRequest = rawRequest;
776
+ /** @type {boolean} */
777
+ this.binary = /^(?:asset|webassembly)\b/.test(type);
778
+ /** @type {NormalModuleCreateData['parser'] | undefined} */
779
+ this.parser = parser;
780
+ /** @type {NormalModuleCreateData['parserOptions']} */
781
+ this.parserOptions = parserOptions;
782
+ /** @type {NormalModuleCreateData['generator'] | undefined} */
783
+ this.generator = generator;
784
+ /** @type {NormalModuleCreateData['generatorOptions']} */
785
+ this.generatorOptions = generatorOptions;
786
+ /** @type {NormalModuleCreateData['resource']} */
787
+ this.resource = resource;
788
+ /** @type {NormalModuleCreateData['resourceResolveData']} */
789
+ this.resourceResolveData = resourceResolveData;
790
+ /** @type {NormalModuleCreateData['matchResource']} */
791
+ this.matchResource = matchResource;
792
+ /** @type {NormalModuleCreateData['loaders']} */
793
+ this.loaders = loaders;
794
+ if (resolveOptions !== undefined) {
795
+ // already declared in super class
796
+ /** @type {NormalModuleCreateData['resolveOptions']} */
797
+ this.resolveOptions = resolveOptions;
798
+ }
799
+ /** @type {NormalModuleCreateData['extractSourceMap']} */
800
+ this.extractSourceMap = extractSourceMap;
801
+
802
+ // Set by HotModuleReplacementPlugin via NormalModuleFactory's `module` hook
803
+ /** @type {boolean} */
804
+ this.hot = false;
805
+
806
+ // Info from Build
807
+ // Redeclared with the normal module specific shape (see KnownNormalModuleBuildInfo)
808
+ /** @type {NormalModuleBuildInfo | undefined} */
809
+ this.buildInfo = undefined;
810
+ /** @type {Error | null} */
811
+ this.error = null;
812
+ /**
813
+ * @private
814
+ * @type {Source | null}
815
+ */
816
+ this._source = null;
817
+ // Set at build time; declared here so the instance shape is fixed at construction
818
+ /**
819
+ * @private
820
+ * @type {PreparsedAst | null}
821
+ */
822
+ this._ast = null;
823
+ /**
824
+ * @private
825
+ * @type {Map<undefined | SourceType, number> | undefined}
826
+ */
827
+ this._sourceSizes = undefined;
828
+ /**
829
+ * @private
830
+ * @type {undefined | SourceTypes}
831
+ */
832
+ this._sourceTypes = undefined;
833
+ // Cache
834
+ /**
835
+ * @private
836
+ * @type {BuildMeta}
837
+ */
838
+ this._lastSuccessfulBuildMeta = {};
839
+ /**
840
+ * @private
841
+ * @type {boolean}
842
+ */
843
+ this._forceBuild = true;
844
+ /**
845
+ * @type {boolean}
846
+ */
847
+ this._isEvaluatingSideEffects = false;
848
+ /**
849
+ * @type {WeakSet<ModuleGraph> | undefined}
850
+ */
851
+ this._addedSideEffectsBailout = undefined;
852
+ /**
853
+ * Memoizes the result of `getSideEffectsConnectionState`. The
854
+ * graph slot keys the cached value to the `ModuleGraph` it was
855
+ * computed against so stale values never leak across compilations
856
+ * — a walk that targets a different graph just overwrites both
857
+ * slots. Populated only for context-independent results (cycle-free
858
+ * or SCC-root modules; see `walkSideEffects`).
859
+ * @type {ModuleGraph | undefined}
860
+ */
861
+ this._sideEffectsStateGraph = undefined;
862
+ /** @type {ConnectionState | undefined} */
863
+ this._sideEffectsStateValue = undefined;
864
+ }
865
+
866
+ /**
867
+ * Returns the unique identifier used to reference this module.
868
+ * @returns {string} a unique identifier of the module
869
+ */
870
+ identifier() {
871
+ if (this.layer === null) {
872
+ if (this.type === JAVASCRIPT_MODULE_TYPE_AUTO) {
873
+ return this.request;
874
+ }
875
+ return `${this.type}|${this.request}`;
876
+ }
877
+ return `${this.type}|${this.request}|${this.layer}`;
878
+ }
879
+
880
+ /**
881
+ * Returns a human-readable identifier for this module.
882
+ * @param {RequestShortener} requestShortener the request shortener
883
+ * @returns {string} a user readable identifier of the module
884
+ */
885
+ readableIdentifier(requestShortener) {
886
+ return /** @type {string} */ (requestShortener.shorten(this.userRequest));
887
+ }
888
+
889
+ /**
890
+ * @returns {string | null} return the resource path
891
+ */
892
+ getResource() {
893
+ return this.matchResource || this.resource;
894
+ }
895
+
896
+ /**
897
+ * Gets the library identifier.
898
+ * @param {LibIdentOptions} options options
899
+ * @returns {LibIdent | null} an identifier for library inclusion
900
+ */
901
+ libIdent(options) {
902
+ let ident = contextify(
903
+ options.context,
904
+ this.userRequest,
905
+ options.associatedObjectForCache
906
+ );
907
+ if (this.layer) ident = `(${this.layer})/${ident}`;
908
+ return ident;
909
+ }
910
+
911
+ /**
912
+ * Returns the path used when matching this module against rule conditions.
913
+ * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
914
+ */
915
+ nameForCondition() {
916
+ const resource = /** @type {string} */ (this.getResource());
917
+ const idx = resource.indexOf("?");
918
+ if (idx >= 0) return resource.slice(0, idx);
919
+ return resource;
920
+ }
921
+
922
+ /**
923
+ * Assuming this module is in the cache. Update the (cached) module with
924
+ * the fresh module from the factory. Usually updates internal references
925
+ * and properties.
926
+ * @param {Module} module fresh module
927
+ * @returns {void}
928
+ */
929
+ updateCacheModule(module) {
930
+ super.updateCacheModule(module);
931
+ const m = /** @type {NormalModule} */ (module);
932
+ this.binary = m.binary;
933
+ this.request = m.request;
934
+ this.userRequest = m.userRequest;
935
+ this.rawRequest = m.rawRequest;
936
+ this.parser = m.parser;
937
+ this.parserOptions = m.parserOptions;
938
+ this.generator = m.generator;
939
+ this.generatorOptions = m.generatorOptions;
940
+ this.resource = m.resource;
941
+ this.resourceResolveData = m.resourceResolveData;
942
+ this.context = m.context;
943
+ this.matchResource = m.matchResource;
944
+ this.loaders = m.loaders;
945
+ this.extractSourceMap = m.extractSourceMap;
946
+ }
947
+
948
+ /**
949
+ * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
950
+ */
951
+ cleanupForCache() {
952
+ // Make sure to cache types and sizes before cleanup when this module has been built
953
+ // They are accessed by the stats and we don't want them to crash after cleanup
954
+ // TODO in the next major release: reconsider this
955
+ if (this.buildInfo) {
956
+ if (this._sourceTypes === undefined) this.getSourceTypes();
957
+ for (const type of /** @type {SourceTypes} */ (this._sourceTypes)) {
958
+ this.size(type);
959
+ }
960
+ // the total size, which stats read without a source type
961
+ this.size();
962
+ }
963
+ super.cleanupForCache();
964
+ this.parser = undefined;
965
+ this.parserOptions = undefined;
966
+ this.generator = undefined;
967
+ this.generatorOptions = undefined;
968
+ // Drop the side-effects memoization so a long-lived module doesn't
969
+ // strong-reference a stale `ModuleGraph`/`Compilation` for graphs
970
+ // that never get re-queried with a fresh one.
971
+ this._sideEffectsStateGraph = undefined;
972
+ this._sideEffectsStateValue = undefined;
973
+ }
974
+
975
+ /**
976
+ * Releases the cached parser between incremental rebuilds so it doesn't keep
977
+ * the previous compilation alive.
978
+ * @returns {void}
979
+ */
980
+ _cleanupParserForCache() {
981
+ this.parser = undefined;
982
+ }
983
+
984
+ /**
985
+ * Re-acquire factory-derived helpers (parser/generator) for an incremental
986
+ * rebuild so this compilation's plugin hooks apply.
987
+ * @param {NormalModuleFactory} normalModuleFactory the normal module factory
988
+ * @returns {void}
989
+ */
990
+ _restoreParserAndGenerator(normalModuleFactory) {
991
+ this.parser = normalModuleFactory.getParser(this.type, this.parserOptions);
992
+ this.generator = normalModuleFactory.getGenerator(
993
+ this.type,
994
+ this.generatorOptions
995
+ );
996
+ }
997
+
998
+ /**
999
+ * Module should be unsafe cached. Get data that's needed for that.
1000
+ * This data will be passed to restoreFromUnsafeCache later.
1001
+ * @returns {UnsafeCacheData} cached data
1002
+ */
1003
+ getUnsafeCacheData() {
1004
+ const data = super.getUnsafeCacheData();
1005
+ data.parserOptions = this.parserOptions;
1006
+ data.generatorOptions = this.generatorOptions;
1007
+ return data;
1008
+ }
1009
+
1010
+ /**
1011
+ * restore unsafe cache data
1012
+ * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
1013
+ * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
1014
+ */
1015
+ restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
1016
+ this._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
1017
+ }
1018
+
1019
+ /**
1020
+ * restore unsafe cache data
1021
+ * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
1022
+ * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
1023
+ */
1024
+ _restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
1025
+ super._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
1026
+ this.parserOptions = unsafeCacheData.parserOptions;
1027
+ this.parser = normalModuleFactory.getParser(this.type, this.parserOptions);
1028
+ this.generatorOptions = unsafeCacheData.generatorOptions;
1029
+ this.generator = normalModuleFactory.getGenerator(
1030
+ this.type,
1031
+ this.generatorOptions
1032
+ );
1033
+ // we assume the generator behaves identically and keep cached sourceTypes/Sizes
1034
+ }
1035
+
1036
+ /**
1037
+ * @param {string} context the compilation context
1038
+ * @param {string} name the asset name
1039
+ * @param {string | Buffer} content the content
1040
+ * @param {(string | RawSourceMap)=} sourceMap an optional source map
1041
+ * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
1042
+ * @returns {Source} the created source
1043
+ */
1044
+ createSourceForAsset(
1045
+ context,
1046
+ name,
1047
+ content,
1048
+ sourceMap,
1049
+ associatedObjectForCache
1050
+ ) {
1051
+ if (sourceMap) {
1052
+ if (
1053
+ typeof sourceMap === "string" &&
1054
+ (this.useSourceMap || this.useSimpleSourceMap)
1055
+ ) {
1056
+ return new OriginalSource(
1057
+ content,
1058
+ contextifySourceUrl(context, sourceMap, associatedObjectForCache)
1059
+ );
1060
+ }
1061
+
1062
+ if (this.useSourceMap) {
1063
+ return new SourceMapSource(
1064
+ content,
1065
+ name,
1066
+ contextifySourceMap(
1067
+ context,
1068
+ /** @type {RawSourceMap} */
1069
+ (sourceMap),
1070
+ associatedObjectForCache
1071
+ )
1072
+ );
1073
+ }
1074
+ }
1075
+
1076
+ return new RawSource(content);
1077
+ }
1078
+
1079
+ /**
1080
+ * @private
1081
+ * @template T
1082
+ * @param {ResolverWithOptions} resolver a resolver
1083
+ * @param {WebpackOptions} options webpack options
1084
+ * @param {Compilation} compilation the compilation
1085
+ * @param {InputFileSystem} fs file system from reading
1086
+ * @param {NormalModuleCompilationHooks} hooks the hooks
1087
+ * @returns {LoaderContext<T>} loader context
1088
+ */
1089
+ _createLoaderContext(resolver, options, compilation, fs, hooks) {
1090
+ const { requestShortener } = compilation.runtimeTemplate;
1091
+ const getCurrentLoaderName = () => {
1092
+ const currentLoader = this.getCurrentLoader(
1093
+ /** @type {AnyLoaderContext} */
1094
+ (loaderContext)
1095
+ );
1096
+ if (!currentLoader) return "(not in loader scope)";
1097
+ return requestShortener.shorten(currentLoader.loader);
1098
+ };
1099
+ /**
1100
+ * @returns {ResolveContext} resolve context
1101
+ */
1102
+ const getResolveContext = () => ({
1103
+ fileDependencies: {
1104
+ add: (d) =>
1105
+ /** @type {AnyLoaderContext} */
1106
+ (loaderContext).addDependency(d)
1107
+ },
1108
+ contextDependencies: {
1109
+ add: (d) =>
1110
+ /** @type {AnyLoaderContext} */
1111
+ (loaderContext).addContextDependency(d)
1112
+ },
1113
+ missingDependencies: {
1114
+ add: (d) =>
1115
+ /** @type {AnyLoaderContext} */
1116
+ (loaderContext).addMissingDependency(d)
1117
+ }
1118
+ });
1119
+ const getAbsolutify = memoize(() =>
1120
+ absolutify.bindCache(compilation.compiler.root)
1121
+ );
1122
+ const getAbsolutifyInContext = memoize(() =>
1123
+ absolutify.bindContextCache(
1124
+ /** @type {string} */
1125
+ (this.context),
1126
+ compilation.compiler.root
1127
+ )
1128
+ );
1129
+ const getContextify = memoize(() =>
1130
+ contextify.bindCache(compilation.compiler.root)
1131
+ );
1132
+ const getContextifyInContext = memoize(() =>
1133
+ contextify.bindContextCache(
1134
+ /** @type {string} */
1135
+ (this.context),
1136
+ compilation.compiler.root
1137
+ )
1138
+ );
1139
+ const utils = {
1140
+ /**
1141
+ * @param {string} context context
1142
+ * @param {string} request request
1143
+ * @returns {string} result
1144
+ */
1145
+ absolutify: (context, request) =>
1146
+ context === this.context
1147
+ ? getAbsolutifyInContext()(request)
1148
+ : getAbsolutify()(context, request),
1149
+ /**
1150
+ * @param {string} context context
1151
+ * @param {string} request request
1152
+ * @returns {string} result
1153
+ */
1154
+ contextify: (context, request) =>
1155
+ context === this.context
1156
+ ? getContextifyInContext()(request)
1157
+ : getContextify()(context, request),
1158
+ /**
1159
+ * @param {HashFunction=} type type
1160
+ * @returns {Hash} hash
1161
+ */
1162
+ createHash: (type) =>
1163
+ createHash(type || compilation.outputOptions.hashFunction)
1164
+ };
1165
+ /** @type {NormalModuleLoaderContext<T>} */
1166
+ const loaderContext = {
1167
+ version: 2,
1168
+ /** @type {LoaderContext<T>["getOptions"]} */
1169
+ getOptions: (/** @type {Schema=} */ schema = undefined) => {
1170
+ const loader = this.getCurrentLoader(
1171
+ /** @type {AnyLoaderContext} */
1172
+ (loaderContext)
1173
+ );
1174
+
1175
+ let { options } = /** @type {LoaderItem} */ (loader);
1176
+
1177
+ if (typeof options === "string") {
1178
+ if (options.startsWith("{") && options.endsWith("}")) {
1179
+ try {
1180
+ options =
1181
+ /** @type {LoaderItem["options"]} */
1182
+ (parseJson(options));
1183
+ } catch (err) {
1184
+ throw new Error(
1185
+ `Cannot parse string options: ${
1186
+ /** @type {Error} */ (err).message
1187
+ }`,
1188
+ { cause: err }
1189
+ );
1190
+ }
1191
+ } else {
1192
+ options = querystring.parse(options, "&", "=", {
1193
+ maxKeys: 0
1194
+ });
1195
+ }
1196
+ }
1197
+
1198
+ if (options === null || options === undefined) {
1199
+ options = {};
1200
+ }
1201
+
1202
+ if (schema && compilation.options.validate) {
1203
+ let name = "Loader";
1204
+ let baseDataPath = "options";
1205
+ /** @type {RegExpExecArray | null} */
1206
+ let match;
1207
+ if (schema.title && (match = /^(.+) (.+)$/.exec(schema.title))) {
1208
+ [, name, baseDataPath] = match;
1209
+ }
1210
+ getValidate()(schema, /** @type {EXPECTED_OBJECT} */ (options), {
1211
+ name,
1212
+ baseDataPath
1213
+ });
1214
+ }
1215
+
1216
+ return /** @type {T} */ (options);
1217
+ },
1218
+ /** @type {LoaderContext<T>["emitWarning"]} */
1219
+ emitWarning: (warning) => {
1220
+ this.addWarning(
1221
+ new (getModuleWarning())(toError(warning), {
1222
+ from: getCurrentLoaderName()
1223
+ })
1224
+ );
1225
+ },
1226
+ /** @type {LoaderContext<T>["emitError"]} */
1227
+ emitError: (error) => {
1228
+ this.addError(
1229
+ new (getModuleError())(toError(error), {
1230
+ from: getCurrentLoaderName()
1231
+ })
1232
+ );
1233
+ },
1234
+ /** @type {LoaderContext<T>["getLogger"]} */
1235
+ getLogger: (name) => {
1236
+ const currentLoader = this.getCurrentLoader(
1237
+ /** @type {AnyLoaderContext} */
1238
+ (loaderContext)
1239
+ );
1240
+ return compilation.getLogger(() =>
1241
+ [currentLoader && currentLoader.loader, name, this.identifier()]
1242
+ .filter(Boolean)
1243
+ .join("|")
1244
+ );
1245
+ },
1246
+ /** @type {LoaderContext<T>["resolve"]} */
1247
+ resolve(context, request, callback) {
1248
+ resolver.resolve({}, context, request, getResolveContext(), callback);
1249
+ },
1250
+ /** @type {LoaderContext<T>["getResolve"]} */
1251
+ getResolve(options) {
1252
+ const child = options ? resolver.withOptions(options) : resolver;
1253
+ return /** @type {ReturnType<NormalModuleLoaderContext<T>["getResolve"]>} */ (
1254
+ (context, request, callback) => {
1255
+ if (callback) {
1256
+ child.resolve(
1257
+ {},
1258
+ context,
1259
+ request,
1260
+ getResolveContext(),
1261
+ callback
1262
+ );
1263
+ } else {
1264
+ return new Promise((resolve, reject) => {
1265
+ child.resolve(
1266
+ {},
1267
+ context,
1268
+ request,
1269
+ getResolveContext(),
1270
+ (err, result) => {
1271
+ if (err) reject(err);
1272
+ else resolve(result);
1273
+ }
1274
+ );
1275
+ });
1276
+ }
1277
+ }
1278
+ );
1279
+ },
1280
+ /** @type {LoaderContext<T>["emitFile"]} */
1281
+ emitFile: (name, content, sourceMap, assetInfo) => {
1282
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1283
+
1284
+ if (!buildInfo.assets) {
1285
+ buildInfo.assets = Object.create(null);
1286
+ buildInfo.assetsInfo = new Map();
1287
+ }
1288
+
1289
+ const assets =
1290
+ /** @type {NonNullable<KnownBuildInfo["assets"]>} */
1291
+ (buildInfo.assets);
1292
+ const assetsInfo =
1293
+ /** @type {NonNullable<KnownBuildInfo["assetsInfo"]>} */
1294
+ (buildInfo.assetsInfo);
1295
+
1296
+ assets[name] = this.createSourceForAsset(
1297
+ options.context,
1298
+ name,
1299
+ content,
1300
+ sourceMap,
1301
+ compilation.compiler.root
1302
+ );
1303
+ assetsInfo.set(name, assetInfo);
1304
+ },
1305
+ addBuildDependency: (dep) => {
1306
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1307
+
1308
+ if (buildInfo.buildDependencies === undefined) {
1309
+ buildInfo.buildDependencies = new LazySet();
1310
+ }
1311
+ buildInfo.buildDependencies.add(dep);
1312
+ },
1313
+ utils,
1314
+ rootContext: options.context,
1315
+ webpack: true,
1316
+ sourceMap: Boolean(this.useSourceMap),
1317
+ mode: options.mode || "production",
1318
+ hashFunction: options.output.hashFunction,
1319
+ hashDigest: options.output.hashDigest,
1320
+ hashDigestLength: options.output.hashDigestLength,
1321
+ hashSalt: options.output.hashSalt,
1322
+ _module: this,
1323
+ _compilation: compilation,
1324
+ _compiler: compilation.compiler,
1325
+ fs
1326
+ };
1327
+
1328
+ Object.assign(loaderContext, options.loader);
1329
+ createLoaderContext(loaderContext);
1330
+
1331
+ hooks.loader.call(
1332
+ /** @type {AnyLoaderContext} */
1333
+ (loaderContext),
1334
+ this
1335
+ );
1336
+
1337
+ return /** @type {AnyLoaderContext} */ (loaderContext);
1338
+ }
1339
+
1340
+ /**
1341
+ * @param {AnyLoaderContext} loaderContext loader context
1342
+ * @param {number} index index
1343
+ * @returns {LoaderItem | null} loader
1344
+ */
1345
+ getCurrentLoader(loaderContext, index = loaderContext.loaderIndex) {
1346
+ if (
1347
+ this.loaders &&
1348
+ this.loaders.length &&
1349
+ index < this.loaders.length &&
1350
+ index >= 0 &&
1351
+ this.loaders[index]
1352
+ ) {
1353
+ return this.loaders[index];
1354
+ }
1355
+ return null;
1356
+ }
1357
+
1358
+ /**
1359
+ * @param {string} context the compilation context
1360
+ * @param {string | Buffer} content the content
1361
+ * @param {(string | RawSourceMap | null)=} sourceMap an optional source map
1362
+ * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
1363
+ * @returns {Source} the created source
1364
+ */
1365
+ createSource(context, content, sourceMap, associatedObjectForCache) {
1366
+ if (Buffer.isBuffer(content)) {
1367
+ return new RawSource(content);
1368
+ }
1369
+
1370
+ // if there is no identifier return raw source
1371
+ if (!this.identifier) {
1372
+ return new RawSource(content);
1373
+ }
1374
+
1375
+ // from here on we assume we have an identifier
1376
+ const identifier = this.identifier();
1377
+
1378
+ if (this.useSourceMap && sourceMap) {
1379
+ return new SourceMapSource(
1380
+ content,
1381
+ contextifySourceUrl(context, identifier, associatedObjectForCache),
1382
+ contextifySourceMap(context, sourceMap, associatedObjectForCache)
1383
+ );
1384
+ }
1385
+
1386
+ if (this.useSourceMap || this.useSimpleSourceMap) {
1387
+ return new OriginalSource(
1388
+ content,
1389
+ contextifySourceUrl(context, identifier, associatedObjectForCache)
1390
+ );
1391
+ }
1392
+
1393
+ return new RawSource(content);
1394
+ }
1395
+
1396
+ /**
1397
+ * @param {WebpackOptions} options webpack options
1398
+ * @param {Compilation} compilation the compilation
1399
+ * @param {ResolverWithOptions} resolver the resolver
1400
+ * @param {InputFileSystem} fs the file system
1401
+ * @param {NormalModuleCompilationHooks} hooks the hooks
1402
+ * @param {BuildCallback} callback callback function
1403
+ * @returns {void}
1404
+ */
1405
+ _doBuild(options, compilation, resolver, fs, hooks, callback) {
1406
+ const loaderContext = this._createLoaderContext(
1407
+ resolver,
1408
+ options,
1409
+ compilation,
1410
+ fs,
1411
+ hooks
1412
+ );
1413
+
1414
+ /**
1415
+ * @param {Error | null} err err
1416
+ * @param {(LoaderResultArgs | null)=} result_ result
1417
+ * @returns {void}
1418
+ */
1419
+ const processResult = (err, result_) => {
1420
+ if (err) {
1421
+ const currentLoader = this.getCurrentLoader(loaderContext);
1422
+ const error = new (getModuleBuildError())(toError(err), {
1423
+ from:
1424
+ currentLoader &&
1425
+ compilation.runtimeTemplate.requestShortener.shorten(
1426
+ currentLoader.loader
1427
+ )
1428
+ });
1429
+ return callback(error);
1430
+ }
1431
+ hooks.processResult.callAsync(
1432
+ /** @type {Result} */
1433
+ (result_),
1434
+ this,
1435
+ (hookErr, hookResult) => {
1436
+ if (hookErr) {
1437
+ // Named, so a tap's failure is not read as a loader's.
1438
+ return callback(
1439
+ new (getModuleBuildError())(toError(hookErr), {
1440
+ from: "processResult hook"
1441
+ })
1442
+ );
1443
+ }
1444
+
1445
+ finishResult(/** @type {Result} */ (hookResult));
1446
+ }
1447
+ );
1448
+ };
1449
+
1450
+ /**
1451
+ * @param {Result} result the result the hook settled on
1452
+ * @returns {void}
1453
+ */
1454
+ const finishResult = (result) => {
1455
+ const source = result[0];
1456
+ const sourceMap = result.length >= 1 ? result[1] : null;
1457
+ const extraInfo = result.length >= 2 ? result[2] : null;
1458
+
1459
+ if (!Buffer.isBuffer(source) && typeof source !== "string") {
1460
+ const currentLoader = this.getCurrentLoader(loaderContext, 0);
1461
+ const err = new Error(
1462
+ `Final loader (${
1463
+ currentLoader
1464
+ ? compilation.runtimeTemplate.requestShortener.shorten(
1465
+ currentLoader.loader
1466
+ )
1467
+ : "unknown"
1468
+ }) didn't return a Buffer or String`
1469
+ );
1470
+ const error = new (getModuleBuildError())(err);
1471
+ return callback(error);
1472
+ }
1473
+
1474
+ const isBinaryModule =
1475
+ this.generatorOptions && this.generatorOptions.binary !== undefined
1476
+ ? this.generatorOptions.binary
1477
+ : this.binary;
1478
+
1479
+ this._source = this.createSource(
1480
+ options.context,
1481
+ isBinaryModule ? asBuffer(source) : asString(source),
1482
+ sourceMap,
1483
+ compilation.compiler.root
1484
+ );
1485
+ if (this._sourceSizes !== undefined) this._sourceSizes.clear();
1486
+ /** @type {PreparsedAst | null} */
1487
+ this._ast =
1488
+ typeof extraInfo === "object" &&
1489
+ extraInfo !== null &&
1490
+ extraInfo.webpackAST !== undefined
1491
+ ? extraInfo.webpackAST
1492
+ : null;
1493
+ return callback();
1494
+ };
1495
+
1496
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1497
+
1498
+ buildInfo.fileDependencies = new LazySet();
1499
+ buildInfo.contextDependencies = new LazySet();
1500
+ buildInfo.missingDependencies = new LazySet();
1501
+ buildInfo.cacheable = true;
1502
+
1503
+ try {
1504
+ hooks.beforeLoaders.call(
1505
+ this.loaders,
1506
+ this,
1507
+ /** @type {AnyLoaderContext} */
1508
+ (loaderContext)
1509
+ );
1510
+ } catch (err) {
1511
+ processResult(/** @type {Error} */ (err));
1512
+ return;
1513
+ }
1514
+
1515
+ if (this.loaders.length > 0) {
1516
+ /** @type {NormalModuleBuildInfo} */
1517
+ (this.buildInfo).buildDependencies = new LazySet();
1518
+ }
1519
+
1520
+ runLoaders(
1521
+ {
1522
+ resource: this.resource,
1523
+ loaders: this.loaders,
1524
+ context: loaderContext,
1525
+ /**
1526
+ * @param {AnyLoaderContext} loaderContext the loader context
1527
+ * @param {string} resourcePath the resource Path
1528
+ * @param {(err: Error | null, ...args: LoaderResultArgs) => void} callback callback
1529
+ * @returns {Promise<void>}
1530
+ */
1531
+ processResource: async (loaderContext, resourcePath, callback) => {
1532
+ /** @type {ReadResource} */
1533
+ const readResource = (resourcePath, getLoaderContext) => {
1534
+ const scheme = getScheme(resourcePath);
1535
+ return new Promise((resolve, reject) => {
1536
+ hooks.readResource
1537
+ .for(scheme)
1538
+ .callAsync(getLoaderContext(resourcePath), (err, result) => {
1539
+ if (err) {
1540
+ reject(err);
1541
+ } else {
1542
+ if (typeof result !== "string" && !result) {
1543
+ return reject(
1544
+ new (getUnhandledSchemeError())(
1545
+ /** @type {string} */
1546
+ (scheme),
1547
+ resourcePath
1548
+ )
1549
+ );
1550
+ }
1551
+ resolve(result);
1552
+ }
1553
+ });
1554
+ });
1555
+ };
1556
+ try {
1557
+ const result = await readResource(
1558
+ resourcePath,
1559
+ () => loaderContext
1560
+ );
1561
+ if (
1562
+ this.extractSourceMap &&
1563
+ (this.useSourceMap || this.useSimpleSourceMap)
1564
+ ) {
1565
+ try {
1566
+ const { source, sourceMap } = await getExtractSourceMap()(
1567
+ result,
1568
+ resourcePath,
1569
+ /** @type {ReadResource} */
1570
+ (resourcePath) =>
1571
+ readResource(
1572
+ resourcePath,
1573
+ (resourcePath) =>
1574
+ /** @type {AnyLoaderContext} */
1575
+ ({
1576
+ addDependency(dependency) {
1577
+ loaderContext.addDependency(dependency);
1578
+ },
1579
+ fs: loaderContext.fs,
1580
+ _module: undefined,
1581
+ resourcePath,
1582
+ resource: resourcePath
1583
+ })
1584
+ ).catch((err) => {
1585
+ throw new Error(
1586
+ `Failed to parse source map. ${
1587
+ /** @type {Error} */ (err).message
1588
+ }`
1589
+ );
1590
+ })
1591
+ );
1592
+ return callback(null, source, sourceMap);
1593
+ } catch (err) {
1594
+ this.addWarning(
1595
+ new (getModuleWarning())(/** @type {Error} */ (err))
1596
+ );
1597
+ return callback(null, result);
1598
+ }
1599
+ }
1600
+ return callback(null, result);
1601
+ } catch (error) {
1602
+ return callback(/** @type {Error} */ (error));
1603
+ }
1604
+ }
1605
+ },
1606
+ (err, result) => {
1607
+ // Cleanup loaderContext to avoid leaking memory in ICs
1608
+ loaderContext._compilation =
1609
+ loaderContext._compiler =
1610
+ loaderContext._module =
1611
+ loaderContext.fs =
1612
+ /** @type {never} */
1613
+ (undefined);
1614
+
1615
+ if (!result) {
1616
+ /** @type {NormalModuleBuildInfo} */
1617
+ (this.buildInfo).cacheable = false;
1618
+ return processResult(
1619
+ err || new Error("No result from loader-runner processing"),
1620
+ null
1621
+ );
1622
+ }
1623
+
1624
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1625
+
1626
+ const fileDependencies =
1627
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1628
+ (buildInfo.fileDependencies);
1629
+ const contextDependencies =
1630
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1631
+ (buildInfo.contextDependencies);
1632
+ const missingDependencies =
1633
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1634
+ (buildInfo.missingDependencies);
1635
+
1636
+ fileDependencies.addAll(result.fileDependencies);
1637
+ contextDependencies.addAll(result.contextDependencies);
1638
+ missingDependencies.addAll(result.missingDependencies);
1639
+ for (const loader of this.loaders) {
1640
+ const buildDependencies =
1641
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["buildDependencies"]>} */
1642
+ (buildInfo.buildDependencies);
1643
+
1644
+ buildDependencies.add(loader.loader);
1645
+ }
1646
+ buildInfo.cacheable = buildInfo.cacheable && result.cacheable;
1647
+ if (result.notCacheableReasons.length > 0) {
1648
+ getBuildDiagnostics(buildInfo).notCacheableReasons =
1649
+ result.notCacheableReasons;
1650
+ }
1651
+ processResult(err, result.result);
1652
+ }
1653
+ );
1654
+ }
1655
+
1656
+ /**
1657
+ * Marks the module as failed, so what it generates says so. A tap or a
1658
+ * loader may fail with anything, and what reads the failure expects an error.
1659
+ * @param {EXPECTED_ANY} error what the module failed with
1660
+ * @returns {void}
1661
+ */
1662
+ markModuleAsErrored(error) {
1663
+ // Restore build meta from successful build to keep importing state
1664
+ this.buildMeta = { ...this._lastSuccessfulBuildMeta };
1665
+ this.error = toError(error);
1666
+ this.addError(this.error);
1667
+ }
1668
+
1669
+ /**
1670
+ * An absolute path string is a prefix of `content`; a relative one is a glob
1671
+ * matched against the resource path, without loaders and query.
1672
+ * @param {string | RegExp | NoParseFn} rule rule
1673
+ * @param {string} content content
1674
+ * @returns {boolean} result
1675
+ */
1676
+ applyNoParseRule(rule, content) {
1677
+ if (typeof rule === "string") {
1678
+ if (ABSOLUTE_PATH_REGEXP.test(rule)) return content.startsWith(rule);
1679
+ let match = noParseGlobMatchers.get(rule);
1680
+ if (match === undefined) {
1681
+ const matcher = getCreatePathGlobMatcher()(rule);
1682
+ if (matcher === null) {
1683
+ throw new Error(`Invalid glob pattern in module.noParse: ${rule}`);
1684
+ }
1685
+ match = matcher;
1686
+ noParseGlobMatchers.set(rule, match);
1687
+ }
1688
+ return match(parseResource(this.resource).path);
1689
+ }
1690
+
1691
+ if (typeof rule === "function") {
1692
+ return rule(content);
1693
+ }
1694
+ // we assume rule is a regexp
1695
+ return rule.test(content);
1696
+ }
1697
+
1698
+ /**
1699
+ * @param {undefined | NoParse} noParseRule no parse rule
1700
+ * @param {string} request request
1701
+ * @returns {boolean} check if module should not be parsed, returns "true" if the module should !not! be parsed, returns "false" if the module !must! be parsed
1702
+ */
1703
+ shouldPreventParsing(noParseRule, request) {
1704
+ // if no noParseRule exists, return false
1705
+ // the module !must! be parsed.
1706
+ if (!noParseRule) {
1707
+ return false;
1708
+ }
1709
+
1710
+ // we only have one rule to check
1711
+ if (!Array.isArray(noParseRule)) {
1712
+ // returns "true" if the module is !not! to be parsed
1713
+ return this.applyNoParseRule(noParseRule, request);
1714
+ }
1715
+
1716
+ for (let i = 0; i < noParseRule.length; i++) {
1717
+ const rule = noParseRule[i];
1718
+ // early exit on first truthy match
1719
+ // this module is !not! to be parsed
1720
+ if (this.applyNoParseRule(rule, request)) {
1721
+ return true;
1722
+ }
1723
+ }
1724
+ // no match found, so this module !should! be parsed
1725
+ return false;
1726
+ }
1727
+
1728
+ /**
1729
+ * @param {Compilation} compilation compilation
1730
+ * @private
1731
+ */
1732
+ _initBuildHash(compilation) {
1733
+ const hash = createHash(compilation.outputOptions.hashFunction);
1734
+ if (this._source) {
1735
+ hash.update("source");
1736
+ this._source.updateHash(hash);
1737
+ // WHY: hashing reads the bytes, so the source now holds its content
1738
+ // as a string and as a buffer. Dropping one is only a win where the
1739
+ // buffer is the copy: a map-carrying source keeps the buffer and
1740
+ // drops the string, which the generator then rebuilds.
1741
+ // Feature-detected, since `clearCache` landed in webpack-sources 3.5.
1742
+ if (
1743
+ !this.useSourceMap &&
1744
+ !this.useSimpleSourceMap &&
1745
+ typeof this._source.clearCache === "function"
1746
+ ) {
1747
+ this._source.clearCache(CLEAR_SOURCE_COPIES);
1748
+ }
1749
+ }
1750
+ hash.update("meta");
1751
+ hash.update(JSON.stringify(this.buildMeta));
1752
+ /** @type {NormalModuleBuildInfo} */
1753
+ (this.buildInfo).hash = hash.digest("hex");
1754
+ }
1755
+
1756
+ /**
1757
+ * Builds the module using the provided compilation context.
1758
+ * @param {WebpackOptions} options webpack options
1759
+ * @param {Compilation} compilation the compilation
1760
+ * @param {ResolverWithOptions} resolver the resolver
1761
+ * @param {InputFileSystem} fs the file system
1762
+ * @param {BuildCallback} callback callback function
1763
+ * @returns {void}
1764
+ */
1765
+ build(options, compilation, resolver, fs, callback) {
1766
+ this._forceBuild = false;
1767
+ this._source = null;
1768
+ if (this._sourceSizes !== undefined) this._sourceSizes.clear();
1769
+ this._sourceTypes = undefined;
1770
+ this._ast = null;
1771
+ this.error = null;
1772
+ this.clearWarningsAndErrors();
1773
+ this.clearDependenciesAndBlocks();
1774
+ this.buildMeta = {
1775
+ exportsType: undefined,
1776
+ defaultObject: undefined,
1777
+ strictHarmonyModule: undefined,
1778
+ async: undefined
1779
+ };
1780
+ this.buildInfo = {
1781
+ cacheable: false,
1782
+ parsed: true,
1783
+ fileDependencies: undefined,
1784
+ contextDependencies: undefined,
1785
+ missingDependencies: undefined,
1786
+ buildDependencies: undefined,
1787
+ valueDependencies: undefined,
1788
+ hash: undefined,
1789
+ assets: undefined,
1790
+ assetsInfo: undefined,
1791
+ snapshot: undefined,
1792
+ strict: undefined,
1793
+ exportsArgument: undefined,
1794
+ moduleArgument: undefined,
1795
+ topLevelDeclarations: undefined,
1796
+ pureFunctions: undefined,
1797
+ inlineExports: undefined,
1798
+ moduleConcatenationBailout: undefined,
1799
+ moduleConcatenationRootBailout: undefined,
1800
+ diagnostics: undefined,
1801
+ needCreateRequire: undefined,
1802
+ usesTopLevelUsingDeclaration: undefined
1803
+ };
1804
+
1805
+ const startTime = compilation.compiler.fsStartTime || Date.now();
1806
+
1807
+ const hooks = NormalModule.getCompilationHooks(compilation);
1808
+
1809
+ return this._doBuild(options, compilation, resolver, fs, hooks, (err) => {
1810
+ // if we have an error mark module as failed and exit
1811
+ if (err) {
1812
+ this.markModuleAsErrored(err);
1813
+ this._initBuildHash(compilation);
1814
+ return callback();
1815
+ }
1816
+
1817
+ /**
1818
+ * @param {Error} e error
1819
+ * @returns {void}
1820
+ */
1821
+ const handleParseError = (e) => {
1822
+ const source = /** @type {Source} */ (this._source).source();
1823
+ const loaders = this.loaders.map((item) =>
1824
+ contextify(options.context, item.loader, compilation.compiler.root)
1825
+ );
1826
+ const error = new (getModuleParseError())(
1827
+ source,
1828
+ e,
1829
+ loaders,
1830
+ this.type
1831
+ );
1832
+ this.markModuleAsErrored(error);
1833
+ this._initBuildHash(compilation);
1834
+ return callback();
1835
+ };
1836
+
1837
+ const handleParseResult = () => {
1838
+ this.dependencies.sort(
1839
+ concatComparators(
1840
+ Dependency.compareLocations,
1841
+ keepOriginalOrder(this.dependencies)
1842
+ )
1843
+ );
1844
+ sortWithSourceOrder(this.dependencies, new WeakMap());
1845
+ this._initBuildHash(compilation);
1846
+ this._lastSuccessfulBuildMeta =
1847
+ /** @type {BuildMeta} */
1848
+ (this.buildMeta);
1849
+ return handleBuildDone();
1850
+ };
1851
+
1852
+ const handleBuildDone = () => {
1853
+ try {
1854
+ hooks.beforeSnapshot.call(this);
1855
+ } catch (err) {
1856
+ this.markModuleAsErrored(err);
1857
+ return callback();
1858
+ }
1859
+
1860
+ const snapshotOptions = compilation.options.snapshot.module;
1861
+ const { cacheable } = /** @type {NormalModuleBuildInfo} */ (
1862
+ this.buildInfo
1863
+ );
1864
+ if (!cacheable || !snapshotOptions) {
1865
+ return callback();
1866
+ }
1867
+ // add warning for all non-absolute paths in fileDependencies, etc
1868
+ // This makes it easier to find problems with watching and/or caching
1869
+ /** @type {undefined | Set<string>} */
1870
+ let nonAbsoluteDependencies;
1871
+ /**
1872
+ * @param {FileSystemDependencies} deps deps
1873
+ */
1874
+ const checkDependencies = (deps) => {
1875
+ for (const dep of deps) {
1876
+ if (!ABSOLUTE_PATH_REGEXP.test(dep)) {
1877
+ if (nonAbsoluteDependencies === undefined) {
1878
+ nonAbsoluteDependencies = new Set();
1879
+ }
1880
+ nonAbsoluteDependencies.add(dep);
1881
+ deps.delete(dep);
1882
+ try {
1883
+ const depWithoutGlob = dep.replace(/[\\/]?\*.*$/, "");
1884
+ const absolute = join(
1885
+ compilation.fileSystemInfo.fs,
1886
+ /** @type {string} */
1887
+ (this.context),
1888
+ depWithoutGlob
1889
+ );
1890
+ if (absolute !== dep && ABSOLUTE_PATH_REGEXP.test(absolute)) {
1891
+ (depWithoutGlob !== dep
1892
+ ? /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1893
+ (
1894
+ /** @type {NormalModuleBuildInfo} */
1895
+ (this.buildInfo).contextDependencies
1896
+ )
1897
+ : deps
1898
+ ).add(absolute);
1899
+ }
1900
+ } catch (_err) {
1901
+ // ignore
1902
+ }
1903
+ }
1904
+ }
1905
+ };
1906
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
1907
+ const fileDependencies =
1908
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["fileDependencies"]>} */
1909
+ (buildInfo.fileDependencies);
1910
+ const contextDependencies =
1911
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["contextDependencies"]>} */
1912
+ (buildInfo.contextDependencies);
1913
+ const missingDependencies =
1914
+ /** @type {NonNullable<KnownNormalModuleBuildInfo["missingDependencies"]>} */
1915
+ (buildInfo.missingDependencies);
1916
+ checkDependencies(fileDependencies);
1917
+ checkDependencies(missingDependencies);
1918
+ checkDependencies(contextDependencies);
1919
+ if (nonAbsoluteDependencies !== undefined) {
1920
+ const InvalidDependenciesModuleWarning =
1921
+ getInvalidDependenciesModuleWarning();
1922
+ this.addWarning(
1923
+ new InvalidDependenciesModuleWarning(this, nonAbsoluteDependencies)
1924
+ );
1925
+ }
1926
+ // convert file/context/missingDependencies into filesystem snapshot
1927
+ compilation.fileSystemInfo.createSnapshot(
1928
+ startTime,
1929
+ fileDependencies,
1930
+ contextDependencies,
1931
+ missingDependencies,
1932
+ snapshotOptions,
1933
+ (err, snapshot) => {
1934
+ if (err) {
1935
+ this.markModuleAsErrored(err);
1936
+ return;
1937
+ }
1938
+ buildInfo.fileDependencies = undefined;
1939
+ buildInfo.contextDependencies = undefined;
1940
+ buildInfo.missingDependencies = undefined;
1941
+ buildInfo.snapshot = snapshot;
1942
+ return callback();
1943
+ }
1944
+ );
1945
+ };
1946
+
1947
+ hooks.beforeParse.callAsync(this, (err) => {
1948
+ if (err) {
1949
+ this.markModuleAsErrored(err);
1950
+ this._initBuildHash(compilation);
1951
+ return callback();
1952
+ }
1953
+
1954
+ // check if this module should !not! be parsed.
1955
+ // if so, exit here;
1956
+ const noParseRule = options.module && options.module.noParse;
1957
+ /** @type {boolean} */
1958
+ let preventParsing;
1959
+ try {
1960
+ preventParsing = this.shouldPreventParsing(noParseRule, this.request);
1961
+ } catch (err_) {
1962
+ this.markModuleAsErrored(err_);
1963
+ this._initBuildHash(compilation);
1964
+ return callback();
1965
+ }
1966
+ if (preventParsing) {
1967
+ // We assume that we need module and exports
1968
+ /** @type {NormalModuleBuildInfo} */
1969
+ (this.buildInfo).parsed = false;
1970
+ this._initBuildHash(compilation);
1971
+ return handleBuildDone();
1972
+ }
1973
+
1974
+ try {
1975
+ const source = /** @type {Source} */ (this._source).source();
1976
+ /** @type {Parser} */
1977
+ (this.parser).parse(this._ast || source, {
1978
+ // TODO in the next major release: remove the prototype, it only
1979
+ // carries the deprecated spellings of three of these
1980
+ __proto__: DEPRECATED_PARSER_STATE_ALIASES,
1981
+ source,
1982
+ current: this,
1983
+ module: this,
1984
+ compilation,
1985
+ options,
1986
+ esmNamedExports: undefined,
1987
+ esmStarExports: undefined,
1988
+ lastESMImportOrder: undefined,
1989
+ localModules: undefined
1990
+ });
1991
+ } catch (parseErr) {
1992
+ handleParseError(/** @type {Error} */ (parseErr));
1993
+ return;
1994
+ }
1995
+ handleParseResult();
1996
+ });
1997
+ });
1998
+ }
1999
+
2000
+ /**
2001
+ * Returns the reason this module cannot be concatenated, when one exists.
2002
+ * @param {ConcatenationBailoutReasonContext} context context
2003
+ * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
2004
+ */
2005
+ getConcatenationBailoutReason(context) {
2006
+ return /** @type {Generator} */ (
2007
+ this.generator
2008
+ ).getConcatenationBailoutReason(this, context);
2009
+ }
2010
+
2011
+ /**
2012
+ * Gets side effects connection state.
2013
+ * @param {ModuleGraph} moduleGraph the module graph
2014
+ * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
2015
+ */
2016
+ getSideEffectsConnectionState(moduleGraph) {
2017
+ // Each call owns its Tarjan bookkeeping; re-entrant calls (e.g.
2018
+ // `ConcatenatedModule.getSideEffectsConnectionState` delegating back
2019
+ // through here) can't clobber the outer walk.
2020
+ return walkSideEffects(this, moduleGraph);
2021
+ }
2022
+
2023
+ /**
2024
+ * Returns the source types this module can generate.
2025
+ * @returns {SourceTypes} types available (do not mutate)
2026
+ */
2027
+ getSourceTypes() {
2028
+ if (this._sourceTypes === undefined) {
2029
+ this._sourceTypes = /** @type {Generator} */ (this.generator).getTypes(
2030
+ this
2031
+ );
2032
+ }
2033
+ return this._sourceTypes;
2034
+ }
2035
+
2036
+ /**
2037
+ * Freshly recomputed source types when they depend on incoming connections, for chunk-graph cache invalidation; undefined otherwise. #20800
2038
+ * @returns {SourceTypes | undefined} source types or undefined
2039
+ */
2040
+ getReferencedSourceTypes() {
2041
+ const generator = /** @type {Generator} */ (this.generator);
2042
+ // Bypass the _sourceTypes cache: it may be stale when the module is not rebuilt.
2043
+ return generator.getTypesDependOnIncomingConnections()
2044
+ ? generator.getTypes(this)
2045
+ : undefined;
2046
+ }
2047
+
2048
+ /**
2049
+ * Generates code and runtime requirements for this module.
2050
+ * @param {CodeGenerationContext} context context for code generation
2051
+ * @returns {CodeGenerationResult} result
2052
+ */
2053
+ codeGeneration({
2054
+ dependencyTemplates,
2055
+ runtimeTemplate,
2056
+ moduleGraph,
2057
+ chunkGraph,
2058
+ runtime,
2059
+ concatenationScope,
2060
+ codeGenerationResults,
2061
+ sourceTypes
2062
+ }) {
2063
+ /** @type {RuntimeRequirements} */
2064
+ const runtimeRequirements = new Set();
2065
+
2066
+ const { parsed } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
2067
+
2068
+ if (!parsed) {
2069
+ runtimeRequirements.add(RuntimeGlobals.module);
2070
+ runtimeRequirements.add(RuntimeGlobals.exports);
2071
+ runtimeRequirements.add(RuntimeGlobals.thisAsExports);
2072
+ }
2073
+
2074
+ /** @type {CodeGenerationResult} */
2075
+ const resultEntry = {
2076
+ sources: new Map(),
2077
+ runtimeRequirements,
2078
+ data: undefined,
2079
+ hash: undefined
2080
+ };
2081
+
2082
+ const getData = () => {
2083
+ if (resultEntry.data === undefined) resultEntry.data = new Map();
2084
+ return resultEntry.data;
2085
+ };
2086
+
2087
+ for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
2088
+ // TODO in the next major release: make generateError required
2089
+ const generator =
2090
+ /** @type {Generator & { generateError?: GenerateErrorFn }} */
2091
+ (this.generator);
2092
+ const source = this.error
2093
+ ? generator.generateError
2094
+ ? generator.generateError(this.error, this, {
2095
+ dependencyTemplates,
2096
+ runtimeTemplate,
2097
+ moduleGraph,
2098
+ chunkGraph,
2099
+ runtimeRequirements,
2100
+ runtime,
2101
+ concatenationScope,
2102
+ codeGenerationResults,
2103
+ getData,
2104
+ type
2105
+ })
2106
+ : new RawSource(
2107
+ getGenerator().throwBuildErrorCode(
2108
+ this.error,
2109
+ undefined,
2110
+ runtimeTemplate.requestShortener
2111
+ )
2112
+ )
2113
+ : generator.generate(this, {
2114
+ dependencyTemplates,
2115
+ runtimeTemplate,
2116
+ moduleGraph,
2117
+ chunkGraph,
2118
+ runtimeRequirements,
2119
+ runtime,
2120
+ concatenationScope,
2121
+ codeGenerationResults,
2122
+ getData,
2123
+ type
2124
+ });
2125
+
2126
+ if (source) {
2127
+ resultEntry.sources.set(type, new CachedSource(source));
2128
+ }
2129
+ }
2130
+
2131
+ return resultEntry;
2132
+ }
2133
+
2134
+ /**
2135
+ * Gets the original source.
2136
+ * @returns {Source | null} the original source for the module before webpack transformation
2137
+ */
2138
+ originalSource() {
2139
+ return this._source;
2140
+ }
2141
+
2142
+ /**
2143
+ * Invalidates the cached state associated with this value.
2144
+ * @returns {void}
2145
+ */
2146
+ invalidateBuild() {
2147
+ this._forceBuild = true;
2148
+ }
2149
+
2150
+ /**
2151
+ * Checks whether the module needs to be rebuilt for the current build state.
2152
+ * @param {NeedBuildContext} context context info
2153
+ * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
2154
+ * @returns {void}
2155
+ */
2156
+ needBuild(context, callback) {
2157
+ const { fileSystemInfo, compilation, valueCacheVersions } = context;
2158
+ // build if enforced
2159
+ if (this._forceBuild) return callback(null, true);
2160
+
2161
+ // always try to build in case of an error
2162
+ if (this.error) return callback(null, true);
2163
+
2164
+ const { cacheable, snapshot, valueDependencies } =
2165
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
2166
+
2167
+ // always build when module is not cacheable
2168
+ if (!cacheable) return callback(null, true);
2169
+
2170
+ // build when there is no snapshot to check
2171
+ if (!snapshot) return callback(null, true);
2172
+
2173
+ // build when valueDependencies have changed
2174
+ if (valueDependencies) {
2175
+ if (!valueCacheVersions) return callback(null, true);
2176
+ for (const [key, value] of valueDependencies) {
2177
+ if (value === undefined) return callback(null, true);
2178
+ const current = valueCacheVersions.get(key);
2179
+ if (
2180
+ value !== current &&
2181
+ (typeof value === "string" ||
2182
+ typeof current === "string" ||
2183
+ current === undefined ||
2184
+ !isSubset(value, current))
2185
+ ) {
2186
+ return callback(null, true);
2187
+ }
2188
+ }
2189
+ }
2190
+
2191
+ // check snapshot for validity
2192
+ fileSystemInfo.checkSnapshotValid(snapshot, (err, valid) => {
2193
+ if (err) return callback(err);
2194
+ if (!valid) return callback(null, true);
2195
+ const hooks = NormalModule.getCompilationHooks(compilation);
2196
+ hooks.needBuild.callAsync(this, context, (err, needBuild) => {
2197
+ if (err) {
2198
+ return callback(
2199
+ HookWebpackError.makeWebpackError(
2200
+ err,
2201
+ "NormalModule.getCompilationHooks().needBuild"
2202
+ )
2203
+ );
2204
+ }
2205
+ callback(null, Boolean(needBuild));
2206
+ });
2207
+ });
2208
+ }
2209
+
2210
+ /**
2211
+ * Returns the estimated size for the requested source type.
2212
+ * @param {string=} type the source type for which the size should be estimated
2213
+ * @returns {number} the estimated size of the module (must be non-zero)
2214
+ */
2215
+ size(type) {
2216
+ const cachedSize =
2217
+ this._sourceSizes === undefined ? undefined : this._sourceSizes.get(type);
2218
+ if (cachedSize !== undefined) {
2219
+ return cachedSize;
2220
+ }
2221
+ const size = Math.max(
2222
+ 1,
2223
+ /** @type {Generator} */ (this.generator).getSize(this, type)
2224
+ );
2225
+ if (this._sourceSizes === undefined) {
2226
+ this._sourceSizes = new Map();
2227
+ }
2228
+ this._sourceSizes.set(type, size);
2229
+ return size;
2230
+ }
2231
+
2232
+ /**
2233
+ * Adds the provided file dependencies to the module.
2234
+ * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
2235
+ * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
2236
+ * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
2237
+ * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
2238
+ */
2239
+ addCacheDependencies(
2240
+ fileDependencies,
2241
+ contextDependencies,
2242
+ missingDependencies,
2243
+ buildDependencies
2244
+ ) {
2245
+ const { snapshot, buildDependencies: buildDeps } =
2246
+ /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
2247
+ if (snapshot) {
2248
+ fileDependencies.addAll(snapshot.getFileIterable());
2249
+ contextDependencies.addAll(snapshot.getContextIterable());
2250
+ missingDependencies.addAll(snapshot.getMissingIterable());
2251
+ } else {
2252
+ const {
2253
+ fileDependencies: fileDeps,
2254
+ contextDependencies: contextDeps,
2255
+ missingDependencies: missingDeps
2256
+ } = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
2257
+ if (fileDeps !== undefined) fileDependencies.addAll(fileDeps);
2258
+ if (contextDeps !== undefined) contextDependencies.addAll(contextDeps);
2259
+ if (missingDeps !== undefined) missingDependencies.addAll(missingDeps);
2260
+ }
2261
+ if (buildDeps !== undefined) {
2262
+ buildDependencies.addAll(buildDeps);
2263
+ }
2264
+ }
2265
+
2266
+ /**
2267
+ * Updates the hash with the data contributed by this instance.
2268
+ * @param {Hash} hash the hash used to track dependencies
2269
+ * @param {UpdateHashContext} context context
2270
+ * @returns {void}
2271
+ */
2272
+ updateHash(hash, context) {
2273
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (this.buildInfo);
2274
+ hash.update(
2275
+ /** @type {string} */
2276
+ (buildInfo.hash)
2277
+ );
2278
+ // Recompute the source types, so a change in the incoming connections reaches
2279
+ // the hash and invalidates the code-generation cache.
2280
+ // https://github.com/webpack/webpack/issues/20800
2281
+ this._sourceTypes = undefined;
2282
+ for (const type of this.getSourceTypes()) {
2283
+ hash.update(type);
2284
+ }
2285
+ /** @type {Generator} */
2286
+ (this.generator).updateHash(hash, {
2287
+ module: this,
2288
+ ...context
2289
+ });
2290
+ super.updateHash(hash, context);
2291
+ }
2292
+
2293
+ /**
2294
+ * Serializes this instance into the provided serializer context.
2295
+ * @param {ObjectSerializerContext} context context
2296
+ */
2297
+ serialize(context) {
2298
+ const { write } = context;
2299
+ // deserialize
2300
+ write(this._source);
2301
+ write(this.error);
2302
+ write(this._lastSuccessfulBuildMeta);
2303
+ write(this._forceBuild);
2304
+ write(this.hot);
2305
+ super.serialize(context);
2306
+ }
2307
+
2308
+ /**
2309
+ * @param {ObjectDeserializerContext} context context
2310
+ * @returns {NormalModule} module
2311
+ */
2312
+ static deserialize(context) {
2313
+ // `new this` so subclasses without extra constructor options inherit this method
2314
+ const obj = new this(
2315
+ // the rest is restored by `deserialize` and `updateCacheModule`
2316
+ /** @type {NormalModuleCreateData} */ ({
2317
+ type: "",
2318
+ resource: "",
2319
+ context: ""
2320
+ })
2321
+ );
2322
+ obj.deserialize(context);
2323
+ return obj;
2324
+ }
2325
+
2326
+ /**
2327
+ * Restores this instance from the provided deserializer context.
2328
+ * @param {ObjectDeserializerContext} context context
2329
+ */
2330
+ deserialize(context) {
2331
+ const { read } = context;
2332
+ this._source = read();
2333
+ this.error = read();
2334
+ this._lastSuccessfulBuildMeta = read();
2335
+ this._forceBuild = read();
2336
+ this.hot = read();
2337
+ super.deserialize(context);
2338
+ }
2339
+ }
2340
+
2341
+ makeSerializable(NormalModule, [
2342
+ "webpack/lib/module/NormalModule",
2343
+ // TODO in the next major release: remove, they restore pre-move cache packs
2344
+ "webpack/lib/NormalModule"
2345
+ ]);
2346
+
2347
+ /** @type {Set<keyof ModuleKinds>} */
2348
+ NormalModule.KINDS = new Set([...Module.KINDS, "normal"]);
2349
+
2350
+ module.exports = NormalModule;