webpack 5.97.1 → 5.104.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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -5,10 +5,15 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const querystring = require("querystring");
8
9
  const parseJson = require("json-parse-even-better-errors");
9
10
  const { getContext, runLoaders } = require("loader-runner");
10
- const querystring = require("querystring");
11
- const { HookMap, SyncHook, AsyncSeriesBailHook } = require("tapable");
11
+ const {
12
+ AsyncSeriesBailHook,
13
+ HookMap,
14
+ SyncHook,
15
+ SyncWaterfallHook
16
+ } = require("tapable");
12
17
  const {
13
18
  CachedSource,
14
19
  OriginalSource,
@@ -33,66 +38,72 @@ const { isSubset } = require("./util/SetHelpers");
33
38
  const { getScheme } = require("./util/URLAbsoluteSpecifier");
34
39
  const {
35
40
  compareLocations,
36
- concatComparators,
37
41
  compareSelect,
38
- keepOriginalOrder
42
+ concatComparators,
43
+ keepOriginalOrder,
44
+ sortWithSourceOrder
39
45
  } = require("./util/comparators");
40
46
  const createHash = require("./util/createHash");
41
47
  const { createFakeHook } = require("./util/deprecation");
42
48
  const { join } = require("./util/fs");
43
49
  const {
44
- contextify,
45
50
  absolutify,
51
+ contextify,
46
52
  makePathsRelative
47
53
  } = require("./util/identifier");
48
54
  const makeSerializable = require("./util/makeSerializable");
49
55
  const memoize = require("./util/memoize");
50
56
 
57
+ /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
58
+ /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
51
59
  /** @typedef {import("webpack-sources").Source} Source */
52
- /** @typedef {import("../declarations/WebpackOptions").Mode} Mode */
60
+ /** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
53
61
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
54
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
55
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
56
- /** @typedef {import("./Compiler")} Compiler */
62
+ /** @typedef {import("../declarations/WebpackOptions").NoParse} NoParse */
63
+ /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
57
64
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
58
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
59
65
  /** @typedef {import("./Generator")} Generator */
66
+ /** @typedef {import("./Generator").GenerateErrorFn} GenerateErrorFn */
60
67
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
68
+ /** @typedef {import("./Module").FileSystemDependencies} FileSystemDependencies */
61
69
  /** @typedef {import("./Module").BuildMeta} BuildMeta */
62
70
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
63
71
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
72
+ /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
64
73
  /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
65
74
  /** @typedef {import("./Module").KnownBuildInfo} KnownBuildInfo */
66
75
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
76
+ /** @typedef {import("./Module").LibIdent} LibIdent */
77
+ /** @typedef {import("./Module").NameForCondition} NameForCondition */
67
78
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
68
- /** @typedef {import("./Generator").SourceTypes} SourceTypes */
79
+ /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
80
+ /** @typedef {import("./Module").BuildCallback} BuildCallback */
81
+ /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
82
+ /** @typedef {import("./Module").SourceType} SourceType */
83
+ /** @typedef {import("./Module").SourceTypes} SourceTypes */
69
84
  /** @typedef {import("./Module").UnsafeCacheData} UnsafeCacheData */
70
85
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
71
86
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
72
- /** @typedef {import("./ModuleTypeConstants").JavaScriptModuleTypes} JavaScriptModuleTypes */
73
87
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
74
- /** @typedef {import("./NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
88
+ /** @typedef {import("./NormalModuleFactory").NormalModuleTypes} NormalModuleTypes */
89
+ /** @typedef {import("./NormalModuleFactory").ResourceSchemeData} ResourceSchemeData */
75
90
  /** @typedef {import("./Parser")} Parser */
91
+ /** @typedef {import("./Parser").PreparsedAst} PreparsedAst */
76
92
  /** @typedef {import("./RequestShortener")} RequestShortener */
77
- /** @typedef {import("./ResolverFactory").ResolveContext} ResolveContext */
78
93
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
79
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
80
- /** @typedef {import("./logging/Logger").Logger} WebpackLogger */
81
94
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
82
95
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
83
96
  /** @typedef {import("./util/Hash")} Hash */
84
97
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
85
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
86
- /** @typedef {import("./util/createHash").Algorithm} Algorithm */
98
+ /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
99
+ /** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
87
100
  /**
88
101
  * @template T
89
102
  * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook
90
103
  */
91
104
 
92
- /** @typedef {{[k: string]: any}} ParserOptions */
93
- /** @typedef {{[k: string]: any}} GeneratorOptions */
94
-
95
- /** @typedef {UnsafeCacheData & { parser: undefined | Parser, parserOptions: undefined | ParserOptions, generator: undefined | Generator, generatorOptions: undefined | GeneratorOptions }} NormalModuleUnsafeCacheData */
105
+ /** @typedef {{ [k: string]: EXPECTED_ANY }} ParserOptions */
106
+ /** @typedef {{ [k: string]: EXPECTED_ANY }} GeneratorOptions */
96
107
 
97
108
  /**
98
109
  * @template T
@@ -104,21 +115,12 @@ const memoize = require("./util/memoize");
104
115
  * @typedef {import("../declarations/LoaderContext").NormalModuleLoaderContext<T>} NormalModuleLoaderContext
105
116
  */
106
117
 
107
- /**
108
- * @typedef {object} SourceMap
109
- * @property {number} version
110
- * @property {string[]} sources
111
- * @property {string} mappings
112
- * @property {string=} file
113
- * @property {string=} sourceRoot
114
- * @property {string[]=} sourcesContent
115
- * @property {string[]=} names
116
- * @property {string=} debugId
117
- */
118
-
119
118
  const getInvalidDependenciesModuleWarning = memoize(() =>
120
119
  require("./InvalidDependenciesModuleWarning")
121
120
  );
121
+
122
+ const getExtractSourceMap = memoize(() => require("./util/extractSourceMap"));
123
+
122
124
  const getValidate = memoize(() => require("schema-utils").validate);
123
125
 
124
126
  const ABSOLUTE_PATH_REGEX = /^([a-zA-Z]:\\|\\\\|\/)/;
@@ -126,15 +128,15 @@ const ABSOLUTE_PATH_REGEX = /^([a-zA-Z]:\\|\\\\|\/)/;
126
128
  /**
127
129
  * @typedef {object} LoaderItem
128
130
  * @property {string} loader
129
- * @property {any} options
130
- * @property {string?} ident
131
- * @property {string?} type
131
+ * @property {string | null | undefined | Record<string, EXPECTED_ANY>} options
132
+ * @property {string | null=} ident
133
+ * @property {string | null=} type
132
134
  */
133
135
 
134
136
  /**
135
137
  * @param {string} context absolute context path
136
138
  * @param {string} source a source path
137
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
139
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
138
140
  * @returns {string} new source path
139
141
  */
140
142
  const contextifySourceUrl = (context, source, associatedObjectForCache) => {
@@ -148,26 +150,28 @@ const contextifySourceUrl = (context, source, associatedObjectForCache) => {
148
150
 
149
151
  /**
150
152
  * @param {string} context absolute context path
151
- * @param {SourceMap} sourceMap a source map
152
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
153
- * @returns {SourceMap} new source map
153
+ * @param {string | RawSourceMap} sourceMap a source map
154
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
155
+ * @returns {string | RawSourceMap} new source map
154
156
  */
155
157
  const contextifySourceMap = (context, sourceMap, associatedObjectForCache) => {
156
- if (!Array.isArray(sourceMap.sources)) return sourceMap;
158
+ if (typeof sourceMap === "string" || !Array.isArray(sourceMap.sources)) {
159
+ return sourceMap;
160
+ }
157
161
  const { sourceRoot } = sourceMap;
158
- /** @type {function(string): string} */
162
+ /** @type {(source: string) => string} */
159
163
  const mapper = !sourceRoot
160
- ? source => source
164
+ ? (source) => source
161
165
  : sourceRoot.endsWith("/")
162
- ? source =>
166
+ ? (source) =>
163
167
  source.startsWith("/")
164
168
  ? `${sourceRoot.slice(0, -1)}${source}`
165
169
  : `${sourceRoot}${source}`
166
- : source =>
170
+ : (source) =>
167
171
  source.startsWith("/")
168
172
  ? `${sourceRoot}${source}`
169
173
  : `${sourceRoot}/${source}`;
170
- const newSources = sourceMap.sources.map(source =>
174
+ const newSources = sourceMap.sources.map((source) =>
171
175
  contextifySourceUrl(context, mapper(source), associatedObjectForCache)
172
176
  );
173
177
  return {
@@ -182,9 +186,9 @@ const contextifySourceMap = (context, sourceMap, associatedObjectForCache) => {
182
186
  * @param {string | Buffer} input the input
183
187
  * @returns {string} the converted string
184
188
  */
185
- const asString = input => {
189
+ const asString = (input) => {
186
190
  if (Buffer.isBuffer(input)) {
187
- return input.toString("utf-8");
191
+ return input.toString("utf8");
188
192
  }
189
193
  return input;
190
194
  };
@@ -193,16 +197,16 @@ const asString = input => {
193
197
  * @param {string | Buffer} input the input
194
198
  * @returns {Buffer} the converted buffer
195
199
  */
196
- const asBuffer = input => {
200
+ const asBuffer = (input) => {
197
201
  if (!Buffer.isBuffer(input)) {
198
- return Buffer.from(input, "utf-8");
202
+ return Buffer.from(input, "utf8");
199
203
  }
200
204
  return input;
201
205
  };
202
206
 
203
207
  class NonErrorEmittedError extends WebpackError {
204
208
  /**
205
- * @param {any} error value which is not an instance of Error
209
+ * @param {EXPECTED_ANY} error value which is not an instance of Error
206
210
  */
207
211
  constructor(error) {
208
212
  super();
@@ -218,27 +222,32 @@ makeSerializable(
218
222
  "NonErrorEmittedError"
219
223
  );
220
224
 
225
+ /** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]} Result */
226
+
227
+ /** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
228
+
221
229
  /**
222
230
  * @typedef {object} NormalModuleCompilationHooks
223
- * @property {SyncHook<[LoaderContext<any>, NormalModule]>} loader
224
- * @property {SyncHook<[LoaderItem[], NormalModule, LoaderContext<any>]>} beforeLoaders
231
+ * @property {SyncHook<[AnyLoaderContext, NormalModule]>} loader
232
+ * @property {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} beforeLoaders
225
233
  * @property {SyncHook<[NormalModule]>} beforeParse
226
234
  * @property {SyncHook<[NormalModule]>} beforeSnapshot
227
235
  * @property {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} readResourceForScheme
228
- * @property {HookMap<AsyncSeriesBailHook<[LoaderContext<any>], string | Buffer | null>>} readResource
236
+ * @property {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} readResource
237
+ * @property {SyncWaterfallHook<[Result, NormalModule]>} processResult
229
238
  * @property {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>} needBuild
230
239
  */
231
240
 
232
241
  /**
233
242
  * @typedef {object} NormalModuleCreateData
234
243
  * @property {string=} layer an optional layer in which the module is
235
- * @property {JavaScriptModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
244
+ * @property {NormalModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
236
245
  * @property {string} request request string
237
246
  * @property {string} userRequest request intended by user (without loaders from config)
238
247
  * @property {string} rawRequest request without resolving
239
248
  * @property {LoaderItem[]} loaders list of loaders
240
249
  * @property {string} resource path + query of the real resource
241
- * @property {Record<string, any>=} resourceResolveData resource resolve data
250
+ * @property {(ResourceSchemeData & Partial<ResolveRequest>)=} resourceResolveData resource resolve data
242
251
  * @property {string} context context directory for resolving
243
252
  * @property {string=} matchResource path + query of the matched resource (virtual)
244
253
  * @property {Parser} parser the parser used
@@ -246,6 +255,11 @@ makeSerializable(
246
255
  * @property {Generator} generator the generator used
247
256
  * @property {GeneratorOptions=} generatorOptions the options of the generator used
248
257
  * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
258
+ * @property {boolean} extractSourceMap enable/disable extracting source map
259
+ */
260
+
261
+ /**
262
+ * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
249
263
  */
250
264
 
251
265
  /** @type {WeakMap<Compilation, NormalModuleCompilationHooks>} */
@@ -270,14 +284,14 @@ class NormalModule extends Module {
270
284
  beforeParse: new SyncHook(["module"]),
271
285
  beforeSnapshot: new SyncHook(["module"]),
272
286
  // TODO webpack 6 deprecate
273
- readResourceForScheme: new HookMap(scheme => {
287
+ readResourceForScheme: new HookMap((scheme) => {
274
288
  const hook =
275
289
  /** @type {NormalModuleCompilationHooks} */
276
290
  (hooks).readResource.for(scheme);
277
291
  return createFakeHook(
278
292
  /** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
279
293
  tap: (options, fn) =>
280
- hook.tap(options, loaderContext =>
294
+ hook.tap(options, (loaderContext) =>
281
295
  fn(
282
296
  loaderContext.resource,
283
297
  /** @type {NormalModule} */ (loaderContext._module)
@@ -292,7 +306,7 @@ class NormalModule extends Module {
292
306
  )
293
307
  ),
294
308
  tapPromise: (options, fn) =>
295
- hook.tapPromise(options, loaderContext =>
309
+ hook.tapPromise(options, (loaderContext) =>
296
310
  fn(
297
311
  loaderContext.resource,
298
312
  /** @type {NormalModule} */ (loaderContext._module)
@@ -304,6 +318,7 @@ class NormalModule extends Module {
304
318
  readResource: new HookMap(
305
319
  () => new AsyncSeriesBailHook(["loaderContext"])
306
320
  ),
321
+ processResult: new SyncWaterfallHook(["result", "module"]),
307
322
  needBuild: new AsyncSeriesBailHook(["module", "context"])
308
323
  };
309
324
  compilationHooksMap.set(
@@ -332,38 +347,43 @@ class NormalModule extends Module {
332
347
  parserOptions,
333
348
  generator,
334
349
  generatorOptions,
335
- resolveOptions
350
+ resolveOptions,
351
+ extractSourceMap
336
352
  }) {
337
353
  super(type, context || getContext(resource), layer);
338
354
 
339
355
  // Info from Factory
340
- /** @type {string} */
356
+ /** @type {NormalModuleCreateData['request']} */
341
357
  this.request = request;
342
- /** @type {string} */
358
+ /** @type {NormalModuleCreateData['userRequest']} */
343
359
  this.userRequest = userRequest;
344
- /** @type {string} */
360
+ /** @type {NormalModuleCreateData['rawRequest']} */
345
361
  this.rawRequest = rawRequest;
346
362
  /** @type {boolean} */
347
363
  this.binary = /^(asset|webassembly)\b/.test(type);
348
- /** @type {undefined | Parser} */
364
+ /** @type {NormalModuleCreateData['parser'] | undefined} */
349
365
  this.parser = parser;
350
- /** @type {undefined | ParserOptions} */
366
+ /** @type {NormalModuleCreateData['parserOptions']} */
351
367
  this.parserOptions = parserOptions;
352
- /** @type {undefined | Generator} */
368
+ /** @type {NormalModuleCreateData['generator'] | undefined} */
353
369
  this.generator = generator;
354
- /** @type {undefined | GeneratorOptions} */
370
+ /** @type {NormalModuleCreateData['generatorOptions']} */
355
371
  this.generatorOptions = generatorOptions;
356
- /** @type {string} */
372
+ /** @type {NormalModuleCreateData['resource']} */
357
373
  this.resource = resource;
374
+ /** @type {NormalModuleCreateData['resourceResolveData']} */
358
375
  this.resourceResolveData = resourceResolveData;
359
- /** @type {string | undefined} */
376
+ /** @type {NormalModuleCreateData['matchResource']} */
360
377
  this.matchResource = matchResource;
361
- /** @type {LoaderItem[]} */
378
+ /** @type {NormalModuleCreateData['loaders']} */
362
379
  this.loaders = loaders;
363
380
  if (resolveOptions !== undefined) {
364
381
  // already declared in super class
382
+ /** @type {NormalModuleCreateData['resolveOptions']} */
365
383
  this.resolveOptions = resolveOptions;
366
384
  }
385
+ /** @type {NormalModuleCreateData['extractSourceMap']} */
386
+ this.extractSourceMap = extractSourceMap;
367
387
 
368
388
  // Info from Build
369
389
  /** @type {WebpackError | null} */
@@ -375,7 +395,7 @@ class NormalModule extends Module {
375
395
  this._source = null;
376
396
  /**
377
397
  * @private
378
- * @type {Map<string | undefined, number> | undefined}
398
+ * @type {Map<undefined | SourceType, number> | undefined}
379
399
  */
380
400
  this._sourceSizes = undefined;
381
401
  /**
@@ -390,7 +410,7 @@ class NormalModule extends Module {
390
410
  this._isEvaluatingSideEffects = false;
391
411
  /** @type {WeakSet<ModuleGraph> | undefined} */
392
412
  this._addedSideEffectsBailout = undefined;
393
- /** @type {Map<string, any>} */
413
+ /** @type {CodeGenerationResultData} */
394
414
  this._codeGeneratorData = new Map();
395
415
  }
396
416
 
@@ -415,9 +435,16 @@ class NormalModule extends Module {
415
435
  return /** @type {string} */ (requestShortener.shorten(this.userRequest));
416
436
  }
417
437
 
438
+ /**
439
+ * @returns {string | null} return the resource path
440
+ */
441
+ getResource() {
442
+ return this.matchResource || this.resource;
443
+ }
444
+
418
445
  /**
419
446
  * @param {LibIdentOptions} options options
420
- * @returns {string | null} an identifier for library inclusion
447
+ * @returns {LibIdent | null} an identifier for library inclusion
421
448
  */
422
449
  libIdent(options) {
423
450
  let ident = contextify(
@@ -430,10 +457,10 @@ class NormalModule extends Module {
430
457
  }
431
458
 
432
459
  /**
433
- * @returns {string | null} absolute path which should be used for condition matching (usually the resource path)
460
+ * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
434
461
  */
435
462
  nameForCondition() {
436
- const resource = this.matchResource || this.resource;
463
+ const resource = /** @type {string} */ (this.getResource());
437
464
  const idx = resource.indexOf("?");
438
465
  if (idx >= 0) return resource.slice(0, idx);
439
466
  return resource;
@@ -462,6 +489,7 @@ class NormalModule extends Module {
462
489
  this.context = m.context;
463
490
  this.matchResource = m.matchResource;
464
491
  this.loaders = m.loaders;
492
+ this.extractSourceMap = m.extractSourceMap;
465
493
  }
466
494
 
467
495
  /**
@@ -490,9 +518,7 @@ class NormalModule extends Module {
490
518
  * @returns {UnsafeCacheData} cached data
491
519
  */
492
520
  getUnsafeCacheData() {
493
- const data =
494
- /** @type {NormalModuleUnsafeCacheData} */
495
- (super.getUnsafeCacheData());
521
+ const data = super.getUnsafeCacheData();
496
522
  data.parserOptions = this.parserOptions;
497
523
  data.generatorOptions = this.generatorOptions;
498
524
  return data;
@@ -500,7 +526,7 @@ class NormalModule extends Module {
500
526
 
501
527
  /**
502
528
  * restore unsafe cache data
503
- * @param {NormalModuleUnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
529
+ * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
504
530
  * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
505
531
  */
506
532
  restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
@@ -509,7 +535,7 @@ class NormalModule extends Module {
509
535
 
510
536
  /**
511
537
  * restore unsafe cache data
512
- * @param {object} unsafeCacheData data from getUnsafeCacheData
538
+ * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
513
539
  * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
514
540
  */
515
541
  _restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
@@ -528,8 +554,8 @@ class NormalModule extends Module {
528
554
  * @param {string} context the compilation context
529
555
  * @param {string} name the asset name
530
556
  * @param {string | Buffer} content the content
531
- * @param {(string | SourceMap)=} sourceMap an optional source map
532
- * @param {object=} associatedObjectForCache object for caching
557
+ * @param {(string | RawSourceMap)=} sourceMap an optional source map
558
+ * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
533
559
  * @returns {Source} the created source
534
560
  */
535
561
  createSourceForAsset(
@@ -556,7 +582,8 @@ class NormalModule extends Module {
556
582
  name,
557
583
  contextifySourceMap(
558
584
  context,
559
- /** @type {SourceMap} */ (sourceMap),
585
+ /** @type {RawSourceMap} */
586
+ (sourceMap),
560
587
  associatedObjectForCache
561
588
  )
562
589
  );
@@ -574,12 +601,15 @@ class NormalModule extends Module {
574
601
  * @param {Compilation} compilation the compilation
575
602
  * @param {InputFileSystem} fs file system from reading
576
603
  * @param {NormalModuleCompilationHooks} hooks the hooks
577
- * @returns {import("../declarations/LoaderContext").NormalModuleLoaderContext<T>} loader context
604
+ * @returns {import("../declarations/LoaderContext").LoaderContext<T>} loader context
578
605
  */
579
606
  _createLoaderContext(resolver, options, compilation, fs, hooks) {
580
607
  const { requestShortener } = compilation.runtimeTemplate;
581
608
  const getCurrentLoaderName = () => {
582
- const currentLoader = this.getCurrentLoader(loaderContext);
609
+ const currentLoader = this.getCurrentLoader(
610
+ /** @type {AnyLoaderContext} */
611
+ (loaderContext)
612
+ );
583
613
  if (!currentLoader) return "(not in loader scope)";
584
614
  return requestShortener.shorten(currentLoader.loader);
585
615
  };
@@ -588,13 +618,19 @@ class NormalModule extends Module {
588
618
  */
589
619
  const getResolveContext = () => ({
590
620
  fileDependencies: {
591
- add: d => /** @type {TODO} */ (loaderContext).addDependency(d)
621
+ add: (d) =>
622
+ /** @type {AnyLoaderContext} */
623
+ (loaderContext).addDependency(d)
592
624
  },
593
625
  contextDependencies: {
594
- add: d => /** @type {TODO} */ (loaderContext).addContextDependency(d)
626
+ add: (d) =>
627
+ /** @type {AnyLoaderContext} */
628
+ (loaderContext).addContextDependency(d)
595
629
  },
596
630
  missingDependencies: {
597
- add: d => /** @type {TODO} */ (loaderContext).addMissingDependency(d)
631
+ add: (d) =>
632
+ /** @type {AnyLoaderContext} */
633
+ (loaderContext).addMissingDependency(d)
598
634
  }
599
635
  });
600
636
  const getAbsolutify = memoize(() =>
@@ -637,21 +673,24 @@ class NormalModule extends Module {
637
673
  ? getContextifyInContext()(request)
638
674
  : getContextify()(context, request),
639
675
  /**
640
- * @param {(string | typeof import("./util/Hash"))=} type type
676
+ * @param {HashFunction=} type type
641
677
  * @returns {Hash} hash
642
678
  */
643
- createHash: type =>
644
- createHash(
645
- type ||
646
- /** @type {Algorithm} */
647
- (compilation.outputOptions.hashFunction)
648
- )
679
+ createHash: (type) =>
680
+ createHash(type || compilation.outputOptions.hashFunction)
649
681
  };
650
- /** @type {import("../declarations/LoaderContext").NormalModuleLoaderContext<T>} */
682
+ /** @type {NormalModuleLoaderContext<T>} */
651
683
  const loaderContext = {
652
684
  version: 2,
653
- getOptions: schema => {
654
- const loader = this.getCurrentLoader(loaderContext);
685
+ /**
686
+ * @param {import("../declarations/LoaderContext").Schema=} schema schema
687
+ * @returns {T} options
688
+ */
689
+ getOptions: (schema) => {
690
+ const loader = this.getCurrentLoader(
691
+ /** @type {AnyLoaderContext} */
692
+ (loaderContext)
693
+ );
655
694
 
656
695
  let { options } = /** @type {LoaderItem} */ (loader);
657
696
 
@@ -661,7 +700,8 @@ class NormalModule extends Module {
661
700
  options = parseJson(options);
662
701
  } catch (err) {
663
702
  throw new Error(
664
- `Cannot parse string options: ${/** @type {Error} */ (err).message}`
703
+ `Cannot parse string options: ${/** @type {Error} */ (err).message}`,
704
+ { cause: err }
665
705
  );
666
706
  }
667
707
  } else {
@@ -682,15 +722,15 @@ class NormalModule extends Module {
682
722
  if (schema.title && (match = /^(.+) (.+)$/.exec(schema.title))) {
683
723
  [, name, baseDataPath] = match;
684
724
  }
685
- getValidate()(schema, options, {
725
+ getValidate()(schema, /** @type {EXPECTED_OBJECT} */ (options), {
686
726
  name,
687
727
  baseDataPath
688
728
  });
689
729
  }
690
730
 
691
- return options;
731
+ return /** @type {T} */ (options);
692
732
  },
693
- emitWarning: warning => {
733
+ emitWarning: (warning) => {
694
734
  if (!(warning instanceof Error)) {
695
735
  warning = new NonErrorEmittedError(warning);
696
736
  }
@@ -700,7 +740,7 @@ class NormalModule extends Module {
700
740
  })
701
741
  );
702
742
  },
703
- emitError: error => {
743
+ emitError: (error) => {
704
744
  if (!(error instanceof Error)) {
705
745
  error = new NonErrorEmittedError(error);
706
746
  }
@@ -710,8 +750,11 @@ class NormalModule extends Module {
710
750
  })
711
751
  );
712
752
  },
713
- getLogger: name => {
714
- const currentLoader = this.getCurrentLoader(loaderContext);
753
+ getLogger: (name) => {
754
+ const currentLoader = this.getCurrentLoader(
755
+ /** @type {AnyLoaderContext} */
756
+ (loaderContext)
757
+ );
715
758
  return compilation.getLogger(() =>
716
759
  [currentLoader && currentLoader.loader, name, this.identifier()]
717
760
  .filter(Boolean)
@@ -723,24 +766,32 @@ class NormalModule extends Module {
723
766
  },
724
767
  getResolve(options) {
725
768
  const child = options ? resolver.withOptions(options) : resolver;
726
- return (context, request, callback) => {
727
- if (callback) {
728
- child.resolve({}, context, request, getResolveContext(), callback);
729
- } else {
730
- return new Promise((resolve, reject) => {
769
+ return /** @type {ReturnType<import("../declarations/LoaderContext").NormalModuleLoaderContext<T>["getResolve"]>} */ (
770
+ (context, request, callback) => {
771
+ if (callback) {
731
772
  child.resolve(
732
773
  {},
733
774
  context,
734
775
  request,
735
776
  getResolveContext(),
736
- (err, result) => {
737
- if (err) reject(err);
738
- else resolve(result);
739
- }
777
+ callback
740
778
  );
741
- });
779
+ } else {
780
+ return new Promise((resolve, reject) => {
781
+ child.resolve(
782
+ {},
783
+ context,
784
+ request,
785
+ getResolveContext(),
786
+ (err, result) => {
787
+ if (err) reject(err);
788
+ else resolve(result);
789
+ }
790
+ );
791
+ });
792
+ }
742
793
  }
743
- };
794
+ );
744
795
  },
745
796
  emitFile: (name, content, sourceMap, assetInfo) => {
746
797
  const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
@@ -758,7 +809,7 @@ class NormalModule extends Module {
758
809
  (buildInfo.assetsInfo);
759
810
 
760
811
  assets[name] = this.createSourceForAsset(
761
- /** @type {string} */ (options.context),
812
+ options.context,
762
813
  name,
763
814
  content,
764
815
  sourceMap,
@@ -766,7 +817,7 @@ class NormalModule extends Module {
766
817
  );
767
818
  assetsInfo.set(name, assetInfo);
768
819
  },
769
- addBuildDependency: dep => {
820
+ addBuildDependency: (dep) => {
770
821
  const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
771
822
 
772
823
  if (buildInfo.buildDependencies === undefined) {
@@ -775,14 +826,14 @@ class NormalModule extends Module {
775
826
  buildInfo.buildDependencies.add(dep);
776
827
  },
777
828
  utils,
778
- rootContext: /** @type {string} */ (options.context),
829
+ rootContext: options.context,
779
830
  webpack: true,
780
831
  sourceMap: Boolean(this.useSourceMap),
781
832
  mode: options.mode || "production",
782
- hashFunction: /** @type {TODO} */ (options.output.hashFunction),
783
- hashDigest: /** @type {string} */ (options.output.hashDigest),
784
- hashDigestLength: /** @type {number} */ (options.output.hashDigestLength),
785
- hashSalt: /** @type {string} */ (options.output.hashSalt),
833
+ hashFunction: options.output.hashFunction,
834
+ hashDigest: options.output.hashDigest,
835
+ hashDigestLength: options.output.hashDigestLength,
836
+ hashSalt: options.output.hashSalt,
786
837
  _module: this,
787
838
  _compilation: compilation,
788
839
  _compiler: compilation.compiler,
@@ -791,14 +842,18 @@ class NormalModule extends Module {
791
842
 
792
843
  Object.assign(loaderContext, options.loader);
793
844
 
794
- hooks.loader.call(/** @type {LoaderContext<any>} */ (loaderContext), this);
845
+ hooks.loader.call(
846
+ /** @type {AnyLoaderContext} */
847
+ (loaderContext),
848
+ this
849
+ );
795
850
 
796
- return loaderContext;
851
+ return /** @type {AnyLoaderContext} */ (loaderContext);
797
852
  }
798
853
 
799
854
  // TODO remove `loaderContext` in webpack@6
800
855
  /**
801
- * @param {TODO} loaderContext loader context
856
+ * @param {AnyLoaderContext} loaderContext loader context
802
857
  * @param {number} index index
803
858
  * @returns {LoaderItem | null} loader
804
859
  */
@@ -818,8 +873,8 @@ class NormalModule extends Module {
818
873
  /**
819
874
  * @param {string} context the compilation context
820
875
  * @param {string | Buffer} content the content
821
- * @param {(string | SourceMapSource | null)=} sourceMap an optional source map
822
- * @param {object=} associatedObjectForCache object for caching
876
+ * @param {(string | RawSourceMap | null)=} sourceMap an optional source map
877
+ * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
823
878
  * @returns {Source} the created source
824
879
  */
825
880
  createSource(context, content, sourceMap, associatedObjectForCache) {
@@ -839,11 +894,7 @@ class NormalModule extends Module {
839
894
  return new SourceMapSource(
840
895
  content,
841
896
  contextifySourceUrl(context, identifier, associatedObjectForCache),
842
- contextifySourceMap(
843
- context,
844
- /** @type {TODO} */ (sourceMap),
845
- associatedObjectForCache
846
- )
897
+ contextifySourceMap(context, sourceMap, associatedObjectForCache)
847
898
  );
848
899
  }
849
900
 
@@ -863,7 +914,7 @@ class NormalModule extends Module {
863
914
  * @param {ResolverWithOptions} resolver the resolver
864
915
  * @param {InputFileSystem} fs the file system
865
916
  * @param {NormalModuleCompilationHooks} hooks the hooks
866
- * @param {function((WebpackError | null)=): void} callback callback function
917
+ * @param {BuildCallback} callback callback function
867
918
  * @returns {void}
868
919
  */
869
920
  _doBuild(options, compilation, resolver, fs, hooks, callback) {
@@ -875,14 +926,12 @@ class NormalModule extends Module {
875
926
  hooks
876
927
  );
877
928
 
878
- /** @typedef {[string | Buffer, string | SourceMapSource, Record<string, any>]} Result */
879
-
880
929
  /**
881
930
  * @param {Error | null} err err
882
- * @param {(Result | null)=} _result result
931
+ * @param {(Result | null)=} result_ result
883
932
  * @returns {void}
884
933
  */
885
- const processResult = (err, _result) => {
934
+ const processResult = (err, result_) => {
886
935
  if (err) {
887
936
  if (!(err instanceof Error)) {
888
937
  err = new NonErrorEmittedError(err);
@@ -897,8 +946,11 @@ class NormalModule extends Module {
897
946
  });
898
947
  return callback(error);
899
948
  }
900
-
901
- const result = /** @type {Result} */ (_result);
949
+ const result = hooks.processResult.call(
950
+ /** @type {Result} */
951
+ (result_),
952
+ this
953
+ );
902
954
  const source = result[0];
903
955
  const sourceMap = result.length >= 1 ? result[1] : null;
904
956
  const extraInfo = result.length >= 2 ? result[2] : null;
@@ -924,7 +976,7 @@ class NormalModule extends Module {
924
976
  : this.binary;
925
977
 
926
978
  this._source = this.createSource(
927
- /** @type {string} */ (options.context),
979
+ options.context,
928
980
  isBinaryModule ? asBuffer(source) : asString(source),
929
981
  sourceMap,
930
982
  compilation.compiler.root
@@ -950,7 +1002,8 @@ class NormalModule extends Module {
950
1002
  hooks.beforeLoaders.call(
951
1003
  this.loaders,
952
1004
  this,
953
- /** @type {LoaderContext<any>} */ (loaderContext)
1005
+ /** @type {AnyLoaderContext} */
1006
+ (loaderContext)
954
1007
  );
955
1008
  } catch (err) {
956
1009
  processResult(/** @type {Error} */ (err));
@@ -968,28 +1021,80 @@ class NormalModule extends Module {
968
1021
  loaders: this.loaders,
969
1022
  context: loaderContext,
970
1023
  /**
971
- * @param {LoaderContext<TODO>} loaderContext the loader context
1024
+ * @param {AnyLoaderContext} loaderContext the loader context
972
1025
  * @param {string} resourcePath the resource Path
973
- * @param {(err: Error | null, result?: string | Buffer) => void} callback callback
1026
+ * @param {(err: Error | null, result?: string | Buffer, sourceMap?: Result[1]) => void} callback callback
1027
+ * @returns {Promise<void>}
974
1028
  */
975
- processResource: (loaderContext, resourcePath, callback) => {
976
- const resource = loaderContext.resource;
977
- const scheme = getScheme(resource);
978
- hooks.readResource
979
- .for(scheme)
980
- .callAsync(loaderContext, (err, result) => {
981
- if (err) return callback(err);
982
- if (typeof result !== "string" && !result) {
983
- return callback(
984
- new UnhandledSchemeError(
985
- /** @type {string} */
986
- (scheme),
987
- resource
988
- )
1029
+ processResource: async (loaderContext, resourcePath, callback) => {
1030
+ /** @type {ReadResource} */
1031
+ const readResource = (resourcePath, getLoaderContext) => {
1032
+ const scheme = getScheme(resourcePath);
1033
+ return new Promise((resolve, reject) => {
1034
+ hooks.readResource
1035
+ .for(scheme)
1036
+ .callAsync(getLoaderContext(resourcePath), (err, result) => {
1037
+ if (err) {
1038
+ reject(err);
1039
+ } else {
1040
+ if (typeof result !== "string" && !result) {
1041
+ return reject(
1042
+ new UnhandledSchemeError(
1043
+ /** @type {string} */
1044
+ (scheme),
1045
+ resourcePath
1046
+ )
1047
+ );
1048
+ }
1049
+ resolve(result);
1050
+ }
1051
+ });
1052
+ });
1053
+ };
1054
+ try {
1055
+ const result = await readResource(
1056
+ resourcePath,
1057
+ () => loaderContext
1058
+ );
1059
+ if (
1060
+ this.extractSourceMap &&
1061
+ (this.useSourceMap || this.useSimpleSourceMap)
1062
+ ) {
1063
+ try {
1064
+ const { source, sourceMap } = await getExtractSourceMap()(
1065
+ result,
1066
+ resourcePath,
1067
+ /** @type {ReadResource} */
1068
+ (resourcePath) =>
1069
+ readResource(
1070
+ resourcePath,
1071
+ (resourcePath) =>
1072
+ /** @type {AnyLoaderContext} */
1073
+ ({
1074
+ addDependency(dependency) {
1075
+ loaderContext.addDependency(dependency);
1076
+ },
1077
+ fs: loaderContext.fs,
1078
+ _module: undefined,
1079
+ resourcePath,
1080
+ resource: resourcePath
1081
+ })
1082
+ ).catch((err) => {
1083
+ throw new Error(
1084
+ `Failed to parse source map. ${/** @type {Error} */ (err).message}`
1085
+ );
1086
+ })
989
1087
  );
1088
+ return callback(null, source, sourceMap);
1089
+ } catch (err) {
1090
+ this.addWarning(new ModuleWarning(/** @type {Error} */ (err)));
1091
+ return callback(null, result);
990
1092
  }
991
- return callback(null, result);
992
- });
1093
+ }
1094
+ return callback(null, result);
1095
+ } catch (error) {
1096
+ return callback(/** @type {Error} */ (error));
1097
+ }
993
1098
  }
994
1099
  },
995
1100
  (err, result) => {
@@ -997,10 +1102,9 @@ class NormalModule extends Module {
997
1102
  loaderContext._compilation =
998
1103
  loaderContext._compiler =
999
1104
  loaderContext._module =
1000
- // eslint-disable-next-line no-warning-comments
1001
- // @ts-ignore
1002
1105
  loaderContext.fs =
1003
- undefined;
1106
+ /** @type {EXPECTED_ANY} */
1107
+ (undefined);
1004
1108
 
1005
1109
  if (!result) {
1006
1110
  /** @type {BuildInfo} */
@@ -1051,7 +1155,7 @@ class NormalModule extends Module {
1051
1155
  }
1052
1156
 
1053
1157
  /**
1054
- * @param {TODO} rule rule
1158
+ * @param {Exclude<NoParse, EXPECTED_ANY[]>} rule rule
1055
1159
  * @param {string} content content
1056
1160
  * @returns {boolean} result
1057
1161
  */
@@ -1069,7 +1173,7 @@ class NormalModule extends Module {
1069
1173
  }
1070
1174
 
1071
1175
  /**
1072
- * @param {TODO} noParseRule no parse rule
1176
+ * @param {undefined | NoParse} noParseRule no parse rule
1073
1177
  * @param {string} request request
1074
1178
  * @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
1075
1179
  */
@@ -1103,10 +1207,7 @@ class NormalModule extends Module {
1103
1207
  * @private
1104
1208
  */
1105
1209
  _initBuildHash(compilation) {
1106
- const hash = createHash(
1107
- /** @type {Algorithm} */
1108
- (compilation.outputOptions.hashFunction)
1109
- );
1210
+ const hash = createHash(compilation.outputOptions.hashFunction);
1110
1211
  if (this._source) {
1111
1212
  hash.update("source");
1112
1213
  this._source.updateHash(hash);
@@ -1114,7 +1215,7 @@ class NormalModule extends Module {
1114
1215
  hash.update("meta");
1115
1216
  hash.update(JSON.stringify(this.buildMeta));
1116
1217
  /** @type {BuildInfo} */
1117
- (this.buildInfo).hash = /** @type {string} */ (hash.digest("hex"));
1218
+ (this.buildInfo).hash = hash.digest("hex");
1118
1219
  }
1119
1220
 
1120
1221
  /**
@@ -1122,7 +1223,7 @@ class NormalModule extends Module {
1122
1223
  * @param {Compilation} compilation the compilation
1123
1224
  * @param {ResolverWithOptions} resolver the resolver
1124
1225
  * @param {InputFileSystem} fs the file system
1125
- * @param {function(WebpackError=): void} callback callback function
1226
+ * @param {BuildCallback} callback callback function
1126
1227
  * @returns {void}
1127
1228
  */
1128
1229
  build(options, compilation, resolver, fs, callback) {
@@ -1152,7 +1253,7 @@ class NormalModule extends Module {
1152
1253
 
1153
1254
  const hooks = NormalModule.getCompilationHooks(compilation);
1154
1255
 
1155
- return this._doBuild(options, compilation, resolver, fs, hooks, err => {
1256
+ return this._doBuild(options, compilation, resolver, fs, hooks, (err) => {
1156
1257
  // if we have an error mark module as failed and exit
1157
1258
  if (err) {
1158
1259
  this.markModuleAsErrored(err);
@@ -1164,14 +1265,10 @@ class NormalModule extends Module {
1164
1265
  * @param {Error} e error
1165
1266
  * @returns {void}
1166
1267
  */
1167
- const handleParseError = e => {
1268
+ const handleParseError = (e) => {
1168
1269
  const source = /** @type {Source} */ (this._source).source();
1169
- const loaders = this.loaders.map(item =>
1170
- contextify(
1171
- /** @type {string} */ (options.context),
1172
- item.loader,
1173
- compilation.compiler.root
1174
- )
1270
+ const loaders = this.loaders.map((item) =>
1271
+ contextify(options.context, item.loader, compilation.compiler.root)
1175
1272
  );
1176
1273
  const error = new ModuleParseError(source, e, loaders, this.type);
1177
1274
  this.markModuleAsErrored(error);
@@ -1182,10 +1279,11 @@ class NormalModule extends Module {
1182
1279
  const handleParseResult = () => {
1183
1280
  this.dependencies.sort(
1184
1281
  concatComparators(
1185
- compareSelect(a => a.loc, compareLocations),
1282
+ compareSelect((a) => a.loc, compareLocations),
1186
1283
  keepOriginalOrder(this.dependencies)
1187
1284
  )
1188
1285
  );
1286
+ sortWithSourceOrder(this.dependencies, new WeakMap());
1189
1287
  this._initBuildHash(compilation);
1190
1288
  this._lastSuccessfulBuildMeta =
1191
1289
  /** @type {BuildMeta} */
@@ -1211,13 +1309,14 @@ class NormalModule extends Module {
1211
1309
  /** @type {undefined | Set<string>} */
1212
1310
  let nonAbsoluteDependencies;
1213
1311
  /**
1214
- * @param {LazySet<string>} deps deps
1312
+ * @param {FileSystemDependencies} deps deps
1215
1313
  */
1216
- const checkDependencies = deps => {
1314
+ const checkDependencies = (deps) => {
1217
1315
  for (const dep of deps) {
1218
1316
  if (!ABSOLUTE_PATH_REGEX.test(dep)) {
1219
- if (nonAbsoluteDependencies === undefined)
1317
+ if (nonAbsoluteDependencies === undefined) {
1220
1318
  nonAbsoluteDependencies = new Set();
1319
+ }
1221
1320
  nonAbsoluteDependencies.add(dep);
1222
1321
  deps.delete(dep);
1223
1322
  try {
@@ -1232,8 +1331,8 @@ class NormalModule extends Module {
1232
1331
  (depWithoutGlob !== dep
1233
1332
  ? /** @type {NonNullable<KnownBuildInfo["contextDependencies"]>} */
1234
1333
  (
1235
- /** @type {BuildInfo} */ (this.buildInfo)
1236
- .contextDependencies
1334
+ /** @type {BuildInfo} */
1335
+ (this.buildInfo).contextDependencies
1237
1336
  )
1238
1337
  : deps
1239
1338
  ).add(absolute);
@@ -1342,8 +1441,9 @@ class NormalModule extends Module {
1342
1441
  if (this.factoryMeta.sideEffectFree === false) return true;
1343
1442
  }
1344
1443
  if (this.buildMeta !== undefined && this.buildMeta.sideEffectFree) {
1345
- if (this._isEvaluatingSideEffects)
1444
+ if (this._isEvaluatingSideEffects) {
1346
1445
  return ModuleGraphConnection.CIRCULAR_CONNECTION;
1446
+ }
1347
1447
  this._isEvaluatingSideEffects = true;
1348
1448
  /** @type {ConnectionState} */
1349
1449
  let current = false;
@@ -1405,7 +1505,7 @@ class NormalModule extends Module {
1405
1505
  codeGenerationResults,
1406
1506
  sourceTypes
1407
1507
  }) {
1408
- /** @type {Set<string>} */
1508
+ /** @type {RuntimeRequirements} */
1409
1509
  const runtimeRequirements = new Set();
1410
1510
 
1411
1511
  const { parsed } = /** @type {BuildInfo} */ (this.buildInfo);
@@ -1416,16 +1516,32 @@ class NormalModule extends Module {
1416
1516
  runtimeRequirements.add(RuntimeGlobals.thisAsExports);
1417
1517
  }
1418
1518
 
1419
- /** @type {function(): Map<string, any>} */
1420
1519
  const getData = () => this._codeGeneratorData;
1421
1520
 
1422
1521
  const sources = new Map();
1423
1522
  for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
1523
+ // TODO webpack@6 make generateError required
1524
+ const generator =
1525
+ /** @type {Generator & { generateError?: GenerateErrorFn }} */
1526
+ (this.generator);
1424
1527
  const source = this.error
1425
- ? new RawSource(
1426
- `throw new Error(${JSON.stringify(this.error.message)});`
1427
- )
1428
- : /** @type {Generator} */ (this.generator).generate(this, {
1528
+ ? generator.generateError
1529
+ ? generator.generateError(this.error, this, {
1530
+ dependencyTemplates,
1531
+ runtimeTemplate,
1532
+ moduleGraph,
1533
+ chunkGraph,
1534
+ runtimeRequirements,
1535
+ runtime,
1536
+ concatenationScope,
1537
+ codeGenerationResults,
1538
+ getData,
1539
+ type
1540
+ })
1541
+ : new RawSource(
1542
+ `throw new Error(${JSON.stringify(this.error.message)});`
1543
+ )
1544
+ : generator.generate(this, {
1429
1545
  dependencyTemplates,
1430
1546
  runtimeTemplate,
1431
1547
  moduleGraph,
@@ -1468,7 +1584,7 @@ class NormalModule extends Module {
1468
1584
 
1469
1585
  /**
1470
1586
  * @param {NeedBuildContext} context context info
1471
- * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
1587
+ * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
1472
1588
  * @returns {void}
1473
1589
  */
1474
1590
  needBuild(context, callback) {
@@ -1547,10 +1663,10 @@ class NormalModule extends Module {
1547
1663
  }
1548
1664
 
1549
1665
  /**
1550
- * @param {LazySet<string>} fileDependencies set where file dependencies are added to
1551
- * @param {LazySet<string>} contextDependencies set where context dependencies are added to
1552
- * @param {LazySet<string>} missingDependencies set where missing dependencies are added to
1553
- * @param {LazySet<string>} buildDependencies set where build dependencies are added to
1666
+ * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
1667
+ * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
1668
+ * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
1669
+ * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
1554
1670
  */
1555
1671
  addCacheDependencies(
1556
1672
  fileDependencies,
@@ -1585,7 +1701,11 @@ class NormalModule extends Module {
1585
1701
  * @returns {void}
1586
1702
  */
1587
1703
  updateHash(hash, context) {
1588
- hash.update(/** @type {BuildInfo} */ (this.buildInfo).hash);
1704
+ const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
1705
+ hash.update(
1706
+ /** @type {string} */
1707
+ (buildInfo.hash)
1708
+ );
1589
1709
  /** @type {Generator} */
1590
1710
  (this.generator).updateHash(hash, {
1591
1711
  module: this,
@@ -1610,7 +1730,7 @@ class NormalModule extends Module {
1610
1730
 
1611
1731
  /**
1612
1732
  * @param {ObjectDeserializerContext} context context
1613
- * @returns {TODO} Module
1733
+ * @returns {NormalModule} module
1614
1734
  */
1615
1735
  static deserialize(context) {
1616
1736
  const obj = new NormalModule({
@@ -1629,7 +1749,8 @@ class NormalModule extends Module {
1629
1749
  parserOptions: /** @type {EXPECTED_ANY} */ (null),
1630
1750
  generator: /** @type {EXPECTED_ANY} */ (null),
1631
1751
  generatorOptions: /** @type {EXPECTED_ANY} */ (null),
1632
- resolveOptions: /** @type {EXPECTED_ANY} */ (null)
1752
+ resolveOptions: /** @type {EXPECTED_ANY} */ (null),
1753
+ extractSourceMap: /** @type {EXPECTED_ANY} */ (null)
1633
1754
  });
1634
1755
  obj.deserialize(context);
1635
1756
  return obj;