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